Conectarea fotocelulei la arduino. Conectarea unui fotorezistor la un arduino și lucrul cu un senzor de lumină

Fotorezistoarele vă oferă posibilitatea de a determina intensitatea luminii.

Sunt mici, ieftine, necesită puțină energie, sunt ușor de utilizat și sunt practic indestructibile.

Din această cauză sunt adesea folosite în jucării, gadgeturi și gadgeturi. Desigur, proiectele DIY bazate pe Arduino nu au putut ignora acești senzori minunați.

Fotorezistenții sunt în esență rezistențe care își schimbă rezistența (măsurată în ohmi) în funcție de cât de multă lumină atinge elementele lor de detectare. După cum sa menționat mai sus, acestea sunt foarte ieftine, au dimensiuni și specificații diferite, dar majoritatea nu sunt foarte exacte. Fiecare fotorezistor se comportă ușor diferit de celălalt, chiar dacă provine din același lot de la producător. Diferențele în citiri pot fi de până la 50% sau mai mult! Deci nu ar trebui să vă bazați pe măsurători de precizie. Acestea sunt utilizate în principal pentru a determina nivelul general de iluminare în condiții specifice, „locale”, mai degrabă decât „absolute”.

Fotorezistenții sunt o alegere excelentă pentru rezolvarea problemelor precum "este întuneric sau lumină în jur", "există ceva în fața senzorului (care limitează fluxul de lumină)", "care zonă are nivelul maxim de iluminare".


Caracteristicile tehnice medii ale fotorezistoarelor

Specificațiile de mai jos sunt pentru fotorezistoarele din magazinul Adafruit. Acești fotorezistenți au caracteristici similare cu PDV-P8001. Aproape toți fotorezistenții au caracteristici tehnice diferite, deși funcționează foarte similar. Dacă vânzătorul vă oferă un link către foaia tehnică a fotorezistorului, verificați-le și nu ceea ce este menționat mai jos.

  • Dimensiune: rotundă, cu diametrul de 5 mm (0,2 ") (alte rezistențe fotorezistente pot avea un diametru de până la 12 mm / 0,4"!).
  • Preț: aproximativ 1,00 USD la magazinul Adafruit.
  • Gama de rezistență: 200 kΩ (întunecat) până la 10 kΩ (luminos).
  • Gama de sensibilitate: Senzorii captează lungimi de undă de la 400 nm (violet) la 600 nm (portocaliu).
  • Alimentare: oricare cu o tensiune de până la 100 V, utilizați un curent mediu de aproximativ 1 mA (în funcție de tensiunea de alimentare).

Probleme la utilizarea mai multor senzori

Dacă, atunci când adăugați senzori suplimentari, se dovedește că temperatura este inconsistentă, aceasta înseamnă că senzorii se suprapun unul pe celălalt atunci când citesc informații de la diferiți pini analogici. Acest lucru poate fi remediat prin adăugarea a două citiri cu întârzieri și afișarea primei.

Măsurarea nivelului de lumină

După cum am spus mai devreme, rezistența fotorezistorului se schimbă în funcție de nivelul de iluminare. Când este întuneric, rezistența rezistorului crește la 10 megahmi. Pe măsură ce nivelul luminii crește, rezistența scade. Graficul de mai jos prezintă rezistența aproximativă a senzorului în diferite condiții de iluminare. Nu uitați că caracteristicile fiecărui fotorezistor diferă ușor, aceste caracteristici reflectând doar tendința generală.


Vă rugăm să rețineți că caracteristica este neliniară și are un caracter logaritmic.

Fotorezistenții nu percep întreaga gamă de unde de lumină. În majoritatea versiunilor, acestea sunt sensibile la undele de lumină cuprinse între 700 nm (roșu) și 500 nm (verde).


Adică, o indicație a unei game de lungimi de undă ușoare care corespunde albastru nu va fi la fel de eficientă ca o indicație a unei game verde / galben!

Care este unitatea de măsură „lux”?

Majoritatea fișelor tehnice folosesc lux (lux) pentru a indica rezistența la un anumit nivel de lumină. Dar ce este - lx? Aceasta nu este metoda pe care o folosim pentru a descrie luminozitatea, deci este legată direct de senzor. Mai jos este un tabel de corespondențe, care a fost preluat din Wikipedia.


Verificare fotorezistor

Cel mai simplu mod de a vă testa fotorezistorul este să conectați un multimetru în modul de măsurare a rezistenței la două contacte ale senzorului și să urmăriți modificarea rezistenței la ieșire atunci când acoperiți senzorul cu palma, opriți lumina din cameră etc. Deoarece rezistența se schimbă în intervale mari, modul automat funcționează bine. Dacă nu aveți modul automat sau nu funcționează corect, încercați gama de 1 MΩ și 1 kΩ.



Conexiune fotorezistor

Deoarece fotorezistenții sunt în esență rezistență, nu au polaritate. Aceasta înseamnă că le poți conecta cu picioarele lor „orice îți place” și vor funcționa!


Fotorezistenții sunt într-adevăr nepretențioși. Puteți să le lipiți, să le instalați pe panou, să utilizați clemele pentru a vă conecta. Singurul lucru de făcut este să vă îndoiți prea des „picioarele”, deoarece acestea se pot desprinde cu ușurință.


Folosirea fotorezistoarelor

Metoda analogică de citire a tensiunii

Cel mai simplu caz de utilizare este să conectați un picior la sursa de alimentare și celălalt la masă printr-un rezistor de tragere. După aceea, punctul dintre rezistorul cu valoare constantă și rezistorul variabil - fotorezistorul - este conectat la intrarea analogică a microcontrolerului. Figura de mai jos prezintă schema de conectare pentru Arduino.


În acest exemplu, este conectată o sursă de alimentare de 5V, dar rețineți că puteți utiliza la fel de bine o sursă de 3,3 V. În acest caz, valorile analogice ale tensiunii vor fi cuprinse între 0 și 5V, adică aproximativ egale la tensiunea de alimentare.

Funcționează după cum urmează: atunci când rezistența fotorezistorului scade, rezistența totală a fotorezistorului și a rezistenței de tragere scade de la 600 kOhm la 10 kOhm. Aceasta înseamnă că curentul prin ambele rezistențe crește, ceea ce determină creșterea tensiunii în rezistența de 10K. Asta e tot!


Acest tabel prezintă valorile aproximative ale tensiunii analogice pe baza nivelului de iluminare / rezistență cu o tensiune de alimentare de 5 V și un rezistor de tragere de 10 kΩ.

Dacă doriți să utilizați senzorul într-o zonă puternic luminată și să utilizați un rezistor de 10K, acesta va exploda rapid. Adică, va atinge aproape instantaneu nivelul admis de tensiune de 5 V și nu va putea distinge o iluminare mai intensă. În acest caz, ar trebui să înlocuiți rezistorul de 10K cu un rezistor de 1K. Cu un astfel de circuit, rezistența nu va putea detecta nivelul de întuneric, dar este mai bine să determinați nuanțele nivelului ridicat de iluminare. În general, ar trebui să te joci cu asta în funcție de condițiile tale!

Alternativ, puteți utiliza, de asemenea, formula „Axel Benz” pentru măsurători de bază ale valorii rezistenței minime și maxime cu un multimetru și apoi găsiți valoarea rezistenței rezistorului folosind: Trageți rezistorul = rădăcină pătrată (Rmin * Rmax), care va vă oferă un rezultat mult mai bun. rezultați în forma:


Tabelul de mai sus prezintă tensiuni analogice aproximative atunci când se utilizează un senzor de 5 V cu un rezistor pull-down de 1 kΩ.

Nu uitați că metoda noastră nu ne oferă o dependență liniară a tensiunii de iluminare! În plus, fiecare senzor este diferit în ceea ce privește caracteristicile sale. Odată cu creșterea nivelului de lumină, tensiunea analogică va crește, iar rezistența va scădea:

Vo = Vcc (R / (R + fotocelula))

Adică tensiunea este invers proporțională cu rezistența fotorezistorului, care, la rândul său, este invers proporțională cu nivelul de iluminare.

Un exemplu simplu de utilizare a unui fotorezistor

Această schiță ia citirile analogice pentru a determina luminozitatea LED-ului. Cu cât este mai întunecat, cu atât LED-ul va lumina mai strălucitor! Amintiți-vă că un LED trebuie să fie conectat la un pin PWM pentru ca acest exemplu să funcționeze. În acest caz, este utilizat pinul 11.


Acest exemplu presupune că sunteți familiarizat cu elementele de bază ale programării Arduino.

/ * schiță de testare simplă a fotorezistorului.

Conectați un picior al fotorezistorului la 5V, celălalt la pinul analogic 0.

Apoi conectați un rezistor de 10K între analogul 0 și masă.

Conectați LED-ul printr-un rezistor între pinul 11 ​​și masă. * /

int fotocelulaPin = 0; // senzor și rezistență de tragere de 10k conectată la a0

int fotocelulaCitirea; // citiți valori analogice din divizorul senzorului

int LEDpin = 11; // conectați LED-ul roșu la pinul 11 ​​(pinul PWM)

int luminozitate; //

configurare nulă (nulă) (

// vom trimite informații de depanare pe monitorul serial

Serial.begin (9600);

bucla de gol (nul) (

Serial.println (photocellReading); // valori analogice de la senzor

// LED-ul se aprinde mai puternic dacă nivelul de lumină al senzorului scade

// asta înseamnă că trebuie să inversăm valorile citite de la 0-1023 la 1023-0

photocellReading = 1023 - photocellReading;

// acum trebuie să convertim intervalul 0-1023 la 0-255, deoarece acesta este intervalul folosit de analogWrite

LEDbrightness = hartă (fotocelulaReading, 0, 1023, 0, 255);

analogWrite (LEDpin, LEDbrightness);


Puteți încerca alte rezistențe în funcție de nivelul de lumină pe care doriți să îl măsurați!

Cod simplu pentru măsurători analogice ale nivelului de lumină

Nu există calcule în schiță, ci doar afișarea valorilor care sunt interpretate ca niveluri de iluminare. Pentru multe proiecte, acest lucru este suficient.


/ * O schiță simplă de testare a fotorezistorului.

Conectați un picior al fotorezistorului la 5V, celălalt la pinul analogic 0.

Apoi conectați pinul rezistorului de 10k la masă, iar al doilea la pinul analogic Analog 0 * /

int fotocelulaPin = 0; // senzor și rezistență de tragere de 10k conectată la a0

int fotocelulaCitirea; // date citite din pinul analogic

configurare nulă (nulă) (

// Treceți informațiile de depanare la monitorul serial

Serial.begin (9600);

bucla de gol (nul) (

photocellReading = analogRead (fotocelulaPin);

Serial.print ("Citire analogică =");

Serial.print (fotocelulaReading); // valori analogice

dacă (fotocelulaCitind

Serial.println ("- Dark");

) else if (fotocelulaReading

Serial.println ("- Dim");

) else if (fotocelulaReading

Serial.println ("- Light");

) else if (fotocelulaReading

Serial.println ("- Bright");

Serial.println ("- Foarte luminos");

Această verificare a fost efectuată în cameră în timpul zilei. Am acoperit senzorul cu mâna și apoi cu o bucată de pânză.


Citirea valorilor din fotorezistor fără a utiliza pini analogici

Deoarece fotorezistoarele sunt în esență rezistențe obișnuite, ele pot fi utilizate chiar dacă microcontrolerul dvs. nu are pini analogici (sau dacă toți pini analogici sunt ocupați). Această metodă se bazează pe proprietățile de bază ale rezistențelor și condensatoarelor. Dacă luați un condensator care poate transfera potențial și îl conectați la o sursă de alimentare (de exemplu, 5V) printr-un rezistor, schimbarea tensiunii va avea loc treptat. Cu cât rezistența rezistorului este mai mare, cu atât tensiunea se va modifica mai lentă.

Mai jos este o bucată din oscilogramă care caracterizează ce se întâmplă exact cu pinul digital (galben). Linia albastră arată când schița Arduino începe să funcționeze și când își termină activitatea (o secțiune de aproximativ 1,2 ms în durată).


Dacă tragem analogii simple, atunci condensatorul acționează ca un coș, iar rezistorul acționează ca un tub. Va dura mult timp pentru a umple coșul cu tubul subțire. În funcție de grosimea tubului, viteza de umplere a coșului va fi diferită.


În cazul nostru, „coșul” este un rezistor ceramic 0,1 μF. Puteți experimenta capacitatea condensatorului. Iar acest indicator va afecta în mod direct timpul. Dacă doriți să măsurați nivelul de lumină, utilizați un condensator 1uF. Dacă lucrați în condiții de lumină slabă, puteți utiliza un condensator de 0,01 uF.

/ * o schiță simplă pentru a testa performanța fotorezistorului.

Conectați un picior al fotorezistorului la putere, celălalt la pinul 2.

După aceea, conectați un picior al condensatorului 0,1 uF la pinul 2, iar celălalt la masă * /

int fotocelulaPin = 2; // fotorezistor conectat la pinul 2

int fotocelulaCitirea; // valori digitale

int ledPin = 13; // puteți utiliza LED-ul încorporat

configurare nulă (nulă) (

// trimiteți informații pentru depanare pentru a fi afișate în fereastra monitorului serial

Serial.begin (9600);

pinMode (ledPin, OUTPUT); // utilizați LED-ul ca ieșire

bucla de gol (nul) (

// citește citiri de la senzor folosind tehnologia RCtime

photocellReading = RCtime (photocellPin);

if (photocellReading == 30000) (

// dacă citirile ajung la 30.000, aceasta înseamnă că am atins valoarea limită

Serial.println („Nimic conectat!”);

Serial.print ("RCtime reading =");

Serial.println (photocellReading); // flux de date analogice citite

// cu cât este mai luminos, cu atât LED-ul clipește mai des!

digitalWrite (ledPin, HIGH);

întârziere (fotocelulaReading);

digitalWrite (ledPin, LOW);

întârziere (fotocelulaReading);

// utilizați pin digital pentru a măsura rezistența

// facem acest lucru furnizând curent condensatorului și

// calculând cât va dura până să ajungă la Vcc / 2 (pentru majoritatea Arduino-urilor aceasta este de 2,5 V)

int RCtime (int RCpin) (

citirea int = 0; // începe la 0

// inițializați pinul ca ieșire și setați-l la LOW (masă)

pinMode (RCpin, OUTPUT);

digitalWrite (RCpin, LOW);

// Acum setați pinul ca intrare și ...

pinMode (RCpin, INPUT);

while (digitalRead (RCpin) == LOW) (// numărați timpul necesar pentru a obține valoarea HIGH

citirea ++; // increment pentru sincronizare

if (citire == 30000) (

// dacă ajungem la acest nivel, rezistența este atât de mare

// că cel mai probabil nimic nu este conectat!

pauză; // ieși din buclă

Video cu proiecte Arduino folosind fotorezistoare

Schimbarea turației motorului utilizând un fotorezistor:

Robotul urmărește traiectoria pentru mișcare folosind un fotorezistor:

Lasă-ți comentariile, întrebările și împărtășește-ți experiența personală mai jos. Idei și proiecte noi se nasc adesea în discuție!

Fotorezistor
OMS specii pe cale de dispariție. Ultima oară când l-am văzut a fost când eram copil. De obicei, este o astfel de cherestea rotundă de metal cu o fereastră de sticlă, în care se poate vedea astfel. Când este iluminat, rezistența acestuia cade, deși nesemnificativ, de trei până la patru ori.

Fototranzistor
În ultima vreme le-am întâlnit tot timpul, o sursă inepuizabilă de fototransistori - unități floppy de cinci inci. Ultima dată când, pentru prețul murdăriei, am pus pe o piață radio de purici aproximativ 5 bucăți dintr-o batistă de la descoperiți, acolo tranzistoarele stau opuse găurilor pentru controlul înregistrării și rotației dischetei. Un alt fototranzistor dublu (sau poate o fotodiodă, așa cum ar avea norocul) se află într-un mouse obișnuit cu bilă.
Arată ca un LED obișnuit, doar carcasa este transparentă. Cu toate acestea, LED-urile sunt, de asemenea, aceleași, deci pentru a confunda care dintre ele scuipă pe cine o singură dată. Dar nu contează, partizanul se calculează ușor cu un multimetru obișnuit. Este suficient să porniți un ohmmetru între emițător și colector (nu are o bază) și să strălucească pe el, deoarece rezistența sa se va prăbuși pur și simplu catastrofal - de la zeci de kilo-ohmi la câțiva ohmi. Cel pe care îl am în detectorul de rotație a roților dințate din robot își schimbă rezistența de la 100 kOhm la 30 Ohm. Fototranzistorul funcționează ca unul obișnuit - deține curent, dar ca acțiune de control nu există un curent de bază, ci un flux luminos.

Fotodiodă
În exterior, nu este diferit de un fototranzistor sau de un LED obișnuit într-o carcasă transparentă. De asemenea, uneori există photodiodes străvechi în cutii metalice. De obicei, acestea sunt dispozitive cu lopată, mărci FD-cheto acolo. Un astfel de cilindru metalic cu o fereastră la capăt și fire care ies din fund.

Spre deosebire de un fototranzistor, acesta poate funcționa în două moduri diferite. În fotovoltaic și fotodiodă.
În prima versiune, fotovoltaică, fotodioda se comportă ca o baterie solară, adică strălucește asupra ei - a apărut o tensiune slabă la terminale. Poate fi întărit și aplicat =). Dar este mult mai ușor să lucrați în modul fotodiodă. Aici aplicăm o tensiune inversă fotodiodei. Deoarece este o fotografie, ci o diodă, atunci tensiunea nu va merge în direcția opusă, ceea ce înseamnă că rezistența sa va fi aproape de pauză, dar dacă este aprinsă, dioda va începe să se graveze foarte puternic și rezistența sa va scade brusc. Și brusc, cu câteva ordine de mărime, ca un fototranzistor.

Spectru
Pe lângă tipul de dispozitiv, are și un spectru de lucru. De exemplu, un fotodetector ascuțit pentru spectrul infraroșu (și există majoritatea lor) practic nu reacționează la lumina unui LED verde sau albastru. Reacționează slab la o lampă fluorescentă, dar reacționează bine la o lampă incandescentă și un LED roșu și nu există nimic de spus despre infraroșu. Așadar, nu vă mirați dacă senzorul foto reacționează prost la lumină, poate că ați făcut o greșeală cu spectrul.

Conexiune
Acum este timpul să arătăm cum să conectăm acest lucru la microcontroler. Cu fotorezistorul, totul este clar, nu există probleme aici - îl luați și îl conectați conform schemei.
Fotodioda și fototranzistorul sunt mai complicate. Este necesar să se determine unde se află anodul / catodul sau emițătorul / colectorul său. Acest lucru se face simplu. Luați un multimetru, îl puneți în modul de apelare a diodei și vă lipiți de senzorul dvs. Multimetrul din acest mod arată căderea de tensiune pe diodă / tranzistor, iar căderea de tensiune aici depinde în principal de rezistența sa U = I * R. Luați și aprindeți senzorul, urmând citirile. Dacă numărul scade brusc, atunci ați ghicit firul roșu de pe catod / colector și negru pe anod / emițător. Dacă nu s-a schimbat, schimbați pinii. Dacă nu ajută, atunci fie detectorul este mort, fie încercați să obțineți un răspuns de la LED (apropo, LED-urile pot servi și ca detectoare de lumină, dar nu este atât de simplu acolo. Cu toate acestea, când am timp vă voi arăta această perversiune tehnologică).


În ceea ce privește activitatea circuitului, totul este elementar aici. În starea întunecată, fotodioda nu trece curent în direcția opusă, fototranzistorul este, de asemenea, închis, iar rezistența fotorezistorului este foarte mare. Rezistența intrării este aproape de infinit, ceea ce înseamnă că intrarea va avea o tensiune de alimentare completă sau o unitate logică. Merită acum să aprindeți dioda / tranzistorul / rezistorul, deoarece rezistența scade brusc, iar ieșirea se dovedește a fi plantată strâns pe sol sau foarte aproape de sol. În orice caz, rezistența va fi mult mai mică decât un rezistor de 10kΩ, ceea ce înseamnă că tensiunea va dispărea brusc și va fi undeva la un nivel logic zero. Nici nu aveți nevoie să puneți un rezistor în AVR și PIC, pull-up-ul intern este suficient. Deci DDRx = 0 PORTx = 1 și vei fi fericit. Ei bine, întoarceți-l ca un buton obișnuit. Singura dificultate poate apărea cu fotorezistorul - rezistența sa nu scade atât de brusc, deci este posibil să nu ajungă la zero. Dar aici puteți juca cu dimensiunea rezistenței de tragere și asigurați-vă că schimbarea rezistenței este suficientă pentru a trece prin nivelul logic.

Dacă este necesar să măsurați cu precizie iluminarea și să nu capturați stupid lumina / întunericul, atunci va fi necesar să conectați totul la ADC și să faceți variabila rezistenței de tragere pentru a regla parametrii.

Există, de asemenea, un tip avansat de senzori foto - TSOP există un detector și amplificator de frecvență încorporat, dar despre asta voi scrie puțin mai târziu.

ZY
Am câteva parcuri aici, așa că site-ul va fi foarte prost cu actualizarea, cred că va fi până la sfârșitul lunii. Apoi sper să revin la același ritm.

Astăzi vom face o schiță și un prototip al circuitului Arduino folosind un fotorezistor. Iată un fotorezistor situat aici, am asamblat un astfel de aspect, arată ca o ghirlandă cu LED-uri de Anul Nou din articolele anterioare.

Avem 8 LED-uri, sunt instalate astfel încât piciorul scurt din stânga să fie un minus, piciorul lung din dreapta să fie un plus. Deci sunt toate instalate, circuitul folosește un rezistor de 10 kilo-ohm, l-am luat din kit Kit Arduinoși se utilizează 8 rezistențe conectate la contactul pozitiv al LED-ului de 220 ohmi, așa este conectat.


8 fire negre folosite sunt negative și 8 bucăți verzi - pini de control de la a douăsprezecea până la a cincea. În procesul de depanare, negrul extrem a fost înlocuit cu verde, dar mai multe despre asta mai târziu.

Fotorezistorul este aici, alături este un rezistor de 10 kilograme, jumperul albastru merge la minus, cel portocaliu este conectat la un capăt la punctul mediu, între rezistență și fotorezistor, celălalt capăt la placă Arduino, în A0 (pin analogic).

Roșul este de 5 volți, iar circuitul va funcționa prin acest divizor de tensiune, LED-urile se vor aprinde, în funcție de nivelul de iluminare. Voi repara LED-urile, construcția este destul de clătinată. Să revenim la model, dar acum să începem să scriem o schiță.

Să creăm un proiect nou și să începem să scriem, să declarăm constante, mai multe piese, să fie un tip int, acesta va fi numărul de pini, deoarece există 8 LED-uri în circuit. Aceasta va indica câte LED-uri au fost utilizate în circuit.

const int NbrLEDs = 8;

Să facem o matrice cu numere de pin, să folosim 5 6 7 8 9 10 11 12 conectori digitali, să indicăm numărul pinului pe care este filmat nivelul de iluminare, să declarăm o variabilă pentru fotorezistor, valoarea senzorului și să declarăm, de asemenea, nivelul de iluminare astfel încât le putem descompune prin ace.

const int ledPins = (5, 6, 7, 8, 9, 10, 11, 12); const int fotocelulaPin = A0; int sensorValue = 0; int ledLevel = 0;

În subrutina de configurare, vom scrie o buclă în care, pentru a nu atribui fiecare valoare de ieșire prin pinMode, vom bucla prin toți pinii, le vom atribui valorile din pinmode din matrice și vom atribui valoarea OUTPUT fiecare ac.

void setup () (pentru (int led = 0; led< NbrLEDs; led++) { pinMode(ledPins, OUTPUT); } }

În principiu, nu ați putea face acest lucru, puteți specifica modul pin și apoi scrieți cinci, apoi 6 și așa mai departe, dar acesta este un timp foarte lung și aceasta este o metodă barbară sălbatică. Prin urmare, în buclă, vom trece prin toți pinii într-o singură trecere.

pinMode (5, OUTPUT); pinMode (6, OUTPUT);

În buclă, obținem valoarea senzorului citind prin analogRead din pinul A0.

Apoi, să descompunem valoarea senzorului, folosind funcția hartă, obținem valoarea senzorului și pe baza nivelului de iluminare, cu o sensibilitate de 300 la valoarea maximă 1023 , vor fi distribuite pe 8 pini, care sunt anunțați mai sus.

Vezi, de asemenea, rezistență video și LED-uri pe Arduino - (video), link-ul se va deschide într-o filă nouă.

Mai departe în buclă, vom trece prin toți pinii, așa că am adăugat paranteze, începând cu primul LED, dacă contorul nu este mai mare de 8, vom adăuga și apoi vom verifica prin condiția că, dacă numărul LED-ului este mai mic decât nivelul de iluminare, vom aplica toate tensiunile anterioare la acest LED prin intermediul constantei HIGH.

Dacă nu, vom nota absența tensiunii în ea, iar LED-ul nu se va aprinde.

void loop () (sensorValue = analogRead (photocellPin); ledLevel = hartă (sensorValue, 300, 1023, 0, NbrLEDs); pentru (int led = 0; led< NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

Alinierea codului prin comanda rapidă de la tastatură ctrl + Tși acum să vedem ce se întâmplă, rulați-l pentru verificare, salvați schița.

Așadar, compilarea schiței, acum încărcați-o în Arduino... Să ne întoarcem la diagramă, în momentul în care un LED nu se aprinde la schimbarea iluminatului din cauza unui contact slab.


Acum o voi remedia, nu o vom atinge, dacă opresc iluminatul, atunci toate LED-urile se vor stinge. Dacă luminez fotorezistorul cu o lanternă, adăugând ușor lumină, atunci aproape toate LED-urile vor fi aprinse și, în consecință, le elimin, reducând nivelul de iluminare, numărul de LED-uri se va schimba.


Dacă aprind toate luminile, aproape totul este aprins, care este problema cu acest LED. Am petrecut destul de mult timp pe el, totul este asamblat corect aici, chiar și un minus a fost transmis cu un fir verde care se poate întreține cu bună știință, dar din anumite motive este capricios și nu arde.


Să revenim acum la schiță și să vedem ce nu e în regulă. Exemplul a fost preluat din sursa oficială, pe disc pe Arduino există același cod.

În schiță, distribuția iluminării este obținută din 300 inainte de 1023 (valoare maximă), o încercare de a schimba pragul inițial în 0 - nu dă niciun rezultat.

Dar dacă distribuim întreaga valoare în 8 părți, atunci calculatorul va fi util, se dovedește că, fie rezistența la 10 kilo-ohmi dă o eroare de un fel, trebuie să împărțiți 1023 la 8, obținem practic 128 , dacă îl luați corect, atunci 1024 împărțit la 8, acesta este și sunt 128.

Acum trebuie să scădeți 128 din 1023, puneți valoarea 895 aici, apoi, conform logicii lucrurilor, totul ar trebui să fie bine. Să descărcăm și să vedem ce modificări.

bucla void () (sensorValue = analogRead (photocellPin); ledLevel = hartă (sensorValue, 0, 895, 0, NbrLEDs); pentru (int led = 0; led< NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

Acum toate LED-urile sunt aprinse, să încercăm să blocăm iluminarea sau să o oprim ...

Valoarea inițială trebuie încă returnată 300, deoarece este furnizată acestor primele trei LED-uri de alimentare. Să schimbăm 0 la 300 în schiță, așa cum a fost, a fost făcut dintr-un motiv, reîncarcă schița și să vedem ce se schimbă de data aceasta ...

bucla nulă () (sensorValue = analogRead (photocellPin); ledLevel = hartă (sensorValue, 300, 895, 0, NbrLEDs); pentru (int led = 0; led< NbrLEDs; led++) { if (led < ledLevel) { digitalWrite(ledPins, HIGH); } else { digitalWrite(ledPins,LOW); } } }

Acum primul LED este aprins, cu iluminare minimă, dacă porniți totul și acolo am 1800 lux, din doi metri de bandă LED, totul este aprins așa cum ar trebui.


Când este oprit, fotorezistorul captează iluminatul rezidual din cameră, candelabrul este aprins, nu întunericul complet și este declanșat. Dar dacă luminați cu o lanternă, aplicând ușor lumină la fotorezistor, circuitul funcționează corect.


Dacă stingem complet luminile, vom vedea ce se întâmplă în întuneric total. După cum puteți vedea, în absența completă a luminii, fotorezistorul reacționează corect, LED-urile se aprind treptat, pe măsură ce iluminarea crește. Când lumina este aprinsă, totul este aprins. O astfel de schiță s-a dovedit, cu un hack de viață - ajustarea sensibilității fotorezistorului, pentru a se potrivi nevoilor dumneavoastră.


Continuăm seria lecțiilor „”. Astăzi conectăm fotorezistorul (fotocelula) la placa Arduino. Fotorezistenții sunt folosiți în roboți ca senzori de lumină. Articolul conține o instrucțiune video, o listă a programului, o diagramă de conexiune și componentele necesare.

Fotorezistor- un rezistor, a cărui rezistență depinde de strălucirea luminii care cade pe el. În modelul nostru, LED-ul este aprins numai dacă luminozitatea luminii de deasupra fotorezistorului este mai mică decât o anumită lumină, această luminozitate poate fi ajustată programatic.

Fotorezistoarele sunt utilizate în robotică ca senzori de lumină. Fotorezistorul încorporat în robot vă permite să determinați gradul de iluminare, să determinați zonele albe sau negre de pe suprafață și, în conformitate cu aceasta, să vă deplasați de-a lungul liniei sau să efectuați alte acțiuni.

Instrucțiuni video pentru asamblarea unui model Arduino cu un fotorezistor:

Pentru a asambla un model cu un servo servo, avem nevoie de:

  • placa arduino
  • 6 fire "tati-tati"
  • fotorezistor
  • Dioda electro luminiscenta
  • Rezistor de 220 ohmi
  • Rezistor de 10k
  • Programul Arduino IDE care poate fi descărcat de pe site-ul web Arduino.

Schema de conectare pentru modelul Arduino cu fotorezistor:

Diagrama de conectare a fotorezistorului Arduino

Pentru ca acest model să funcționeze, este potrivit următorul program (puteți pur și simplu să copiați programul în Arduino IDE):

int led = 13; // variabilă cu numărul pin al LED-ului
int ldr = 0; // și fotorezistor
void setup () // procedura de configurare
{
pinMode (led, OUTPUT); // indicați că LED-ul este o ieșire
}
void loop () // procedura loop
{
if (analogRead (ldr)< 800) digitalWrite(led, HIGH);
// dacă indicele de iluminare este mai mic de 800, porniți LED-ul
altfel digitalWrite (led, LOW); // altfel oprește-te
}

Așa arată modelul Arduino asamblat cu un fotorezistor:

Model gata pentru conectarea unui fotorezistor la Arduino

Dacă LED-ul nu răspunde la modificările de iluminare, încercați să schimbați numărul 800 în program, dacă este pornit tot timpul - micșorați, dacă nu este aprins - creșteți.

Postări de lecție:

  1. Prima lectie:
  2. A doua lecție:
  3. A treia lecție:
  4. A patra lecție:
  5. A cincea lecție:
  6. A șasea lecție:
  7. A șaptea lecție:
  8. A opta lecție:
  9. A noua lecție:

Toate postările site-ului „Divertisment de robotică” după etichetă.

Al nostru Canalul canalului YouTube unde sunt publicate tutoriale video.

Articole noi

● Proiectul 13: Fotorezistor. Procesăm iluminarea prin aprinderea sau stingerea LED-urilor

În acest experiment, vom face cunoștință cu un senzor analogic pentru măsurarea iluminării - un fotorezistor (Fig.13.1).

Componente necesare:

O utilizare obișnuită a unui fotorezistor este măsurarea iluminării. În întuneric, rezistența lui este destul de grozavă. Când lumina lovește fotorezistorul, rezistența scade proporțional cu iluminarea. Diagrama pentru conectarea fotorezistorului la Arduino este prezentată în Fig. 13.2. Pentru a măsura iluminarea, este necesar să asamblați un divizor de tensiune, în care brațul superior va fi reprezentat de un fotorezistor, cel inferior - de un rezistor obișnuit cu o valoare nominală suficient de mare. Vom folosi un rezistor de 10k. Conectăm brațul mediu al divizorului la intrarea analogică A0 a Arduino.

Orez. 13.2. Schema de conectare a fotorezistorului la Arduino

Să scriem o schiță de citire a datelor analogice și trimiterea lor la portul serial. Conținutul schiței este prezentat în Listarea 13.1.

Int light; // variabilă pentru stocarea datelor fotorezistorului configurare nulă ()(Serial.begin (9600);) bucla nulă ()(lumină = analogRead (0); Serial.println (lumină); întârziere (100);)
Procedura de conectare:

1. Conectăm fotorezistorul conform schemei din fig. 13.2.
2. Încărcați schița din Listarea 13.1 pe placa Arduino.
3. Reglăm iluminarea fotorezistorului cu mâna și observăm ieșirea către portul serial al valorilor schimbătoare, ne amintim de citirile la iluminarea completă a camerei și la suprapunerea completă a fluxului luminos.

Acum să creăm un indicator luminos folosind un rând LED de 8 LED-uri. Numărul de LED-uri aprinse este proporțional cu iluminarea curentă. Asamblăm LED-urile conform schemei din Fig. 13.3 folosind rezistențe de limitare de 220 ohmi.

Orez. 13.3. Schema de conectare pentru fotorezistență și LED-uri către Arduino


Conținutul schiței pentru afișarea iluminării curente pe bara LED este prezentat în Listarea 13.2.

// Contact pentru conectarea LED-urilor leduri const int = (3, 4, 5, 6, 7, 8, 9, 10); const int LUMINĂ = A0; // Pinul A0 pentru intrarea fotorezistorului const int MIN_LIGHT = 200; // Prag inferior de iluminare const int MAX_LIGHT = 900; // pragul superior de iluminare // Variabilă pentru stocarea datelor fotorezistorului int val = 0; configurare nulă (){ // Configurați pinii LED ca ieșire pentru (int i = 0; i<8 ;i++) pinMode(leds[i],OUTPUT); } bucla nulă ()(val = analogRead (LIGHT); // Citiți citirile fotorezistorului // Utilizarea funcției map () val = hartă (val, MIN_LIGHT, MAX_LIGHT, 8, 0); // restricționăm astfel încât să nu depășească limitele val = constrângere (val, 0, 8); // aprindeți numărul de LED-uri proporțional cu iluminarea, // stinge restul pentru (int i = 1; i<9 ;i++) { if (i>= val) // aprinde ledurile digitalWrite (leduri, HIGH); altceva // opriți LED-urile digitalWrite (leduri, LOW); ) întârziere (1000); // pauză înainte de următoarea măsurare }
Procedura de conectare:

1. Conectăm fotorezistorul și LED-urile conform schemei din fig. 13.3.
2. Încărcați schița din Listarea 13.2 pe placa Arduino.
3. Reglăm iluminarea fotorezistorului cu mâna și determinăm nivelul curent de iluminare prin numărul de LED-uri aprinse (Fig. 13.3).

Luăm limitele inferioare și superioare de iluminare din valorile memorate atunci când efectuăm experimentul pe schița anterioară (Listarea 13.1). Scalăm valoarea iluminării intermediare cu 8 valori (8 LED-uri) și aprindem numărul de LED-uri proporțional cu valoarea dintre limitele inferioară și superioară.

Listări de programe