Automatizacion: Control de una puerta de garaje con Arduino (DIY)
(Antes de nada, los credits: Mi grupo éramos Héctor, Aitor y yo misma =^_^=)
El pasado jueves estuvimos en clase de Automatización jugando con Arduino. ¿Qué es Arduino? Arduino es,copypasteando de la wikipedia, una plataforma de hardware de fuente abierta basada en una sencilla placa con entradas y salidas (E/S), analógicas y digitales, y en un entorno de desarrollo que implementa el lenguaje Processing/Wiring. Está basado en el procesador Atmega8, un chip sencillo y de bajo coste que permite el desarrollo de múltiples diseños. Hay más info y múltiples ejemplos en su web.
Tengo que decir que es la primera vez que trabajaba con algo así, y que me ha encantado la experiencia. ¿Por que? Porque, para empezar, es tremendamente sencillo de utilizar: Sólo hay que escribir el código en C un poco modificado, enchufar la placa al pc por usb, volcarle el programa, montar el circuito y ale, a correr. Pega: necesitas una placa, pero rondan los 30 euros (visto lo visto, no es tanto); aproximadamente la mitad si montas los componentes por separado (aunque te sale una placa más grande)
Concretamente, el modelo que hemos utilizado en clase ha sido una Arduino Diecimila, que aquí podeis ver en mi manita:
(haciendo clic en la imagen podeis acceder a ella en flickr, le he puesto unas cuantas notas explicando más o menos qué es cada cosa)
Al principio, el profesor nos sugirió que pensáramos nosotros un posible uso de la placa para escribir el código (sin circuito). Y me costó mucho, muchísimo pensar algo xD Pero cuando empezamos a utilizarla "fisicamente"... miles de ideas vinieron a mi ^^ Y eso da gustito :) (Aquí es cuando inserto un "gracias al señor mapache", por pasarme enlaces interesante con ejemplos, como este o este)
En esta práctica, la idea era diseñar e implementar un sistema de control para una puerta de garaje. En nuestro sistema, tenemos un botón para abrir la puerta, otro para cerrarla y además un detector de presencia, que para no montar más lio de cables, sustituimos/simulamos con un tercer botón. Además, en la puerta hay conectados dos finales de carrera, para indicar si la puerta está cerrada o abierta completamente. Se usan, además, dos relés para abrir y cerrar, y unas cuántas resistencias para no quemar nada (y mira que nos gusta xD) Bueno, y por supuesto, la puerta del garaje, el motor, el piñon-cremallera.... también eran bastante necesarios jaja.
O sea:
- Una placa de pruebas de laboratorio.
- Una fuente de alimentación a 7,5 V. para alimentar el motor de la puerta de garaje.
- Dos relés de placa de circuito impreso de 5V.
- Una placa Arduino.
- Un cable USB para conectar y alimentar la placa Arduino a través del PC.
- Tres pulsadores.
- Cinco resistencias de 2K2 ohmios.
- Cables de conexión.
- Multímetro.
Este es el esquema de conexión de las entradas:
Y este es el esquema de conexión de las salidas:
Y aquí, podeis verlo todo montadito (slalvo la puerta con su motor y finales de carrera):
Y para acabar, este es el código. Tengo que decir que tardé exactamente 10 minutos en diseñarlo y escribirlo, más otros 5 de "solución de minibugs" xD Y además, se autoexplica a sí mismo:
//Entradas
int PulsadorVerde = 3;
int PulsadorRojo = 4;
int PulsadorPresencia = 5;
int FinCarrera_Abierto = 6;
int FinCarrera_Cerrado = 7;
//Salidas
int Rele_Abrir = 12;
int Rele_Cerrar = 13;
void setup (void) {
pinMode(PulsadorVerde, INPUT);
pinMode(PulsadorRojo, INPUT);
pinMode(PulsadorPresencia, INPUT);
pinMode(FinCarrera_Abierto, INPUT);
pinMode(FinCarrera_Cerrado, INPUT);
pinMode(Rele_Abrir, OUTPUT);
pinMode(Rele_Cerrar, OUTPUT);
}
void loop (void) {
if (digitalRead (PulsadorRojo) == HIGH) {
while ((digitalRead(PulsadorPresencia) == LOW) && (digitalRead(FinCarrera_Cerrado) == HIGH)&& (digitalRead (PulsadorVerde) == LOW)){
// Al pulsar el rojo, mientras no hay presencia, no se pulse el verde y no se ha cerrado
digitalWrite (Rele_Abrir, LOW);
delay (500);
digitalWrite (Rele_Cerrar, HIGH);
}
}
delay (100);
if (digitalRead (PulsadorVerde) == HIGH){
while ((digitalRead(FinCarrera_Abierto) == HIGH) && (digitalRead (PulsadorRojo) == LOW)){
//Al pulsar el verde,mientras no se pulse el rojo y no se haya abierto
digitalWrite (Rele_Cerrar , LOW);
delay (500);
digitalWrite (Rele_Abrir, HIGH);
}
}
//Estado de reposo , no hay nada pulsado, o hay presencia
digitalWrite (Rele_Abrir, LOW); //hay presencia, se corta la energía al motor
digitalWrite (Rele_Cerrar, LOW);
delay (100);
}
Sencillo, verdad? :)
El código se escribe en un software especial para esto, que se puede descargar desde la propia página de arduino y corre sobre Windows, Mac y Linux. Este software te informa de si tu código es o no correcto, te permite pasarlo a la placa, enviarle órdenes y seguro que hace más cosas. Para pasar el código a la placa, simplemente se instalan los drivers que van con el software, se conecta la placa por usb al pc, se elige el puerto correcto (en mi caso, el COM4) y le dices "alah, vuélcalo" . Y a correr!
Cosa graciosa: el programa "inicial - por defecto" que lleva la placa es simplemente apagar y encender el LED que lleva incorporado. Pero lo hace a una velocidad bastante graciosa y suena como cuando se cocinan palomitas xD
Como bonus-colofón final, el video del artilugio funcionando (Dirigido por Hector, filmado por Aitor, y las manos que aparecen son mías XD)
Seguro que me he dejado algo por explicar/contar/agujeros de conocimiento. Si se os ocurre algo, preguntad en los comments, que para eso están =^_^=
Actualizado: Nuevo video, made by Héctor:
7 comentarios
nbc -
jdm -
Mr. Ohm -
Muchas gracias por compartirlo
saludos
sonsomar -
Taxis -
Lord_Kote -
Y una pregunta:
Las resistencias para que sirven?
nunca las he entendido del todo :D
motagirl2 -
Haced clic directamente al enlace u_u