Nakts gaisma no vecas spuldzes, pamatojoties uz Arduino un WS2812. Uzdevumi patstāvīgam risinājumam

Droši vien ikvienam bērnībā bija sapnis (un vairāk nekā viens). Jūs pat varat mēģināt atcerēties sajūtu, kas piepilda bērna dvēseli, kad viņa sapnis piepildās, vai to tālo, pazīstamo dzirksti viņa acīs... Bērnībā es sapņoju par savu naktslampiņu.

Tagad es esmu BSUIR 4. kursa students, un, kad mums teica, ka kursa projektu ķēdes projektēšanā var veikt nevis uz papīra, bet gan uz aparatūras, es sapratu: nakts gaisma, ko es tik ļoti vēlējos. bērnu varu uztaisīt pats. Turklāt izveidojiet ne tikai priekšmetu, kas tumsā apgaismos telpu, bet arī ierīci, kuru var viegli vadīt, lai tā atbilstu jebkuram noskaņojumam. Kāpēc ne? Es nolēmu pievienot iespēju mainīt krāsas, izmantojot rokas: jo tuvāk mana roka ir nakts gaismai, jo spilgtāk iedegas viena no krāsām (RGB). Es arī vēlētos vadīt nakts gaismu, izmantojot tālvadības pulti.

Uzreiz atzīšos, ka šo ideju pamanīju vietnē cxem.net. Īsumā, šajā piemērā tika izmantota RGB matrica, kas tika kontrolēta, izmantojot maiņu reģistrus un ultraskaņas attāluma sensorus. Bet es domāju, ka matrica spīd tikai vienā virzienā, bet es gribēju, lai nakts gaisma spīd uz sāniem.

Ķēdes elementu pamatojums


Es pievērsu uzmanību Arduino mikrokontrolleriem. UNO ir diezgan piemērots variants manai idejai, pirmkārt tāpēc, ka tā ir populārākā platforma un tapu skaits nav pārāk liels, atšķirībā no Mega, otrkārt, tam var pieslēgt ārēju barošanas avotu, manā gadījumā tas ir 12V , atšķirībā no Nano , treškārt... nu, es domāju, ka varam apstāties pie šiem diviem punktiem. Platforma ir ārkārtīgi populāra visā pasaulē, pateicoties programmēšanas valodas ērtībai un vienkāršībai, kā arī tās atvērtajai arhitektūrai un programmas kodam.

Vairāk Detalizēta informācija Informāciju par šo dēli var viegli atrast internetā, tāpēc rakstu nepārslogošu.

Tātad, sistēmas pamatprasības. Nepieciešams:
– sensori, kas sekos attālumam līdz šķērslim, lai kontrolētu sistēmu;
– sensors signālu nolasīšanai no tālvadības pults tālvadība;
– LED, kas nodrošinās nepieciešamo apgaismojuma funkcionalitāti;
– vadības bloks, kas vadīs visu sistēmu.

Projektam kā attāluma sensori ir nepieciešami tālmēri, no kuriem katrs atbildīs noteiktai krāsai: sarkanai, zaļai, zilai. Attāluma sensori uzraudzīs rokas attālumu līdz nakts gaismai un, jo tuvāk roka tiks pietuvināta noteiktam sensoram, jo ​​spēcīgāk iedegsies šim attāluma mērītājam atbilstošā krāsa. Un otrādi, jo tālāk roka atrodas, jo mazāks spriegums tiek pievadīts sensoram atbilstošajai krāsai.

Populārākie tālmēri Šis brīdis tie ir Sharp GP2Y0A21YK un HC-SR04. Sharp GP2Y0A21YK ir infrasarkanais tālmērs. Tas ir aprīkots ar IR izstarotāju un IR uztvērēju: pirmais kalpo kā stara avots, kura atstarojumu uztver otrais. Tajā pašā laikā sensora IR stari cilvēka acij ir neredzami un tādā intensitātē ir nekaitīgi.

Salīdzinot ar ultraskaņas sensoru HC-SR04, šim sensoram ir gan priekšrocības, gan trūkumi. Priekšrocības ietver neitralitāti un nekaitīgumu. Trūkumi ir mazāks diapazons un atkarība no ārējiem traucējumiem, tostarp dažiem apgaismojuma veidiem.

Izmanto kā attāluma sensorus projektam: ultraskaņas tālmēri HC-SR04.
HC-SR04 darbības princips ir balstīts uz labi zināmo eholokācijas fenomenu. Lietojot to, emitētājs ģenerē akustisku signālu, kas, atstaroties no šķēršļa, atgriežas sensorā un tiek reģistrēts uztvērējā. Zinot ultraskaņas izplatīšanās ātrumu gaisā (apmēram 340 m/s) un aizkaves laiku starp izstaroto un saņemto signālu, ir viegli aprēķināt attālumu līdz akustiskajai barjerai.

TRIG ieeja tiek savienota ar jebkuru mikrokontrollera tapu. Šai tapai jāpieliek impulss. digitālais signāls ilgums 10 μs. Pamatojoties uz signālu TRIG ieejā, sensors nosūta ultraskaņas impulsu paketi. Pēc atstarotā signāla saņemšanas sensors pie ECHO tapas ģenerē impulsa signālu, kura ilgums ir proporcionāls attālumam līdz šķērslim.

IR sensors. Protams, no šī sensora tiks nolasīts un atšifrēts tālvadības pults nepieciešamais signāls. TSOP18 atšķiras viens no otra tikai ar frekvenci. Projektam tika izvēlēts sensors VS1838B TSOP1838.

Projekta pamatā bija ideja apgaismot telpu jebkurā krāsā, kas nozīmē, ka jums būs nepieciešamas 3 pamatkrāsas, no kurām tiks iegūts apgaismojums: sarkana, zaļa, zila. Tāpēc tika izvēlēts SMD 5050RGB LED modelis, kas lieliski tiks galā ar uzdevumu.

Atkarībā no katrai LED piegādātā sprieguma daudzuma, tie mainīs šī apgaismojuma intensitāti. Gaismas diode ir jāpievieno caur rezistoru, pretējā gadījumā mēs riskējam sabojāt ne tikai to, bet arī Arduino. Rezistors ir nepieciešams, lai ierobežotu LED strāvu līdz pieņemamai vērtībai. Fakts ir tāds, ka gaismas diodes iekšējā pretestība ir ļoti zema, un, ja jūs neizmantojat rezistoru, tad caur LED iet tāda strāva, ka tā vienkārši izdegs gan LED, gan kontrolieri.

Projektā izmantotās LED lentes tiek darbinātas ar 12V.

Sakarā ar to, ka gaismas diožu spriegums “izslēgtā” stāvoklī ir 6 V un ir nepieciešams regulēt barošanas avotu, kas pārsniedz 5 V, komutācijas režīmā ķēdei ir jāpievieno tranzistori. Mana izvēle krita uz BC547c modeli.

Tiem, kas aizmirsuši, īsi apsvērsim darbības principu npn tranzistors. Ja jūs vispār nepieslēdzat spriegumu, bet vienkārši īssavienojiet bāzes un emitētāja spailes, pat ja ne īssavienojumu, bet caur vairāku omu rezistoru, izrādās, ka bāzes emitētāja spriegums ir nulle. Līdz ar to nav bāzes strāvas. Tranzistors ir aizvērts, kolektora strāva ir niecīgi maza, tikai tāda pati sākotnējā strāva. Šajā gadījumā tiek uzskatīts, ka tranzistors ir izslēgtā stāvoklī. Pretēju stāvokli sauc par piesātinājumu: kad tranzistors ir pilnībā atvērts, tā ka tālāk vairs nav kur atvērties. Ar šo atvēršanas pakāpi kolektora-emitera sekcijas pretestība ir tik zema, ka vienkārši nav iespējams ieslēgt tranzistoru bez slodzes kolektora ķēdē, tas uzreiz izdegs. Šajā gadījumā atlikušais spriegums uz kolektora var būt tikai 0,3...0,5V.

Šie divi stāvokļi, piesātinājums un izslēgšana, tiek izmantoti, kad tranzistors darbojas pārslēgšanas režīmā, piemēram, parasts releja kontakts. Šī režīma galvenā nozīme ir tāda, ka maza bāzes strāva kontrolē lielu kolektora strāvu, kas ir vairākus desmitus reižu lielāka par bāzes strāvu. Liela kolektora strāva tiek iegūta, pateicoties ārējais avots enerģiju, bet tomēr pašreizējais ieguvums, kā saka, ir acīmredzams. Mūsu gadījumā mikroshēmā, kuras darba spriegums ir 5 V, ir 3 sloksnes ar gaismas diodēm, kas darbojas no 12 V.

Aprēķināsim atslēgu kaskādes darbības režīmu. Ir nepieciešams aprēķināt rezistora vērtību bāzes ķēdē, lai gaismas diodes degtu ar pilnu jaudu. Aprēķinos nepieciešams nosacījums, lai strāvas pastiprinājums būtu lielāks vai vienāds ar koeficientu, kas dalot maksimālo iespējamo kolektora strāvu ar minimālo iespējamo bāzes strāvu:

Tāpēc sloksnēm var būt 220 V darba spriegums, un bāzes ķēdi var vadīt no mikroshēmas ar 5 V spriegumu. Ja tranzistors ir paredzēts darbam ar šādu spriegumu pie kolektora, tad gaismas diodes iedegsies bez problēmām.
Sprieguma kritums pāri bāzes-emitera savienojumam ir 0,77 V, ja bāzes strāva ir 5 mA un kolektora strāva ir 0,1 A.
Spriegums pāri bāzes rezistoram būs:

Saskaņā ar Oma likumu:

No standarta pretestības diapazona mēs izvēlamies 8,2 kOhm rezistoru. Tas pabeidz aprēķinu.

Es vēlos vērst jūsu uzmanību uz vienu problēmu, ar kuru es saskāros. Izmantojot IRremote bibliotēku, Arduino sastinga, pielāgojot zilo krāsu. Pēc ilgas un rūpīgas meklēšanas internetā izrādījās, ka šī bibliotēka šim Arduino modelim pēc noklusējuma izmanto Timer 2. Taimeri tiek izmantoti, lai kontrolētu PWM izejas.

Taimeris 0 (sistēmas laiks, PWM 5 un 6);
taimeris 1 (PWM 9 un 10);
2. taimeris (PWM 3 un 11).

Sākotnēji es izmantoju PWM 11, lai regulētu zilo krāsu. Tāpēc esiet piesardzīgs, strādājot ar PWM, taimeriem un trešo pušu bibliotēkām, kas tos var izmantot. Dīvaini, ka mājas lapa Github par šo niansi nekas netika teikts. Ja vēlaties, varat noņemt rindiņas komentāru ar taimeri 1 un komentēt 2.

Elementu savienošana uz maizes paneļa izskatās šādi:

Pēc testēšanas uz maizes dēļa sākās fāzes “Elementu novietošana uz tāfeles” un “Darbs ar lodāmuru”. Pēc pirmās gatavās dēļa pārbaudes manā galvā iezogas doma: kaut kas nogāja greizi. Un šeit sākas daudziem pazīstamais posms “Rūpīgs darbs ar testeri”. Taču problēmas (nejauši tika pielodēti vairāki blakus kontakti) ātri vien tika novērstas un lūk, ilgi gaidītā palaidnīgā gaismas diožu gaisma.

Tad tas bija tikai ķermeņa jautājums. Šī iemesla dēļ tika sagriezts saplāksnis ar caurumiem mūsu sensoriem. Aizmugurējais vāciņš tas tika izgatavots speciāli noņemams, lai varētu baudīt skatu no iekšpuses un pēc vēlēšanās kaut ko pabeigt vai pārtaisīt. Tam ir arī 2 caurumi plates un barošanas avota pārprogrammēšanai.

Korpuss tika līmēts ar divkomponentu epoksīda līmi. Ir vērts atzīmēt šīs līmes īpatnību tiem, kuri ar to iepriekš nav saskārušies. Šis produkts tiek piegādāts divos atsevišķos traukos, un, sajaucot saturu, notiek tūlītēja ķīmiska reakcija. Pēc sajaukšanas jārīkojas ātri, 3-4 minūšu laikā. Turpmākai lietošanai jāsajauc jauna porcija. Tātad, ja jūs mēģināt to atkārtot, mans padoms jums ir sajaukt mazās porcijās un rīkoties ļoti ātri, nebūs daudz laika domāt. Tāpēc ir vērts iepriekš padomāt, kā un kur līmēt korpusu. Turklāt to nevar izdarīt vienā sēdē.

Montāžas sloksnēm ar gaismas diodēm augšējais vāks tika ievietota caurule, caur kuru visi vadi izgāja perfekti.

Kad radās problēma ar abažūru, atcerējos, kā bērnībā darināju rokdarbus no vienkārša diega, līmes un balona, ​​kas kalpoja par pamatu. Abažūra princips ir vienāds, taču daudzskaldņa ietīšana izrādījās grūtāka nekā bumbiņa. Vītņu spiediena dēļ uz konstrukciju tā sāka sašaurināties uz augšu un pavedieni sāka nokrist. Steidzami, ar līmi aplīmētām rokām, tika nolemts nostiprināt struktūru no augšas. Un tad CD nāca palīgā. Gala rezultāts ir šī nakts gaisma:

Ko jūs vēlētos pateikt beigās?

Kas man projektā jāmaina? Lai piegādātu TRIG signālu attāluma sensoriem, trīs vietā varētu izmantot vienu Arduino izvadi. Es ierādītu arī caurumu IR sensoram (par kuru aizmirsu), kas diemžēl joprojām ir paslēpts korpusā, no kura tas, protams, nevar nolasīt signālus no tālvadības pults. Tomēr kurš teica, ka neko nevar lodēt vai urbt?

Vēlos atzīmēt, ka šis bija interesants semestris, un lieliska iespēja pamēģināt izdarīt kaut ko ne uz papīra, pateicoties kam varu ielikt vēl vienu ķeksīti pie “bērnības sapņa” pozīcijas. Un, ja jums šķiet, ka ir grūti izmēģināt kaut ko jaunu, un nezināt, ko darīt vispirms, neuztraucieties. Daudziem cilvēkiem galvā šaudās doma: ar ko sākt un kā to vispār var izdarīt? Dzīvē ir daudz uzdevumu, no kuriem jūs varat apjukt, bet, kad pamēģināsit, jūs ievērosiet, ka ar mirdzumu acīs jūs varat pārvietot kalnus, pat ja jums ir nedaudz jāpacenšas.

Papildu uzdevumam

    Vēl 1 LED

    Vēl 1 rezistors ar nominālo vērtību 220 omi

    Vēl 2 vadi

Shematiska diagramma

Shēma uz maizes dēļa

Piezīme

    Šajā eksperimentā mēs uzstādām fotorezistoru starp barošanas avotu un analogo ieeju, t.i. uz pozīciju R1 sprieguma dalītāja ķēdē. Mums tas ir vajadzīgs, lai, samazinoties apgaismojumam, mēs saņemtu mazāku spriegumu analogajā ieejā.

    Mēģiniet novietot sastāvdaļas tā, lai gaismas diode neizgaismotu fotorezistoru.

Skice

p050_night_light.ino #define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT) ; ) void loop() ( // nolasa gaismas līmeni. Starp citu, paziņo // tam var uzreiz piešķirt mainīgo un vērtību int vieglums = analogRead(LDR_PIN) ; // nolasa vērtību no potenciometra, ar kuru mēs regulējam // sliekšņa vērtība starp nosacīto tumsu un gaismu int slieksnis = analogRead(POT_PIN) ; // deklarēt Būla mainīgo un piešķirt tam vērtību // "Vai tagad ir tumšs." Būla mainīgie, atšķirībā no // veseli skaitļi, var saturēt tikai vienu no divām vērtībām: // patiesība vai meli. Tādas vērtības // sauc arī par Būla. Būla tooDark = (vieglums< threshold) ; // izmantot programmas sazarošanu: procesors izpildīs vienu no // divi koda bloki atkarībā no nosacījuma izpildes. // Ja (angļu valodā “if”) ir pārāk tumšs... ja (pārāk tumšs) ( // ...ieslēdz apgaismojumu digitalWrite(LED_PIN, AUGSTS); ) cits ( // ...citādi gaisma nav vajadzīga - izslēdz digitalWrite(LED_PIN, LOW) ; ) )

Koda skaidrojumi

    Mēs izmantojam jauna veida mainīgo - Būla vērtību, kas saglabā tikai vērtības true (true, 1) vai false (false, 0). Šīs vērtības ir Būla izteiksmju novērtēšanas rezultāts. Šajā piemērā Būla izteiksme ir vieglums< threshold . На человеческом языке это звучит как: «освещенность ниже порогового уровня». Такое высказывание будет истинным, когда освещенность ниже порогового уровня. Микроконтроллер может сравнить значения переменных lightness и threshold , которые, в свою очередь, являются результатами измерений, и вычислить истинность логического выражения.

    Šo loģisko izteiksmi ievietojām iekavās tikai skaidrības labad. Vienmēr labāk ir rakstīt lasāmu kodu. Citos gadījumos iekavas var ietekmēt darbību secību, tāpat kā parastajā aritmētikā.

    Mūsu eksperimentā Būla izteiksme būs patiesa, ja gaišuma vērtība ir mazāka par sliekšņa vērtību, jo mēs izmantojām operatoru< . Мы можем использовать операторы > , <= , >= , == , != , kas attiecīgi nozīmē “lielāks par”, “mazāks vai vienāds ar”, “lielāks par vai vienāds ar”, “vienāds ar”, “nav vienāds ar”.

    Esiet īpaši uzmanīgs ar loģisko operatoru == un nejauciet to ar piešķiršanas operatoru = . Pirmajā gadījumā mēs salīdzinām izteiksmju vērtības un iegūstam loģisku vērtību (patiesa vai nepatiesa), bet otrajā gadījumā kreisajam operandam piešķiram labā operanda vērtību. Kompilators nezina mūsu nodomus un neizdos kļūdu, taču mēs varam nejauši mainīt kāda mainīgā vērtību un pēc tam ilgi meklēt kļūdu.

    Nosacītais if priekšraksts ir viens no galvenajiem lielākajā daļā programmēšanas valodu. Ar tās palīdzību mēs varam veikt ne tikai stingri noteiktu darbību secību, bet arī pieņemt lēmumus par to, kuram algoritma atzaram sekot, atkarībā no noteiktiem nosacījumiem.

    Loģiskā izteiksme vieglums< threshold есть значение: true или false . Мы вычислили его и поместили в булеву переменную tooDark («слишком темно»). Таким образом мы как бы говорим «если слишком темно, то включить светодиод»

    Ar tādiem pašiem panākumiem mēs varētu teikt: “ja apgaismojums ir mazāks par sliekšņa līmeni, tad ieslēdziet LED”, t.i. nodot visu loģisko izteiksmi, ja:

ja (vieglums< threshold) { // ... }

    Aiz muguras nosacīts operators ja obligāti seko koda blokam, kas tiek izpildīts, ja loģiskā izteiksme ir patiesa. Neaizmirstiet par abām cirtainajām lencēm ()!

    Ja izteiksme ir patiesa, mums tikai jāizpilda viens instrukciju, to var rakstīt uzreiz aiz if (...) bez cirtaini breketes:

ja (vieglums< threshold) digitalWrite(LED_PIN, HIGH) ;

    Paziņojumu if var paplašināt ar else konstrukciju. Koda bloks vai atsevišķs priekšraksts, kas tam seko, tiks izpildīts tikai tad, ja Būla izteiksme in if tiek novērtēta kā false. Noteikumi attiecībā uz cirtainiem lencēm ir vienādi. Mūsu eksperimentā mēs rakstījām "ja ir pārāk tumšs, ieslēdziet LED, pretējā gadījumā izslēdziet LED".

Reālos Arduino projektos diezgan bieži tiek izmantoti gaismas sensori (apgaismojums), kas būvēti uz fotorezistoru bāzes. Tie ir salīdzinoši vienkārši, nav dārgi, un tos ir viegli atrast un iegādāties jebkurā interneta veikalā. Arduino fotorezistors ļauj kontrolēt gaismas līmeni un reaģēt uz tā izmaiņām. Šajā rakstā mēs apskatīsim, kas ir fotorezistors, kā darbojas uz tā balstīts gaismas sensors un kā pareizi savienot sensoru ar Arduino platēm.

Fotorezistors, kā norāda nosaukums, ir tieši saistīts ar rezistoriem, kas bieži sastopami gandrīz jebkurā elektroniskajā shēmā. Parastā rezistora galvenā īpašība ir tā pretestības vērtība. No tā ir atkarīgs spriegums un strāva, izmantojot rezistoru, mēs iestatām citu komponentu nepieciešamos darbības režīmus. Parasti rezistora pretestības vērtība tādos pašos darbības apstākļos praktiski nemainās.

Atšķirībā no parastajiem rezistoriem, fotorezistors var mainīt savu pretestību atkarībā no apkārtējās gaismas līmeņa. Tas nozīmē, ka iekš elektroniskā shēma Parametri pastāvīgi mainīsies, pirmkārt, mūs interesē sprieguma kritums pāri fotorezistoram. Ierakstot šīs sprieguma izmaiņas uz Arduino analogajām tapām, mēs varam mainīt ķēdes loģiku, tādējādi radot ierīces, kas pielāgojas ārējiem apstākļiem.

Fotorezistori diezgan aktīvi tiek izmantoti visdažādākajās sistēmās. Visizplatītākais lietojums ir ielu apgaismojums. Ja pilsētā iestājas nakts vai kļūst mākoņains, gaismas ieslēdzas automātiski. Ekonomisku spuldzīti mājai var izgatavot no fotorezistora, kas ieslēdzas nevis pēc grafika, bet atkarībā no apgaismojuma. Jūs pat varat izveidot drošības sistēmu, kuras pamatā ir gaismas sensors, kas iedarbināsies uzreiz pēc slēgta skapja vai seifa atvēršanas un izgaismošanas. Kā vienmēr, jebkura Arduino sensora pielietojuma jomu ierobežo tikai mūsu iztēle.

Kādus fotorezistorus var iegādāties interneta veikalos

Populārākās un pieejamu variantu tirgū esošie sensori ir Ķīnas uzņēmumu masveida ražošanas modeļi, ražotāja VT produktu kloni. Ne vienmēr ir iespējams noskaidrot, kas un ko tieši ražo šis vai cits piegādātājs, taču, lai sāktu darbu ar fotorezistoriem, visvienkāršākā iespēja ir diezgan piemērota.

Iesācējam Arduino lietotājam var ieteikt iegādāties gatavu foto moduli, kas izskatās šādi:


Šis modulis jau satur visus nepieciešamos elementus viegls savienojums fotorezistors uz Arduino plates. Daži moduļi ievieš salīdzinājuma ķēdi un nodrošina ciparu izvadi un apgriešanas rezistoru kontrolei.

Krievu radioamatierim var ieteikt vērsties pie Krievijas PA sensora. Pārdošanā ir pieejami FR1-3, FR1-4 utt. - ražoti vēl padomju laikos. Bet, neskatoties uz to, FR1-3 ir precīzāka detaļa. No tā izriet cenas atšķirība.Par FR viņi prasa ne vairāk kā 400 rubļus. FR1-3 maksās vairāk nekā tūkstoti rubļu gabalā.

Fotorezistoru marķēšana

Mūsdienu Krievijā ražoto modeļu marķēšana ir diezgan vienkārša. Pirmie divi burti ir PhotoResistor, cipari aiz domuzīmes norāda izstrādes numuru. FR -765 - fotorezistors, attīstīšana 765. Parasti marķē tieši uz detaļas korpusa

VT sensoram ir pretestības diapazons, kas norādīts marķējuma diagrammā. Piemēram:

  • VT83N1 - 12-100kOhm (12K - apgaismots, 100K - tumsā)
  • VT93N2 - 48-500kOhm (48K – izgaismots, 100K – tumsā).

Dažreiz, lai precizētu informāciju par modeļiem, pārdevējs nodrošina īpašu ražotāja dokumentu. Papildus darbības parametriem tur ir norādīta arī detaļas precizitāte. Visiem modeļiem ir jutīguma diapazons redzamajā spektra daļā. Kolekcionēšana gaismas sensors Jums jāsaprot, ka darbības precizitāte ir relatīvs jēdziens. Pat modeļiem no viena ražotāja, vienas partijas vai viena pirkuma tas var atšķirties par 50% vai vairāk.

Rūpnīcā detaļas ir noregulētas uz viļņu garumiem, sākot no sarkanas līdz zaļai gaismai. Lielākā daļa cilvēku arī “redz” infrasarkano starojumu. Īpaši precīzas detaļas var pat noteikt ultravioleto gaismu.

Sensora priekšrocības un trūkumi

Galvenais fotorezistoru trūkums ir spektra jutība. Atkarībā no krītošās gaismas veida pretestība var atšķirties par vairākām kārtām. Trūkumi ietver arī zems ātrums reakcija uz apgaismojuma izmaiņām. Ja gaisma mirgo, sensoram nav laika reaģēt. Ja izmaiņu biežums ir diezgan augsts, rezistors parasti pārstāj “redzēt”, ka apgaismojums mainās.

Priekšrocības ietver vienkāršību un pieejamību. Tieša pretestības maiņa atkarībā no gaismas, kas uz tā krīt, ļauj vienkāršot elektriskā shēma savienojumiem. Fotorezistors pats par sevi ir ļoti lēts, tas ir iekļauts daudzos Arduino komplektos un konstruktoros, un tāpēc ir pieejams gandrīz jebkuram iesācējam Arduino ražotājam.

Fotorezistora pievienošana Arduino

Projektos arduino Fotorezistors tiek izmantots kā gaismas sensors. Saņemot no tā informāciju, dēlis var ieslēgt vai izslēgt relejus, iedarbināt dzinējus un nosūtīt ziņojumus. Protams, sensors ir jāpievieno pareizi.

Gaismas sensora savienojuma shēma ar Arduino ir diezgan vienkārša. Ja izmantojam fotorezistoru, tad pieslēguma shēmā sensors ir realizēts kā sprieguma dalītājs. Viena roka mainās atkarībā no apgaismojuma līmeņa, otrā piegādā spriegumu analogajai ieejai. Kontrollera mikroshēmā šis spriegums tiek pārveidots ciparu datos, izmantojot ADC. Jo Kad sensora pretestība samazinās, kad uz to saskaras gaisma, samazināsies arī pāri tam krītošā sprieguma vērtība.

Atkarībā no tā, kurā dalītāja svirā ievietojām fotorezistoru, analogajai ieejai tiks piegādāts palielināts vai samazināts spriegums. Ja viena fotorezistora kāja ir savienota ar zemi, tad maksimālā sprieguma vērtība atbildīs tumsai (fotorezistora pretestība ir maksimāla, pāri tai krītas gandrīz viss spriegums), bet minimālā vērtība atbilst labam apgaismojumam (pretestība ir tuvu nullei, spriegums ir minimāls). Ja fotorezistora sviru pievienosim barošanas avotam, izturēšanās būs pretēja.

Pašas dēļa uzstādīšana nedrīkst radīt nekādas grūtības. Tā kā fotorezistoram nav polaritātes, to var savienot no abām pusēm, to var pielodēt pie plates, savienot ar vadiem, izmantojot shēmas plati, vai izmantot ar parastajiem klipšiem (krokodila klipšiem) savienošanai. Strāvas avots ķēdē ir pats Arduino. Fotorezistors viena kāja ir savienota ar zemi, otra ir savienota ar ADC plati (mūsu piemērā - AO). Mēs pievienojam 10 kOhm rezistoru tai pašai kājai. Protams, fotorezistoru var savienot ne tikai ar analogo tapu A0, bet arī ar jebkuru citu.

Daži vārdi par papildu rezistoru 10 K. Tam mūsu ķēdē ir divas funkcijas: strāvas ierobežošana ķēdē un veidošanās. nepieciešamais spriegumsķēdē ar dalītāju. Strāvas ierobežojums ir nepieciešams situācijā, kad pilnībā izgaismots fotorezistors krasi samazina tā pretestību. Un sprieguma ģenerēšana ir paredzēta prognozējamām vērtībām analogajā portā. Patiesībā priekš normāla darbība Ar mūsu fotorezistoriem pietiek ar 1K pretestību.

Mainot rezistora vērtību, mēs varam “novirzīt” jutības līmeni uz “tumšo” un “gaismo” pusi. Tātad 10K dos ātra pārslēgšanās gaismas iestāšanās. 1K gadījumā gaismas sensors precīzāk noteiks augstus gaismas līmeņus.

Ja jūs lietojat gatavs modulis gaismas sensors, tad savienojums būs vēl vienkāršāks. Mēs savienojam VCC moduļa izeju ar 5V savienotāju uz plates, GND ar zemi. Mēs savienojam atlikušās tapas ar Arduino savienotājiem.

Ja platei ir digitālā izeja, tad mēs to nosūtām uz digitālajām tapām. Ja tas ir analogs, dodieties uz analogo. Pirmajā gadījumā mēs saņemsim sprūda signālu - ir pārsniegts apgaismojuma līmenis (sprūda slieksni var regulēt, izmantojot regulēšanas rezistoru). No analogajām tapām mēs varēsim iegūt sprieguma vērtību, kas ir proporcionāla faktiskajam apgaismojuma līmenim.

Fotorezistora gaismas sensora skice paraugs

Mēs savienojām ķēdi ar fotorezistoru ar Arduino un pārliecinājāmies, ka viss ir izdarīts pareizi. Tagad atliek tikai ieprogrammēt kontrolieri.

Gaismas sensora skices rakstīšana ir pavisam vienkārša. Mums ir jānoņem tikai pašreizējā sprieguma vērtība no analogās tapas, kurai ir pievienots sensors. Tas tiek darīts, izmantojot mums visiem zināmo funkciju analogRead (). Pēc tam mēs varam veikt dažas darbības atkarībā no apgaismojuma līmeņa.

Uzrakstīsim skici gaismas sensoram, kas ieslēdz vai izslēdz LED, kas pievienots saskaņā ar šādu shēmu.

Darbības algoritms ir šāds:

  • Nosakiet signāla līmeni no analogās tapas.
  • Mēs salīdzinām līmeni ar sliekšņa vērtību. Maksimālā vērtība atbildīs tumsai, minimālā vērtība atbilst maksimālajam apgaismojumam. Izvēlēsimies sliekšņa vērtību, kas vienāda ar 300.
  • Ja līmenis ir mazāks par slieksni, ir tumšs, jums jāieslēdz gaismas diode.
  • Pretējā gadījumā izslēdziet LED.
#define PIN_LED 13 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() ( int val = analogRead(PIN_PHOTO_SENSOR); Serial.println(val); if ( val< 300) { digitalWrite(PIN_LED, LOW); } else { digitalWrite(PIN_LED, HIGH); } }

Nosedzot fotorezistoru (ar rokām vai gaismu necaurlaidīgu priekšmetu), varam novērot LED iedegšanos un izslēgšanu. Mainot sliekšņa parametru kodā, mēs varam piespiest spuldzi ieslēgt/izslēgt dažādos apgaismojuma līmeņos.

Uzstādot, mēģiniet novietot fotorezistoru un LED pēc iespējas tālāk vienu no otra, lai mazāk gaismas no spilgtās LED nokristu uz gaismas sensoru.

Gaismas sensors un vienmērīga fona apgaismojuma spilgtuma maiņa

Jūs varat modificēt projektu tā, lai gaismas diodes spilgtums mainītos atkarībā no apgaismojuma līmeņa. Algoritmā tiks veiktas šādas izmaiņas:

  • Mēs mainīsim spuldzes spilgtumu, izmantojot PWM, nosūtot vērtības no 0 līdz 255 uz kontaktu ar LED, izmantojot analogWrite().
  • Lai pārveidotu gaismas līmeņa digitālo vērtību no gaismas sensora (no 0 līdz 1023) PWM LED spilgtuma diapazonā (no 0 līdz 255), mēs izmantosim funkciju map().

Skices piemērs:

#define PIN_LED 10 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() ( int val = analogRead(PIN_PHOTO_SENSOR); Serial.println(val); int ledPower = map(val, 0, 1023, 0, 255); // Konvertējiet iegūto vērtību PWM signāla līmenī. Jo zemāka ir apgaismojuma vērtība, jo mazāk enerģijas mums jāpiegādā LED, izmantojot PWM. analogWrite(PIN_LED, ledPower) ; // Mainīt spilgtumu)

Citas savienojuma metodes gadījumā, kurā signāls no analogās pieslēgvietas ir proporcionāls apgaismojuma pakāpei, jums būs papildus "jāapgriež" vērtība, atņemot to no maksimālā:

Int val = 1023 – analogRead(PIN_PHOTO_RESISTOR);

Gaismas sensora ķēde, izmantojot fotorezistoru un releju

Skiču piemēri darbam ar relejiem ir sniegti rakstā par releju programmēšanu Arduino. Šajā gadījumā mums nav jāveic sarežģītas kustības: pēc “tumsas” noteikšanas mēs vienkārši ieslēdzam releju un tā tapai piemērojam atbilstošo vērtību.

#define PIN_RELAY 10 #define PIN_PHOTO_SENSOR A0 void setup() ( pinMode(PIN_RELAY, OUTPUT); digitalWrite(PIN_RELAY, HIGH); ) void loop() ( int val = analogRead(PIN_PHOTO_SENSOR); if (val< 300) { // Светло, выключаем реле digitalWrite(PIN_RELAY, HIGH); } else { // Темновато, включаем лампочку digitalWrite(PIN_RELAY, LOW); } }

Secinājums

Projekti, kuros izmanto gaismas sensoru, kura pamatā ir fotorezistors, ir diezgan vienkārši un efektīvi. Jūs varat īstenot daudz interesantu projektu, un aprīkojuma izmaksas nebūs augstas. Fotorezistors ir savienots, izmantojot sprieguma dalītāja ķēdi ar papildu pretestību. Sensors ir savienots ar analogo portu, lai izmērītu dažādus gaismas līmeņus, vai ar digitālo, ja mums rūp tikai tumsa. Skicē mēs vienkārši nolasām datus no analogā (vai digitālā) porta un izlemjam, kā reaģēt uz izmaiņām. Cerēsim, ka tagad jūsu projektos parādīsies tik vienkāršas “acis”.

Šajā eksperimentā gaismas diodei jāieslēdzas, kad gaismas līmenis nokrītas zem potenciometra iestatītā sliekšņa.

EKSPERIMENTA DAĻU SARAKSTS

- 1 Arduino Uno dēlis;

- 1 bezlodējamais maizes dēlis;

- 1 LED;

- 1 fotorezistors;

- 1 rezistors ar nominālo vērtību 220 omi, 1 rezistors ar nominālvērtību 10 kOhm;

- 1 mainīgs rezistors (potenciometrs);

- 10 vīriešu-vīriešu vadi.

INFORMĀCIJA PAR PAPILDU UZDEVUMU

vēl 1 LED;

Vēl viens rezistors ar nominālo vērtību 220 omi;

Vēl 2 vadi.

SĒTES DIAGRAMMA

DIAGRAMMA UZ PLĀCES

SKICE

lejupielādējiet Arduino IDE skici
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) void loop() ( // lasīt gaismas līmeni. Starp citu, // jūs varat deklarēt mainīgo un piešķirt vērtība tam uzreiz int lightness = analogRead(LDR_PIN); // nolasa vērtību no potenciometra, ko izmantojam, lai pielāgotu // sliekšņa vērtību starp nosacīto tumsu un gaismu int slieksnis = analogRead(POT_PIN); // deklarēt a loģiskais mainīgais un piešķir tam vērtību // “vai tagad ir tumšs”. Būla mainīgie, atšķirībā no // veseliem mainīgajiem, var saturēt tikai vienu no divām vērtībām: // patiesa vai nepatiesa. Šādas vērtības // tiek sauktas arī par Būla vērtībām. Būla tooDark = (vieglums< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

KODS SKAIDROJUMI

  • Mēs izmantojam jauna veida mainīgos - Būla, kas glabā tikai vērtības taisnība (taisnība, 1) vai viltus (nepatiess, 0). Šīs vērtības ir Būla izteiksmju novērtēšanas rezultāts. Šajā piemērā Būla izteiksme ir vieglums< threshold . Cilvēku valodā tas izklausās šādi: "apgaismojums zem sliekšņa līmeņa". Šāds apgalvojums būs patiess, ja apgaismojums ir zem sliekšņa līmeņa. Mikrokontrolleris var salīdzināt mainīgo lielumu vērtības vieglums Un slieksnis, kas savukārt ir mērījumu rezultāti, un aprēķina loģiskās izteiksmes patiesumu.
  • Šo loģisko izteiksmi ievietojām iekavās tikai skaidrības labad. Vienmēr labāk ir rakstīt lasāmu kodu. Citos gadījumos iekavas var ietekmēt darbību secību, tāpat kā parastajā aritmētikā.
  • Mūsu eksperimentā Būla izteiksme būs patiesa, ja vērtība vieglums mazāka par vērtību slieksnis jo izmantojām operatoru < . Mēs varam izmantot operatorus > , <= , >= , = = , != , kas nozīmē attiecīgi “lielāks par”, “mazāks vai vienāds ar”, “lielāks vai vienāds ar”, “vienāds ar”, “nav vienāds ar”.
  • Esiet īpaši uzmanīgs ar loģisko operatoru = = un nejauciet to ar piešķiršanas operatoru = . Pirmajā gadījumā mēs salīdzinām izteiksmju vērtības un iegūstam loģisku vērtību (patiesa vai nepatiesa), bet otrajā gadījumā kreisajam operandam piešķiram labā operanda vērtību. Kompilators nezina mūsu nodomus un neizdos kļūdu, taču mēs varam nejauši mainīt kāda mainīgā vērtību un pēc tam ilgi meklēt kļūdu.
  • Nosacīts operators jaJa") ir viena no galvenajām programmām lielākajā daļā programmēšanas valodu. Ar tās palīdzību mēs varam veikt ne tikai stingri noteiktu darbību secību, bet arī pieņemt lēmumus par to, kuram algoritma atzaram sekot, atkarībā no noteiktiem nosacījumiem.
  • Loģiskai izteiksmei vieglums< threshold ir nozīme: taisnība vai viltus. Mēs to aprēķinājām un ievietojām Būla mainīgajā pārāk tumšs("pārāk tumšs") Tādējādi mēs, šķiet, sakām: "Ja ir pārāk tumšs, ieslēdziet LED"
  • Ar tādiem pašiem panākumiem mēs varētu teikt: “ja apgaismojums ir mazāks par sliekšņa līmeni, tad ieslēdziet LED”, t.i. pārsūtīt uz ja visas loģiskās izteiksmes:
ja (vieglums< threshold) { // ... }
  • Aiz nosacītā paziņojuma ja Jābūt koda blokam, kas tiek izpildīts, ja loģiskā izteiksme ir patiesa. Neaizmirstiet par abām cirtainajām lencēm {} !
  • Ja izteiksme ir patiesa, mums tikai jāizpilda viens norādījumus, to var rakstīt uzreiz pēc ja (…) bez cirtainiem lencēm:
ja (vieglums< threshold) digitalWrite(LED_PIN, HIGH);
  • Operators ja var pagarināt ar dizainu cits("citādi"). Koda bloks vai viens priekšraksts, kas tam seko, tiks izpildīts tikai tad, ja loģiskā izteiksme in ja ir nozīme viltus , « meli" Noteikumi attiecībā uz cirtainiem lencēm ir vienādi. Mūsu eksperimentā mēs rakstījām "ja ir pārāk tumšs, ieslēdziet LED, pretējā gadījumā izslēdziet LED".

JAUTĀJUMI, LAI PĀRBAUDĪTU SEVI

  1. Ja mēs uzstādīsim fotorezistoru starp analogo ieeju un zemi, mūsu ierīce darbosies pretēji: LED ieslēgsies, kad palielinās gaismas daudzums. Kāpēc?
  2. Kādu ierīces darbības rezultātu iegūsim, ja gaisma no LED nokritīs uz fotorezistoru?
  3. Ja mēs uzstādām fotorezistoru, kā norādīts iepriekšējā jautājumā, kā mums ir jāmaina programma, lai ierīce darbotos pareizi?
  4. Pieņemsim, ka mums ir kods ja (nosacījums) (darbība;). Kādos gadījumos tas tiks darīts? darbība ?
  5. Par kādām vērtībām y izteiksme x + y > 0 būs taisnība, ja x > 0 ?
  6. Vai ir jānorāda, kuras instrukcijas izpildīt, ja nosacījums ir priekšrakstā ja viltus?
  7. Kāda ir atšķirība starp operatoru = = no operatora = ?
  8. Ja mēs izmantojam konstrukciju ja (nosacījums) darbība1; cita darbība2;, vai varētu būt situācija, ka neviena no darbībām netiek izpildīta? Kāpēc?

UZDEVUMI NEATKARĪGAM RISINĀJUMAM

  1. Pārrakstiet programmu, neizmantojot mainīgo pārāk tumšs vienlaikus saglabājot ierīces funkcionalitāti.
  2. Pievienojiet ķēdei vēl vienu LED. Pabeidziet programmu tā, lai, apgaismojumam nokrītot zem sliekšņa vērtības, iedegtos viena gaismas diode, un, kad apgaismojums nokrītas zem puses no sliekšņa vērtības, iedegtos abas gaismas diodes.
  3. Mainiet ķēdi un programmu tā, lai gaismas diodes ieslēgtos pēc tāda paša principa, bet spīdētu, jo intensīvāk, jo mazāk gaismas krīt uz fotorezistoru.




Tops