Conexiune senzor de lumină Arduino. Cum se utilizează fotorezistoare, fotodiode și fototranzistoare

Continuăm seria de lecții „”. Astăzi conectăm un fotorezistor (fotocelulă) la placa Arduino. Fotorezistoarele sunt folosite la roboți ca senzori de lumină. Articolul conține instrucțiuni video, lista de programe, diagrama de conectare și componentele necesare.

Fotorezistor- un rezistor a cărui rezistență depinde de luminozitatea luminii care cade pe el. În modelul nostru, LED-ul se aprinde numai dacă luminozitatea luminii de deasupra fotorezistorului este mai mică decât o anumită luminozitate poate fi reglată prin software.

Fotorezistoarele sunt folosite î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 unei linii 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 servomotor, vom avea nevoie de:

  • Placa Arduino
  • 6 fire tată-tată
  • fotorezistor
  • Dioda electro luminiscenta
  • rezistor de 220 ohmi
  • Rezistor de 10 kOhm
  • Programul Arduino IDE, care poate fi descărcat de pe site-ul Arduino.

Schema de conectare pentru modelul Arduino cu fotorezistor:

Schema de conectare a fotorezistorului pe Arduino

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

int led = 13; //variabilă cu numărul pin LED
int ldr = 0; //și fotorezistor
void setup() // procedura de configurare
{
pinMode(led, OUTPUT); //indică faptul că LED-ul este o ieșire
}
void loop() //buclă de procedură
{
dacă (analogRead(ldr)< 800) digitalWrite(led, HIGH);
//dacă indicatorul de iluminare este mai mic de 800, porniți LED-ul
else digitalWrite(led, LOW); //în caz contrar, opriți-l
}

Iată cum arată modelul Arduino asamblat cu un fotorezistor:

Model gata pentru conectarea unui fotorezistor pe Arduino

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

Postări de lecție:

  1. Prima lectie:
  2. A doua lectie:
  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 „Robotică distractivă” după etichetă.

Al nostru Canalul canalului YouTube, unde sunt publicate lecții video.

ADC-ul încorporat al microcontrolerului, discutat în partea anterioară a revizuirii, vă permite să conectați cu ușurință diferiți senzori analogici la placa Arduino, care convertesc parametrii fizici măsurați în tensiune electrică.

Un exemplu de senzor analogic simplu este un rezistor variabil conectat la placă, așa cum se arată în Fig. 1. Poate fi de orice tip, de exemplu SP3-33-32 (Fig. 2). Valoarea rezistenței din diagramă este indicată aproximativ și poate fi mai mică sau mai mare. Cu toate acestea, trebuie amintit că cu cât rezistența rezistorului variabil este mai mică, cu atât consumă mai mult curent de la sursa de alimentare a microcontrolerului. Și când rezistența sursei de semnal (în acest caz, un rezistor variabil) este mai mare de 10 kOhm, ADC-ul microcontrolerului funcționează cu erori mari. Vă rugăm să rețineți că rezistența unui rezistor variabil ca sursă de semnal depinde de poziția glisorului său. Este zero în pozițiile sale extreme și maxim (egal cu un sfert din rezistența nominală) în poziția de mijloc.

Orez. 1. Schema de conectare a unui rezistor variabil la placă

Orez. 2. SP3-33-32

Este convenabil să utilizați un rezistor variabil atunci când doriți să schimbați un parametru fără probleme, mai degrabă decât în ​​pași (discret). Ca exemplu, luați în considerare lucrările prezentate în tabel. 1 program care modifică luminozitatea LED-ului în funcție de poziția cursorului de rezistență variabilă. Linia U = U/4 este necesară în program pentru a converti numărul binar de zece biți returnat de ADC într-un număr de opt biți, acceptat ca al doilea operand de către funcția analogWrite(). În acest caz, acest lucru se face prin împărțirea numărului inițial la patru, ceea ce este echivalent cu eliminarea celor două cifre binare cel mai puțin semnificative.

Tabelul 1.

Un rezistor variabil cu design adecvat poate servi ca senzor de unghi de rotație sau de deplasare liniară. În mod similar, puteți conecta multe radioelemente: fotorezistoare, termistoare, fotodiode, fototranzistoare. Într-un cuvânt, dispozitive a căror rezistență electrică depinde de anumiți factori de mediu.

În fig. Figura 3 prezintă o diagramă de conectare a unui fotorezistor la Arduino. Când iluminarea se schimbă, rezistența sa electrică se modifică și, în consecință, tensiunea la intrarea analogică a plăcii Arduino se modifică. Fotorezistorul FSK-1 indicat în diagramă poate fi înlocuit cu oricare altul, de exemplu SF2-1.

Orez. 3. Schema de conectare pentru fotorezistor la Arduino

În tabel Figura 2 prezintă un program care transformă o placă Arduino cu un fotorezistor conectat la ea într-un simplu contor de lumină. În timpul lucrului, măsoară periodic căderea de tensiune pe un rezistor conectat în serie cu fotorezistorul și transmite rezultatul în unități convenționale prin portul serial către computer. Acestea vor fi afișate pe ecranul terminalului de depanare Arduino, așa cum se arată în Fig. 4. După cum putem observa, la un moment dat tensiunea măsurată a scăzut brusc. Acest lucru a avut loc atunci când o fotodiodă puternic luminată a fost ascunsă de un ecran opac.

Masa 2.

Orez. 4. Imagine de pe ecranul terminalului de depanare Arduino

Pentru a obține valori de iluminare în lux (unități SI standard), trebuie să înmulțiți rezultatele cu un factor de corecție, dar va trebui să îl selectați experimental și individual pentru fiecare fotorezistor. Pentru aceasta veți avea nevoie de un luxmetru standard.

Un fototranzistor sau fotodiodă (Fig. 5) este conectat la Arduino într-un mod similar. Folosind mai multe dispozitive sensibile la lumină, este posibil să se construiască un sistem de viziune simplu pentru un robot. Este posibil să se implementeze la un nou nivel tehnic multe modele clasice cunoscute unei game largi de radioamatori - un model cibernetic al unui fluture de noapte sau un model al unui rezervor care se mișcă spre lumină.

Orez. 5. Schema de conectare a fotodiodei la Arduino

Similar cu un fotorezistor, un termistor este conectat la Arduino (Fig. 6), care își modifică rezistența electrică în funcție de temperatură. În loc de termistorul MMT-4 indicat în diagramă, al cărui avantaj principal este carcasa sa etanșă, puteți utiliza aproape oricare altul, de exemplu, MMT-1 sau unul importat.

Orez. 6. Schema de conectare a termistorului la Arduino

După o calibrare corespunzătoare, un astfel de dispozitiv poate fi utilizat pentru a măsura temperatura în toate tipurile de stații meteo de acasă, termostate și structuri similare.

Se știe că aproape toate LED-urile pot servi nu numai ca surse de lumină, ci și ca receptori de lumină - fotodiode. Faptul este că cristalul LED este într-o carcasă transparentă și, prin urmare, joncțiunea sa p-n este accesibilă luminii din surse externe. În plus, carcasa LED-ului are de obicei forma unei lentile, care concentrează radiația externă pe această joncțiune. Sub influența sa, de exemplu, rezistența inversă a joncțiunii pn se modifică.

Prin conectarea LED-ului la placa Arduino conform diagramei prezentate în Fig. 7, puteți utiliza același LED atât pentru scopul propus, cât și ca fotosenzor. Un program care ilustrează acest mod este prezentat în tabel. 3. Ideea sa este că mai întâi se aplică o tensiune inversă joncțiunii pn a LED-ului, încărcându-i capacitatea. Catodul LED este apoi izolat prin configurarea pinului Arduino la care este conectat ca intrare. După aceasta, programul măsoară durata de descărcare a capacității joncțiunii p-n a LED-ului cu propriul curent invers până la nivelul zero logic, în funcție de iluminarea externă.

Orez. 7. Schema de conectare a LED-ului la placa Arduino

Tabelul 3

În programul de mai sus, variabila t este descrisă ca int unsigned - un întreg fără semn. O variabilă de acest tip, spre deosebire de un int obișnuit, care ia valori de la -32768 la +32767, nu folosește cea mai semnificativă cifră binară pentru a stoca semnul și poate lua valori de la 0 la 65535.

Programul calculează timpul de descărcare în bucla while(digitalRead (K)!=0)t++. Această buclă este executată, crescând de fiecare dată valoarea lui t cu unu, până când condiția cuprinsă între paranteze este adevărată, adică până când tensiunea la catodul LED-ului scade la un nivel logic scăzut.

Uneori se cere ca robotul nu numai să primească informații despre iluminarea suprafeței pe care se mișcă, dar să poată și determina culoarea acestuia. Ei implementează un senzor de culoare pentru suprafața subiacentă, luminând-o alternativ cu LED-uri de diferite culori de luminiscență și folosind o fotodiodă pentru a compara nivelurile semnalelor reflectate de ea în diferite condiții de iluminare. Schema de conectare a elementelor senzorului de culoare cu placa Arduino este prezentată în Fig. 8, iar programul care îl deservește este în tabel. 4.

Orez. 8. Schema de conectare a elementelor senzorului de culoare cu placa Arduino

Tabelul 4

Procedura de măsurare a semnalelor primite de o fotodiodă sub iluminare diferită a suprafeței se repetă de multe ori, iar rezultatele obținute sunt acumulate pentru a elimina erorile aleatorii. Programul selectează apoi cea mai mare dintre valorile acumulate. Acest lucru vă permite să apreciați aproximativ culoarea suprafeței. Pentru a determina cu mai multă precizie culoarea, este necesar să se complice procesarea rezultatelor, ținând cont nu numai de cea mai mare dintre ele, ci și de relația sa cu cele mai mici. De asemenea, este necesar să se țină cont de luminozitatea reală a LED-urilor de diferite culori strălucitoare, precum și de caracteristicile spectrale ale fotodiodei utilizate.

În Fig. 9. Axele optice ale LED-urilor și fotodiodei trebuie să convergă într-un punct de pe suprafața studiată, iar dispozitivele în sine sunt amplasate cât mai aproape de acesta pentru a minimiza influența iluminării externe.

Orez. 9. Un exemplu de design de senzor de culoare format din patru LED-uri și o fotodiodă

Senzorul asamblat necesită o calibrare individuală atentă pe suprafețe de culori diferite. Se reduce la o selecție de coeficienți prin care rezultatele măsurătorilor obținute în diferite condiții de iluminare ar trebui multiplicate înainte de comparare. Un robot echipat cu un astfel de senzor poate fi învățat să realizeze algoritmi de mișcare interesanți. De exemplu, el se va putea deplasa în câmpul de lucru de o culoare fără a încălca limitele zonelor „interzise” pictate într-o culoare diferită.

  1. Fototoresist: http://ali.ski/5GDvP7
  2. Diode și rezistențe: http://fas.st/KK7DwjyF
  3. Placă de dezvoltare: http://ali.ski/rq8wz8
  4. Arduino uno: http://ali.ski/gC_mOa

În acest tutorial vom conecta un fotorezistor la Arduino. care va controla LED-ul încorporat.

Fotorezistor: rezistența fotorezistoarelor scade atunci când sunt expuse la lumină și crește în întuneric. Fotorezistoarele sunt ușor de utilizat, dar reacționează destul de lent la modificările nivelului de lumină și au o eficiență foarte scăzută. precizie. De obicei, rezistența fotorezistoarelor poate varia de la 50 ohmi în lumina zilei până la mai mult de 10 megaohmi în întuneric.

Vom conecta fotorezistorul în sine la masă printr-un rezistor de 10 kOhm și vom conecta același picior la pinul analog Arduino A0, al doilea picior al fotorezistorului va fi conectat la Arduino de 5 volți. Toate acestea sunt prezentate clar în diagrama de la începutul articolului.

După conectarea corectă a fotorezistorului la Arduino, trebuie să copiați codul de mai jos, să-l lipiți în programul Arduino ide și să încărcați tot acest cod de program în Arduino.

Int PhotosensorPin = A0; //Indicați pinul la care este conectat fotorezistorul unsigned int sensorValue = 0; //Declară o variabilă pentru a stoca valori. void setup() ( pinMode(13, OUTPUT); Serial.begin(9600); ) void loop() (sensorValue = analogRead(PhotosensorPin); //Citiți valorile de la fotorezistor if(sensorValue<700) digitalWrite(13, HIGH); //Включаем else digitalWrite(13, LOW); // Выключаем Serial.print(sensorValue, DEC); //Вывод данных с фоторезистора (0-1024) Serial.println(""); delay(500); }

După încărcarea codului programului în Arduino, trebuie să deschideți monitorul portului.

Acum, dacă lumina lovește fotorezistorul și LED-ul încorporat este stins, acoperiți fotorezistorul cu mâna și veți vedea că la un moment dat LED-ul se va aprinde! De asemenea, puteți vedea modificări ale valorii de la fotorezistor în monitorul portului.

O demonstrație a modului în care funcționează fotorezistorul poate fi văzută în videoclipul de mai jos.

Video:

Un fotorezistor este un element radio semiconductor care își modifică rezistența în funcție de iluminare. Pentru lumina vizibilă (lumina soarelui sau lumina de la lămpi), se folosește sulfura de cadmiu sau seleniura. Există și fotorezistoare care detectează radiația infraroșie. Sunt fabricate din germaniu cu unele amestecuri de alte substanțe.Proprietatea de a-și schimba rezistența sub influența luminii este foarte utilizată în electronică.

Aspect și denumire pe diagramă

Practic fotorezistoarele arată așa



Pe diagrame ele pot fi indicate după cum urmează:

sau așa

Cum funcționează un fotorezistor?

Să ne uităm la unul dintre reprezentanții familiei fotorezistoare


Ea, ca toate fotocelulele, are o fereastră cu care „prinde” lumina.



Parametrul principal al unui fotorezistor este rezistența la întuneric. Rezistența la întuneric a unui fotorezistor este rezistența sa în absența completă a luminii care cade pe el. Judecând după cartea de referință, rezistența întunecată a secției noastre este de 15x10 8 Ohm, sau în cuvinte - 1,5 GOhm. S-ar putea chiar spune - o defalcare completă. E chiar asa? Hai să aruncăm o privire. Pentru a face acest lucru, îmi folosesc notebook-ul și ascund un fotorezistor acolo:


Chiar și în intervalul de 200 MOhm, multimetrul a arătat unul. Aceasta înseamnă că rezistența fotorezistorului este cu mult peste 200 MOhm.

Scoatem subiectul nostru experimental din carte și aprindem lumina din cameră. Rezultatul este imediat evident:


106,7 KOhm.

Acum îmi aprind lampa de birou. Camera a devenit și mai luminoasă. Ne uităm la citirile multimetrului:


76,2 KOhmi.

Aduc fotorezistorul aproape de lampa de masă:


18,6 KOhmi

Încheiem: Cu cât curge mai multă lumină pe fotorezistor, cu atât rezistența acestuia este mai mică.

Fotorezistentele vă oferă capacitatea de a simți intensitatea luminii.

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

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

Fotorezistoarele sunt în esență rezistențe care își schimbă rezistența (măsurată în ohmi) în funcție de cât de multă lumină lovește elementele lor de detectare. După cum am menționat mai sus, sunt foarte ieftine, vin în diferite dimensiuni și specificații, dar majoritatea nu sunt foarte precise. Fiecare fotorezistor se comportă ușor diferit față de celălalt, chiar dacă sunt din același lot de la producător. Diferențele de citire pot ajunge la 50% sau chiar mai mult! Deci nu ar trebui să contați pe măsurători de precizie. Ele sunt utilizate în principal pentru a determina nivelul general de iluminare în condiții specifice, „locale”, mai degrabă decât „absolute”.

Fotorezistoarele sunt o alegere excelentă pentru rezolvarea unor probleme 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

Specificatiile de mai jos sunt pentru fotorezistente din magazinul Adafruit. Aceste fotorezistoare au caracteristici similare cu PDV-P8001. Aproape toate fotorezistoarele au caracteristici tehnice diferite, deși funcționează foarte similar. Dacă vânzătorul vă oferă un link către fișa de date a fotorezistorului, verificați-le și nu ceea ce este menționat mai jos.

  • Dimensiune: rotundă, 5 mm (0,2") în diametru (alte fotorezistoare pot ajunge până la 12 mm / 0,4" în diametru!).
  • Preț: Aproximativ 1,00 USD la Adafruit.
  • Interval de rezistență: de la 200 kOhm (întunecat) la 10 kOhm (luminos).
  • Interval de sensibilitate: Elementele de detectare detectează lungimi de undă cuprinse între 400 nm (violet) și 600 nm (portocaliu).
  • Putere: orice cu tensiune de până la 100 V, folosește un curent de aproximativ 1 mA în medie (î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 altul atunci când citesc informații de la diferiți pini analogici. Acest lucru poate fi corectat prin adăugarea a două citiri cu întârzieri și afișarea primei.

Măsurarea nivelului de lumină

După cum am spus deja, rezistența fotorezistorului se modifică în funcție de nivelul de iluminare. Când este întuneric, rezistența rezistenței crește la 10 megaohmi. Pe măsură ce nivelul de lumină crește, rezistența scade. Graficul de mai jos arată rezistența aproximativă a senzorului în diferite condiții de iluminare. Nu uitați că caracteristicile fiecărui fotorezistor individual vor fi ușor diferite, aceste caracteristici reflectând doar tendința generală.


Vă rugăm să rețineți că caracteristica nu este liniară, ci are un caracter logaritmic.

Fotorezistoarele nu percep întreaga gamă de unde luminoase. În majoritatea versiunilor, acestea sunt sensibile la undele luminoase în intervalul cuprins între 700 nm (roșu) și 500 nm (verde).


Adică, o indicație a intervalului de lungimi de undă luminii care corespunde cu albastru nu va fi la fel de eficientă ca o indicație a intervalului verde/galben!

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

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


Verificarea fotorezistorului

Cea mai simplă metodă de testare a fotorezistorului este să conectați un multimetru în modul de măsurare a rezistenței la cele două contacte ale senzorului și să urmăriți schimbarea rezistenței de ieșire atunci când acoperiți senzorul cu palma, stingeți lumina din cameră etc. Deoarece rezistența variază pe intervale mari, modul automat funcționează bine. Dacă nu aveți un mod automat sau nu funcționează corect, încercați intervalul de 1 MΩ și 1 kΩ.



Conexiune fotorezistor

Deoarece fotorezistoarele sunt în esență rezistență, nu au polaritate. Asta înseamnă că le poți conecta picioarele „oricum vrei” și vor funcționa!


Fotorezistentele sunt cu adevărat nepretențioase. Puteți să le lipiți, să le instalați pe o placă sau să folosiți cleme pentru conectare. Singurul lucru pe care ar trebui să-l faceți este să îndoiți „picioarele” prea des, deoarece se pot rupe cu ușurință.


Folosind fotorezistoare

Metoda de citire a tensiunii analogice

Cel mai simplu caz de utilizare este conectarea unui picior la sursa de alimentare, celălalt la masă printr-un rezistor de tragere. După aceasta, punctul dintre rezistența fixă ​​și rezistența variabilă - fotorezistorul - este conectat la intrarea analogică a microcontrolerului. Figura de mai jos arată schema de conectare la Arduino.


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

Funcționează după cum urmează: pe măsură ce rezistența fotorezistorului scade, rezistența totală a fotorezistorului și a rezistenței de reducere scade de la 600 kOhm la 10 kOhm. Aceasta înseamnă că curentul care trece prin ambele rezistențe crește, ceea ce face ca tensiunea pe rezistorul de 10k să crească. Asta e tot!


Acest tabel oferă valori aproximative ale tensiunii analogice bazate pe nivelul/rezistența luminii atunci când conectați o sursă de 5V și un rezistor de tragere de 10k ohmi.

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

În plus, veți putea, de asemenea, să utilizați formula „Axel Benz” pentru a măsura practic valoarea minimă și maximă a rezistenței folosind un multimetru și apoi a găsi valoarea rezistenței folosind: Pull Resistor = Square Root (Rmin * Rmax), ceea ce vă va oferi un rezultat mult mai bun sub forma:


Tabelul de mai sus prezintă tensiuni analogice aproximative atunci când se utilizează un senzor de 5V cu o rezistență de tragere în jos de 1K.

Nu uitați că metoda noastră nu ne oferă o dependență liniară a tensiunii de iluminare! În plus, fiecare senzor are caracteristici diferite. Pe măsură ce nivelul luminii crește, tensiunea analogică va crește și rezistența va scădea:

Vo = Vcc (R / (R + Fotocelulă))

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ță preia valorile analogice citite pentru a determina luminozitatea LED-ului. Cu cât este mai întunecat, cu atât LED-ul va străluci mai luminos! Nu uitați că LED-ul trebuie să fie conectat la pinul PWM pentru ca acest exemplu să funcționeze. În acest caz, se folosește pinul 11.


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

/* schiță de test simplă pentru un fotorezistor.

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

După aceasta, conectați un rezistor de 10k ohmi între analog 0 și masă.

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

int photocellPin = 0; // senzor și rezistor de tragere de 10 kOhm conectate la a0

int fotocellReading; // citește valori analogice din divizorul senzorului

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

int LEDbrightness; //

void setup(void) (

// vom trimite informații pentru depanare către monitorul serial

Serial.begin(9600);

buclă goală (void) (

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 pe care analogWrite îl folosește

LEDbrightness = hartă(fotocelulăCitire, 0, 1023, 0, 255);

analogWrite (LEDpin, LEDbrightness);


Poate doriți să încercați și 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ă

Schița nu efectuează niciun calcul, afișând doar valori care sunt interpretate ca niveluri de iluminare. Pentru multe proiecte, acest lucru este suficient.


/* O schiță de testare simplă pentru un fotorezistor.

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

După aceea, conectați pinul rezistenței de 10 kOhm la masă, iar al doilea la pinul analogic Analog 0 */

int photocellPin = 0; // senzor și rezistență de tragere de 10 kOhm conectate la a0

int fotocellReading; // date citite de la pinul analogic

void setup(void) (

// Transferați informații pentru depanare pe monitorul serial

Serial.begin(9600);

buclă goală (void) (

photocellReading = analogRead(photocellPin);

Serial.print("Citire analogica = ");

Serial.print(fotocelulaReading); // valori analogice

dacă (fotocelulăReading

Serial.println(" - Întunecat");

) altfel dacă (fotocelulăReading

Serial.println(" - Dim");

) altfel dacă (fotocelulăReading

Serial.println("- Light");

) altfel dacă (fotocelulăReading

Serial.println("- Bright");

Serial.println("- Foarte luminos");

Acest test a fost efectuat într-o cameră în timpul zilei. Am acoperit senzorul cu mâna, apoi cu o bucată de pânză.


Citirea valorilor de la un fotorezistor fără a utiliza pini analogici

Deoarece fotorezistoarele sunt în esență doar rezistențe, acestea pot fi utilizate chiar dacă microcontrolerul nu are pini analogici (sau dacă toți pinii 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țialul ș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 schimba mai lent.

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


Dacă tragem analogii simple, condensatorul acționează ca un coș, iar rezistorul acționează ca un tub. Umplerea coșului cu un tub subțire va dura mult timp. În funcție de grosimea tubului, viteza de umplere a coșului va varia.


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

/* o schiță simplă pentru a verifica funcționalitatea unui fotorezistor.

Conectați un picior al fotorezistorului la sursa de alimentare, celălalt la pinul 2.

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

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

int fotocellReading; // valori digitale

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

void setup(void) (

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

Serial.begin(9600);

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

buclă goală (void) (

// citiți citirile de la senzor folosind tehnologia RCtime

photocellReading = RCtime(photocellPin);

dacă (Citirea celulei foto == 30000) (

// dacă citirea ajunge la 30000, înseamnă că am atins valoarea limită

Serial.println("Nimic conectat!");

Serial.print("RCtime citire = ");

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

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

digitalWrite(ledPin, HIGH);

întârziere (Citire fotocelulă);

digitalWrite(ledPin, LOW);

întârziere (Citire fotocelulă);

// folosiți pinul digital pentru a măsura rezistența

//facem acest lucru aplicând curent la condensator și

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

int RCtime(int RCpin) (

int citire = 0; // începe de la 0

// inițializați pinul ca ieșire și atribuiți-i valoarea LOW (sol)

pinMode(RCpin, OUTPUT);

digitalWrite(RCpin, LOW);

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

pinMode(RCpin, INPUT);

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

lectură++; // increment pentru numărarea timpului

dacă (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 în afara buclei

Video cu proiecte Arduino folosind fotorezistoare

Modificarea turației motorului cu ajutorul unui fotorezistor:

Robotul urmărește o cale de deplasare folosind un fotorezistor:

Lasă-ți comentariile, întrebările și împărtășește-ți experiențele personale mai jos. Noi idei și proiecte se nasc adesea în discuții!