Yövalo vanhasta hehkulampusta, perustuu Arduinoon ja WS2812:een. Tehtävät itsenäiseen ratkaisuun

Luultavasti jokaisella oli unelma lapsuudessa (ja useammalla kuin yhdellä). Voit jopa yrittää muistaa sitä tunnetta, joka täyttää lapsen sielun hänen unelmansa toteutuessa, tai sen kaukaisen tutun kipinän silmissä... Lapsena haaveilin omasta yövalosta.

Nyt olen 4. vuoden opiskelija BSUIR:ssa, ja kun meille kerrottiin, että piirisuunnittelun kurssiprojekti voidaan tehdä ei paperilla, vaan laitteistolla, minulle valkeni: yövalo, jota niin halusin lapsen voin tehdä itse. Älä tee vain esinettä, joka valaisee huonetta pimeässä, vaan laite, jota voidaan helposti ohjata mihin tahansa tunnelmaan. Miksi ei? Päätin lisätä mahdollisuuden vaihtaa värejä käsilläni: mitä lähempänä käteni on yövaloa, sitä kirkkaammin yksi väreistä (RGB) syttyy. Haluaisin myös ohjata yövaloa kaukosäätimellä.

Myönnän heti, että huomasin idean verkkosivustolla cxem.net. Lyhyesti sanottuna tässä esimerkissä käytettiin RGB-matriisia, jota ohjattiin siirtorekistereillä ja ultraäänietäisyysantureilla. Mutta ajattelin, että matriisi paistaa vain yhteen suuntaan, mutta halusin yövalon loistavan sivuilla.

Piirielementtien perustelut


Käänsin huomioni Arduino-mikro-ohjaimiin. UNO on varsin sopiva vaihtoehto ajatukselleni, ensinnäkin koska se on suosituin alusta ja nastojen määrä ei ole liian suuri, toisin kuin Mega, ja toiseksi siihen voi liittää ulkoisen virtalähteen, minun tapauksessani se on 12V , toisin kuin Nano, kolmanneksi... no, mielestäni voimme pysähtyä näihin kahteen kohtaan. Alusta on erittäin suosittu kaikkialla maailmassa ohjelmointikielen mukavuuden ja yksinkertaisuuden sekä avoimen arkkitehtuurin ja ohjelmakoodin ansiosta.

Lisää yksityiskohtainen tieto Löydät helposti tietoa tästä taulusta Internetistä, joten en ylikuormita artikkelia.

Eli järjestelmän perusvaatimukset. Edellytetään:
– anturit, jotka seuraavat etäisyyttä esteeseen järjestelmän ohjaamiseksi;
– anturi kaukosäätimen signaalien lukemiseen kaukosäädin;
– LEDit, jotka tarjoavat tarvittavan valaistustoiminnon;
– ohjausyksikkö, joka ohjaa koko järjestelmää.

Projekti vaatii etäisyysantureiksi etäisyysmittareita, joista jokainen vastaa tiettyä väriä: punainen, vihreä, sininen. Etäisyysanturit tarkkailevat käden etäisyyttä yövaloon ja mitä lähemmäs käsi tuodaan tiettyä anturia, sitä voimakkaammin tätä etäisyysmittaria vastaava väri syttyy. Sitä vastoin mitä kauempana käsi on, sitä vähemmän jännitettä kohdistetaan anturia vastaavaan väriin.

Suosituimmat etäisyysmittarit käytössä Tämä hetki nämä ovat Sharp GP2Y0A21YK ja HC-SR04. Sharp GP2Y0A21YK on infrapunaetäisyysmittari. Se on varustettu IR-lähettimellä ja IR-vastaanottimella: ensimmäinen toimii säteen lähteenä, jonka heijastuksen toinen sieppaa. Samanaikaisesti anturin IR-säteet ovat ihmissilmälle näkymättömiä ja sellaisella intensiteetillä vaarattomia.

Ultraäänianturiin HC-SR04 verrattuna tällä anturilla on sekä etuja että haittoja. Etuja ovat neutraalisuus ja vaarattomuus. Haittoja ovat lyhyempi kantama ja riippuvuus ulkoisista häiriöistä, mukaan lukien tietyt valaistustyypit.

Käytetään etäisyysantureina projektissa: ultraäänietäisyysmittarit HC-SR04.
HC-SR04:n toimintaperiaate perustuu hyvin tunnettuun kaikulokaatioilmiöön. Sitä käytettäessä lähetin tuottaa akustisen signaalin, joka heijastuessaan esteestä palaa anturiin ja vastaanotin rekisteröi sen. Kun tiedät ultraäänen etenemisnopeuden ilmassa (noin 340 m/s) ja lähetetyn ja vastaanotetun signaalin välisen viiveen, on helppo laskea etäisyys akustiseen esteeseen.

TRIG-sisääntulo liitetään mihin tahansa mikro-ohjaimen nastaan. Tähän nastaan ​​on kohdistettava pulssi. digitaalinen signaali kesto 10 μs. TRIG-tulon signaalin perusteella anturi lähettää paketin ultraäänipulsseja. Vastaanotettuaan heijastuneen signaalin anturi muodostaa ECHO-nastassa pulssisignaalin, jonka kesto on verrannollinen etäisyyteen esteeseen.

IR anturi. Tietenkin kauko-ohjaukseen tarvittava signaali luetaan ja dekoodataan tästä anturista. TSOP18 eroavat toisistaan ​​vain taajuudella. Projektiin valittiin anturi VS1838B TSOP1838.

Projekti perustui ajatukseen huoneen valaistuksesta millä tahansa värillä, mikä tarkoittaa, että tarvitset 3 pääväriä, joista valaistus saadaan: punainen, vihreä, sininen. Siksi valittiin SMD 5050RGB LED -malli, joka selviää tehtävästä täydellisesti.

Riippuen kuhunkin LEDiin syötetyn jännitteen määrästä, ne muuttavat tämän valaistuksen voimakkuutta. LED on kytkettävä vastuksen kautta, muuten uhkaamme pilata sen lisäksi myös Arduinon. Vastusta tarvitaan LEDin virran rajoittamiseksi hyväksyttävään arvoon. Tosiasia on, että LEDin sisäinen resistanssi on erittäin pieni, ja jos et käytä vastusta, LEDin läpi kulkee sellainen virta, että se yksinkertaisesti polttaa sekä LEDin että ohjaimen.

Projektissa käytetyt LED-nauhat saavat 12V jännitteen.

Koska LEDien jännite "pois päältä" -tilassa on 6 V ja virtalähdettä, joka ylittää 5 V, on säädettävä, on tarpeen lisätä transistorit piiriin kytkentätilassa. Valintani osui BC547c-malliin.

Tarkastellaanpa lyhyesti toimintaperiaatetta niille, jotka ovat unohtaneet npn transistori. Jos et syötä jännitettä ollenkaan, vaan yksinkertaisesti oikosuljet kanta- ja emitteriliittimet, vaikka ei oikosulkua, mutta usean ohmin vastuksen kautta, käy ilmi, että kanta-emitterin jännite on nolla. Näin ollen perusvirtaa ei ole. Transistori on kiinni, kollektorivirta on mitättömän pieni, juuri sama alkuvirta. Tässä tapauksessa transistorin sanotaan olevan katkaisutilassa. Päinvastaista tilaa kutsutaan saturaatioksi: kun transistori on täysin auki, joten ei ole enää paikkaa avautua. Tällä avautumisasteella kollektori-emitteriosan resistanssi on niin alhainen, että on yksinkertaisesti mahdotonta kytkeä transistoria päälle ilman kuormaa kollektoripiirissä; se palaa välittömästi. Tällöin kollektorin jäännösjännite voi olla vain 0,3...0,5 V.

Näitä kahta tilaa, kylläisyyttä ja katkaisua, käytetään, kun transistori toimii kytkentätilassa, kuten tavallinen relekosketin. Tämän tilan päätarkoitus on, että pieni perusvirta ohjaa suurta kollektorivirtaa, joka on useita kymmeniä kertoja suurempi kuin perusvirta. Suuri kollektorivirta saadaan johtuen ulkoinen lähde energiaa, mutta silti nykyinen voitto, kuten sanotaan, on ilmeinen. Meidän tapauksessamme mikropiiri, jonka käyttöjännite on 5 V, sisältää 3 nauhaa, joissa LED-valot toimivat 12 V:stä.

Lasketaan näppäinkaskadin toimintatila. On tarpeen laskea vastuksen arvo peruspiirissä, jotta LEDit palavat täydellä teholla. Välttämätön ehto laskettaessa on, että virran vahvistus on suurempi tai yhtä suuri kuin osamäärä, joka jaetaan suurimmalla mahdollisella kollektorivirralla pienimmällä mahdollisella kantavirralla:

Siksi nauhojen käyttöjännite voi olla 220 V ja peruspiiriä voidaan ohjata mikropiiristä, jonka jännite on 5 V. Jos transistori on suunniteltu toimimaan tällaisella jännitteellä kollektorissa, LED-valot syttyvät ilman ongelmia.
Jännitehäviö kanta-emitteriliitoksessa on 0,77 V, mikäli kantavirta on 5 mA ja kollektorivirta 0,1 A.
Jännite kantavastuksen yli on:

Ohmin lain mukaan:

Vakiovastusalueelta valitsemme 8,2 kOhm vastuksen. Tämä päättää laskelman.

Haluaisin kiinnittää huomionne yhteen kohtaamaani ongelmaan. IRremote-kirjastoa käytettäessä Arduino jumiutui säädettäessä sinistä väriä. Pitkän ja perusteellisen Internet-haun jälkeen kävi ilmi, että tämä kirjasto käyttää oletusarvoisesti Timer 2:ta tälle Arduino-mallille. Ajastimia käytetään ohjaamaan PWM-lähtöjä.

Ajastin 0 (Järjestelmäaika, PWM 5 ja 6);
Ajastin 1 (PWM 9 ja 10);
Ajastin 2 (PWM 3 ja 11).

Aluksi käytin PWM 11:tä säätelemään sinistä väriä. Siksi ole varovainen työskennellessäsi PWM:n, ajastimien ja niitä mahdollisesti käyttävien kolmannen osapuolen kirjastojen kanssa. Outoa se kotisivu Tästä vivahteesta ei sanottu mitään Githubissa. Voit halutessasi poistaa rivin kommentin ajastimella 1 ja kommentoida 2.

Elementtien yhdistäminen leipälaudalla näyttää tältä:

Leipälaudalla testauksen jälkeen alkoivat vaiheet "Elementtien asettaminen levylle" ja "Työskentely juotosraudalla". Valmiin levyn ensimmäisen testauksen jälkeen päähäni hiipi ajatus: jotain meni pieleen. Ja tästä alkaa monille tuttu vaihe "Huolellinen työ testaajan kanssa". Ongelmat (useita vierekkäisiä koskettimia juotettiin vahingossa yhteen) kuitenkin poistuivat nopeasti ja tässä on LEDien kauan odotettu ilkivaltainen valo.

Sitten se oli vain kehokysymys. Tästä syystä leikattiin vaneri, jossa on reiät antureillemme. Takakansi se tehtiin erityisesti irrotettavaksi, jotta voit nauttia näkymistä sisältä ja halutessasi viimeistellä tai tehdä jotain uudelleen. Siinä on myös 2 reikää kortin ja virtalähteen uudelleenohjelmointia varten.

Runko liimattiin kaksikomponenttisella epoksiliimalla. On syytä huomata tämän liiman erikoisuus niille, jotka eivät ole kohdanneet sitä aiemmin. Tämä tuote toimitetaan kahdessa erillisessä astiassa, ja kun sisältö sekoitetaan, tapahtuu välitön kemiallinen reaktio. Sekoituksen jälkeen sinun on toimittava nopeasti, 3-4 minuutin kuluessa. Jatkokäyttöä varten sinun on sekoitettava uusi annos. Joten jos yrität toistaa tämän, neuvoni sinulle on sekoittaa pienissä annoksissa ja toimia hyvin nopeasti, ei ole paljon aikaa ajatella. Siksi on syytä miettiä etukäteen, miten ja mihin runko liimataan. Sitä ei myöskään voi tehdä yhdellä istumalla.

LED-valaisimien kiinnittämiseen yläkansi laitettiin putki, jonka läpi kaikki johdot menivät täydellisesti.

Kun lampunvarjostimen ongelma tuli esille, muistin, kuinka tein lapsena askartelua yksinkertaisesta langasta, liimasta ja ilmapallosta, joka toimi pohjana. Lampunvarjostimen periaate on sama, mutta monitahoisen kääriminen osoittautui palloa vaikeammaksi. Kierteiden rakenteeseen kohdistaman paineen seurauksena se alkoi kapenemaan ylöspäin ja kierteet alkoivat pudota. Kiireellisesti, kädet peitettyinä liimalla, päätettiin vahvistaa rakennetta ylhäältä. Ja sitten CD tuli apuun. Lopputuloksena on tämä yövalo:

Mitä haluaisit sanoa lopuksi?

Mitä minun pitäisi muuttaa projektissa? TRIG-signaalin syöttämiseksi etäisyysantureille voitaisiin käyttää yhtä Arduino-lähtöä kolmen sijasta. Laittaisin myös reiän IR-anturille (jonka unohdin), joka valitettavasti on edelleen piilossa kotelossa, josta se ei tietenkään pysty lukemaan kaukosäätimen signaaleja. Mutta kuka sanoi, että et voi juottaa tai porata mitään?

Haluan todeta, että tämä lukukausi oli mielenkiintoinen ja loistava tilaisuus kokeilla jotain muuta kuin paperilla, minkä ansiosta voin laittaa toisen rastin "lapsuuden unelma" -kohdan viereen. Ja jos luulet, että uuden kokeileminen on vaikeaa, etkä tiedä mitä tehdä ensin, älä huoli. Monien ihmisten päässä pyörii ajatus: mistä aloittaa ja miten tämä edes tehdään? Elämässä on monia tehtäviä, joista voi hämmentyä, mutta kerran yrittäessään huomaa, että pilke silmissä voi siirtää vuoria, vaikka vähän yrittääkin tämän eteen.

Lisätehtävää varten

    1 LED lisää

    Vielä 1 vastus, jonka nimellisarvo on 220 ohmia

    2 johtoa lisää

Kaaviokuva

Kaavio leipälaudalla

Huomautus

    Tässä kokeessa asennamme valovastuksen virtalähteen ja analogisen tulon väliin, ts. kohtaan R1 jännitteenjakajapiirissä. Tarvitsemme tätä, jotta kun valaistus heikkenee, saamme vähemmän jännitettä analogiseen tuloon.

    Yritä sijoittaa komponentit niin, että LED ei syty valovastukseen.

Luonnos

p050_night_light.ino #define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT) ; ) void loop() ( // lue valotaso. Ilmoita muuten // voit määrittää sille muuttujan ja arvon kerralla int vaaleus = analogiRead(LDR_PIN) ; // lue arvo potentiometristä, jolla säädämme // ehdollisen pimeyden ja valon välinen kynnysarvo int kynnys = analoginenRead(POT_PIN) ; // ilmoittaa boolen muuttuja ja antaa sille arvo // "Onko nyt pimeää." Boolen muuttujat, toisin kuin // kokonaislukuja, voi sisältää vain yhden kahdesta arvosta: // totta vai tarua. Sellaisia ​​arvoja // kutsutaan myös booleaniksi. boolean tooDark = (vaaleus< threshold) ; // käytä ohjelman haaroitusta: prosessori suorittaa yhden seuraavista // kaksi koodilohkoa ehdon suorituksesta riippuen. // Jos (englanniksi "if") on liian tumma... jos (liian tumma) ( // ...sytytä valot digitalWrite(LED_PIN, KORKEA); ) muu ( // ...muuten valoa ei tarvita - sammuta se digitalWrite(LED_PIN, LOW) ; ) )

Selitykset koodille

    Käytämme uudentyyppistä muuttujaa - boolean, joka tallentaa vain arvot tosi (tosi, 1) tai false (false, 0). Nämä arvot ovat tulosta Boolen lausekkeiden arvioinnista. Tässä esimerkissä Boolen lauseke on keveys< threshold . На человеческом языке это звучит как: «освещенность ниже порогового уровня». Такое высказывание будет истинным, когда освещенность ниже порогового уровня. Микроконтроллер может сравнить значения переменных lightness и threshold , которые, в свою очередь, являются результатами измерений, и вычислить истинность логического выражения.

    Laitamme tämän loogisen lausekkeen sulkeisiin vain selvyyden vuoksi. On aina parempi kirjoittaa luettavaa koodia. Muissa tapauksissa sulkeet voivat vaikuttaa operaatioiden järjestykseen, kuten tavallisessa aritmetiikassa.

    Kokeessamme boolen lauseke on tosi, kun vaaleusarvo on pienempi kuin kynnysarvo, koska käytimme operaattoria< . Мы можем использовать операторы > , <= , >= , == , != , jotka tarkoittavat "suurempi kuin", "pienempi tai yhtä suuri", "suurempi tai yhtä suuri kuin", "saa", "ei yhtä suuri".

    Ole erityisen varovainen loogisen operaattorin == kanssa äläkä sekoita sitä määritysoperaattoriin =. Ensimmäisessä tapauksessa vertaamme lausekkeiden arvoja ja saamme loogisen arvon (tosi tai epätosi), ja toisessa tapauksessa annamme oikean operandin arvon vasemmalle operandille. Kääntäjä ei tiedä aikomuksiamme eikä anna virhettä, mutta voimme vahingossa muuttaa jonkin muuttujan arvoa ja viettää sitten pitkään virheen etsimistä.

    Ehdollinen if-lause on yksi tärkeimmistä useimmissa ohjelmointikielissä. Sen avulla voimme suorittaa paitsi tiukasti määritellyn toimintosarjan, myös tehdä päätöksiä siitä, mitä algoritmin haaraa seurataan tietyistä ehdoista riippuen.

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

    Samalla menestyksellä voisimme sanoa "jos valaistus on pienempi kuin kynnystaso, laita LED päälle", ts. välitä koko looginen lauseke jos:

jos (keveys< threshold) { // ... }

    Takana ehdollinen operaattori if seuraa välttämättä koodilohkoa, joka suoritetaan, jos looginen lauseke on tosi. Älä unohda molempia kiharoita ()!

    Jos lauseke on tosi, meidän tarvitsee vain suorittaa yksi ohje, se voidaan kirjoittaa välittömästi perään if (...) ilman aaltosulkeet:

jos (keveys< threshold) digitalWrite(LED_PIN, HIGH) ;

    If-lausetta voidaan laajentaa else-konstruktilla. Koodilohko tai sitä seuraava yksittäinen lauseke suoritetaan vain, jos loogisen lausekkeen if arvo on epätosi. Kiharahousuja koskevat säännöt ovat samat. Kokeessamme kirjoitimme "jos on liian pimeää, laita LED päälle, muuten sammuta LED."

Valovastusten pohjalta rakennettuja valoantureita (valaistus) käytetään melko usein todellisissa Arduino-projekteissa. Ne ovat suhteellisen yksinkertaisia, eivät kalliita, ja niitä on helppo löytää ja ostaa mistä tahansa verkkokaupasta. Arduino-valovastuksen avulla voit ohjata valon tasoa ja reagoida sen muutoksiin. Tässä artikkelissa tarkastellaan, mitä valovastus on, miten siihen perustuva valoanturi toimii ja kuinka anturi liitetään oikein Arduino-levyihin.

Valovastus, kuten nimestä voi päätellä, liittyy suoraan vastuksiin, joita löytyy usein melkein kaikista elektronisista piireistä. Perinteisen vastuksen pääominaisuus on sen vastuksen arvo. Jännite ja virta riippuvat siitä, vastuksen avulla asetamme muiden komponenttien tarvittavat toimintatilat. Pääsääntöisesti vastuksen vastusarvo ei käytännössä muutu samoissa käyttöolosuhteissa.

Toisin kuin perinteiset vastukset, valovastus voi muuttaa vastustaan ​​ympäristön valon tason mukaan. Tämä tarkoittaa, että sisään elektroninen piiri Parametrit muuttuvat jatkuvasti; ensinnäkin olemme kiinnostuneita siitä, että jännite putoaa valovastuksen yli. Tallentamalla nämä jännitteen muutokset Arduinon analogisiin nastoihin voimme muuttaa piirin logiikkaa ja luoda siten laitteita, jotka mukautuvat ulkoisiin olosuhteisiin.

Fotovastuksia käytetään melko aktiivisesti monissa järjestelmissä. Yleisin sovellus on katuvalaistus. Jos yö saapuu kaupunkiin tai tulee pilvistä, valot syttyvät automaattisesti. Kotiin voit tehdä taloudellisen hehkulampun valovastuksesta, joka syttyy ei aikataulun mukaan, vaan valaistuksesta riippuen. Voit tehdä jopa valoanturiin perustuvan turvajärjestelmän, joka laukeaa heti suljetun kaapin tai kassakaapin avaamisen ja valaistuksen jälkeen. Kuten aina, kaikkien Arduino-anturien käyttöaluetta rajoittaa vain mielikuvituksemme.

Mitä valovastuksia voi ostaa verkkokaupoista

Suosituin ja edullinen vaihtoehto markkinoilla olevat anturit ovat kiinalaisten yritysten massatuotantomalleja, valmistajan VT:n tuotteiden klooneja. Aina ei ole mahdollista selvittää, kuka ja mitä tämä tai tuo toimittaja tarkalleen tuottaa, mutta yksinkertaisin vaihtoehto on varsin sopiva aloittaaksesi valovastuksen.

Aloittelevaa Arduino-käyttäjää voidaan neuvoa ostamaan valmis valokuvamoduuli, joka näyttää tältä:


Tämä moduuli sisältää jo kaikki tarvittavat elementit helppo yhteys valovastus Arduino-levylle. Jotkut moduulit toteuttavat vertailupiirin ja tarjoavat digitaalisen lähdön ja trimmausvastuksen ohjausta varten.

Venäläistä radioamatööria voidaan neuvoa kääntymään venäläisen PA-anturin puoleen. Myynnissä on FR1-3, FR1-4 jne. - valmistettu Neuvostoliiton aikana. Mutta tästä huolimatta FR1-3 on tarkempi yksityiskohta. Tästä seuraa hintaero: FR:ltä he pyytävät enintään 400 ruplaa. FR1-3 maksaa yli tuhat ruplaa kappaleelta.

Valovastuksen merkintä

Venäjällä valmistettujen mallien nykyaikainen merkintä on melko yksinkertaista. Kaksi ensimmäistä kirjainta ovat PhotoResistor, numerot viivan jälkeen osoittavat kehitysnumeron. FR -765 - valovastus, kehitys 765. Yleensä merkitty suoraan osan runkoon

VT-anturin resistanssialue on merkitty merkintäkaaviossa. Esimerkiksi:

  • VT83N1 - 12-100 kOhm (12K - valaistu, 100K - pimeässä)
  • VT93N2 - 48-500kOhm (48K – valaistu, 100K – pimeässä).

Joskus mallien tietojen selventämiseksi myyjä toimittaa valmistajalta erityisen asiakirjan. Toimintaparametrien lisäksi siellä ilmoitetaan myös osan tarkkuus. Kaikissa malleissa on herkkyysalue spektrin näkyvässä osassa. Kerätä valon anturi Sinun on ymmärrettävä, että toiminnan tarkkuus on suhteellinen käsite. Jopa saman valmistajan, saman erän tai saman oston malleissa se voi poiketa 50 % tai enemmän.

Tehtaalla osat on viritetty aallonpituuksille punaisesta vihreään valoon. Useimmat ihmiset "näkevät" myös infrapunasäteilyä. Erityisen tarkat osat voivat havaita jopa ultraviolettivalon.

Anturin edut ja haitat

Valovastusten suurin haittapuoli on spektrin herkkyys. Tulevan valon tyypistä riippuen vastus voi vaihdella useita suuruusluokkia. Haittoja ovat myös alhainen nopeus reaktiot valaistuksen muutoksiin. Jos valo vilkkuu, anturilla ei ole aikaa reagoida. Jos muutostaajuus on melko korkea, vastus lakkaa yleensä "näkemästä", että valaistus muuttuu.

Edut ovat yksinkertaisuus ja saavutettavuus. Resistanssin muuttaminen suoraan siihen putoavan valon mukaan mahdollistaa yksinkertaistamisen sähkökaavio yhteyksiä. Itse valovastus on erittäin halpa, se sisältyy lukuisiin Arduino-sarjoihin ja -konstruktoreihin, ja siksi se on saatavana melkein kaikille aloitteleville Arduinon valmistajille.

Valovastuksen liittäminen Arduinoon

Projekteissa arduino Valovastusta käytetään valoanturina. Sieltä tietoja vastaanottava kortti voi kytkeä releitä päälle tai pois päältä, käynnistää moottoreita ja lähettää viestejä. Luonnollisesti meidän on kytkettävä anturi oikein.

Valoanturin kytkentäkaavio Arduinoon on melko yksinkertainen. Jos käytämme valovastusta, niin kytkentäkaaviossa anturi on toteutettu jännitteenjakajana. Yksi varsi vaihtuu valaistustason mukaan, toinen syöttää jännitettä analogiseen tuloon. Ohjainsirussa tämä jännite muunnetaan digitaaliseksi dataksi ADC:n kautta. Koska Kun anturin vastus pienenee valon osuessa siihen, myös sen yli laskevan jännitteen arvo pienenee.

Riippuen siitä, mihin jakajan varteen sijoitimme valovastuksen, analogiseen tuloon syötetään joko korotettua tai alennettua jännitettä. Jos valovastuksen yksi jalka on kytketty maahan, jännitteen maksimiarvo vastaa pimeyttä (valovastuksen resistanssi on maksimi, melkein kaikki jännite putoaa sen yli) ja minimiarvo vastaa hyvää valaistusta (vastus on lähellä nollaa, jännite on minimaalinen). Jos yhdistämme valovastuksen varren virtalähteeseen, käyttäytyminen on päinvastainen.

Itse levyn asentamisen ei pitäisi aiheuttaa vaikeuksia. Koska valovastuksessa ei ole napaisuutta, se voidaan liittää molemmilta puolilta; se voidaan juottaa levyyn, liittää johtoilla piirilevyllä tai käyttää tavallisilla pidikkeillä (krokotiilipidikkeillä) liitäntään. Piirin virtalähde on itse Arduino. Valovastus yksi jalka on kytketty maahan, toinen on kytketty ADC-korttiin (esimerkissämme - AO). Yhdistämme 10 kOhm vastuksen samaan jalkaan. Luonnollisesti voit liittää valovastuksen analogisen nastan A0 lisäksi myös mihin tahansa muuhun.

Muutama sana lisävastuksesta 10 K. Sillä on piirissämme kaksi toimintoa: piirin virran rajoittaminen ja muodostaminen tarvittava jännite piirissä, jossa on jakaja. Virran rajoitus on tarpeen tilanteessa, jossa täysin valaistu fotovastus pienentää resistanssiaan jyrkästi. Ja jännitteen muodostus on tarkoitettu ennustettavissa oleville arvoille analogisessa portissa. Oikeastaan ​​varten normaali operaatio Valovastuksillamme riittää 1K resistanssi.

Muuttamalla vastuksen arvoa voimme "siirtää" herkkyystason "tummalle" ja "vaalealle" puolelle. Eli 10K antaa nopea vaihto valon tulo. 1K:n tapauksessa valoanturi havaitsee tarkemmin korkeat valotasot.

Jos käytät valmis moduuli valoanturi, niin liittäminen on vielä yksinkertaisempaa. Yhdistämme VCC-moduulin lähdön levyn 5V-liittimeen, GND maahan. Yhdistämme loput nastat Arduino-liittimiin.

Jos levyllä on digitaalinen lähtö, lähetämme sen digitaalisiin nastoihin. Jos se on analoginen, siirry analogiseen. Ensimmäisessä tapauksessa saamme liipaisusignaalin - valaistustaso on ylitetty (liipaisukynnystä voidaan säätää säätövastuksen avulla). Analogisista nastoista voimme saada todelliseen valaistustasoon verrannollisen jännitearvon.

Esimerkkipiirros valovastuksen valoanturista

Kytkemme valovastuksen piirin Arduinoon ja varmistimme, että kaikki oli tehty oikein. Nyt jäljellä on vain ohjelmoida ohjain.

Valotunnistimen luonnoksen kirjoittaminen on melko yksinkertaista. Meidän tarvitsee vain poistaa nykyinen jännitearvo analogisesta nastasta, johon anturi on kytketty. Tämä tehdään käyttämällä analogRead()-funktiota, jonka me kaikki tiedämme. Voimme sitten suorittaa joitain toimintoja valotasosta riippuen.

Tehdään luonnos valoanturista, joka kytkee päälle tai pois LEDin, joka on kytketty seuraavan piirin mukaan.

Toiminta-algoritmi on seuraava:

  • Määritä signaalin taso analogisesta nastasta.
  • Vertaamme tasoa kynnysarvoon. Maksimiarvo vastaa pimeyttä, minimiarvo vastaa maksimivaloa. Valitaan kynnysarvo, joka on yhtä suuri kuin 300.
  • Jos taso on pienempi kuin kynnys, on pimeää, sinun on kytkettävä LED päälle.
  • Muussa tapauksessa sammuta 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); } }

Peittamalla valovastuksen (käsilläsi tai valonkestävällä esineellä) voimme tarkkailla LEDin syttymistä ja sammumista. Muuttamalla koodin kynnysparametria voimme pakottaa hehkulampun syttymään/sammumaan eri valaistustasoilla.

Asennuksen aikana yritä sijoittaa valovastus ja LED mahdollisimman kauas toisistaan, jotta valoanturiin putoaa vähemmän valoa kirkkaasta LEDistä.

Valotunnistin ja tasainen taustavalon kirkkauden muutos

Voit muokata projektia niin, että LEDin kirkkaus muuttuu valaistustason mukaan. Lisäämme algoritmiin seuraavat muutokset:

  • Muutamme hehkulampun kirkkautta PWM:n kautta lähettämällä arvoja 0 - 255 LED-nastalle analogWrite()-toiminnolla.
  • Käytämme map()-toimintoa muuntaaksemme valon tason digitaalisen arvon valoanturista (0 - 1023) LED-kirkkauden PWM-alueeksi (0 - 255).

Piirrosesimerkki:

#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); // Muunna tuloksena oleva arvo PWM-signaalitasoksi. Mitä pienempi valaistusarvo, sitä vähemmän virtaa meidän on syötettävä LEDiin PWM:n kautta. analogWrite(PIN_LED, ledPower) ; // Muuta kirkkautta)

Jos kyseessä on toinen yhteystapa, jossa analogisesta portista tuleva signaali on verrannollinen valaistusasteeseen, sinun on lisäksi "käännettävä" arvo vähentämällä se maksimista:

Int arvo = 1023 – analoginenRead(PIN_KUVA_RESISTORI);

Valoanturipiiri valovastuksen ja releen avulla

Esimerkkejä releiden kanssa työskentelyn luonnoksista on artikkelissa releiden ohjelmointi Arduinossa. Tässä tapauksessa meidän ei tarvitse tehdä monimutkaisia ​​liikkeitä: "pimeyden" määrittämisen jälkeen kytkemme vain releen päälle ja käytämme vastaavaa arvoa sen nastalle.

#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 (arvo)< 300) { // Светло, выключаем реле digitalWrite(PIN_RELAY, HIGH); } else { // Темновато, включаем лампочку digitalWrite(PIN_RELAY, LOW); } }

Johtopäätös

Projektit, joissa käytetään valovastukseen perustuvaa valoanturia, ovat melko yksinkertaisia ​​ja tehokkaita. Voit toteuttaa monia mielenkiintoisia projekteja, ja laitteiden kustannukset eivät ole korkeat. Valovastus on kytketty jännitteenjakajapiirillä, jossa on lisävastus. Anturi on kytketty analogiseen porttiin mittaamaan erilaisia ​​valotasoja tai digitaaliseen, jos välitämme vain pimeyden tosiasiasta. Luonnoksessa luemme yksinkertaisesti dataa analogisesta (tai digitaalisesta) portista ja päätämme, kuinka reagoida muutoksiin. Toivotaan, että nyt tällaisia ​​yksinkertaisia ​​"silmiä" ilmestyy projekteihinne.

Tässä kokeessa LEDin pitäisi syttyä, kun valotaso laskee potentiometrin asettaman kynnyksen alapuolelle.

LUETTELO KOKEEEN OSISTA

- 1 Arduino Uno -levy;

- 1 juottamaton leipälauta;

- 1 LED;

- 1 valovastus;

- 1 vastus, jonka nimellisarvo on 220 ohmia, 1 vastus, jonka nimellisarvo on 10 kOhmia;

- 1 muuttuva vastus (potentiometri);

- 10 uros-uros johtoa.

TIEDOT LISÄTEHTÄVÄSTÄ

1 lisää LED;

Toinen 1 vastus, jonka nimellisarvo on 220 ohmia;

2 johtoa lisää.

PIIRIKAAVIO

KAAVIO LEIVYPAUDALLE

LUONNOS

lataa luonnos Arduino IDE:lle
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) void loop() ( // lue valotaso. Muuten, // voit ilmoittaa muuttujan ja määrittää arvo sille kerralla int lightness = analogRead(LDR_PIN); // lue arvo potentiometristä, jota käytämme säätämään // ehdollisen pimeyden ja valon välistä kynnysarvoa int threshold = analogRead(POT_PIN); // ilmoittaa a looginen muuttuja ja anna sille arvo // "onko nyt pimeää". Totuusmuuttujat, toisin kuin // kokonaislukumuuttujat, voivat sisältää vain yhden kahdesta arvosta: // tosi tai epätosi. Tällaisia ​​arvoja// kutsutaan myös loogisiksi. boolean tooDark = (vaaleus< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

KOODIN SELITYKSET

  • Käytämme uudentyyppisiä muuttujia − boolean, jotka tallentavat vain arvoja totta (totta, 1) tai väärä (väärä, 0). Nämä arvot ovat tulosta Boolen lausekkeiden arvioinnista. Tässä esimerkissä Boolen lauseke on keveys< threshold . Ihmiskielellä tämä kuulostaa: "valaistusvoimakkuus alle kynnystason". Tällainen väite pitää paikkansa, kun valaistus on alle kynnystason. Mikrokontrolleri voi verrata muuttujien arvoja keveys Ja kynnys, jotka puolestaan ​​ovat mittaustuloksia, ja laskevat loogisen lausekkeen totuuden.
  • Laitamme tämän loogisen lausekkeen sulkeisiin vain selvyyden vuoksi. On aina parempi kirjoittaa luettavaa koodia. Muissa tapauksissa sulkeet voivat vaikuttaa operaatioiden järjestykseen, kuten tavallisessa aritmetiikassa.
  • Kokeessamme Boolen lauseke on tosi, kun arvo keveys arvoa pienempi kynnys koska käytimme operaattoria < . Voimme käyttää operaattoreita > , <= , >= , = = , != , jotka tarkoittavat "suurempi kuin", "pienempi tai yhtä suuri", "suurempi tai yhtä suuri kuin", "saa" ja "ei yhtä suuri kuin".
  • Ole erityisen varovainen loogisen operaattorin kanssa = = äläkä sekoita sitä tehtäväoperaattoriin = . Ensimmäisessä tapauksessa vertaamme lausekkeiden arvoja ja saamme loogisen arvon (tosi tai epätosi), ja toisessa tapauksessa annamme oikean operandin arvon vasemmalle operandille. Kääntäjä ei tiedä aikomuksiamme eikä anna virhettä, mutta voimme vahingossa muuttaa jonkin muuttujan arvoa ja viettää sitten pitkään virheen etsimistä.
  • Ehdollinen operaattori josJos") on yksi tärkeimmistä useimmissa ohjelmointikielissä. Sen avulla voimme suorittaa paitsi tiukasti määritellyn toimintosarjan, myös tehdä päätöksiä siitä, mitä algoritmin haaraa seurataan tietyistä ehdoista riippuen.
  • Loogiseen ilmaisuun keveys< threshold on merkitys: totta tai väärä. Laskemme sen ja laitoimme sen loogiseen muuttujaan liian pimeä("liian pimeä") Siksi näytämme sanovan "jos on liian pimeää, laita LED päälle"
  • Samalla menestyksellä voisimme sanoa "jos valaistus on pienempi kuin kynnystaso, laita LED päälle", ts. Siirrä jos kaikki looginen lauseke:
jos (keveys< threshold) { // ... }
  • Ehdollisen lausunnon takana jos On oltava koodilohko, joka suoritetaan, jos looginen lauseke on tosi. Älä unohda molempia kiharat olkaimet {} !
  • Jos lauseke on tosi, meidän tarvitsee vain suorittaa yksi ohjeita, se voidaan kirjoittaa heti sen jälkeen jos (…) ilman kiharat henkselit:
jos (keveys< threshold) digitalWrite(LED_PIN, HIGH);
  • Operaattori jos voidaan laajentaa suunnittelulla muu("muuten"). Koodilohko tai sitä seuraava yksittäinen lauseke suoritetaan vain, jos looginen lauseke sisään jos on merkitys väärä , « valehdella" Kiharahousuja koskevat säännöt ovat samat. Kokeessamme kirjoitimme "jos on liian pimeää, laita LED päälle, muuten sammuta LED."

KYSYMYKSIÄ ITSESI TESTAAMISEKSI

  1. Jos asennamme valovastuksen analogisen tulon ja maan väliin, laitteemme toimii päinvastoin: LED syttyy, kun valon määrä lisääntyy. Miksi?
  2. Millaisen tuloksen laitteen toiminnasta saamme, jos LEDin valo putoaa valovastuksen päälle?
  3. Jos asennamme valovastuksen edellisessä kysymyksessä kerrotulla tavalla, kuinka meidän täytyy muuttaa ohjelmaa, jotta laite toimii oikein?
  4. Oletetaan, että meillä on koodi jos (ehto) (toiminta;). Missä tapauksissa se tehdään? toiminta ?
  5. Millä arvoilla y ilmaisu x + y > 0 on totta jos x > 0 ?
  6. Onko tarpeen ilmoittaa, mitkä käskyt suoritetaan, jos ehto on käskyssä jos väärä?
  7. Mitä eroa operaattorilla on = = operaattorilta = ?
  8. Jos käytämme rakentamista jos (ehto) toimenpide1; muu toiminta2;, voisiko olla tilanne, jossa mitään toimista ei suoriteta? Miksi?

TEHTÄVÄT ITSENÄISTÄ ​​RATKAISUA VARTEN

  1. Kirjoita ohjelma uudelleen ilman muuttujaa liian pimeä säilyttäen samalla laitteen toiminnallisuuden.
  2. Lisää piiriin toinen LED. Suorita ohjelma loppuun niin, että kun valaistus putoaa alle kynnysarvon, yksi LED syttyy ja kun valaistus putoaa alle puolen kynnysarvon, molemmat LEDit syttyvät.
  3. Muuta piiri ja ohjelmointi siten, että LEDit syttyvät saman periaatteen mukaan, mutta hehkuvat mitä voimakkaammin sitä vähemmän valoa osuu valovastukseen.




Ylös