Reto:
Trátase de programar a apertura e peche da porta dun garaxe. Este mesmo sistema podes utilizalo para programar unha ponte levadiza, o movemento dunha barreira ou un ascensor de dous pisos, pois estes proxectos prográmanse do mesmo xeito, con lixeiras modificacións.
- Ao premer o pulsador 1 o motor xira nun sentido, abrindo a porta, ata que acciona o final de carreira FC1, entón para.
- Ao premer no pulsador 2 o motor xira no sentido contrario, cerrando a porta, ata que acciona o final de carreira FC2, entón para.
Se o prefires, podes facer que a porta cerre automaticamente despois dun tempo, eliminando o pulsador 2.
Nesta simulación de Scratch podes ver o que se pretende:
Montaxe:
Compoñentes:
- Arduíno, protoboard, cables
- Motor de corrente continua (~ 5V) e controlador H-Bridge L293D
- 2 pulsadores + 2 resistencias de 10kΩ
- 2 microinterruptores + 2 resistencias de 10kΩ
Para ir realizando probas do programa monta nunha protoboard un controlador de motores, dous pulsadores coas súas resistencias de 10kΩ, e dous micro-interruptores final de carreira tamén con resistencias de protección de 10kΩ. Os microinterruptores finais de carreira actuarían tamén como pulsadores conectando a pata común (COM) e a normalmente aberta (NA) e deixando a NC libre.
Cando o programa funcione realiza as conexións sobre a porta de garaxe, substituíndo os compoñentes. Pode ser que necesites cambiar o sentido de xiro do motor. Conecta ademais outros dous pulsadores doutro lado da porta en paralelo cos anteriores, para que se poda abrir e cerrar a porta desde dentro e desde fóra.
Pins Arduíno:
Controlador de motor | Pulsadores | Finais de carreira | LEDs | |||
EnablePin E1:10 | abrir: 2 | Porta aberta FC1: 4 | vermello:13 | |||
ControlPin1 I1:9 | cerrar: 3 | Porta cerrada: FC2: 5 | verde:12 | |||
ControlPin2 I2:6 |
Programa:
- Ver diagrama de fluxo.
- Utiliza un controlador de motores para programar o movemento e parada do motor de corrente continua.
- Fai a montaxe e programa as funcións “esquerda()”, “dereita()” e “parada()” para despois chamalas no programa cando se precisen. Por exemplo:
// Antes do loop(): Declaración da función xirar á esquerda: void esquerda() { digitalWrite(E1, HIGH); // Activamos Motor1 digitalWrite(I1, HIGH); // Xira cara á esquerda digitalWrite(I2, LOW); } // Dentro do loop(): chamada a executarse a función de xirar á esquerda: esquerda();
- Utiliza un condicional para detectar a activación de cada pulsador:
if (digitalRead(pulsadorAbrir)==1) { proceso abrir porta }
- Utiliza a función while (repetir mentres) para mover o motor mentres non se active o interruptor final de carreira.
while (digitalRead(fc1)==0){ proceso do motor }
Propostas de mellora:
- Semáforo: Engade ao programa anterior un semáforo con dous LEDs: Estará activo o verde cando a porta estea aberta e parada. No caso contrario estará activo o vermello.
- Inicio: Engade un programa no inicio que detecte se a porta está aberta cando conectamos o Arduíno e, nese caso, péchase. Despois o programa debe funcionar normalmente.
- Peche automático: Se despois dun tempo determinado ninguén ordenou cerrar a porta, cerrará de forma automática. (Olla antes a páxina Medindo o tempo)
- Célula fotoeléctrica: Instala aos lados da porta unha LDR e un LED láser apuntando cara a ela. Engade ao programa o necesario para que, se se interrompe o sinal cando a porta se está a pechar, o motor debe cambiar o sentido e abrirse ata que a LDR volva recibir o sinal, volvendo a iniciar entón o peche da porta.
- Mando IR: No canto de usar pulsadores utiliza un mando e un receptor IR para iniciar a apertura e peche da porta.
Mostra:
Neste caso utilizamos unha porta de garaxe feita hai anos por alumnado da ESO e controlada mediante relés. Adaptouse o circuíto para controlala con Arduíno. Os acabados son algo chafalleiros, pero para traballar o control con Arduíno valeunos ben. Con esas tremendas escuadras a porta resiste terremotos!
Velaquí un vídeo da porta funcionando: