Salve
spero che la citazione del titolo vi sia gradita, se altrimenti non avete la minima idea da dove venga vi dico subito che vi siete persi un bel film (e penso a questo punto anche un bel libro).
In questo articolo illustrerò un mio nuovo progetto realizzato da me per studiare il funzionamento di alcuni componenti: una barriera all’infrarosso con allarme.
I componenti in questione, sono il TEFT4300, un fototransistor, e il TSUS4300, un diodo agli infrarossi, che messi insieme formano un sensore che rileva il passaggio di un oggetto attraverso una linea aerea, tipo antifurto.
Il diodo agli infrarossi è un componente abbastanza semplice, in quanto emette luce agli infrarossi, e il fototransistor si comporta come un interruttore che si chiude quando viene investito dalla luce infrarossa, quindi, fintanto che non ci sono ostacoli tra emettitore e sensore, il circuito collegato al secondo rimane attivo.
Una cosa che ho notato quando facevo le prime prove è stata la sensibilità del fototransistor alla luce ambientale, che faceva falsare i valori di lettura di tensione, impedendo di generare un segnale basso effettivo. Per far si che al sensore arrivasse solo la luce del led l’ho dovuto “schermare” in qualche modo, e sapete cosa ho usato? Un tappino bucato di una BIC, di quelli che si trovano in fondo ad una penna. Il risultato? Perfetto, scherma magnificamente e soprattutto sembrava fatto apposta (bisogna arrangiarsi sempre con quello che si ha!).
A questo punto vi mostro lo schema che ho realizzato:
Dico subito che ne il sensore ne l’emettitore hanno l’aspetto illustrato, ma non avendo di meglio ho usato quei componenti nello schema. Per quanto riguarda il principio di base di questo progetto, il concetto è semplice: quando passa qualcosa che interrompe il fascio IR (InfraRosso, per abbreviare) parte un suono di allarme bitonale e finchè non si preme il tasto di reset il buzzer continua a suonare, proprio come un sensore d’antifurto semplice.
Altrettanto semplice è il codice che fa funzionare tutto, ma volevo sperimentare in questa occasione l’uso di funzioni esterne al ciclo loop principale, giusto per complicarsi la vita:
//Creo una serie di variabili da impiegare
//nel programma
int lettura = 0;
int buzzer = 9;
int pulsante = 2;
int led = 13;
boolean allarme = false;
//Inizializzo i pin d'ingresso e d'uscita
void setup() {
pinMode(buzzer, OUTPUT);
pinMode(led, OUTPUT);
pinMode(pulsante, INPUT);
}
//Creo due funzioni per avviare il suono
//del buzzer e per interromperlo
void inizioallarme(){
tone(buzzer,2000);
delay(500);
tone(buzzer,1000);
delay(490);
}
void stopallarme(){
noTone(buzzer);
}
//Programma di base
void loop() {
//Leggo il valore di tensione derivante dal fototransistor
//tramite un ingresso analogico
if (analogRead(lettura) < 100){
allarme = true;
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
//Se il fascio è stato interrotto l'allarme viene attivato
if (allarme == true){
inizioallarme();
} else {
stopallarme();
}
//Interrempo l'allarme dopo la pressione del pulsante
if (digitalRead(pulsante) == HIGH){
allarme = false;
}
delay(10);
}
Vi lascio anche una foto del mio lavoro (dovre potrete vedere i 2 componenti principali e il famoso tappino impiegato) e anche i due datasheet.
Buon lavoro a tutti e spero di essere stato di qualche utilità!
Datasheet:



ma funziona o vi sono errori nel programma?
Non ci sono errori…è l’ultima versione che avevo caricato sul mio arduino!
Scusami, sono io che sono un’incapace…avevo cancellato una riga nel copiarlo in arduino. Detto questo e visto che avrai certamente capito che in elettronica sono una volpe oserei chiederti un favore: è possibile collegare al posto dello speaker un relè per far passare un 12V e fare in modo che si autoresetti eliminando il pulsante? mi basterebbe solo eccitare il relè per poi utilizzarlo in NC o in NA. Mi sto avvicinando da poco ad arduino e per ora riesco solo a copiare quello che trovo, non sarei in grado di andare oltre, ovviamente pagherei anche il disturbo se tu potessi indicarmi in modo semplice (per babbi) come procedere. Complimenti per il sito e anticipatamente ringrazio
Ti ho risposto sul mio sito….spero di essere stato chiaro a sufficienta!
Per autoresettare l’allarme potresti semplicemente immettere un contatore interno al programma invece di aspettare che venga premuto un tasto. Il relè è comodo per pilotare un circuito con un’alimentazione esterna e disaccoppiare due blocchi. Se volessi usare un relè per forza dovrebbe essere con chiusura ritardata perchè appena passa qualcosa lui resetta immediatamente. Appena possibile magari posto il programma con l’autoreset (e ti indico le variabili dove intervenire!)
Ecco qui:
//Creo una serie di variabili da impiegare //nel programma int lettura = 0; int buzzer = 9; int pulsante = 2; int led = 13; boolean allarme = false; int contatore = 0; int interruzione = 5; //Inizializzo i pin d'ingresso e d'uscita void setup() { pinMode(buzzer, OUTPUT); pinMode(led, OUTPUT); pinMode(pulsante, INPUT); } //Creo due funzioni per avviare il suono //del buzzer e per interromperlo void inizioallarme(){ tone(buzzer,2000); delay(500); tone(buzzer,1000); delay(490); } void stopallarme(){ noTone(buzzer); } //Programma di base void loop() { //Leggo il valore di tensione derivante dal fototransistor //tramite un ingresso analogico if (analogRead(lettura) < 100){ allarme = true; digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } //Se il fascio è stato interrotto l'allarme viene attivato if (allarme == true){ inizioallarme(); contatore++; } else { stopallarme(); contatore = 0; } //Interrompo l'allarme dopo un certo numero di secondi //(settare "interruzione" pari al numero di secondi //esempio: 5 secondi al reset => //interruzione = 5 da settare in cima al programma!) if (contatore == interruzione); { allarme = false; } //Interrempo l'allarme dopo la pressione del pulsante if (digitalRead(pulsante) == HIGH){ allarme = false; } delay(10); }Sempre gentilissimo!!! attendo il programma con l’autoreset (ovviamente quando avrai tempo).
Giusto per commentare: penso che questo sia il modo migliore per avvicinarsi a questa “tecnologia”, io mi sarei aspettato una modifica con componenti, invece… così si ragiona e si impara (parlo per me) GRAZIE
Se butti un occhio al commento sopra troverai il programma modificato! Fammi sapere se funziona!
Carissimo, funziona alla perfezione, ma come collego il relè? Io dovrei aprire/chiudere un contatto per collegarlo ad un allarme…come fosse un contatto magnetico, quelli posti sopra le porte.
Se chiedo troppo fammi un cenno, non voglio “grattare troppo la botte”. Grazie, sempre molto gentile.
Finchè non mi chiedi di venire in casa tua a montarlo va benissimo! 🙂
La modifica è semplice, alla fine dovrai solo mandare alta un’uscita invece che controllare il cicalino. Il problema di fondo è la tensione di eccitazione del relay (ho appreso da poco che si dice così, relé è un’italianizzazione), che deve essere di 5V. Appena possibile ti riposto schema e programma modificato!
Ciao, no…non pretendo tanto, ma come ti dicevo mi sono avvicinato da poco ad arduino ed ho sempre visto progetti con relè “accompagnati” da transitor ecc., ora sento che basta aumentare la tensione in uscita dove è collegato il cicalino… questo stravolge tutto il “mio sapere”. Io faccio il fotografo e grafico pubblicitario di mestiere e tutto il resto è puro hobby,.. appena trovo gente che è disposta ad insegnare chiedo lumi (se vuoi in cambio ti insegno il mio mestiere) sai non tutti sono disponibili, se entri in un forum (già fatto) ti tirano scemo. Nei forum di fotografia cerco di fare come fai tu. Sei in ogni caso gentilissimo e non vorrei rompere più di tanto. Ciao
Scusa per il ritardo di questa risposta, ma ho avuto un pò di carenze di tempo….
Ho cercato un pò in giro sulla rete e di relay con bassa tensione di funzionamento ce ne sono (http://www.radiolocman.com/datasheet/data.html?di=75960), ma il problema è la corrente assorbita, che va oltre quella che l’arduino può fornire. Lo schema con un MOSFET in cascata risulta essere la soluzione migliore e lo schema è il solito che io ho proposto per il controllo del motore (https://elettronicopercaso.wordpress.com/2012/10/13/bisogna-muoverci/), soltanto che al posto del motore ci devi mettere la bobina del relay. Ovviamente il programma deve mandare in uscita un segnale alto per chiudere il MOSFET che a sua volta deve chiudere il relay!
A quel punto lo usi come un interruttore….non so se sono stato di qualche utilità, magari a breve posto la modifica al programma anche per questo caso!