Descrición
Trátase de facer un reloxo de area dixital. Mediante un sensor de inclinación detectamos o momento no que o reloxo cambia de posición. Nese intre acéndense todos os LEDs, soa un chío e, segundo o intervalo de tempo establecido, os LEDs comezan a apagarse un a un. Cando están todos apagados soa unha alarma que indica que xa finalizou o tempo.
Cada vez que o sensor cambia de sentido comeza de novo a conta, aínda que non completase o ciclo anterior.
Prácticas
Antes de facer este proxecto debes repasar estas prácticas:
- Sensor de inclinación: É o sensor que imos usar para detectar a posición do reloxo.
- Xogos de luces: Inicialmente están todos os LEds acesos e deberán ir apagándose un a un.
- Array de LEDs e funcións: Utiliza un array para definir os pins dos LEDs e crea funcións para os distintos sons.
- Melodía: para facer as funcións de son.
- Medindo o tempo: Non imos utilizar delays. O tempo medirémolo mediante a función millis().
Montaxe
Nunha placa de prototipos pequena conecta:
- 8 LEDs coas súas resistencias de protección (Por exemplo 220Ω) nos pins do 6 ao 13.
- Un sensor tilt conectado no pin 2, tal e como vén na práctica. Usa o que teñas dispoñible (sensor discreto ou módulo)
- Un zumbador ao pin 4.
Programa básico
Este é o programa básico de funcionamento, sobre o que terás que facer unha serie de melloras que se indican despois. Está feito para 6 LEDs.
Para facer probas marcamos un tempo de 1 segundo (1000 ms) entre un LED e outro, durando en total o reloxo 6 segundos. Deberás modificar este valor para que o teu reloxo de 8 LEDs tarde 1 minuto en cada ciclo.
// Declaración de variables e constantes: int sensor = 2; // Pin ao que conectamos o sensor tilt int leds[6]={8,9,10,11,12,13}; // Array cos 6 pins nos que van conectados os LEDs int posicion=0; // variable para indicar o led que debe acenderse. Empeza polo 0 int estadoActual; // Estado do sensor int estadoPrevio=0; long tempoActual; // A medida do tempo cando a miramos long tempoAnterior; // A última vez que se reiniciou ou se apagou un led long intervalo = 1000; // tempo entre o acendido dos leds en ms // Configuración: void setup(){ for(int i=0; i<6; i++){ // Configuramos os leds como saída pinMode(leds[i], OUTPUT); } } // Programa: void loop(){ tempoActual= millis(); // tempo transcorrido desde que se acendeu a placa // Programa para ver o estado do sensor e reiniciar se cambiou estadoActual = digitalRead(sensor); // Miramos o estado do sensor if (estadoActual != estadoPrevio){ // se houbo un cambio for(int i=0; i<6; i++){ // Acendemos todos os LEDs digitalWrite(leds[i], HIGH); } posicion=0; // marcamos o LED que debe apagarse primeiro tempoAnterior=tempoActual; // Marcamos o tempo do cambio estadoPrevio=estadoActual; // Marcamos o estado } // programa para ir apagando os LEDs if ((tempoActual-tempoAnterior)> intervalo){ // Se transcorreu o tempo marcado no intervalo tempoAnterior=tempoActual; // Marcamos o tempo do cambio digitalWrite(leds[posicion], LOW); // apagamos o led que corresponda (de 0 a 5) if(posicion<6){ posicion++; } } }
Melloras do programa
- Modifica o programa anterior para que funcione con 8 LEDs
- Cando cambiamos a posición do sensor debe soar un ton agudo e curto “pi”
- Cando se apagaron todos os LEDs (transcorreu o tempo total establecido) debe soar outra melodía “pi-pi-pí”
- Cando o sensor está cara arriba os LEDs se irán apagando nun sentido, e se o sensor está cara abaixo apagaranse en sentido contrario.
- Poderían engadirse uns pulsadores que permitan seleccionar o tempo que queremos para o reloxo. Cada vez que prememos neles comezará o ciclo co tempo seleccionado.
Outras opcións
- Dous sectores: Podemos dividir o reloxo en dous sectores, cada un deles con 4 LEDs. No inicio os 4 LEDs da parte superior estarán acesos, e a medida que pasa o tempo vanse apagando os da parte superior e acendendo os da inferior. (4-0, 3-1, 2-2, 1-3, 0-4)
- Con matriz de LEDs: Se vos animades, isto mesmo podería facerse substituíndo os LEDs por unha matriz de LEDs 8×8. Aforraredes cableado. Fai as prácticas da matriz e intenta facer este proxecto con ela.
Construción
- Fai a montaxe completa nunha caixa (de cartón ou impresa en 3D) na que incorpores os LEDs (ou a matriz), zumbador, sensor, resistencias, Arduíno Nano e pila. Solda os compoñentes nunha placa perforada e suxeita ben todo dentro da caixa.
- Se non dispós de Arduíno Nano, saca unha mangueira de cables cara fóra para poder conectalos a unha placa externa. Engade etiquetas de identificación para cada cable.
Mostra
Non fai falta que vos saia un reloxo coma este, pero vale como exemplo do que se pode chegar a facer: