In questo articolo vedremo come è possibile realizzare una barriera laser da utilizzare successivamente con Arduino.
Le applicazioni di una barriera luminosa (a laser o a infrarosso) sono moltissime, soprattutto ogni volta che vogliamo che un determinato evento si attivi al passaggio di una persona o un oggetto attraverso una soglia. Questo evento potrebbe essere per esempio un conteggio se si desidera contare il numero di oggetti che attraversa una determinata soglia (per esempio su un nastro trasportatore); potrebbe essere lo scatto di una foto all’attraversamento da parte di un animale per la caccia fotografica. Un altro esempio è l’attivazione di un allarme per proteggere una determinata area in cui si vuole controllare l’accesso. Se si dispongono poi più barriere laser allora le applicazioni crescono, per esempio misurare il tempo impiegato nell’attraversare lo spazio che intercorre tra due diverse barriere.
Navigando un po’ nella rete per cercare un punto di partenza su cui lavorare, ho trovato un articolo di M.Ribble sul sito www.glacialwanderer.com/hobbyrobotics che utilizzava una barriera laser per la caccia fotografica: quando un animale attraversa la barriera laser la macchina fotografica collegata ad un trigger scatta la foto.
Dato che le mie esigenze erano diverse e soprattutto volevo fare in modo che l’applicabilità di quello che stavo facendo fosse la più generale possibile ho apportato alcune modifiche. Infatti avevo bisogno che sia l’emettitore (laser LED) che il ricevitore (fotoresistenza) avessero i loro circuiti separati montati su moduli diversi, in modo da collegarli su Arduino (o anche altre schede) separatamente. Avendo così dei moduli separati e indipendenti si ha la possibiltà di utilizzarli in moltissime applicazioni, montandoli in linea su diverse infrastutture ogni volta a seconda delle esigenze.
Ecco lo schema dei due moduli:
Per prima cosa vediamo tutto l’occorrente riportato in Fig.2
- A) una basetta millefori
- B) una fotoresistenza
- C) Led laser rosso
- D) morsetto per circuito stampato a 2 vie
- E) resistenza da 100Ω
- F) resistenza da 10kΩ
- G) resistenza da 220Ω
- H) strip di connettori maschio angolati
- I) un cavetto conduttore
Mentre tutto il resto è materiale generico acquistabile in qualsiasi negozio di componenti elettronici, per quanto riguarda il laser, ho trovato sul sito della Sparkfun questo prodotto:
Laser card Module – Red ( Sparkfun COM-00594 )
Produttore: Wenta Electronics co., LTD, China
Wavelength: 650nm (645-660nm)
Output power: 0.45 to 0.80mW
Input power source: 3.1V+/-10%
Consumption current: 35mA (max 40mA)
Laser spot: circle
Laser life: 3000 hours
In Figura 3 c’è il circuito recettore che ho realizzato con la fotoresistenza ripiegata per affacciarsi lungo il bordo esterno opposto ai tre pin.
Mentre in Fig.4 abbiamo il circuito emettitore con il morsetto sul lato opposto ai 2 pin. Il laser LED può essere così rimosso o sostituito dal circuito.
Adesso che abbiamo realizzato i due moduli, possiamo collegarli ad Arduino.
Ecco la configurazione dei collegamenti sulla scheda Arduino UNO che ho utilizzato e che si riferiscono al il codice dell’esempio:
- PIN D5 —-> emettitore laser
- PIN A0 —-> segnale dal recettore
- 5VDC —-> alimentazione recettore
- GND —> massa per emettitore e recettore
Ed ecco il codice per il trigger che si attiva quando il fascio laser viene interrotto tra l’emettitore e il recettore.
#define LASER_PIN 5 #define LASER_THRESHOLD 600 #define LASER_TRIGGER_ANALOG_PIN 0 int laserVal; void setup() { pinMode(LASER_PIN,OUTPUT); digitalWrite(LASER_PIN,LOW); digitalWrite(LASER_PIN,HIGH); //turn on the laser Serial.begin(9600); } void loop() { laserVal = analogRead(LASER_TRIGGER_ANALOG_PIN); delay(1000); //Serial.println(laserVal); if(laserVal < LASER_THRESHOLD) { digitalWrite(LASER_PIN,LOW); //turn off the laser //Scrivi qui il codice che viene eseguito quando il fascio viene interrotto delay(100); digitalWrite(LASER_PIN,HIGH); //turn on the laser } }
Una volta compilato il codice e caricato su Arduino, sarà necessario regolare il valore di soglia (threshold) più adatto al caso su cui stiamo lavorando. Per partire ho impostato un valore medio di 600. Il recettore segnala alla scheda Arduino continuamente un valore (laserVal) che è proporzionale al livello di luminosità a cui è sottoposto la fotoresistenza. Maggiore sarà il valore, maggiore sarà la luminosità percepita dal sensore. Quindi finchè Arduino riceverà dal sensore valori di laserVal superiori al valore di soglia, la barriera luminosa verrà considerata come non interrotta. Nel preciso istante in cui si dovesse registrare un valore inferiore al valore specificato in LASER_THRESHOLD, la condizione if all’interno della funzione loop() verrà soddisfatta e il codice al suo interno eseguito. Il laser verrà momentaneamente disattivato (100 millisecondi) e poi riattivato. Infatti l’alimentazione del laser proviene dal PIN 5 della scheda e non dal pin di alimentazione 5VDC, questa scelta di proposito ci permette di avere un controllo sul laser in modo da poter decidere quando debba essere acceso o spento.