#5 - Analóg és digitális szenzorok

Hőmérséklet, infra jelenlét, mozgásérzékelő valamint ultrahangos távolságmérővel foglalkoztunk

Emelett megnéztük hogyan tudjuk a NodeMCU analóg portjait kibővíteni. A videó végén pedig egy komplexebb mintaprogramot is mutatunk ami akár egy "fapados időjárás állomásként" is lehet használni. Megnézzük az UART,I2C és SPI kommunikációkat is.


A részek egymásra épülnek...

Ezért, ha nem láttad az előző részeket, akkor azt itt tudod pótolni: http://techfactory.hu/muhely/oktatos/
Ezzel a résszel sajnos egy kicsit megcsúsztunk, de igyekszünk majd kárpótolni minden nézőt!

A videó

Ebben a részben digitális és analóg szenzorokkal foglalkozunk. Digitálisak közül: infra jelenlét érzékelő, infra mozgás érzékelő (PIR), mágneses elven működő szenzor (REED), valamint az ultrahangos távolságmérő. Analóg szenzorok közül most egy hőmérséklet/páratartalom mérőt mutatunk be.
Komplexebb kommunikációval működő szenzorok közül a BME280-ra mutatunk minta kódot I2C-vel, de megemlítjük az SPI és az UART kommunikációkat is.
 

Szenzorokról röviden

A szenzorok olyan jelátalakítók,amelyek mennyiséget, tulajdonságot, vagy feltételt, villamos jellé alakítanak át. (nem villamos jeleket, mint  pl. mechanikus, kémiai, termikus, mágneses, optikai jeleket) A szenzorok az automatizálásban az emberi érzékszerveket helyettesítik. A szenzor jele továbbvezethető, erősíthető, szűrhető és feldolgozható.

Infra szenzor
Mi egy OBS-IR infavörös akadály érzékelő modult használtuk a példa bemutatásához. Az érzékelő az infravörös tartományba eső, a mozgó test vagy tárgy által visszavert infravörös fényt érzékeli. Ezzel a típusú szenzorral jelenlétet tudunk érzékelni. Mivel ez egy akadály érzékelő akkor ad magas jelet, ha nincs elötte semmi. A kapcsolási távolságot vagy kapcsolási érzékenységet a potméterrel tudjuk állítani.

PIR szenzor (mozgásérzékelő szenzor)
Az érzékelőre több apró optikai lencsékből álló  burkolat vetíti rá a környezet képét. Ezt a burkolatot Fresnel-lencsének nevezzük. A sok kis lencse egy-egy térszegmens képét fókuszálja az érzékelőre. Ebből adódóan az érzékelőtől távolodva egyre nagyobb holt- terek adódnak. A modul érzékenysége állítható; ez lehetővé teszi a mozgásérzékelés tartományának a rugalmas beállítását 3 - 7 méter között. A modul rendelkezik még "idő késleltetés" beállítással és trigger kiválasztással. A szenzonak egy digitális kimenete van, aminek a feszültsége 3,3V.

Reed relé
A reed-relé egy kisméretű, védőgázzal töltött zárt üvegcső, amelyben két, egymáshoz közel lévő, de egymással nem érintkező ferromágneses elektróda található. Az elektródák nemesfém bevonatúak. Mágneses térrel vezérelhető kapcsolóként használják. A mágneses tér létrehozható elektro- vagy állandómágnes segítségével. Elektromágnes alkalmazásakor hagyományos, de gyors működésű relé funkciót tölt be, míg állandó mágnes segítségével elmozdulás  érzékelőként használható. (például ajtó,ablak nyitáshoz)

Ultrahangos távolságmérő szenzor
Az érzékelő az emberi fül számára nem hallható tartományba eső ultrahangokkal, a szonár elv alapján méri a tárgyak távolságát, amit szoktak pulse-echo módszernek is nevezni.
A pulse-echo módszer nagyon egyszerű elven működik: van egy adóegység, amely általában egy 40KHz-es többnyire 8 impulzusból álló ultrahangcsomagot sugároz ki.
Ha a hang útjába valamilyen tárgy,akadály kerül, akkor arról a kisugárzott impulzus-csomagnak egy része visszaverődik és a vevő egység ezt érzékeli. A kisugárzás és a vétel között eltelt idő pontos mérésével valamint ismerve a közeget(ami alapesetben a levegő), amiben az ultrahang terjed, kiszámíthatjuk az objektum távolságát.

 

Kommunikáció típusok

Az említett szenzorok értékeit digitálisan kapjuk meg, azaz 0 vagy 1 lehet az állapotuk. Az analóg szenzoroknál feszültséget kapunk, melyet a mikrovezérlő ADC-je (Analog to Digital Converter) konvertálja számmá. Az NodeMCU és az Arduino UNO ADC-je 10bites, azaz 0 és 1024 közötti értékre konvertálja a bejövő feszültséget. (Arduinonál 0-5V között, míg ESP8266 esetén 0-1V, NodeMCU-nál egy feszültségosztóval 0-3.3V a tartomány)
Léteznek ezeken az elveken alapuló komolyabb kommunikációs protokollok, melyek megkönnyítik nagyobb, vagy komplexebb adatcsomagok továbbítását.
Ilyen az UART,SPI vagy az I2C. Ezek a legáltalánosabban használt kommunikációs módok. Mintának itt egy BME280 szenzort és egy I2C-s LCD kijelzőt használunk.

SPI
Az SPI egy szinkron soros kommunikációs interfész, amelyet rövid távú adatátvitelre használnak, elsősorban beágyazott rendszerekben. Tipikus SPI alkalmazások közé tartozik az SD kártyákkal és a folyadékkristályos kijelzőkkel folytatott kommunikáció. Az SPI eszközök full-duplex módban kommunikálnak master-slave architektúrán keresztül. A hálozaton egy master tartózkodhat csak. A busz maximális távolsága nagyjából 8 m.
Az SCLK vezetéken szolgáltatja a mester az órajelet, mely tipikusan 1-70 MHz szokott lenni. A MISO (master-in-slave-out) a mester felé menő kommunikációs vezeték, amelyen a szolga tud a mesternek adatot küldeni. A MOSI (master-out-slave-in) a szolga felé menő kommunikációs vezeték, amelyen a mester tud a szolgának adatot küldeni. A CS (chip select) vagy más néven SS (slave select) vezetéken tudja a master engedélyezni az egyes slave eszközöket, azaz ezzel tudja meghatározni kivel szeretne kommunikálni. A kiválasztó vonalak száma szab határt annak, hogy hány szolga eszköz csatlakozhat a hálózathoz, valamint ha csak egy szolga eszköz van rácsatlakoztatva a hálózatra, akkor nem kötelező a használata.

UART
A mikrokontrollerek között az egyik legelterjedtebb kommunikációs protokoll az UART, mely soros, aszinkron átvitelt tesz lehetővé. Alapértelmezetten három vezeték szükséges a működéséhez: egy fogadó (RXD), egy küldő (TXD), valamint egy földelés (GND) vezeték. A vonalak feszültségszintjei a szabványos TTL jelszinteknek felelnek meg. Mivel az UART aszinkron protokoll, vagyis nincsen közös szinkronizáló órajel a felek között a kommunikáció alatt, így rendkívül fontos a kommunikációban résztvevő két fél megfelelő beállítása, máskülönben nem tudják megfelelően értelmezni az egymásnak küldött adatokat illetve vezérlő jeleket.

I2C vagy IIC
Az IIC egy multi-master, multi-slave, csomagkapcsolt szerial busz. Az IIC jellemzően kis távolságú, viszonylag alacsony sebességű IC és fedélzeti rendszerek közötti kommunikációra szokás alkalmazni. A busz maximális távolsága elvileg 7,6 m, de jellemzően 2-3 m-en szokás alkalmazni.Az IIC az adatátvitelhez egy nyitott végű vezetékpárt használ, a soros adatvonalat (SDA) és a soros órajelet (SCL). A két vezetéket ellenállásokkal kell üzemi feszültségre húzni, a vezetékek jellemzően 5V, vagy 3,3V feszültséggel üzemelnek.

A kommunikációk leírásához használt források: OB121.com, malnasuli.hu, hobbielektronika.hu
 

Mérő Egység Minta

Ahogy minden oktató résznél, itt is igyekeztünk összerakni egy komplexebb minta programot és kapcsolást. Itt most egy "fapados időjárás állomást" készítettünk, mely mutat: hőmérsékletet, páratartalmat, tengerszint feletti magasságot, légnyomást, plusz egy IR szenzorral elértük, hogyha elé teszed a kezed akkor bekapcsol.
Az adatokat egy I2C-s LCD kijelzőn jelenítjük meg. Az LCD kijelző és a magyar ékezetes betűk rossz viszonyáról korábban írtunk egy cikket, illetve egy libet is amellyel ez a rossz viszony kezelhető. Automatikusan kiírja a változott értékeket, de ha szükséges egy gombbal bármikor végiglépkedhetünk a mért adatokon.
A kapcsolási rajzokat és a forráskódokat letölthetitek a cikk alatt.


 

 

Szükséges eszközök


Itt már csak azokat az eszközöket tüntetjük fel, ami az előző részhez plusz, illetve kifejezetten ebben a részben foglalkoztunk vele.

  • BME280 szenzor (Hőmérséklet,páratartalom,légnyomás)
  • Digitális szenzorok: REED relé, PIR szenzor, IR jelenlét érzékelő, Ultrahangos távolságmérő
  • Analóg szenzor: WHTM-02 (hőmérséklet és páratartalom)
  • CD4051 8 csatornás analóg multiplexer
  • LCD kijelző (16x2, I2C kommunikációval)
  • MCP23017 16bit io extender i2C (digitális port bővítő i2C alapon)
  • Gomb

A kapcsolási rajzok és a minta programkódok letölthetők a cikk alatti linken a Letöltések szekcióban.

Libek/programok, amelyeket használtunk:
I2C szkenner, amivel megnézheted mi az eszközöd címe: https://playground.arduino.cc/Main/I2cScanner/
LCDCharconverter, amellyel az ékezetes karakterek is megjelennek: LCD + magyar ékezetes karakterek
BME280 szenzorhoz: Adafruit Unified Sensors (v1.0.3) és Adafruit BME280 Lib (v1.0.8)
LCD kijelzőhőz: LiquidCrystal_I2C (v1.1.2)

 

Ha elakadtál ...


Létrehoztunk egy Discord szervert, ahol általában mindig van közülünk valaki, aki tud segíteni.
Kritika, vélemény minden mennyiségben jöhet, közösségi oldalainkon, illetve a videó alatt várjuk az ilyen észrevételeket.

Mivel ezzel a résszel elég csúnyán elkéstünk, így a többi rész is sajnos csúszik. Egyenlőre nem tudok időpontot írni, sajnos teljesen biztos, hogy nem tudjuk tartani a 2 hetente 1 oktatós videót 1-2 részig biztosan. E
Spoiler: Hang lejátszással és továbbítással foglalkozunk

 

 

 

Letöltések

Hozzászólás