Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (17)
Arduino Robot Ps
Una vuelta de tuerca…
Habiendo programado nuestro pequeño robot para sus “primeros pasos” el peque de la casa me ha preguntado: “¿y por que no puedo usar el mando de la tele para moverlo?”
A lo que he respondido y por que no?
Me he puesto manos a la obra, y en lugar de utilizar el mando del TV, me he dicho, “y si usamos directamente el teléfono por bluethooth y nos evitamos las interferencias infrarrojas y poder usarlo en la calle con un amplio radio de alcance? …
Aquí la solución:
Un modulo BT HC-05 para el arduino (ebay 1,65€)
Antes de implementar el programa definitivo, debemos probar el funcionamiento del Arduino con el puerto serie virtual que se genera en la comunicación entre el programa y la placa Arduino, para ello, utilizaremos un nuevo código, que nos permitirá revisar las ordenes que enviamos desde el puerto serie de la aplicación y verificar el movimiento en el robot.
Elevamos el robot del suelo para que queden las ruedas en el aire y enviamos el siguiente programa:
1 | /********************************************************************************************* |
2 |
3 | Tutorial: Robot Ps |
4 | Autor: www.pesadillo.com - 12 Agosto 2015 |
5 |
7 |
8 | Experimento... Implementamos un sistema de control remoto por Bluetooth. En lugar de que el |
9 | robot realice una tarea programada, controlaremos sus movimientos. |
10 | PRIMERA PARTE: Mediante la consola de puerto serie del programador Arduino (monitor serie) enviaremos los |
11 | comandos para verificar el funcionamiento del programa sobre el Arduino Robot Ps |
12 |
13 | ********************************************************************************************/ |
14 | #define MOTOR1_CTL1 8 // I1 |
15 | #define MOTOR1_CTL2 9 // I2 |
16 |
17 | #define MOTOR2_CTL1 6 // I3 |
18 | #define MOTOR2_CTL2 7 // I4 |
19 |
20 | int speakerPin = 13; // declaro pin para speaker |
21 |
22 | char Bluetooth; //crear variable que almacena los datos recibidos por el puerto serie |
23 | String inputString= "" ; //definimos a nulo la cadena de texto |
24 |
25 | void setup() |
26 | { |
27 | // Setup pins for motor 1 |
28 | pinMode(MOTOR1_CTL1,OUTPUT); |
29 | pinMode(MOTOR1_CTL2,OUTPUT); |
30 |
31 | // Setup pins for motor 2 |
32 | pinMode(MOTOR2_CTL1,OUTPUT); |
33 | pinMode(MOTOR2_CTL2,OUTPUT); |
34 |
35 | // set the speaker pin mode to output |
36 | pinMode(speakerPin, OUTPUT); |
37 | Serial.begin(9600); // set the baud rate to 9600, same should be of your Serial Monitor |
38 | } |
39 |
40 | //pitidos (subproceso) |
41 | void pitido(char pitidos_num) |
42 | { |
43 | // el sibproceso pitido(3) Haría 3 pitidos) |
44 | for (int pip=0; pip<pitidos_num; pip++) |
45 | { |
46 | for (int i=300; i>0; i--) |
47 | { |
48 | digitalWrite(speakerPin, HIGH); |
49 | delayMicroseconds(200); |
50 | digitalWrite(speakerPin, LOW); |
51 | delayMicroseconds(200); |
52 |
53 | } |
54 | delay (50); |
55 | } |
56 | } |
57 |
58 | // Antes de nada, obtenemos la lista de comandos de la aplicacion para manejar el robot |
59 | // La nuestra utiliza los siguientes caracteres: |
60 | //F = Arriba |
61 | //L = Izquierda |
62 | //R = Derecha |
63 | //D = Abajo |
64 | //E = Stop (aqui utilizaremos el pitido) |
65 |
66 | //Empieza el ciclo |
67 | void loop() |
68 | { |
69 |
70 | if (Serial.available()){ //Si hay datos en el puerto serie |
71 | while (Serial.available()) |
72 | { |
73 | char inChar = (char)Serial.read(); //lee la entrada de datos |
74 | inputString += inChar; //compone la cadena como la recibe por el puerto serie |
75 | } |
76 | Serial.println(inputString); //damos saliada a la cadena de texto almacenada. |
77 | while (Serial.available() > 0) |
78 | { Bluetooth = Serial.read() ; } // borrar buffer (datos almacenados) del puerto serie |
79 |
80 | // avance |
81 | if (inputString== "F" ) //En caso de recibir |
82 | { |
83 | digitalWrite(MOTOR1_CTL1,LOW); |
84 | digitalWrite(MOTOR1_CTL2,HIGH); |
85 | digitalWrite(MOTOR2_CTL1,LOW); |
86 | digitalWrite(MOTOR2_CTL2,HIGH); |
87 | //delay (tarea[i]); No utilizamos los delay ya que funcionara mientras reciba el comando por el puerto serie |
88 | } |
89 | //giro derecha |
90 | if (inputString== "R" ) |
91 | { |
92 | digitalWrite(MOTOR1_CTL1,LOW); |
93 | digitalWrite(MOTOR1_CTL2,HIGH); |
94 | digitalWrite(MOTOR2_CTL1,HIGH); |
95 | digitalWrite(MOTOR2_CTL2,LOW); |
96 | //delay (tarea[i]); |
97 | } |
98 | //giro izquierda |
99 | if (inputString== "L" ) |
100 | { |
101 | digitalWrite(MOTOR1_CTL1,HIGH); |
102 | digitalWrite(MOTOR1_CTL2,LOW); |
103 | digitalWrite(MOTOR2_CTL1,LOW); |
104 | digitalWrite(MOTOR2_CTL2,HIGH); |
105 | //delay (tarea[i]); |
106 | } |
107 | //atras |
108 | if (inputString== "D" ) |
109 | { |
110 | digitalWrite(MOTOR1_CTL1,HIGH); |
111 | digitalWrite(MOTOR1_CTL2,LOW); |
112 | digitalWrite(MOTOR2_CTL1,HIGH); |
113 | digitalWrite(MOTOR2_CTL2,LOW); |
114 | //delay (tarea[i]); |
115 | } |
116 | //para |
117 | if (inputString== "E" ) |
118 | { |
119 | digitalWrite(MOTOR1_CTL1,LOW); |
120 | digitalWrite(MOTOR1_CTL2,LOW); |
121 | digitalWrite(MOTOR2_CTL1,LOW); |
122 | digitalWrite(MOTOR2_CTL2,LOW); |
123 | pitido(2); |
124 | //delay (tarea[i]); |
125 | } |
126 |
127 | inputString = "" ; //Poner vaciar variable |
128 | //cerramos la recepcion datos serie |
129 | } |
130 |
131 | //fin del ciclo del programa |
132 | } |
Una vez realizada la programación, nos vamos a HERRAMIENTAS / MONITOR SERIE y enviamos las letras escogidas para efectuar los diferentes movimientos… veremos que el robot interpreta el comando recibido por el puerto serie y lo ejecuta.
En la siguiente entrada, realizaremos la conexión del modulo e implantaremos el nuevo programa.
En este punto, he de mencionar que todo lo publicado hasta ahora en este “paso a paso” funciona perfectamente, intentar utilizar códigos de terceros o recopilados de foros me ha llevado a callejones sin salida y pérdidas de tiempo.
|
![]() | 17 septiembre 2015 en Electronica | tags: Arduino, Cursos, Electronica |