Computing">
Tercero
Tercero
Tercero
Conociendo a mi robot
Otto
Componentes
Sensor
1 ultrasónico Cable de datos
1
micro USB
Servomotores
6 SG90
1 Buzzer activo 5V
1 Cuerpo del
robot
1 Arduino nano
4 Bases
piernas/brazos
Porta
1 baterías AA Bases patas del
2 robot
Cables de
40
conexión 1 Switch
2
Lección I. Introducción a Arduino
¿Qué es Arduino?
¿Qué es Arduino?
Se trata de una placa Open Hardware por lo que su diseño es de libre
distribución y utilización. En nuestro robot utilizaremos una placa de desarrollo
de tamaño compacto, completa y compatible con protoboards, basada en
el microcontrolador ATmega328P. Tiene 14 pines de entrada/salida digital (de
los cuales 6 pueden ser usando con PWM), 6 entradas analógicas, un cristal de
16Mhz, conexión Mini-USB, terminales para conexión ICSP y un botón de
reseteo.
Instalación de Arduino
3
3. Elija el paquete de instalación del sistema operativo apropiado para su
computadora.
La pantalla principal
1 2 3 4 5
4
2. Verificar 1. Abrir
4. Cargar 3. Guardar
5. Nuevo
7. Panel de notificaciones
6. Indicador de puerto
Estructura de un programa
void setup()
{
estamentos;
}
void loop()
{
estamentos;
}
Función setup()
5
Función loop()
void loop()
delay(1000);
delay(1000);
Mandamos un retraso de 1 segundo
}
6
• Con ayuda de su maestro realicen los siguientes ejercicios:
7
Lección II. Tipo de datos y
operadores
Al igual que en c++ los datos tiene un tamaño y rango que soporta la
cantidad de valor, en la siguiente tabla encontrar el detalle de dicha
información
Declaración de constantes
8
Donde:
Las variables definidas en un programa pueden ser de tipo LOCAL o GLOBAL. Las
variables locales se utilizan en la función de donde se encuentran declaradas; las
variables globales se pueden utilizar en todas las funciones del programa.
9
Operadores Aritméticos
Son aquellos operadores Arduino que ofrecen la posibilidad de trabajar con las
operaciones básicas. Es decir que, los operadores aritméticos que se añaden en
el entorno de programación, hacen referencia a la suma, resta, multiplicación,
división y módulo. Por lo tanto, tienen la capacidad de devolver la suma,
diferencia, producto, cociente o resto de dos operandos.
Operadores de comparación
Así como su nombre lo indica, estos operadores son empleados para hacer
comparaciones entre valores. Es decir que, son aptos para comparar dos
expresiones y como resultado, generalmente, devuelven un valor booleano que
representa la relación de sus valores.
Operadores booleanos
10
El siguiente Sketch demuestra el uso de todos los operadores aritméticos
anteriores. Copia y carga el Sketch en tu Arduino para probarlo.
void setup() {
int a = 2;
int b = 7;
int result;
float result_fl;
Serial.begin(9600);
Pega una captura de pantalla de tus
Serial.print("Suma b): ");
resultados obtenidos en Arduino
result = a + b;
Serial.println(result);
Serial.print("Resta- 2): ");
result = 10 - 2;
Serial.println(result);
Serial.print("Multiplicación 3): ");
result = 4 * 3;
Serial.println(result);
Serial.print("División (5 / 4): ");
result = 5 / 4;
Serial.println(result);
Serial.print("Floar (5.0 / 4.0): ");
result_fl = 5.0 / 4.0;
Serial.println(result_fl);
Serial.print("Residuo% 4): ");
result = 11 % 4;
Serial.println(result);
}
void loop() {
}
11
Lección III. Sentencias
condicionales
Sentencia IF
if (condición) {……..}
Sentencia IF ELSE
12
Con esto tenemos la posibilidad que el programa tome uno de los
dos caminos dependiendo de que una única expresión se cumpla o no.
Una vez ejecutada, el programa continuará en la siguiente línea de código
restante.
• 1 interruptor
• 1 placa Arduino
• 1 led
13
Sentencia FOR
Se conectan los LEDs rojo, amarillo y verde a los pines digitales 13, 12
y 11 de la placa de Arduino (utilizando su debida resistencia). La patilla
larga del LED debe ser conectada al voltaje positivo (ánodo) y la corta al
voltaje negativo (cátodo) pasando por la resistencia.
Programación en Arduino
El código empieza utilizando un ciclo for para asignar los pines digitales 2 a 4
como salidas para los 6 LEDs utilizados.
En el ciclo principal del código, se utilizan dos ciclos for para recorrer de forma
incremental, paso a paso a través de los LEDs, uno por uno, del pin 2 al pin 4.
Cuando el pin 4 está encendido, el proceso se invierte, haciendo que los LEDs se
prendan al contrario de como ya se había hecho.
14
int timer = 100;
En esta sección declaramos una variable del tipo entero llamada “timer”
con valor de 100 milisegundos.
Posteriormente, declaramos nuestro bucle for con una variable del tipo entera
llamada “thisPin”, iniciando en el puerto 2 del Arduino, hacemos la comparación:
si las variables thisPin < 5”; esto quiere decir que solo utilizaremos el puerto 2,3 y 4
del Arduino, por último indicamos que aumentaremos en uno la variable con el
“thisPin++”.
pinMode(thisPin, OUTPUT);
En esta sección del código se ejecutará nuestro ciclo for, iniciamos en el puerto 2
del Arduino, concluyendo en el puerto 4. Mandamos una señal de encendido
“HIGH” la cual nos permitir encender uno a uno nuestros Leds.
15
Por último, realizaremos la rutina en retroceso. Como puedes observar,
iniciamos ahora en el pin 4, concluyendo en el pin 2.
¡Es tu turno! Realiza un programa en Arduino que permita prender tres leds de
forma secuencial en incremento con tiempo de espera de 2 segundos y
apagarlos de en decremento con un tiempo de espera de ½ segundo.
16
Sentencia WHILE
Su sintaxis es la siguiente:
Pero la variable va sumando uno cada vez que regresa el ciclo, por lo tanto, en
algún momento será igual a 10 o mayor y entonces ya no cumplirá la condición,
por lo que el mensaje cambiará a “El resultado es igual a 10”.
17
Con ayuda de tu profesor realicen y ejecuten un programa en Arduino que te
permita realizar la siguiente rutina:
30cm
18
Lección IV. Servomotores
Partes de un servomotor
Carcaza
Engranes
Eje
Motor DC
Potenciometro
19
Conexionado con Arduino
Todos los servomotores deben tener 3 cables. Uno irá a tierra (cable negro),
otro a la alimentación de 5 Voltios (cable rojo) y el tercero a un pin PWM (cable
verde).
20
La señal o dato que hay que enviarle al servo es una señal de PWM
donde el tiempo en alto es equivalente al ángulo o posición del
servo.
Estos valores pueden variar y van desde 0.5 a 1 milisegundo para la
posición 0° y 2 a 2.4 milisegundos para la posición de 180°, el
periodo de la señal debe ser cercano a 20 milisegundos.
Izquierda (0°)
Centro (90°)
Derecha (180°)
attach(Pin)
attach(Pin,min,max)
write(angulo)
writeMicroseconds(tiempo)
21
read ()
attached(Pin)
Verifica si la variable servo está unido al pin indicado, devuelve true o false. Ej:
if(attached(2))
detach(pin)
0° 90° 180°
void loop() {
servoMotor.write(0); Desplazamos el servomotor a la posición 0º
delay(1000); Esperamos 1 segundo
servoMotor.write(90); Desplazamos el servomotor a la posición 90º
delay(1000); Esperamos 1 segundo
servoMotor.write(180); Desplazamos el servomotor a la posición 180º
delay(1000); Esperamos 1 segundo
}
22
¡Ayuda a Otto!
23
Lección V. Sensor ultrasónico
24
Conexionado con Arduino
void setup() {
25
Seguidamente recibimos el pulso de respuesta del sensor por el pin
Echo, para medir el pulso usamos la función pulseIn(pin, value)
void setup() {
Serial.begin(9600);//iniciailzamos la comunicación
pinMode(Trigger, OUTPUT); //pin como salida
pinMode(Echo, INPUT); //pin como entrada
digitalWrite(Trigger, LOW);//Inicializamos el pin con 0
}
void loop()
{
digitalWrite(Trigger, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger, LOW);
26
Serial.print("Distancia: ");
Serial.print(d); //Enviamos serialmente el valor de la distancia
Serial.print("cm");
Serial.println();
delay(100); //Hacemos una pausa de 100ms
}
27
Lección VI. ¡Armemos a Otto!
28
A continuación, se muestran los pasos para la construcción del robot Otto.
Sigue cada instrucción, prestando especial atención en la correcta colocación
de los objetos apoyándote en las imágenes. Todos los materiales vienen incluidos
en tu Kit.
29
2. Una vez colocados los servomotores, debemos insertar los
tornillos incluidos en el kit. Tener cuidado en la elección
correcta del tornillo, no debemos forzar demasiado
porque podemos barrer la cabeza del tornillo.
30
3. Cortamos dos hélices incluidas en los servomotores, de tal
forma que queden justas para poder colocarlas en las uniones.
Para un corte más sencillo, apóyate en la imagen que te
mostramos a continuación, guiándote en los orificios de la
hélice.
31
4. Colocamos las uniones en la base, metiendo la hélice en el eje
del servomotor. Una vez colocadas las uniones, corroborar que
giren 180 grados de forma suave, serán las encargadas de dar
movimiento a piernas y patas del humanoide.
32
5. Colocamos los tornillos pequeños entre la unión de las hélices
del servomotor y las uniones, recuerda no apretar demasiado
para evitar barrer el tornillo.
33
6. Cortamos un extremo de ambas hélices, apóyate en la imagen
para hacer el corte exacto.
Posteriormente, las colocamos sobre el eje del motor y
revisamos que tenga la libertad de girar 180°.
34
7. Colocamos los servomotores en las patas del robot,
ambas patas son iguales. Cerciórate que el orificio de unión
entre el motor y la hélice quede sobre el orificio lateral de la
pata del robot.
35
8. Colocamos los tornillos entre la unión de las hélices del
servomotor y las patas del robot, recuerda no apretar
demasiado para evitar barrer el tornillo y cerciorarte que la
pata haya quedado bien fija en el servomotor.
36
9-10. Es momento de colocar las patas en las uniones, para
ello atraviesa el cable del servomotor por uno de los orificios de
la base, lo utilizaremos más adelante en las conexiones
eléctricas.
37
11. Sacamos ambos cables de los servomotores por la parte
superior de la base.
38
12. Atornillamos las patas del robot a la base utilizando los
tornillos grandes incluidos en el kit.
39
13. Con mucho cuidado, colocamos nuestro Arduino nano
en los pines del Shield, evitar doblar alguna pata del Arduino.
40
12. Colocamos los servomotores a las uniones de los brazos
del robot. Observa detenidamente la imagen, el eje del motor
debe ir de frente.
41
15. Con un poco de cinta, pegamos nuestro sensor
ultrasónico, Buzzer y sensor de tacto a la base del robot,
colocando jumpers hembra-hembra en sus pines.
42
16. Esquema de conexiones para sensores y servomotores a
la placa de expansión de Arduino
43
17. Colocación de tornillos en la cabeza del robot
44
18. Colocamos nuestro panel led de 8x8 en la parte frontal
de la base del robot, nuestra base es blanca para que la luz
del panel se vea reflejado en nuestro robot. Recuerda sujetarlo
con un pequeño trozo de cinta adhesiva y no usar
pegamentos para adherirlo.
45
19. Colocamos nuestra porta baterías con interruptor en la
base del robot, tal como se muestra en la imagen. Nuestra
porta batería cuenta con cuatro espacios para pilas del tipo
AA de 1.5 V, por tal motivo nuestro robot será alimentado con
6V.
46
20. Colocamos la hélice simple del servomotor en las
uniones de los brazos ubicados en nuestra base.
47
21. Atornillamos nuestras hélices a las uniones de la base.
48
22. Alimentación de la Shield de Arduino con la porta
baterías de pilas AA
49
23. Colocamos el Buzzer del Arduino en la base, observa
que tiene un pequeño orificio; en ocasiones los componentes
electrónicos varían sus dimensiones, en caso de que el Buzzer
quede un poco flojo puedes fijarlo con un poco de cinta
adhesiva,
50
24. Metemos nuestra porta batería a la base del robot a un
costado.
51
25. Colocamos las uniones de los brazos del robot a la base,
enroscando el tornillo colocado con anterioridad.
52
26. Diagrama de conexión de servomotores y sensores a la
placa de expansión de Arduino
53
26. Por último, colocamos la cabeza del robot sobre la base,
observa que cuenta con dos pequeñas uniones laterales para
unirlas sin necesidad de tornillo o pegamento,
54
28. ¡Es momento de programar tu robot Otto y divertirte!
55
Lección VII. Interactuando con Otto
56
Interfaz de Otto Blockly
57
58
59
60
Lección VIII. ¿Otto puede hablar?
61
Buzzer en Arduino
Los buzzer son dispositivos pequeños y compactos, con alta durabilidad, y bajo
consumo eléctrico. Por contra, la calidad de sonido es reducida.
Programación en Arduino
Arduino dispone de dos funciones que nos permiten generar fácilmente señales
eléctricas para convertir en sonido, usando cualquiera de las salidas digitales
disponibles.
62
tone(pin, frecuencia); //activa un tono de frecuencia determinada
en un pin dado
noTone(pin); //detiene el tono en el pin
Pese a su sencillez, al usar las funciones para la generación de tone tenemos que
asumir importantes limitaciones.
63
Con ayuda de su profesor, realicen un programa en Arduino y Otto Blockly que
permita reproducir al robot un sonido cuando detecte un objeto cercano.
64
Lección IX. Las emociones
de Otto
Nuestro robot Otto puede realizar diferentes gestos gracias a la
matriz led incorporada en su parte frontal.
65
Mediante la aplicación de Otto Blockly programa a tu robot, haz que
reproduzca tres gestos diferentes. Tómale una fotografía a cada uno de ellos y
pégalos a continuación.
66
Lección X. Módulo Bluetooth
Modo AT (Desconectado):
Modo Conectado:
- Entra a este modo cunado se establece una conexión con otro dispositivo
bluetooth.
- Todos los datos que se ingresen al HC-06 por el Pin RX se trasmiten por
bluetooth al dispositivo conectado, y los datos recibidos se devuelven por el
pin TX. La comunicación es transparente para el programador.
67
Las conexiones serían las siguientes:
void setup()
{
BT.begin(9600); // Inicializamos el puerto serie BT que hemos creado
Serial.begin(9600); // Inicializamos el puerto serie
}
void loop()
{
if(BT.available()) // Si llega un dato por el puerto BT se envía al monitor
serial
{
Serial.write(BT.read());
}
68
Configurando nuestro Módulo HC-06:
Es bueno recordar que para enviar los comandos AT, nuestro HC-06 debe estar en
Modo AT, esto significa sin conexión bluetooth con otro dispositivo o verificar que
LED del HC-06 esté parpadeando.
En la parte inferior del monitor debemos escoger “No hay fin de línea” y la
velocidad “9600 baudios” (la velocidad por defecto de nuestro HC-06, si se lo ha
cambiado poner la velocidad correspondiente)
Test de comunicación:
✓ Enviar: AT
✓ Recibe: OK
69
Cambiar nombre de nuestro módulo HC-06:
Respuesta: OKsetname
Por defecto viene con el código de vinculación (Pin) “1234”, para cambiarlo hay
que enviar el siguiente comando AT
Respuesta: OKsetPIN
Naylamp Car
70
Antes de cargar el programa a nuestro Arduino debemos de
desconectar los cables de nuestro Bluetooth y después de terminado la
carga podemos volverlo a conectarlo.
int tiempo=0;
void setup() {
// inicializar la comunicación serial a 9600 bits por segundo:
Serial.begin(9600);
// configuramos los pines como salida
pinMode(Pin_Motor_Der_A, OUTPUT);
pinMode(Pin_Motor_Der_B, OUTPUT);
pinMode(Pin_Motor_Izq_A, OUTPUT);
pinMode(Pin_Motor_Izq_B, OUTPUT);
void loop() {
if (Serial.available()) {
char dato= Serial.read();
if(dato=='a')
{
Mover_Adelante();
tiempo=0;
}
else if(dato=='r')
{
Mover_Retroceso();
tiempo=0;
}
else if(dato=='d')
{
Mover_Derecha();
tiempo=0;
}
else if(dato=='i')
{
Mover_Izquierda();
tiempo=0;
}
71
Mover_Stop();
}
void Mover_Adelante()
{
digitalWrite (Pin_Motor_Der_A, HIGH);
digitalWrite (Pin_Motor_Der_B, LOW);
digitalWrite (Pin_Motor_Izq_A, HIGH);
digitalWrite (Pin_Motor_Izq_B, LOW);
}
void Mover_Retroceso()
{
digitalWrite (Pin_Motor_Der_A,LOW );
digitalWrite (Pin_Motor_Der_B,HIGH );
digitalWrite (Pin_Motor_Izq_A,LOW );
digitalWrite (Pin_Motor_Izq_B,HIGH );
}
void Mover_Derecha()
{
digitalWrite (Pin_Motor_Der_A,LOW );
digitalWrite (Pin_Motor_Der_B,HIGH );
digitalWrite (Pin_Motor_Izq_A,HIGH);
digitalWrite (Pin_Motor_Izq_B,LOW);
}
void Mover_Izquierda()
{
digitalWrite (Pin_Motor_Der_A,HIGH);
digitalWrite (Pin_Motor_Der_B,LOW);
digitalWrite (Pin_Motor_Izq_A,LOW );
digitalWrite (Pin_Motor_Izq_B,HIGH );
}
void Mover_Stop()
{
digitalWrite (Pin_Motor_Der_A, LOW);
digitalWrite (Pin_Motor_Der_B, LOW);
digitalWrite (Pin_Motor_Izq_A, LOW);
digitalWrite (Pin_Motor_Izq_B, LOW);
Como se observa al código del primer ejemplo solo le hemos agregado la parte
de la comunicación serial, en donde leemos el dato y comparamos para ver si es
el carácter correspondiente para realizar su respectivo movimiento,
adicionalmente si durante 100 milisegundos no llega ningún dato detenemos el
robot, y tan pronto le llega uno de los datos reiniciamos la cuenta de los 100ms.
Una vez que tengan todo listo, tan solo hay que abrir la App, conectarnos a
nuestro modulo Bluetooth y empezar a mover nuestro robot con los botones.
72
Lección XI. Minisumo
¡Es momento de que programes tu propio robot Minisumo y compitas con tus
compañeros!
1. Conexión a motorreductores
2. Drivers para el control de motores
3. Placa Arduino nano
4. Conexión a módulo Bluetooth
5. Interruptor de encendido/apagado
6. Conexión de batería para alimentación de placa
7. Conexión a entrada analógicas y digitales del Arduino
73
3
2 4
1
7
5 6
Sensor ultrasónico
Imaginemos lo siguiente:
74
Como puedes observar, dentro de esta categoría nos podemos
encontrar con un sinfín de programaciones diferentes, el analizar
diferentes conclusiones se vuelve fundamental, veamos otro ejemplo:
En esta categoría no
contamos con un límite
de sensores, ¿Colocarías
más sensores a tu robot?
__________________
75
Control de motores
La siguiente imagen ilustra la técnica PWM con varios ciclos de trabajo y voltajes
medios.
76
H-Bridge, Para controlar la dirección de rotación
El código comienza declarando los pines de Arduino a los que están conectados
los pines de control de L293D.
// Motor A conexiones
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B conexiones
int enB = 3;
int in3 = 5;
77
int in4 = 4;
void setup() {
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
void loop() {
directionControl();
delay(1000);
speedControl();
delay(1000);
}
void directionControl() {
// Set motors to maximum speed
// For PWM maximum possible values are 0 to 255
analogWrite(enA, 255);
analogWrite(enB, 255);
// Turn on motor A & B
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
78
digitalWrite(in4, LOW);
delay(2000);
// Now change motor directions
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// Turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
speedControl(): Esta función acelera los dos motores desde cero hasta la
velocidad máxima produciendo señales PWM mediante la función analogWrite(),
y luego los desacelera de vuelta a cero. Finalmente, apaga los motores.
void speedControl() {
// Turn on motors
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Accelerate from zero to maximum speed
for (int i = 0; i < 256; i++) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Decelerate from maximum speed to zero
for (int i = 255; i >= 0; --i) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
79
Compendio de temas y actividades
Actividades:
I. Semáforo con Leds programado en Arduino
Variables y constantes
Operadores Aritméticos
Tipo de datos y
4-6 Operadores de comparación 9
operadores
Operadores booleanos
Actividades:
II. Compilación y ejecución de programas mediante el Port View del Arduino.
Sentencia IF
Sentencia IF ELSE
Sentencias
7-12 Sentencia FOR 18
condicionales
sentencia WHILE
Actividades:
III. Programación de rutinas con un interruptor mediante la sentencia IF ELSE
IV. Encendido de leds por tuinas ascendente y descendente mediante la
sentencia FOR en Arduino
V. Detección de objetos y toma de decisiones con el sensor ultrasónico y la
sentencia While
Partes de un servomotor
Conexión de servomotores y
Arduino
Control de
13-15 Biblioteca servo.h 6
servomotores
Control de un servomotor mediante
grados y módulo de ancho de pulso
(PWM)
Actividades
VI. Movimiento de las articulaciones de Otto mediante servomotores
PROYECTO: “OTTO BAILA”. Programación de
16-17 6
coreografías de canciones navideñas con Otto.
80
Semana(s) Lección Temas Módulos
Datasheet del sensor
El sensor Conexionado con Arduino
18-19 6
ultrasónico Programación con Arduino
Actividades:
VII. Detección de objetos y distancias mediante el sensor ultrasónico
PROYECTO: “Mi robot autónomo” Otto toma decisión
20 mediante las señales obtenidas del sensor 3
ultrasónico.
Descargar del software de Oto
Blockly
Interactuando Interfaz del programa
21-22 con Otto Carga y depuración de programas 6
Blockly al robot
Actividades:
VIII. Acciones en actuadores y sensores a Otto
Funcionamiento de un Buzzer
Conexionado con Arduino
¿Otto puede Bloques de sonido predefinidos en
23-24 6
hablar? Otto Blockly
Programación del Buzzer en entorno
IDE de Arduino
Actividades:
IX. Reproducción de sonidos predefinidos en Otto
X. Reproducción de sonidos como respuesta al censado de objetos mediante el
sensor ultrasónico.
Funcionamiento de una matriz led
8*8
Creación de gestos predefinidos
Las emociones mediante la aplicación Otto Blockly
25-27 9
de otto Conexionado de la matriz con
Arduino
Programación mediante Arduino IDE
Actividades
XI. Creación de expresiones mediante la matriz Led
PROYECTO: “OTTO se expresa”. Simulación de
28 3
movimientos, expresiones y sonidos con Otto.
Estados de funcionamiento
Módulo Conexión entre PC y módulo
29-31 9
Bluetooth Bluetooth
Configuración de nombre y código
81
de vinculación
Control de otto mediante
aplicaciones móviles
Actividades:
XI. Programación de botones para el control de otto mediante aplicaciones
móviles
Sensor ultrasónico
Control de motores mediante el
driver l293D
Robot Programación de rutinas mediante
32-40 27
Minisumo sentencias de control y sensores
Uso de aplicaciones móviles para el
control inalámbrico del robot
82