Reloxo de area dixital

Descrición

reloxoarea
[tecnoloxia.org CC By-SA]
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

  1. Modifica o programa anterior para que funcione con 8 LEDs
  2. Cando cambiamos a posición do sensor debe soar un ton agudo e curto “pi”
  3. Cando se apagaron todos os LEDs (transcorreu o tempo total establecido) debe soar outra melodía “pi-pi-pí”
  4. 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.
  5. 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

  1. 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)
  2. 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

  1. 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.
  2. 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:

 


Deixa un comentario