Publicidad

miércoles, 8 de abril de 2020

Finales de carrera

FINALES DE CARRERA

Pensando en quien no sabe que estamos hablando voy a resumir un poco de que estamos hablando con esto de los finales de carrera.
Un final de carrera es un pulsador o botón (en palabras mundanas) que se suele utilizar en sistemas automatizamos para delimitar la acción de cierto elemento, en este caso un motor, de ahí su nombre.
Tienen un par de caracteristicas, que los diferencian de un pulsador normal, la primera es que la gran mayoría dispone de una pequeña palanca que es la que pulsa el boton, en nuestro caso y como ejemplo, el eje X se mueve, acciona la palanca, ésta toca el pulsador y el eje se detiene.
La otra característica, es que constan de 3 pines (los más comunes), identificados como  COM (común), NO (normalmente abierto), NC (normalmente Cerrado), esto ¿que significa?
  • NO, se refiere a que cuando el pulsador no esta accionado la corriente no pasa, y si pasa corriente al estar pulsado.
  • NC, justo al contrario cuando el pulsador no está accionado la corriente pasa, y si lo accionados deja de pasar
  • COMÚN, es el pin común como su propio nombre indica.
El común lo usaremos siempre y dependiendo de la configuración que queramos usaremos NC o NO.

MANERAS DE CONECTAR LOS FINALES DE CARRERA A NUESTRA CNC

Existen varias maneras de implementar los finales de carrera, uno teniendo en cuenta las opciones de NC y NO que comentábamos antes y dos, dependiendo de cuantos limites queremos poner, limites mínimos, máximos en todos los ejes, etc.
Os voy a mostrar varias maneras de conectar los finales de carrera, pero en el caso concreto de mi CNC al final solo vamos a implementarlo en los eje X e Y, en sus limites mínimos y máximos. En Z no lo haremos, por que ya de por si tenemos poco recorrido y por que para este eje me gustaría implementar una sonda ( aunque esto ya es otro tema).
Otra cosita importante, antes de empezar a ver cableados, casi todos estaremos usando nuestra CNC Shield, que tiene conectores para el limite máximo y mínimo para cada eje, tanto el limite máximo como el minimizo de cada eje son el mismo pin (hay un pin por eje) de arduino  (lo podéis comprobar con el multimetro). Esto es importante por que a la hora hacer el cableado nosotros haremos la conexión de los finales de carrera en paralelo, es decir, que a la CNC Shiled solo conectaremos un par de cables por eje, Con los diagramas de conexión lo veréis más claro.
Los finales de carrera los podremos conectar, como ya hemos visto, como normalmente abiertos  o normalmente cerrados, se diferencian en que pines de los finales de carrera usamos, por defecto, GRBL viene configurado para usarlo como NO, y si nos decidimos por NC, tendremos que decirle a GRBL que estamos usando esta opción. ( más adelante explico como)
 
Por lo  general en máquinas profesionales, la configuración por la que se suele optar es por Normalmente Cerrado, ya es la más segura en caso de que nuestro cableado se rompa. Si tenemos nuestra CNC con finales en NO y hay una cable roto cuando el carro pulse dicho botón, arduino no se va a enterar y la máquina no se parará.
Por eso nos vamos a centrar en usar una configuración de limites en NC,
 Adicionalmente y para optimizar el funcionamiento de los finales de carrera, se les puede incluir un filtro con una resitencia y un condesador, además de trenzar todos los cables. De esta manera podemos evitar que existan rebotes en las pulsaciones del limite de carrera. El esquema con filtros sería este:


Esta configuración con filtros es muy interesante, pero para poder cablearlo de manera correcta es mejor hacer una PCB donde incluir los componentes ya que si no el montaje puede ser bastante lioso, habría que tener componentes al aire y es fácil que algo se rompa, se suelte, etc etc… Así que de momento no vamos a poner este filtro, pero me parecía interesante comentarlo.
Como habéis observado en los esquemas de conexión, están documentados para conectarlos directamente a arduino y no a CNC Shield. Para conectarlo a la CNC shield simplemente usaremos los pines habilitados para -Zmin -Xmin -Ymin. En estos pines de CNC_shield colocaremos los finales dos finales de carrera que tenemos por eje.

NOTA: Si estáis usando GRBL 1.1 y CNC_shield V3 los finales de carrera del Eje Z hay que conectarlos a «EspEn» ya que esta versión cambia los pines para poder usar el pin 11 de arduino como salida PWM, por ejemplo para usar Lasers.
Este sería un ejemplo de conexión de dos finales de Carrera en paralelo por ejemplo para el eje X, no os lo voy a mostrar en la maquina, por que lo tengo a modo de prueba con los cables colgando por en medio y no es plan jejejeje. Además el tema del cableado cada uno se suele organizar a su gusto…

MONTAJE EN LA CNC

Aunque esta explicación me gustaría que fuera genérica para cualquier CNC, para colocarlo en mi CNC he diseñado unos soportes para colocarlos en unas varillas de 10mm. Los soportes los podéis encontrar  en la web de thingiverse en el enlace de la CNC. Lo cierto es que estos soportes no son mi mejor creación y tengo que darle una vuelta al diseño.
Estos soporte van anclados las varillas y lo más normal si los vamos a usar como medida de seguridad es ponerlos en los extremos de cada eje, como tenemos 2 ejes Y solo será necesario ponerlos en uno de ellos. Y a modo de recomendación yo no los pondría en el Eje Z ya que nuestro Z es cortito y estaríamos perdiendo recorrido. Siempre hablo para esta CNC en concreto, si vuestro eje es más largo o podeis posicionar los finales de carrera en otro lugar, son totalmente recomendables también en este eje.
 

CONFIGURACIÓN

Pues una vez colocados en la máquina y conectados a CNC_shield, toca decirle a GRBL, primero que los hemos puestos y segundo que  tenemos los finales de carrera en normalmente Cerrado.
Para ello nos vamos a Universal Gcode Sender o nuestro gestor de CNC y en la linea de comandos escribimos $$ + ENTER para que nos devuelva todos los parámetros de la máquina.
Los parámetros $21 y $5 deberíamos tenerlos a cero ya que no estábamos usando finales de carrera, así que debemos ponerlos a 1.
Escribimos $21=1 + ENTER Para decirle que vamos a usar limites por hardware (o físicos).
Y después escribimos $5=1 + ENTER Con esto se configuran las resistencias internas de arduino, para que podamos usar los finales de carrera como Normalmente Cerrados.
Una vez hecho esto necesitamos apagar arduino y volverlo a encender, para que termine de configurar correctamente el paramento $5

PRUEBA

Ya solo nos queda probar que todo está correcto, para ello no necesitamos mover la máquina, solo cercioramos de que cada vez que pulsamos uno de los finales de carrera con el dedo, en Universal Gcode sender debería saltarnos una alarma como esta.
Lamentablemente una vez nos salte una alarma por pulsación de uno de los limites no nos quedará más remedio que reiniciar la CNC y comenzar el trabajo de nuevo.


HOMING

GRBL tiene una función de homing, pero como os comentaba al principio, yo personalmente, no le veo ninguna utilidad ya que cuando vamos a fresar una pieza, el material no es igual, no mide lo mismo, no tiene el mismo grosor y casi nunca se pone en el mismo sitio exacto. Y de ahí que yo siempre configuro mi «cero» en cada fresado.
Como os he dicho ya en alguna ocasión yo no soy un experto, y quizás el homing pueda tener más de una utilidad, como podría ser recuperar el trabajo por un parón de la máquina o utilizar el punto «Home» como referencia para un posible cambio de fresa, son opciones que me gustaría investigar y probar.
Aún así, como dije antes son cosas que no está demás saber como funcionan.
En mi caso como no he puesto finales de carrera en el Eje Z, he modificado el firmware para que al hacer homing solo lo haga en X e Y, si queréis saber más a cerca de esto me lo dejáis en los comentarios y hacemos una entrada explicándolo
Por defecto, cuando activamos y le decimos a la máquina que haga homing, el proceso que sigue es el siguiente:
1º – Mueve el eje Z buscando el final de carrera, cunado lo pulsa se retira unos mm(configurable) y vuelve a buscarlo pero más despacio. Una vez lo encuentra vuelve a separase una distancia X para no dejar accionado el final de carrera.
2º – Una vez a terminado el Eje Z, repite el mismo proceso con los ejes X e Y, pero en esta ocasión mueve ambos ejes a la vez.
Para configurar el homing y su comportamientos debemos modificar los siguientes para metros:
  • $22=1 para activar el ciclo de homing. IMPORTANTE, cuando lo tengamos activado al iniciar la CNC, ésta se iniciará en ALARMA y no se debloqueará hasta que hagamos homing ($H) o pulsemos $X
  • $23= 3, con este parámetro le indicamos donde va a hacer el homing y tenemos varias opciones: $23=0 Se irá hacia atrás e izquierda, $23=1 hacia atrás y derecha, $23=2 hacia delante e izquierda, $23=3 hacia delante y derecha(lo más común). Tiene un 4º valor que es $23=4 pero este cambia el eje que no lo he podido probar.
  • $24=60, este parámetro determina la velocidad a la que se van a mover los, después de hacer la busqueda, es decir, cuando se mueve esos poco mm que os comentaba al principio, recomendable una velocidad baja.
  • $25=300, es la velocidad en la que va a buscar los finales de carrera, es decir, cuando le decimos que haga homing y hasta que los encuentre se moverá a esa velocidad, puede ser más alta que la anterior para que el homing no tarde demasiado, pero sin pasarse.
  • $26=250, este parámetro nos ayuda a evitar posibles micro-rebotes en los finales de carrera, configurando un tiempo en mili segundos entre pulsación y pulsación, el valor por defecto esta bien
  • $27=2, es la distancia, en mm, que se va a separar el eje, cuando encuentre el final de carrera, y la distancia a la que se va a separara al terminar le homing, para no dejar pulsado el final de carrera. Le pongo lo mínimo posible para que no este pulsado.

Y con esto deberíais ser capaces de montar y configurar vuestros finales de carrera y homing en vuestras CNCs.
Reconozco que en esta parte la información que aporta la documentación de GRBL, es donde me he informado yo, a veces es un poco liosa y por eso con algunas cosas he tenido que realizar alguna batería de pruebas para entender como funciona.
Pero para eso estoy aquí, ya me vuelvo loco yo, para que vosotros no tengáis que hacerlo. Me gusta experimentar y volverme loco, jejeje, así que encima me lo paso bien.
Espero que os haya gustado y sobre todo, espero que os sea útil.
Nos vemos en la próxima.

Calculo de corriente para Drivers a4988 y dvr8825





Voltajes de referencia para drivers según la corriente del motor paso a paso deseado.
Cuando se usa micro microstepping el voltaje de referencia NO se usa al 70% de su capacidad opertiva

Driver A4988

Driver pololu A4988Vref=corriente del motor * (8*recistencia del driver)
Vref= 1.7*(8*0.1)= 1.36
Vref=1.36     con microstepping

PARA PASOS COMPLETOS sin microstepping

al 70% de su capacidad

1.36*0.7=0.952

EL VOLTAJE DE REFERENCIA DEL DRIVER ES DE 0.952


Driver DVR8825
Reprap Driver StepStick DRV8825 Controlador motor impresora 3D ...Vref= corriente del motor * 5 * resistencia del smd del driver


Vref=1.7A*5*0.1ohm=

Vref= 1.7*5*0.1=0.85

Vref= 0.85  con microstepping

para pasos completos sin microstepping

al 70%

0.85*0.7=0.595

Driver TMC 2288
Pololu - DRV8834 Low-Voltage Stepper Motor Driver Carrier
Vref= (RMS corriente * 2.5)/1.77  con microstepping

                                     al 90 % sin microstepping
xyz vref = (0.596*2.5)/1.77=0.842v  = 1.76

e vref = (0.709*2.5)/1.77= 1.00v   =   0.90

sábado, 17 de junio de 2017

Keyes L298 Stepper Motor Driver

En el siguiente tutorial aprenderemos a controlar motores paso a paso con Arduino y el driver L298. Este controlador puede gestionar cargas de hasta 35V y 2A, por lo que está especialmente indicado para motores de tamaño medio-alto.

Esquema

El siguiente esquema muestra la conexión de un motor paso a paso NEMA 17, concretamente un modelo KH42JM2-852 de Japan Servo Co. ver datasheet al final de la página.

Las entradas EN_A y EN_B se conectan a +5V. Y las entradas IN_1 a IN_4 se conectan a los pines D8 a D11. Se pueden conectar a cualquier otro pin del Arduino si así lo deseamos, pero lo he conectado de esta manera para aprovechar los ejemplos ya creados que vienen con la librería Stepper.




Arduino KEYES L298 STEPPER  MOTOR DRIVER w KH42JM2-852 - Schematic.png

Sketch

Vamos a ver un ejemplo sencillo. El siguiente sketch hace que nuestro motor gire una vuelta en sentido horario y otra en antihorario, con una pausa de 500ms entre ambas.

Este código está disponible en Ejemplos→Stepper→stepper_oneRevolution


screenshot.png

/*
Stepper Motor Control - one revolution

This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.

The motor should revolve one revolution in one direction, then
one revolution in the other direction.

Created 11 Mar. 2007
Modified 30 Nov. 2009
by Tom Igoe

*/

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
 // set the speed at 60 rpm:
 myStepper.setSpeed(60);
 // initialize the serial port:
 Serial.begin(9600);
}

void loop() {
 // step one revolution  in one direction:
 Serial.println("clockwise");
 myStepper.step(stepsPerRevolution);
 delay(500);

 // step one revolution in the other direction:
 Serial.println("counterclockwise");
 myStepper.step(-stepsPerRevolution);
 delay(500);
}



Este ejemplo puede servir para probar motores paso a paso y verificar su correcto funcionamiento.

Links

Más información sobre la librería Stepper y los motores paso a paso.

Tutorial sobre el driver L298 en tronixstuff.com

Barco Aerodeslizador RC Bluetooth

Estaba el otro día paseando por el parque, cuando vi a unos niños jugando con un barquito hecho con corchos de botellas de vino unidos entre sí con palillos de madera, y un pañuelo a modo de vela.

barco con corchos.jpg
Imagen cortesía elhadadepapel.com

Como fan de las cosas DIY que soy, me pareció una idea brillante por su simplicidad y funcionalidad. Y ahí estaban los niños, soltando el barquito en un lado del estanque y corriendo hacia el contrario esperando para recogerlo, mientras el viento lo empujaba.

Pensé en lo divertido que sería tener tu propio barco de radiocontrol. Y se me encendió la bombilla. Esos peques me enseñaron como hacer el barco, del resto me encargo yo.

En el siguiente proyecto veremos cómo hacer un sencillo barco de radiocontrol mediante bluetooth. La idea es imitar el funcionamiento de un aerodeslizador.

aerodeslizador.jpg
Fuente wikipedia

Vale que nuestro barquito desentonaría un poco entrando en Puerto Banús, pero es 100% DIY y eso es lo que importa.

Como hacer el barco

Para el barco propiamente dicho, voy a emplear una botella de agua de 1 litro abierta por la mitad. En la parte trasera he pegado con una pistola de silicona un trozo de plástico donde irá un pequeño ventilador montado sobre un servo para dirigir el barco.



A continuación pegamos a cada lado, una botella más pequeña, de 33cl con el fin de dar estabilidad al barco y evitar que naufrague.


Para terminar introducimos en el interior del barco, las baterías y la electrónica. También he añadido dos leds blancos en la proa y dos rojos en la popa.


Para el control remoto vamos a utilizar un módulo HC-05 conectado a un Arduino NANO V3 controlado con una aplicación desde un móvil Android.


Al utilizar el móvil, nos ahorramos tener que hacer un mando de control remoto, pues lo único que necesitamos es instalar la aplicación Arduino Bluetooth RC Car de Andi Co.
Además el bluetooth ofrece mayor alcance y fiabilidad que los mandos por radiofrecuencia.





Esquema

Como se aprecia en el esquema, he utilizado un L293D para controlar el motor del ventilador, de esta manera podemos invertir el sentido de giro y mover el barco hacia delante y atrás.

Para evitar sobrecargar los pines del Arduino NANO, he alimentado los leds y el zumbador mediante transistores. También se pueden conectar directamente, siempre que el consumo sea inferior a 40mA por cada pin digital del Arduino.

Es posible simplificar el circuito, sustituyendo el L293D por un transistor, pero con la desventaja de no poder invertir el sentido de giro del motor. Pincha aquí para más info.

Todo el circuito se alimenta con cuatro pilas recargables NI-MH de 1,2V.







Sketch

Vamos a pasar a la parte del código.

El funcionamiento es muy sencillo, dependiendo del botón que pulsemos en la pantalla de nuestro móvil, la aplicación manda un mensaje por bluetooth correspondiente a una letra. El receptor lo interpreta y actúa en consecuencia invocando a la función que corresponda.

Mira el Tutorial Oficial de la aplicación para obtener más información.


/* Bluetooth RC Boat
  version On Change mode
  LEDS en Proa y Popa
  Buzzer
*/

#include <Servo.h>
Servo myservo;

int in1Pin = 8; // pin 2 del L293D
int in2Pin = 7; // pin 7 del L293D
int enableM1 = 6; // pin 1 del L293D
int ledsProa = 4; // Leds Proa al pin D4 del Arduino
int ledsPopa = 3; // Leds Popa al pin D3 del Arduino
int buzzer = 2; // Buzzer al pin D2 del Arduino

char command = 'S';
void setup() {
 
  myservo.attach(5);  // Servo al pin D5 del Arduino
   pinMode(in1Pin, OUTPUT);
   pinMode(in2Pin, OUTPUT);
   pinMode(enableM1, OUTPUT);
   pinMode(ledsProa, OUTPUT);
   pinMode(ledsPopa, OUTPUT);
   pinMode(buzzer, OUTPUT);
   Serial.begin(9600);
}

// Funciones
// Si el commando es 'S' el motor se para
void motorsOff(){
 
 digitalWrite(enableM1, LOW);  
 digitalWrite(in1Pin, LOW);
 digitalWrite(in2Pin, LOW);
 myservo.write(90);
  
}

// Si el commando es 'F' el barco avanza
void goForward() {
 digitalWrite(enableM1, HIGH);
 digitalWrite(in1Pin, HIGH);
 digitalWrite(in2Pin, LOW);
 myservo.write(90);
       
}

// Si el commando es 'B' el barco retrocede
void goBackward() {
 digitalWrite(enableM1, HIGH);
 digitalWrite(in1Pin, LOW);
 digitalWrite(in2Pin, HIGH);
 myservo.write(90);
       
}

// Si el comando es 'R' el barco gira a estribor
void turnRight() {
 digitalWrite(enableM1, HIGH);
 digitalWrite(in1Pin, HIGH);
 digitalWrite(in2Pin, LOW);
 myservo.write(120);
}

// Si el comando es 'L' el barco gira a babor
void turnLeft() {
 digitalWrite(enableM1, HIGH);
 digitalWrite(in1Pin, HIGH);
 digitalWrite(in2Pin, LOW);
 myservo.write(60);
}

// Si el comando es 'U' encender los leds de popa
void ledsPopaOn() {
       digitalWrite(ledsPopa, HIGH);
}

// Si el comando es 'u' apagar los leds de popa
void ledsPopaOff() {
       digitalWrite(ledsPopa, LOW);
}

// Si el comando es 'W' encender los leds de proa
void ledsProaOn() {
       digitalWrite(ledsProa, HIGH);
}

// Si el comando es 'w' apagar los leds de proa
void ledsProaOff() {
       digitalWrite(ledsProa, LOW);
}

// Si el comando es 'V' activar el zumbador
void buzzerOn() {
       digitalWrite(buzzer, HIGH);
}

// Si el comando es 'v' desactivar el zumbador
void buzzerOff() {
       digitalWrite(buzzer, LOW);
}

// Si el comando es 'D' apagar todo
void allOff(){
 digitalWrite(ledsProa, LOW);
 digitalWrite(buzzer, LOW);
 digitalWrite(ledsPopa, LOW);
 digitalWrite(enableM1, LOW);
 digitalWrite(in1Pin, LOW);
 digitalWrite(in2Pin, LOW);
 myservo.write(90);
}

void loop() {
   //if some date is sent, reads it and saves in command
   if(Serial.available() > 0){
     command = Serial.read();
     
       switch(command){
         case 'S':
           motorsOff();
           break;
         case 'F':
           goForward();
           break;
         case 'B':
           goBackward();
           break;
         case 'R':
           turnRight();
           break;
         case 'L':
           turnLeft();
           break;
         case 'U':
           ledsPopaOn();
           break;
         case 'u':
           ledsPopaOff();
           break;
         case 'W':
           ledsProaOn();
           break;
         case 'w':
           ledsProaOff();
           break;
         case 'V':
           buzzerOn();
           break;
         case 'v':
           buzzerOff();
           break;
         case 'D':
           allOff();
           break;
             
           
         }   
       }
      }




Una vez subido el código al Arduino, abrimos la aplicación Bluetooth RC Car y tocamos en Settings . Seleccionar Connect to car, en la lista de dispositivos, seleccionamos HC-05 y ponemos el PIN 1234 o bien 0000 si es la primera vez que conectamos con el módulo bluetooth.

Una vez el móvil se conecta por bluetooth, el icono pasa a verde y al pulsar sobre los mandos, el barco actuará en consecuencia.



Barco Aerodeslizador RC Bluetooth v2

Actualizado el 6 de mayo de 2017

He sometido al barco aerodeslizador a una pequeña actualización. Los cambios que he realizado son, por un lado sustituir el motor original procedente de un ventilador a pilas, por dos motores de cuadricóptero y he simplificado el esquema de conexión. Clic sobre la imagen siguiente para ver un gift.


Esquema

Como se aprecia en el esquema, he prescindido de los transistores que alimentaban los ledes y el zumbador. Este cambio no supone ningún problema, siempre que no se superen los 40mA por cada pin digital del Arduino NANO, o 20mA si estamos utilizando al Arduino UNO.

Aunque no lo he dibujado en el esquema, los dos motores están conectados en paralelo en los pines 3 y 6 del L293D.

Arduino Bluetooth RC BOAT - Schematic v2.PNG


Sketch

Solo queda modificar el código visto más arriba, para adaptarlo al nuevo esquema.


/* Bluetooth RC Boat
  version On Change mode Rev 2
  LEDS en Proa y Popa
  Buzzer
*/

#include <Servo.h>
Servo myservo;

int in1Pin = 8; // pin 2 del L293D
int in2Pin = 7; // pin 7 del L293D
int enableM1 = 6; // pin 1 del L293D
int DL1 = 12; // Led Proa al pin D12 del Arduino
int DL2 = 11; // Led Proa al pin D11 del Arduino
int DL3 = 10; // Led Popa al pin D10 del Arduino
int DL4 = 9; // Led Popa al pin D9 del Arduino
int buzzer = 2; // Buzzer al pin D2 del Arduino

char command = 'S';
void setup() {
 
  myservo.attach(5);  // Servo al pin D5 del Arduino
   pinMode(in1Pin, OUTPUT);
   pinMode(in2Pin, OUTPUT);
   pinMode(enableM1, OUTPUT);
   pinMode(DL1, OUTPUT);
   pinMode(DL2, OUTPUT);
   pinMode(DL3, OUTPUT);
   pinMode(DL4, OUTPUT);
   pinMode(buzzer, OUTPUT);
   Serial.begin(9600);
}

// Funciones
// Si el commando es 'S' el motor se para
void motorsOff(){
 
 digitalWrite(enableM1, LOW);  
 digitalWrite(in1Pin, LOW);
 digitalWrite(in2Pin, LOW);
 myservo.write(90);
  
}

// Si el commando es 'F' el barco avanza
void goForward() {
 digitalWrite(enableM1, HIGH);
 digitalWrite(in1Pin, HIGH);
 digitalWrite(in2Pin, LOW);
 myservo.write(90);
       
}

// Si el commando es 'B' el barco retrocede
void goBackward() {
 digitalWrite(enableM1, HIGH);
 digitalWrite(in1Pin, LOW);
 digitalWrite(in2Pin, HIGH);
 myservo.write(90);
       
}

// Si el comando es 'R' el barco gira a estribor
void turnRight() {
 digitalWrite(enableM1, HIGH);
 digitalWrite(in1Pin, HIGH);
 digitalWrite(in2Pin, LOW);
 myservo.write(120);
}

// Si el comando es 'L' el barco gira a babor
void turnLeft() {
 digitalWrite(enableM1, HIGH);
 digitalWrite(in1Pin, HIGH);
 digitalWrite(in2Pin, LOW);
 myservo.write(60);
}

// Si el comando es 'U' encender los leds de popa
void ledsPopaOn() {
       digitalWrite(DL3, HIGH);
       digitalWrite(DL4, HIGH);
}

// Si el comando es 'u' apagar los leds de popa
void ledsPopaOff() {
       digitalWrite(DL3, LOW);
       digitalWrite(DL4, LOW);
}

// Si el comando es 'W' encender los leds de proa
void ledsProaOn() {
       digitalWrite(DL1, HIGH);
       digitalWrite(DL2, HIGH);
}

// Si el comando es 'w' apagar los leds de proa
void ledsProaOff() {
       digitalWrite(DL1, LOW);
       digitalWrite(DL2, LOW);
}

// Si el comando es 'V' activar el zumbador
void buzzerOn() {
       digitalWrite(buzzer, HIGH);
}

// Si el comando es 'v' desactivar el zumbador
void buzzerOff() {
       digitalWrite(buzzer, LOW);
}

// Si el comando es 'D' apagar todo
void allOff(){
 digitalWrite(DL1, LOW);
 digitalWrite(DL2, LOW);
 digitalWrite(DL3, LOW);
 digitalWrite(DL4, LOW);
 digitalWrite(buzzer, LOW);  
 digitalWrite(enableM1, LOW);
 digitalWrite(in1Pin, LOW);
 digitalWrite(in2Pin, LOW);
 myservo.write(90);
}

void loop() {
   //if some date is sent, reads it and saves in command
   if(Serial.available() > 0){
     command = Serial.read();
     
       switch(command){
         case 'S':
           motorsOff();
           break;
         case 'F':
           goForward();
           break;
         case 'B':
           goBackward();
           break;
         case 'R':
           turnRight();
           break;
         case 'L':
           turnLeft();
           break;
         case 'U':
           ledsPopaOn();
           break;
         case 'u':
           ledsPopaOff();
           break;
         case 'W':
           ledsProaOn();
           break;
         case 'w':
           ledsProaOff();
           break;
         case 'V':
           buzzerOn();
           break;
         case 'v':
           buzzerOff();
           break;
         case 'D':
           allOff();
           break;
             
           
         }   
       }
      }


Una vez subido el código al Arduino, abrimos la aplicación Bluetooth RC Car y tocamos en Settings . Seleccionar Connect to car, en la lista de dispositivos, seleccionamos HC-05 y ponemos el PIN 1234 o bien 0000 si es la primera vez que conectamos con el módulo bluetooth.

Una vez el móvil se conecta por bluetooth, el icono pasa a verde y al pulsar sobre los mandos, el barco actuará en consecuencia.




Enlaces

Descarga la aplicación Arduino Bluetooth RC Car de Andi Co

Tutorial oficial de la aplicación.

Más sobre Arduino y módulos bluetooth aquí y aquí.



Publicidad