Sistema di allarme con Arduino Uno

Ciao ragazzi, eccomi di nuovo qui per chiedervi una mano per il mio progetto :slight_smile:

Ho acquistato dei led infrarossi con rispettivo RX. Li vorrei posizionare ai lati di un quadro, in modo tale che, se il raggio viene "spezzato", si metta a suonare un buzzer piezo. Ovviamente dovrò collegare i led ai pin analogici di Arduino. Ma non ho idea di come scrivere lo sketch perché non ho mai dovuto trattare degli input fino ad ora.

Mi potete aiutare con una piccola bozza di codice ?

Grazie a tutti !

Ciao,
che LED ad infrarossi hai acquistato ? Semplice coppia LED emettitore e fotodiodo, o ... led emettitore e ricevitore IR a 38 KHz ???

Perché chiaramente cambia il programma :wink:

Guglielmo

Ciao Guglielmo,
sono alle prime armi con i componenti elettronici, e quando sono andata in negozio e ho chiesto dei led TX con rispettivi RX, mi hanno dato questi senza specificare nulla.

Però guardando sul sito internet del negozio, vedo che sotto il led nero c'è scritto "Fotodiodo LD271 TX Infrarosso". Può essere ? Mentre il led bianco che fa da RX dovrebbe essere un "Fototransistor RX".

Comunque posto la fotografia :wink:

Ok, si, quella è una semplice coppia con un diodo LED che emette infrarossi ed un fotodiodo ...
... se avessi la sigla del fotodiodo sarebbe meglio (magari sulla fattura l'hanno specificata), perché si potrebbero vedere esattamente le caratteristiche (quando compri qualche cosa, prendi sempre le sigle e scaricati sempre i datasheet che sono fondamentali per capire come funziona il componente). Ad esempio, quello del LD271 lo trovi QUI.

Mentre cerchi la sigla del RX vediamo la costruzione della barriera ...
... se ben ricordo stai costruendo un "modellino" ... quindi ... quanti cm deve coprire la barriera ???
In ogni caso, dovrai racchiudere sia il TX che l'RX in due tubetti neri che allineerai uno di fronte all'altro creando una piccola barriera infrarossa.

Essendo un semplice modellino, il TX lo puoi lasciare sempre accesso e non controllarlo da Arduino, quindi ... alimentatore, resistenza per limitare la corrente e LED.

Lato RX, dovrai fare un piccolo circuito per per discriminare il segnale che manderai poi su uno dei pin di Arduino. Definirai tale pin come pin di INPUT tramite la funzione pinMod(), dopo di che potrai leggere il segnale con una digitalRead().

Comunque, per prima cosa, recupera le info sul ricevitore e vedi che circuitino di condizionamento occorre fare :wink:

Guglielmo

Ciao Guglielmo, credo che l'RX sia questo:
FOTOTRANSISTOR RX L51P3C/L53P3C 940 nm
T-1 3/4 (5mm) PHOTOTRANSISTOR
L-51P3C WATER CLEAR LENS

ELECTRICAL AND RADIAL CHARACTERISTICS Ta=25°C

  • Collector-to-Emitter Breakdown Voltage 30V Max Rating
  • Emitter-to-Collector Breakdown Voltage 5V Max Rating

Può essere ?

Ti allego il circuito che ho fatto e lo sketch.
Credo che il problema sia l'RX, perché se tolgo il cavetto dall'anodo e lo stringo tra le dita, il buzzer inizia a suonare e il led rosso si accende. Invece così come lo vedi nel circuito, non succede nulla.
Io però il TX e l'RX li ho trattati come dei normali led, magari va fatto un circuito completamente diverso :roll_eyes:

const int buzzer= 3;
const int rx = A1;
const int ledrosso = 4;

void setup()
{
  pinMode (rx,INPUT);
  pinMode (buzzer,OUTPUT);
  pinMode (ledrosso,OUTPUT);
}

void loop()
{
   noTone(buzzer);
  digitalWrite(ledrosso,LOW);

   while (analogRead(rx) >200)
  {
    tone(buzzer,10);
    digitalWrite(ledrosso,HIGH);
  }
}

Ciao Velenia,
allora, premesso che odio Fritzing e da quell'immagine ho difficoltà a capire i valori delle resistenze che hai usato (... per inciso, piccolo consiglio, fai uno sforzo ed impara ad usare Eagle ... ce ne è una versione che è gratuita, scaricala :wink: ), comunque ...

... dal datasheet del LD271 (il TX) vedi che ha una "Forward current" fino a 130 mA ... quindi, ben oltre un normale LED e ben di più di quanto ti potrebbe dare Arduino quindi ... pur tenendosi per precauzione distanti da detto valore, e scegliendo un 65% ... occorrono comunque un 85 mA per avere un emissione sufficiente. Dovrai quindi con Arduino pilotare un transistor e con il transistor accendere il LED ... eventualmente guarda la scheda numero 2 o la 3 di pighixxx (scaricale da QUI) per vedere come fare :wink:

... se il ricevitore è L51P3C e questo è il suo datasheet, vedi che si tratta di un fototransistor NPN ... facendo qualche piccola ricerca su Google Images per "phototransistor circuit arduino" ... ti vengono fuori un po' di schemi di esempio ... in cui la resistenza da mettere in serie, si attesta attorno ai 10 KOhm :wink: Occhio a rispettare anche la polarità delle giunzioni ...

Prova a vedere i due datasheet per sapere esattamente il collegamento e le varie caratteristiche e prova a rifare il circuito con i suddetti suggerimenti ... dopo di che ... facci sapere :slight_smile:

Guglielmo

P.S. : Se fai bene il circuito vedrai che non ti servirà una analogRead(), ma con una semplice digitalRead() riuscirai a discriminare sia il fototransistor illuminato che oscurato :wink:

Può essere ?

Forse, facciamo finta che sia proprio quello.

Il collettore (c) è il terminale in corrispondenza della rastremazione nel corpo del led, inoltre è il più corto dei due.
L'emettitore (e) ovviamente è l'altro (quello che non è il collettore :P).

Solitamente il transistor ha anche un terminale detto Base (b), in questo foto transistor la base
è al centro della lente la quale si polarizza se riceve fotoni alla lunghezza d'onda di 970nm
(siamo nel campo degli infrarossi IR).

Il collegamento che hai fatto per il fototr è sbagliato, devi connetterlo come connetteresti
un normale transistor, quindi (c) connesso alla R (R=resistenza) l'altro capo a +5V.
L'emettitore lo colleghi direttamente a GND.

Il segnale lo devi prelevare dal nodo (c) con R. A questo nodo in condizioni di riposo misuri circa +5V, che entrano in un pin di arduino, quando il fototr riceve IR la base si polarizza è assorbe corrente dal collettore, il risultato è che adesso misuri una tensione prossima a GND.

Nel codice tu ha scelto di ricavare informazioni analogiche, ma penso dovresti riuscire ad usare digitalRead che restituisce LOW quando il fototr riceve IR, HIGH quando interrompi il fascio di IR.

gpb01 mi ha anticipato, ho letto il suo messaggio è concordo con quanto scrive.

Ciao.

Ho scaricato Eagle, ma è un po' difficile da usare, ci sto ancora prendendo la mano :roll_eyes:
Perdonatemi se riposto un'immagine creata in fritzing.

Ho messo i led sull'altra parte della breadboard solo perché se li avessi messi giusti, avrebbero nascosto resistenze e cavi.

Ho trattato il mio TX come un normale LED.
Per quanto riguarda l'RX, sul collettore ho messo una resistenza da 10K ohm e l'ho collegata a VCC. Tra il collettore e la resistenza ho messo un cavetto collegato al pin analogico A1 (sto usando quelli analogici perché quelli digitali mi servono per il resto del progetto.). L'emettitore è collegato a massa.

Sono passata dal negozio di elettronica dove ho acquistato i componenti e loro mi hanno detto che il collegamento è giusto e per quello che devo fare non mi serve nient'altro.

La cosa interessante è questa: funziona ma....se tolgo il TX funziona lo stesso. Com'è possibile ? Se passo qualcosa davanti all'RX il led rosso si accende e il buzzer inizia a suonare, proprio come vorrei... :fearful:

Aspetta un attimo, io non ho mai fatto esperienza con questi TX, RX, da quello che so la lente è posizionata dalla parte opposta ai pin, cioè guardi il led (TX o RX) in modo che alla vista i pin siano nascosti dal corpo.

Quindi secondo questo ragionamento per massimizzare la ricezione il TX deve essere messo di fronte al RX
TX RX
---- -> ----
-----| -> |-----

Per cui conviene saldargli dei fili di colore diverso ai led, es:
per RX c (rosso), e (nero)
Per TX A (rosso), e K (nero)

Nel immagine presumo che il pin piegato del TX è il pin più lungo, quindi è Anodo, che è connesso tramite R a GND, e non va bene ANODO deve essere connesso a V+ tramite R, per l'occasione visto che non importa dove metti la R gira semplicemente il LED TX. Per vedere se il TX si illumina prendi il tuo smartphon e inquadra il led, la fotocamera del cellulare è sensibile anche a IR, (se non hai lo smartphon, scendi per strada e di: hei chi mi presta uno smartphon; :D.

Fatto questo andiamo al codice.
A0 fino A?, sono sia analogici che digitali. Nel codice che hai scritto c'è:

pinMode (rx,INPUT);

Il quale imposta il pin rx come ingresso digitale.
Poi però nel codice pretendi di leggere da questo pin un valore analogico usando:

while (analogRead(rx) >200)

Ma il pin è impostato come ingresso digitale e quindi lo devi leggere con digitalRead(rx).

http://www.radio.walkingitaly.com/radio/radiosito/tutorial/diodi/d_led/d_led.htm

Ciao.

Velenia:
La cosa interessante è questa: funziona ma....se tolgo il TX funziona lo stesso. Com'è possibile ? Se passo qualcosa davanti all'RX il led rosso si accende e il buzzer inizia a suonare, proprio come vorrei... :fearful:

Per quello ti dicevo che vanno chiusi in tubetti neri profondi alcuni cm ... per proteggerli dalla luce esterna ...

Il tuo RX sta leggendo la "luce ambiente" e non quella proiettata dal TX ... XD XD XD

Guglielmo

@gpb01
Allora forse non è il foto transistor che si pensava fosse (L53P3C), perché è sensibile 940nm e siamo molto distanti
dalla luce visibile, ameno ché non sia Velenia ad emettere IR, o cavolo è aliena per davvero. :smiley:

Ciao.

MauroTec:
@gpb01
Allora forse non è il foto transistor che si pensava fosse (L53P3C), perché è sensibile 940nm e siamo molto distanti
dalla luce visibile ....

Vero ... ma se staccando il TX comunque funziona ... o lo fa per Grazia Divina (... e non credo ]:smiley:) o lo fa perché reagisce alla luce ambiente ... :roll_eyes:

Guglielmo

Edit : Inoltre lei fa una lettura analogica ... probabilmente, anche se poco, è comunque sensibile alla luce ambiente e il valore analogico scelto fa scattare il sistema :wink: