Tag

, , , , , , , , , ,

Buona Pasqua! In occasione delle feste, ho pensato di realizzare un piccolo progetto per controllare le tentazioni alimentari, dopo le abbuffate di questi ultimi giorni! Si tratta di un piccolo congegno che ci avverte quando viene sollevato il coperchio di una scatola di cioccolatini.

Costruiamo quindi il nostro allarme anti-golosi.

Necessario

Tutto quello che ci serve per il progetto sono un LED, un buzzer piezo, un tilt sensor e un paio di cavi e di resistenze. Una volta ultimato il progetto, vedremo poi come usare un microchip ATTiny85 per miniaturizzare il tutto.

Funzionamento

Il congegno è molto semplice: grazie a un piccolo tilt sensor, un dispositivo in grado di percepire un’inclinazione maggiore di 30°, potremo stabilire se il coperchio della nostra scatola di cioccolatini viene aperto, e in quel caso far suonare il piezo e accendere il led per scoraggiare eventuali intrusi!

Circuito

Lo schema del circuito è anche questo piuttosto semplice: il led è collegato a terra e ad un pin con una resistenza, il piezo è collegato a terra e a un pin, il tilt sensor invece ad un pin con una resistenza sul versante che va alla 5V, mentre l’altro capo va a terra. È più facile da guardare che da spiegare.

Arduino Candy Alarm Schema

Arduino Candy Alarm Schema

Sketch

Passiamo adesso al codice del nostro sketch. Abbiamo già visto come accendere un led, e come far suonare un piezo. Dobbiamo soltanto capire come utilizzare il tilt sensor e poi non ci resta che mettere insieme il tutto. Definiamo, per cominciare, ingressi e uscite.

int ledPin = 2;
int piezoPin = 9;
int tiltPin = 5;

void setup()
{
  // Definisco led e piezo come OUTPUT
  pinMode(ledPin, OUTPUT);
  pinMode(piezoPin, OUTPUT);
  // Definisco tilt-sensor come INPUT
  pinMode(tiltPin, INPUT);

  // Abilita la resistenza di pull-up interna, circa 20k Ohm 
  // In questo modo si evita la resistenza fisica da 10k Ohm
  // digitalWrite(tiltPin, HIGH);
}

Come vedremo nella seconda parte di questo studio, è possibile eliminare la resistenza da 10k Ohm collegata al tilt sensor – e quindi risparmiare spazio nel circuito – con una semplice riga di codice che abilita la resistenza pull-up interna sul pin del sensore. Per il momento, lasciamo il codice commentato.

LED

Vogliamo che una volta aperta la scatola, il nostro led lampeggi in maniera “aggressiva”. Mettiamo quindi un bel led rosso e facciamolo lampeggiare 3 o 4 volte.

digitalWrite(ledPin,HIGH);
delay(500);
digitalWrite(ledPin,LOW);
delay(500);

Piezo

Anche il suono del dispositivo deve “scoraggiare” gli eventuali intrusi! Facciamo suonare il piezo in maniera alternata, come se fosse una sirena.

tone(piezoPin,400);
delay(500);
tone(piezoPin,200);
delay(500);
noTone(piezoPin);

La funzione tone() permette di far suonare al piezo una semplice nota. Esiste anche una variante della funzione tone() che permette di specificare la durata della nota, ma per il nostro esempio non andrebbe bene, perché le note da suonare sono due. Perciò è più semplice far suonare la nota, e poi impostare la sua durata con un semplice delay(). La funzione noTone() è importante per evitare che il piezo continui a suonare all’infinito.

Tilt

Facciamo adesso qualche prova per verificare se l’inclinazione del sensore viene rilevata. Una volta sicuri che alzando il coperchio scatterà l’allarme, impostiamo il codice in modo che si attivi il led e che il piezo suoni.

// Leggo il valore del tilt sensor
int sensore = digitalRead(tiltPin);
// Quando in sensore viene inclinato
if ( sensore == HIGH )
{
  // Allarme!!
  allarme();
}

La funzione allarme() scatta quando viene sollevato il coperchio: attiva il led, emette un suono alto per mezzo secondo, poi spegne il led ed emette un suono basso per un altro mezzo secondo, poi ricomincia; il tutto per 3 volte.

void allarme()
{
  // Per 3 volte:
  // accendo e spengo il led
  // suono il piezo a sirena
  for ( int i=0; i<3; i++ )
  {
    // Accendo il led
    digitalWrite(ledPin,HIGH);
    // Suono "alto"
    tone(piezoPin,400);
    // Durata: mezzo secondo
    delay(500);
    // Spengo il led
    digitalWrite(ledPin,LOW);
    // Suono "basso"
    tone(piezoPin,200);
    // Durata: mezzo secondo
    delay(500);
    // Fermo il piezo, altrimenti il suono non si interrompe mai!
    noTone(piezoPin);
  } 
}

Conclusioni

Ecco realizzato il nostro congegno anti golosi! Posizionato sotto il coperchio di una scatola di cioccolatini, scoraggerà chiunque tenterà di aprirla. Nella seconda parte di questo studio vedremo come ottimizzare il codice ed il circuito, e come miniaturizzare il tutto per creare un dispositivo vero e funzionante.

Per adesso è tutto. A presto!

Download: candy_alarm.zip