19. HC-SR04 ultrahelisensori ühendamine ja näitude kuvamine LCD ekraanil
<- eelmine peatükk
järgmine peatükk ->
19.0. Seosed eelmiste peatükkidega
Oleme uurinud Arduino IDE Serial monitori kasutades potentsiomeetrilt tuleva signaali oma arvuti ekraanile kuvamise kohta; oleme ka muutnud selle info esitust inimesele arusaadavamaks—programmi kirjutatud täienduse abil näitasime Serial monitorile saabuvat voltides.
Oleme saanud tööle juhtkangi—kaks potentsiomeetrit ühte kesta pakendatuna osutus üsna ladusaks harjutuseks—saime „kummalegi potentsiomeetrile“ omistada vastavalt kas x-telje või y-telje esindamise. Seega kogesime võimalust juhtida midagi, mis liiguks
- mööda tasapinda: horisontaalselt paremale-vasakule sihis (x-telg) ning
- vertikaalselt üles-alla (y-telg); või siis edasi-tagasi sihis—oleneb, kuidas teljed ette võtame.
Oleme saanud tööle ka LCD ekraani. Selleks oli vajalik ka vastava teegi olemasolu arvutis.
Tuletame enne peatüki algust meelde, et Arduino IDE-s on olemas võimalus neid teek-programme alla laadida: valime IDE ülaservas asuvast menüüst Sketch -> Include Library -> Manage Libraries, misjärel avaneb eraldi aknas Library Manager. Edasi saame aktiivseks klikkida meid huvitava teegi. Seejärel tekib vastava kastikese sees asuva lingi juurde ka Install-nupuke.
19.1. Eesmärk ja selgitused
Selle tunni eesmärgiks on kordamine: kuvada LCD ekraanile andurist tulev info—kusjuures see info tuleb ka esitada tarbijale mugaval viisil. Kasutame ultraheli-seadet, millega mõõdame kaugust seadme ja ultraheli teele ettejääva takistuse vahel. Projekt meenutab mõõteriista, millega saame kuvada LCD ekraanile anduriga mõõdetavat infot.
Tunni järel õpilane oskab:
19.2. Töövahendid:
19.3. Tegevused:
19.3.1.Teooria ultrahelianduri kohta
Ultraheli sagedus on üle 20.000Hz (hertsi): sellise sagedusega heli inimene ei kuule. Seda kuulevad aga nahkhiired: nad kasutavad ultraheli oma ümbruses orienteerumiseks—ultraheli tagasipeegelduse põhjal suunab nahkhiir oma lendu. Inimene suudab ultraheli-seadmete abil teha meditsiini-diagnostikat—ultraheli tagasipeegeldustele on võimalik anda inimsilmale nähtava pildi vormingut.
Meie kasutame järgnevas ülesandes ultrahelisensorit üsna sarnasel eesmärgil: mõõdame kaugust A) ultraheli allika ja B) ultraheli tagasi peegeldava takistuse vahel.
Mõtleme korra heli tagasipeegelduse peale: see on kaja. Kindlasti olete metsa läheduses kogenud, kuidas Teie poolt kõva häälega hüütud sõna peale mets veidi hiljem „vastab“. Helilainel kulub mingi aeg heli tekitajalt levimiseks seda heli peegeldava takistuseni; seejärel aga takistuselt peegeldununa uuesti heliallika juurde tagasi jõudmiseks.
Kui mõõdame ära aja, mis kulus meie poolt teele saadetud helilainel takistuseni jõudmiseks ja seejärel takistuselt taas meieni jõudmiseks, saame midagi öelda ka läbitud teepikkuse kohta. Kuna laine levib takistuseni ja tagasi, siis meie ja takistuse vahelise kauguse saamiseks peame kokku kahe teepikkuse läbimiseks kulunud aja jagama kahega. Seejuures me teame, et heli levimise kiirust võime lugeda konstandiks. Teepikkuse, aja ja kiiruse omavahelise seosega oleme aga kursis füüsikatundides uuritu põhjal.
Juhime tähelepanu, et ultrahelisensoril peab olema lisaks toitele (HC-SR04 puhul 5V) ja maaühendusele (GND) veel kaks ühendust: üks on teele saadetava laine kohta info saamiseks (leia HC-SR04 peal Trig-viik), teine aga tagasipeegelduva laine kohta info saamiseks (leia HC-SR04 peal Echo-viik).
19.3.2.LCD ühendamine Arduinoga, potentsiomeetriga ja vahekaugusi mõõta suutva ultrahelianduriga
Meid ei suuda enam üllatada, et juhtmeid palju. Taas anname need ette tabelina. Varasemast oleme selle tabeliga juba tuttavad.
Harjutus A
Vormistage alljärgnevad kolm tabelit kenaks vooluahelaks. Kontrollige erilise hoolega üle, kas ikka ühendasite õigesse kohta takisti. Me ei taha ühtegi kallist detaili kahjustada.
Ülesanne on vastutusrikas—LCD kasutatavuse huvides ärge enne ühenduste kontrollimist Arduinot vooluallikaga ühendage. Tuletage meelde, mida oleme varem maininud ka kogemata juhtuda võivate lühiühenduste vältimise kohta. Kas vooluahela koostamise ajal võib Arduino olla arvuti külge ühendatud?
Ja tehke ka märkmeid. Pange kirja kõik küsimused, mida õpetajale esitada soovite—kirja pandud küsimuste eest saate lisapunkte! Asi nimelt selles, et nüüd hakkab õpetajat juba väga huvitama, et mis sorti küsimusi Te esitate—neist peaks mingi märk maha jääma, võib-olla peaks materjali kuidagi paremini esitama? Kõiki Teie küsimusi mõistlik kasutada selle materjali paremaks viimistlemisel.
LCD ühendused:
* tärniga tähistatud viigud on vaja deklareerida programmis LCD-ekraanile vastavat objekti luues. Ülejäänud, tärniga tähistamata ühendused on kas GND või toide—neid ei ole vaja objekti luues deklareerida. Jälgime, et ühendused ja programm oleks omavahel kooskõlas.
Potentsiomeetri ühendused:
* tärniga tähistatud viigud on vaja deklareerida programmis LCD-ekraanile vastavat objekti luues.
Ülejäänud—tärniga tähistamata ühendused on kas GND või toide—neid ei ole vaja objekti luues deklareerida.
Ultrahelisensori HC-SR04 ühendamine Arduinoga käib läbi digitaal-viikude:
Saame midagi sellist, mis järgneval pildil juba töötavana on jäädvustatud.
Kui vaatasite seda pilti enne kui asusite tabelite alusel koostama vooluringi, siis kas esmavaatlusel tundus fotol juhtmeid kuidagi häirivalt segaselt paljuvõitu? Kui fotol töötavale skeemile kiire hinnangu andmine osutus keerukas, siis kas leidsite, et parem on juhinduda tabelist kui fotost?
Kuidas aga tundub tabeliga võrreldes Fritzing abil joonistatud skeem? Mida keerukamaks ja juhtmerohkemaks muutuvad ühendused, seda meeldivam on minu arvates kasutada tabelit.
Surfamiseks pakun välja sõna „pinout“. Vaadake, milliseid viikude ühendamise pilte veel leidub.
Võite sellele otsisõnale lisada ka näiteks „Arduino UNO“. Seejärel lülitage otsingu-keskkonnas sisse pildiotsing.
19.3.3. Programm koos kommentaaridega
#include <LiquidCrystal.h> /*laeme LCD ekraani teegi (library) */ #include <HCSR04.h> /*laeme ultrahelianduri teegi: HCSR04 library https://www.arduinolibraries.info/libraries/hcsr04 */ LiquidCrystal LCD_ekraan(10, 9, 5, 4, 3, 2); UltraSonicDistanceSensor distanceSensor(13, 12); void setup() { Serial.begin(9600); LCD_ekraan.begin(16,2); /* Ütlesime programmile, et vaja on käivitada kaherealine ja kuuesteist märgiga LCD ekraan --NB! järjekord on oluline: 16, 2! */ LCD_ekraan.setCursor(0,0); /* Ütlesime LCD ekraani kursorile, kus asub kursori algpunkt.*/ } void loop() { LCD_ekraan.setCursor(0,0); /* esimene null tähistab esimese märgi asukohta, teine null märgib ülemist (st esimest) rida: arvutimaalimas alustame numbrite lugemist nullist!*/ LCD_ekraan.print("kaugus cm: "); //LCD_ekraan.setCursor(5,1); /* kui see programmirida on aktiivne, siis prinditakse mõõtmistulemus LCD peal teisele reale--alustades kuuenda sümboli positsioonist LCD peal, sest arvuti loendab alates nullist.*/ LCD_ekraan.print((int)distanceSensor.measureDistanceCm()); /*prindime LCD ekraanile andurilt loetud temperatuuri*/ LCD_ekraan.print("cm ");/*lisame mõõtmistulemusele ka ühiku ja seejärel tühikuid—tühikute abil saame tühja kohaga igakordselt muutuva info üle kirjutada nii, et meil ei tekiks kuvatavale tekstile häirivaid lisasid"*/ delay (10); }
(Kui eelnevat on keerukas tööle saada, siis siit saame programmi vaid testimaks Serial monitoriga.
https://github.com/Martinsos/arduino-lib-hc-sr04 )
Uurige seda programmi. Katsetage. Programmis sisaldub välja-kommenteerituna (//) järgmine idee katsetamiseks:
//LCD_ekraan.setCursor(5,1); /* kui see programmirida on aktiivne, siis prinditakse mõõtmistulemus LCD peal teisele reale--alustades kuuenda sümboli positsioonist LCD peal, sest arvuti loendab alates nullist.*/
Tehke ise muudatusi—kui saate veateadet, siis uurige põhjust—kui ei leia põhjust, siis esitage õpetajale kirjalikult probleemi kirjeldus.
19.4. Kodutöö
LCD_ekraan.print("cm ");/*lisame mõõtmistulemusele ka ühiku ja seejärel tühikuid—tühikute abil saame tühja kohaga igakordselt muutuva info üle kirjutada nii, et meil ei tekiks kuvatavale tekstile häirivaid lisasid"*/ . Võtke programmi tekstist välja tühikud. Seega programm näeks välja järgmine: ->LCD_ekraan.print("cm");/*