3 Programación en código
- Entorno de programación
- Maqueta
- APERTURA DE PUERTA
- JOYSTICK
- ALARMA AGUA
- FUEGO
- LÁSER
- BLUETOOTH APP->ARDUINO
- BLUETOOTH APP<->ARDUINO
Entorno de programación
Necesitarás el entorno de desarrollo Arduino IDE (IDE, Integrated development environment) (aquí https://www.arduino.cc/en/Main/Software para descargártelo)
OJO, existe la versión online del editor https://create.arduino.cc/editor.
Es una buena solución si trabajas en varios equipos y quieres que tus proyectos estén disponibles en cualquier equipo.
ATENCION para usar la versión online, tienes que instalar en tu ordenador el software AGENT
https://create.arduino.cc/getting-started/plugin/welcome
En Linux puede salir este mensaje "can't open device "/dev/ttyUSB0": Permission denied" donde 0 puede ser otro número, la solución aquí
Está constituido por un editor de texto para escribir el código, un área de mensajes, una barra de herramientas con botones para las funciones comunes, y una serie de menús.
Arduino utiliza para escribir el código fuente o programa de aplicación lo que denomina "sketch" (programa). Estos programas son escritos en el editor de texto. Existe la posibilidad de cortar/pegar y buscar/remplazar texto.
Permite la conexión, por USB, con el hardware de Arduino para cargar los programas y comunicarse con ellos.
Y permite varias placas, tenemos que elegir la nuestra, en el KIT de CATEDU es Arduino UNO pero si tienes otro modelo este curso seguro que puede ser válido:
En el área de mensajes se muestra información mientras se cargan los programas y también muestra errores.
Lo importante es cuando pinchemos en la flecha de subir nuestro programa, no salga ningún error, sino simplemente "Subido".
¿Cómo se programa Arduino?
Las partes principales de un programa hecho en Arduino son: Bloque de inclusión de módulos y declaración de variables, bloque de configuración void setup() donde se indica el modo de funcionamiento de los pines (entrada y salida), comunicación serie, etc... y bloque de ejecución continua void loop(), en este bloque se incluyen las acciones que queremos que realice el programa. Se ejecutará línea a línea de forma secuencial y continua. Cuando llegue a la última instrucción incluída en la función loop() volverá a ejecutar la primera y continuará en un bucle infinito.
¿Arduino tiene que estar continuamente conectada a un ordenador?
Sólo es necesario que esté conectado al ordenador mediante el USB para cargar los programas o para visualizar en tiempo de ejecución datos del programa mediante la consola serie. El ordenador proporciona la energía eléctrica suficiente para que funcionen los programas, pero una vez cargado el programa en la memoria del microcontrolador de Arduino se puede desconectar del USB y alimentar a la tarjeta mediante una fuente externa mediante el jack de alimentación con un margen de (5 a 20 Voltios). El programa cargado en Arduino queda grabado permanentemente aunque cese el suministro eléctrico.
Para una mayor información y manejo de la instalación del entorno de programación, lenguaje de programación y librerías se encuentra en la página web de la comunidad Arduino:
- www.arduino.cc (portal en inglés, más actualizada).
- www.arduino.es (portal en español).
Maqueta
Compramos una hoja de cartón piedra de formato A3 (el doble de un folio) y lo cortamos por la mitad a la larga, y en dos cuadrados la otra mitad. En uno de esos cuadrados recortamos la puerta, en total sólo 3 paredes y el suelo es la otra parte de arriba:
La mejor forma de pegarlo es con pistola, pero también clavando agujas o las dos a la vez.
Para ir poniendo los componentes lo más fácil y reciclable es perforar, con una simple punta de bolígrafo:
Y atarlo con alambre plastificado típicos de las bolsas de pan de molde:
El soporte del servomotor con la puerta es difícil, una opción es pegarlo con una pistola de pegamento.
Tanto el cartón piedra como el alambre se puede conseguir en cualquier bazar a precios muy económicos.
Otra opción para la apertura de la puerta es usar un palillo :
APERTURA DE PUERTA
Reto
Esta vez vamos a centrarnos con la apertura de la puerta, dejaremos el LDR para la alarma
- Cuando se pulse el interruptor táctil (sería como una llave táctil)
- Se abre la puerta
- Al cabo de 5 segundos, tiempo suficiente para entrar
- Se avisa que la puerta se va a cerrar con 3 pulsos buzzer
- Se cierra la puerta
- Por la pantalla del ordenador saldrán mensajes de apertura y cierre
Solución maqueta
Esta vez en la maqueta ponemos los siguientes elementos 1. Fijación placa Arduino 1. Fijación placa Arduino 1. Interruptor táctil 1. Buzzer 1. Servo 1. Portapilas
Detalle por delante
- Interruptor táctil
- Fijación servo
- Fijación servo
- Puerta *si, ya sé, un poco chapuza ¿y qué pasa? *
Solución esquema de conexiones
Es el mismo mostrado en APERTURA DE LA PUERTA, pero ahora vamos montando la maqueta:
- Terminales GND
- Terminales +5V
- Terminales Servo van aparte (ver nota) con D4 al control del servo
- Terminales
- D2 Interruptor táctil
- D3 Buzzer activo
- Interruptor táctil
- Buzzer activo
- Servo
- Led el pin largo en D13 y el corto en GND.
Nota: El servo al tener terminales hembra, se ha optado por conectarlo directamente en la placa protoboard utilizando machos machos como el de la figura:
Nota: Sí, ya sé que conectar el LED DIRECTAMENTE EN D13 no es una buena práctica, pero internamente Arduino tiene unas resistencias en cada entrada/salida de 30k que lo puede aguantar, o sea, no es lo correcto pero no pasa nada (y como es muy cómodo, y necesitamos espacio, optamos por lo práctico). Si lo pones al revés no funcionará (no se estropea nada pero asegúrate el pin largo al D13 y el corto al GND).
Solución video
Solución código
https://create.arduino.cc/editor/javierquintana/f89a2537-117b-4140-806f-5c79ef4f684a/preview
JOYSTICK
Reto
Ahora vamos a utilizar el Joystick para dos intenciones:
- Aprovechando el SWITCH central:
- Si se hace una pulsación larga:
- la puerta se abre (si estaba cerrada)
- o se cierra (si estaba abierta)
- El mando del Joystick nos regulará una luz ambiental
- El eje X en azul
- El eje y el rojo
- Un valor intermedio es un valor de los dos
Solución maqueta
Vamos ampliando nuestra casa domótica con la luz RGB y el Joystick:
- Joystick fijado en la pared
- Led RGB fijado en la pared
- Conexiones Joystick en entradas analógicas
- Conexiones de RGB a las salidas digitales
Solución esquema eléctrico
Es igual que cuando vimos Joystick:
- Terminales GND del led RGB y del Joystick
- Terminal +5V del Joystick
- Otra opción de conectar el terminal GND
- Otra opción de conectar +5V
y las demás conexiones igual que antes:
- D5 PWM al Rojo del RGB (tiene que ser PWM)
- D6 PWM al Azul del RGB (tiene que ser PWM)
- D7 al Verde del RGB (luego lo utilizaremos)
- A1 al EJEX JOYSTICK
- A2 al EJEY JOYSTICK
- A3 al SWITCH JOYSTICK
Nota: El microruptor del Joystick es digital luego lo apropiado es conectarlo en una entrada salida digital, pero como vamos escasos de entradas y salidas digitales (ya verés como esto se complica), lo trataremos como analógico.
Solución vídeo
Solución código
https://create.arduino.cc/editor/javierquintana/f4dfc995-5a42-4d45-a911-238f67b0c169/preview
ALARMA AGUA
Reto
Ahora vamos a utilizar el sensor de agua para prevenir "accidentes" en casa
- Si el sensor de agua detecta líquido
- Suena una alarma de 10 pulsos mientras esté funcionando
- Si la puerta estuviera abierta
- La cierra pues entraría agua
Solución esquema eléctrico
- Sensor de Agua en D8 igual que vimos en la parte de bloques
- Alimentación GND y +5V del sensor de agua o en 1 y 2 o en 3 y 4
Solución vídeo
Solución código
https://create.arduino.cc/editor/javierquintana/3eaca00b-a7b7-4357-a191-c5cfd33c004a/preview
FUEGO
ATENCIÓN hemos pensado la utilización del sensor de fuego sólo en la parte de CODIGO, pues es para nivel de secundaria.
Implica la utilización de un mechero, con el peligro que conlleva. Utilizar este ejemplo en clase bajo responsabilidad y supervisión del docente.
Reto
Tenemos que hacer dos programaciones * Activar o no la alarma * cuando hay una pulsación larga en el pulsador escondido, se activa o se desactiva la alarma * si se ha disparado la alarma tiene que apagarla * Disparo de la alarma * Si la alarma está actividad, vigilando y se produce una detección, la alarma tiene que sonar hasta que la desactivamos con una pulsación larga del pulsador.
Solución maqueta
Fijaremos en la pared el sensor llama que lo vimos anteriormente en 2.7 y el pulsador de activación o no de la alarma.
- Sensor llama
- Pulsador analógico
- Conexión sensor llama a la entrada digital
- Conexión del pulsador analógico a la entrada analógica
Las alimentaciones de los dos sensores igual que en las páginas anteriores.
Solución esquema eléctrico
- Sensor llama a D9
- Pulsador analógico a A4
Solución vídeo
Solución código
https://create.arduino.cc/editor/javierquintana/fce4e1a9-c2c2-4806-9540-04c3d26c04bd/preview
LÁSER
El diodo láser es un elemento motivador, barato y fácil de usar con el Arduino pues se activa digitalmente:
Si quieres saber más de este componente, te recomendamos esta página de Luis Llamas. Si tienes que comprar uno, te recomendamos que no sea superior a 5mW, pues puede dañar permanentemente la retina del ojo [+info]. El modelo que te proponemos es de 1mW, no obstante, EVITA SIEMPRE QUE EL LÁSER APUNTE A LOS OJOS especialmente con niños.
Reto
- Si activo la alarma el láser tiene que encenderse
- Una vez activada si se corta el láser, por lo tanto el valor del LDR sube, la alarma se dispara.
- Si desactivo la alarma
- La alarma se apaga si se ha disparado
- El laser de apaga.
Solución vídeo
Solución maqueta
En este caso hay que tener cuidado con la fijación del láser y el LDR para que apunte al LDR y otra cuestión son los cables: al instalarse fuera de la casa hay que utilizar cables largos o añadir dos M-H consecutivos.
- Hemos utilizado dos fijaciones con alambre el LDR para que quede fijo.
- En el láser hemos fijado con una chincheta para fijar el láser además de alambre
- Truco, si la maqueta va a estar fija, una buena gota con la pistola de pegamento es mano de santo para que se quede fijo
Solución conexiones eléctricas
- La alimentación del láser y el del LDR igual que en los casos anteriores
- El control del LÁSER a la salida digital D10
- La lectura del LDR a la entrada analógica A0
Solución código
Aquí lo tienes
https://create.arduino.cc/editor/javierquintana/dfca79db-6299-47c1-beef-7db3350c2cee/preview
BLUETOOTH APP->ARDUINO
Conocimientos previos
Tienes que visitar las siguientes páginas de la Unidad 4 Comunicaciones con Arduino:
- ¿Qué es el HC-06?
-
La APP que tienes que intalarte
-
Vincular tu móvil con el HC-06 con tu móvil
Aprende a configurar los botones de la APP !! diapositiva 12 pero en vez de Up, Down, Right y Left los que se establezcan en el reto
Configuración avanzada pues nosotros somos pitos, y conectaremos el HC-06 en los pines digitales D11 y D12 y no en D0 y D1 pues están ocupados con la comunicación del ordenador.
El RX del HC-06 en 11 y el TX del HC-06 en el 12
RETO BÁSICO: Apertura de puerta y encendido láser.
Enunciado reto básico
Vamos a realizar :
- Que desde la APP ->Placa
- Con el comando A abre la puerta
- Con el comando R que cierre la puerta
- Con el comando L que se encienda o se apague el láser (es decir, si estaba encendido, que se apague, y viceversa)
Conexiones reto básico
- Bluetooth HC-06 RX al 12 y TX al 11
- Puerta servo D4
- Láser al D10
El programa es este https://create.arduino.cc/editor/javierquintana/88cfa21b-a86c-428c-95c4-a89a62a9218d/preview
Reto básico Resultado
https://www.youtube.com/shorts/vSjZBe_iEIQ
Reto avanzado
Controlar nuestra casa con el móvil, para ello vamos a definir los siguientes comandos:
COMANDO | VOZ | DATO | descripción |
---|---|---|---|
Comando 1 | abrir | A | abrir la puerta y cierra automáticamente |
Comando 2 | puerta | P | abrir/cerrar la puerta |
Comando 3 | alarma | L | activar/desactivar la alarma |
Comando 4 | pit | T | hace un pit |
Comando 5 | rojo | R | enciende luz interior roja |
Comando 6 | azul | B | enciende luz interior azul |
Comando 7 | apaga | O | apaga luces interiores |
Lo tienes que hacer así:
Solución conexión eléctrica
- Conectaremos Vcc y GND del HC06 igual que antes en la placa protoboard sí ya sé que casi no queda sitio, es el último, lo prometo
- TX de HC06 al pin D11
- RX de HC06 al pin D12
Solución vídeo
Solución código
https://create.arduino.cc/editor/javierquintana/e14ca107-67ba-4508-a5a0-6012213b4c1d/preview
BLUETOOTH APP<->ARDUINO
Nos preguntamos...
P: ¿Y pasar datos de nuestra maqueta a la APP ?
R: Se puede pero tendremos que hacer la APP a medida
P: ¿Podríamos tener libertad de poner botones?
R: Por supuesto,
Recuerda que con la APP que existen en GOOGLE PLAY como la utilizada en el capítulo anterior https://libros.catedu.es/books/domotica-con-arduino/page/bluetooth la comunicación es PLACA<-APP
RETO BÁSICO
Enunciado reto básico
Vamos a realizar :
- Que desde la APP ->Placa
- Con el comando A abre la puerta
- Con el comando R que cierre la puerta
- Con el comando L que se encienda o se apague el láser (es decir, si estaba encendido, que se apague, y viceversa)
- Que desde la Placa ->APP
- Si detecta ladrón que avise
Conexiones reto básico
- Bluetooth HC-06 RX al 12 y TX al 11
- Puerta servo D4
- Láser D10 apuntando al LDR
- Sensor LDR D9
RETO BÁSICO LA APP EN APP INVENTOR
los pasos son parecidos a los tratados en https://libros.catedu.es/books/arduino-en-el-aula/page/app-tdr-steam-app-inventor-blocks
Lo tienes en https://gallery.appinventor.mit.edu/?galleryid=286eb7c2-792d-436c-b7d0-3d9e1e0592aa
Para llevar la APP al móvil mira https://libros.catedu.es/books/arduino-en-el-aula/page/llevar-la-app-creada-en-app-inventor-al-movil
RETO BÁSICO PROGRAMA EN EL ARDUINO CON CODIGO
El programa lo tienes aquí https://create.arduino.cc/editor/javierquintana/ea8fa750-8cd1-48fd-8ea1-65bac09b78ce/preview
BUG: Cuando el laser pasa de APAGADO a ENCENDIDO, el LDR es más lento que el programa Arduino y detecta LADRÓN luego desaparece, pero ya se ha quedado el fondo de pantalla rojo.
RETO: Habría que poner un pequeño retardo delay(500); para solucionar este problema ¿Dónde?
Resultado video
https://www.youtube.com/shorts/RZ_0EX4OulI?feature=share
RETO AVANZADO
Como en la página anterior
RETO AVANZADO LA APP EN APP INVENTOR
los pasos son parecidos a los tratados en https://libros.catedu.es/books/arduino-en-el-aula/page/app-tdr-steam-app-inventor-blocks
Pero en la vista de Designer, hemos añadido más botones, imagen, etc...
Y la vista de Blocks es más completa
El programa lo tienes aquí :
https://gallery.appinventor.mit.edu/?galleryid=b4979892-5df3-4225-90be-538a64d469e0
RETO AVANZADO EL PROGRAMA EN EL ARDUINO
Y hemos modificado el programa en Arduino para que envíe los comandos por bluetooth
Busca los comandos Serial1.print(...);
https://create.arduino.cc/editor/javierquintana/b2c39d6f-d0ef-44e2-bb5b-2d9351dddb94/preview