Kazalo:
- Zaloge
- 1. korak: Nastavitev RPi
- 2. korak: MCP3008 + TMP36
- 3. korak: zbirka podatkov
- 4. korak: HNT11, za prave fante
- 5. korak: Senzorji plina (samo legende)
- Korak 6: Register premika, 74HC595AG
- 7. korak: Frontend, dragocena lekcija
- 8. korak: Backend
- 9. korak: Utemeljitev
- 10. korak: Vrednotenje in zaključek
Video: Preverjevalnik onesnaženja razreda CPC: 10 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:03
Pozdravljeni, študentka sem iz Belgije in to je moj prvi velik projekt za diplomo! Ta Instructable govori o tem, kako narediti merilnik zračne energije za zaprte prostore, zlasti učilnice!
Slišim, kako razmišljate, zakaj ta projekt? No, vse se je začelo, ko sem šel v srednjo šolo. Popoldne po dobrem kosilu in odmoru se pouk začne znova. Obstaja pa težava, da je učiteljica med kosilom pozabila odpreti okno, tako da je vroče, prepoteno in se ne morete skoncentrirati, ker zaspite. To je zato, ker je v zraku preveč CO2.
Moj projekt bo to rešil in naredil vse učence bolj koncentrirane med poukom.
Zaloge
1 xRaspberry Pi 4 (55 €)
1 x step motor z voznikom (5 €)
2 x 12v 6800 mAh baterije (2x 20 €)
2 x odmični modul (2x 5 €)
1 x 16x2 LCD (1,5 €)
Senzorji: 1x MQ8, 1x MQ4, 1x MQ7, 1x MQ135, 1x HNT11, 1x TMP36 (1 x 23 €)
IC -ji: 1x MCP3008, 2x 74hc595AG (1x 2,30 €, 2x 0,40 €)
LED diode: 2x zelena, 2x rdeča, 3x rumena (najdemo jih v nekaterih starih strojnih opremah, običajno 0,01 € za vsakega)
Priključek za baterije (2 x 0,35 €)
40 priključnih kablov f-to-f (1,80 €)
40 priključnih kablov f-to-m (1,80 €)
Priključni kabli 20 m do m (1,80 €)
2 x PCB na spajkanje (2x 0,70 €)
Orodja:
Spajkalnik (prednostno 60 W)
Kositer za spajkanje
Aluminijasta pločevina 50x20
Ohišje (uporabil sem staro ohišje za mini računalnik)
To so lahko preprosto MDF ali lastne ideje.
1. korak: Nastavitev RPi
V tem izdelku so torej srce, možgani in duša. Dobro grozite, ker vam lahko tako ali drugače škodi. Uporabljam RPi 4B 4gb, drugi modeli bi morali biti v redu. Pri starejših modelih lahko pričakujete več zamika.
OS smo dobili iz šole z nekaj vnaprej nameščeno programsko opremo, kot je phpMyAdmin.
Najprej se prepričajte, da se lahko povežete z Raspberry Pi prek ssh -a, potrebovali bomo veliko časa.
Zato bi morali najprej omogočiti vodilo SPI, zatiče GPIO in onemogočiti druga vodila, ne bomo jih potrebovali.
To lahko storite v meniju raspi-config. Pomaknite se do vmesnikov in omogočite GPIO in SPI. Običajno vam ne bo treba. Medtem ko ste tukaj, razširite svoj pomnilnik tako, da odprete napredno, in nato pritisnite enter na razširjenem pomnilniku.
Zdaj znova zaženite. Za uporabo VS kode na našem pi, za zagon strežnika in baze podatkov bomo potrebovali nekaj razširitev.
Postopek namestitve razširitve kode VS najdete tukaj.
Zdaj bomo namestili razširitve za naš strežnik in bazo podatkov. Uporabite terminal in vnesite 'python install flask, flask-cors, mysql-python-connector, eventlet' počakajte, da se dokonča.
Zdaj lahko začnemo z izdelavo projekta.
2. korak: MCP3008 + TMP36
Tako imamo 6 senzorjev: 4 plina, 1 vlažnost + temperatura in 1 temperaturni senzor. To je resnična naloga, da jih vse pripravimo na delo. Vsi senzorji so analogni, zato moramo analogni signal pretvoriti v digitalni signal. To je zato, ker RPi (Rasberry Pi) lahko "razume" samo digitalne signale. Za več informacij kliknite tukaj.
Če želite dokončati to nalogo, potrebujete MCP3008, to se bo odlično obneslo!
Ima 16 vrat, od zgoraj (mali mehurček) levo, navzdol, na drugo stran in navzgor. Pin1-8 so vhodi za analogni signal iz naših senzorjev. Pin 9 na drugi strani je GND, ki ga je treba priključiti na GND celotnega vezja, sicer to ne bi delovalo. Pin 10-13 je treba previdneje povezati, ti bodo prenašali podatke v RPi in iz njega. Pin 14 je še en GND, nožica 15 in 16 pa sta VCC, ki ju je treba priključiti na pozitivno stran vezja.
To je postavitev za ožičenje:
- MCP3008 VDD na zunanji 3.3V MCP3008 VREF na zunanji 3.3V
- MCP3008 AGND na zunanji GND
- MCP3008 DGND na zunanjiGND
- MCP3008 CLK do Raspberry Pi pin 18
- MCP3008 DOUT na Raspberry Pi pin 23
- MCP3008 DIN na Raspberry Pi pin 24
- MCP3008 CS/SHDN na pin 25 Raspberry Pi
To je tudi pravi čas za priključitev GND iz RPI na zunanji GND. Tako bo električna energija pritekla iz RPi.
Tukaj je, kako ga pravilno povezati.
Prepričajte se, da ste pravilno priključeni, sicer lahko pride do kratkega stika pri vsem!
Tu se pojavi prvi del kode.
Lahko kopirate mojo kodo iz mojega projekta github pod models. Analog_Digital.
Na dnu strani boste našli izvorno kodo, da bo delovala.
Potrebujemo pa prvi senzor, da ga lahko preizkusimo.
Če deluje, mora senzor preskusiti. Priključite napajalnik 3.3V ali 5V na pozitivno stran TMP36. Ne pozabite ga priključiti tudi na GND, morda se bo zgodilo nekaj neumnega, ampak verjemite. To je realnost;) Z multimetrom lahko preizkusite izhod senzorja, to je srednji zatič. S to preprosto enačbo lahko preverite temperaturo v ° C. ((milivolti*vhodna napetost) -500)/10 in voila donne! Adijo! No hahah rabimo MCP3008. Priključite analogni pin za vaš TMP36 na prvo vhodno vtičnico MCP3008. To je pin 0.
Za ta razred MCP lahko uporabite primer kode na dnu. Ali pa bo nekaj, kar boste našli na spletu, dobro opravilo svoje delo.
3. korak: zbirka podatkov
Zdaj, ko lahko beremo v našem prvem senzorju, ga moramo prijaviti v bazo podatkov. To je spomin na naše možgane. To bazo podatkov sem oblikoval tako, da jo je mogoče razširiti in zlahka spremeniti za prihodnje spremembe.
Zato moramo najprej razmisliti, kaj bomo dobili kot vložke, in če moramo zabeležiti posebne stvari, kot so statusi določenih predmetov.
Moj odgovor bi bil: vnos iz 6 senzorjev, zato moramo narediti tabelo senzorjev, s temi senzorji bomo naredili vrednosti. Kaj je povezano z vrednostjo? Zame je to stanje okna, ali je odprto ali zaprto, medtem ko je senzor meril vrednost. Toda lokacija je tudi dejavnik moje vrednosti, zato bomo temu dodali. Pomembna sta tudi čas in datum vrednosti, zato bom to dodal.
Za prihodnjo razširitev sem dodal uporabniško tabelo.
Kakšna je torej moja zamisel glede tabel: vrednosti tabel, naslov tabele (povezan s sobo), soba tabele (povezana z vrednostjo), okno tabele (povezana z vrednostjo), senzor tabele (povezan z vrednostjo) in tabela v naravi za uporabniki.
Kar zadeva povezovanje tabel skupaj. Vsaka vrednost potrebuje en senzor, eno okno, vrednost za senzor, id, da lahko naredimo vrednost edinstveno, časovni žig, kdaj je bila vrednost narejena, in nazadnje ne potrebujemo prostora, zato je to neobvezno, lahko pa je dodano.
Tako je zdaj videti tako. To uporabljam za preostanek svojega projekta.
4. korak: HNT11, za prave fante
Ker nam ni bilo dovoljeno uporabljati kakršnih koli knjižnic. Vse moramo programirati sami.
HNT11 je enožični sistem, zato to pomeni, da imate GND in VCC, kot katera koli druga elektronska naprava, vendar je 3-polni vhodni in izhodni pin. Tako je nekako čudno, vendar sem se iz tega veliko naučil.
VCC priključite na zunanji 3.3V, GND pa na zunanji GND.
Podatkovni list DHT11 vsebuje vse za uporabo teh senzorjev.
Lahko ugotovimo, da visok bit vsebuje nizki in visoki bit. Toda trajanje visokega dela resnično določa bit. Če se visoki del oddaja dlje kot 100 μs (običajno 127 μs), je bit visok. Če je bit krajši od 100 μs (običajno okrog 78 μs), je bit nizek.
Ko je HNT11 aktiviran, bo začel oddajati signale. To je vedno 41 bitov. Začne se z začetnim bitom, to pa nič ne pomeni, zato lahko tega preskočimo. Prvih 16 bitov/ 2 bajtov je celo število in plavajoči del za vlažnost. Za zadnja 2 bajta je enako, zdaj pa za temperaturo.
Zato moramo izračunati samo trajanje vsakega bita in potem smo končali.
V izvorni kodi pod DHT11 boste našli mojo metodo pri reševanju te težave.
5. korak: Senzorji plina (samo legende)
Zato sem na začetku projekta pomislil, da bi bilo dobro uporabiti številne senzorje. Pomislite, preden ukrepate in kupujete lokalno, s tem boste prihranili veliko ur spanja! Ker lahko začnete prej in s tem se boste lažje lotili.
Torej imam 4 senzorje za plin. MQ135, MQ8, MQ4 in MQ7 imajo vsi ti senzorji posebne pline, ki jih najbolje merijo. Toda vse se razlikujejo po svoji konfiguraciji.
Torej, najprej sem uporabil podatkovni list, zaradi česar nisem želel. Nato sem iskal primere kod. Našel sem eno knjižnico iz Adafruta. Poskušal sem ga čim bolje ponoviti. Deloval je z enim od štirih senzorjev.
Pustil sem ga nekaj časa počivati in se vrnil k temu.
Kaj sem naredil, da je deloval za ta senzor, je:
- S podatkovnim listom sem označil točke plina, ki sem jih želel izmeriti. Torej 1 ro/rs do 400 ppm, 1,2 do 600 ppm …
- Nato sem vse te točke dal v excell in izvlekel formulo za krivuljo. To sem shranil v svojo bazo podatkov.
- Iz podatkovnega lista sem prebral tudi normalno upornost in upor čistega zraka. Te vrednosti so bile shranjene tudi v bazi podatkov.
Vse to sem prelil v neko kodo, to lahko najdete kot zadnje tri funkcije v razredu MCP3008. Ampak to še ni končano, žal nisem imel dovolj časa.
Korak 6: Register premika, 74HC595AG
Torej je to IC. In naredi nekaj posebnega, s to napravo je mogoče uporabiti manj izhodov GPIO za isti izhodni signal. To sem uporabil za LCD (zaslon s tekočimi kristali) in moje LED diode. IP naslov bom prikazal na LCD -ju, tako da lahko vsak brska po spletnem mestu.
LED diode so modro izbrane: 2 rdeča, 3 rumene in 2 zelene. To bo kadar koli pokazalo kakovost zraka v prostoru.
Premični register je paralelna izhodna naprava, zato ni mogoče oddajati različnih signalov v časovnem obdobju. To bi bilo mogoče, če bi bilo programirano od zunaj, vendar ni izvorno podprto.
Kako uporabljati IC? Imate 5 vhodov in 9 izhodov. 8 logičnih izhodov za 8 zatičev in nato 9. zatič za pošiljanje preostalih podatkov v drug register premikov.
Tako priključimo pin 16 na zunanji VCC, naslednji pin je prvi izhod, zato ga bomo za LCD potrebovali. Pin 14 je podatkovna linija, kamor bomo pošiljali podatke. 13. pin je vklop stikala, nizek signal omogoča IC, za izklop je potreben visok signal. Pin 12 je nožica, na kateri lahko ugotovimo, kdaj je bil bit poslan, ko ta pin potegnete navzdol tako visoko od nizko, prebere stanje signala pin 13 in ga shrani v svoj 8 -bitni pomnilnik. Pin 11 je podoben, če je ta pin nastavljen visoko, nato pa nizko odda 8 bitov v svoja vrata. In zadnji pin, pin 10 je glavna ponastavitev, ta pin mora ostati visok ali pa ne bo deloval. Zadnja povezava je pin GND 8, ki ga moramo priključiti na zunanji GND.
Zato zdaj povežite zatiče, ki vam bodo všeč, z malinovim pi. Tako sem jih povezal čim bližje drug drugemu, da sem se prepričal, da vem, kje so.
Ko dobite pravi izhod. To lahko spajkate na tiskano vezje z LED diodami. in 220 ohmski upori. Spajkajte izhod IC na ustrezen LED. Zdaj bi morali imeti nekaj takega.
Mojo preskusno kodo najdete tukaj pod Shiftregister. Ko delate s 74HC595N, MR ne boste potrebovali, zato ga ne pustite priključenega.
LCD je skoraj enak. Uporabljati ga je s premičnim registrom, ker je vhod za LCD ravno vhod za registrski premik.
Za LCD obstaja še kakšna druga koda, ki deluje, vendar je dokaj enaka kot le shfregister. Testno kodo najdete tukaj pod LCD -zaslonom.
7. korak: Frontend, dragocena lekcija
Zato se bom odpravil, to je del tega, kako to storiti. To je nekaj zelo zelo dragocenega, kar smo se naučili.
Naredite prednjo stran pred zaledjem !!!!
Naredil sem obratno. Neuporabno sem klical svojo bazo podatkov, za to porabim veliko časa.
Na ciljni strani sem potreboval trenutno temperaturo in vlažnost ter vrednosti vseh senzorjev za plin v lepem grafikonu. Pokazati moram tudi ip naslov RPi.
Na strani senzorjev potrebujem izbiro enega senzorja in čas izbire. Za izbor sem izbral en dan in nato obdobje od tega dne. To mi je veliko olajšalo, ker sem lahko bolj nadzoroval.
Na zadnji strani je na strani z nastavitvami mogoče upravljati z določenimi vrednostmi, kot so zdravju nevaren ali nevaren plin ter temperaturne ravni. Prav tako lahko znova zaženete RPi, če menite, da je to potrebno.
Zato sem najprej naredil zasnovo, da sem lahko zlahka začel delati na kodirnem delu. Postopoma sem napredoval eno za drugo. Naloga je bila najprej mobilna, zato se bom najprej osredotočil na to. Potem se bom odpravil na večje zaslone.
Moje strani, css in js najdete v mojem Githubu.
8. korak: Backend
Ta del je del, ki sem ga pomešal s prednjo stranjo. Ko sem naredil nekaj za prednjo stran, sem delal na zaledju. Zato pozneje ne bi potreboval revizije. To je bilo nekaj, česar nisem storil in zaradi tega sem izgubil 2 tedna časa. Neumna sem! Toda nauk, ki sem se ga naučil pri drugih projektih.
Ko torej naredite zaledje, naredite nekaj, kar boste uporabili. Toda naredite ga dokaz za prihodnost, tako da ga naredite za večkratno uporabo in ni težko kodiran. Ko bom torej potreboval zadnjih 50 vrednosti svojega DHT11, bom preveril, ali obstajajo vrednosti? Da, kako jih vstavim v bazo podatkov. Kako jih izvlečem iz baze podatkov. Kako naj to pokažem? Graf, graf ali samo navadni podatki? Nato naredim novo pot z različnimi parametri in lastnostmi, kot so datumi, določena imena senzorjev ali kaj bom klical. Mislim, ali kličem vse vrednosti senzorjev MQ ali kličem vse senzorje z imenom MQ v svojem imenu. Potem sem vnesel nekaj napak. Ko je zahteva iz klica prava metoda, potem lahko nadaljuje, sicer dobi lepo napako.
Tu so tudi niti, ki so del programske opreme, ki vam omogoča izvajanje vzporedne kode. Lahko bi izvajali klice na spletnih mestih, funkcijo ustvarjanja vrednosti in led+shiftregister. Te funkcije delujejo popolnoma neodvisno drug od drugega.
Torej za vodilne. Naredil sem spodnjo/ zdravo vrednost za CO2. Ta vrednost je prihajala iz več virov, povezanih z vlado. Zdrava vrednost za učilnice je pod 600 ppm CO2 na kubični meter. Nezdrava vrednost je vse nad 2000 ppm. Tako most naredijo LED. Če je vrednost senzorja MQ4 1400, bo samodejno izračunal, na kateri stopnji nevarnosti je. 2000 - 600 = 1400, torej je skupni razpon 1400 /7 = 200. Ko vrednost doseže 550, se prikaže zelena LED. 750 prikazuje 2 zeleni LED, 950 1 rumeno 2 zeleni LED. In tako naprej.
Ko vrednost preseže sredino, se odpre okno. Zaradi velikega navora in natančnosti sem uporabil step motor. Ko vrednost preseže 2000, se sproži majhen alarm. To naj alarmira ljudi v sobi.
Kadar pride do požara, lahko zaznamo tudi dimne pline. To tudi beleži. Ko preseže določeno vrednost, se vklopi alarm in LED utripa.
LCD je namenjen predvsem za prikaz naslova IP, tako da lahko brskate po spletnem mestu.
V mojem Githubinu app.py najdete vse + kodo
9. korak: Utemeljitev
Našel sem majhno ohišje za vse svoje komponente.
Aluminijasto pločevino sem razrezal po velikosti. In izvrtal nekaj lukenj, kjer bi počival list. To ustreza luknjam na matični plošči.
Nato sem pogledal, kako bi vse ustrezalo ohišju. Vse sem položil in se začel premikati.
Ko sem bil zadovoljen s tem, kako bo deloval, sem začel označevati luknje, ki sem jih potreboval za senzorje, RPi, PCB -je, napajalne module in modul koračnega motorja. Luknje so namenjene odmiku tiskanih vezij, kar bo naredilo nekaj prostora, da kovinski deli ne pridejo v stik z aluminijasto pločevino. Prav tako daje lep videz.
Iz vsake IC ali druge naprave sem pograbil kabine in jih skupaj povezal. To je zato, ker sem lahko videl, kaj so kabli za kaj. Vsakega sem lepo postavil na nekaj stojnic in uporabil nekaj matic in vijakov, da je vse lepo pritrjeno.
Za napajanje sem uporabil 2 bateriji. Ti zagotavljajo veliko energije, vendar so to še vedno baterije, zato se bodo te sčasoma izpraznile. Te sem montiral z nekaj ježka. Uporabil sem velcro, ker sem potem zlahka zamenjal ali se znebil baterij.
Steppenmotor, LCD in LED diode bodo prišli z vrha ohišja. Zato sem previdno položil pokrov ohišja na vrh in označil luknje ter jih izvrtal s svedrom. Tako zlahka vidimo vse.
Ko je zadeva končana, moramo vse ožičiti, tukaj lahko najdete shemo ožičenja.
10. korak: Vrednotenje in zaključek
Torej je to/bil moj prvi projekt.
Zdi se mi v redu.
Naučil sem se veliko novega, spoznal dobre in slabe strani vodenja projektov. Res je bila to dragocena lekcija. Ugotovil sem, da komaj čakaš, da res moraš še naprej dajati. Dokumentirati morate vsak korak (skoraj zelo premik) in to morate storiti, ko ste to storili.
Osredotočite se na eno stvar hkrati. Želite temperaturo na zaslonu? Naredi to, to in ono. Ne čakajte in ne poskušajte pustiti, da mine. Ne bo pomagalo. In izgubil boš tako dragocen čas.
Tudi 4 tedni se mi zdijo veliko časa. Res pa je manj. To preprosto ni v redu. Imate samo 4 tedne. Prva dva tedna v resnici ni tako velik pritisk. 3 -tedenski zaključek in 4 -tedenska neprespana noč. Tako tega ne bi smeli storiti.
Morda sem bil malo ambiciozen: imam zelo majhen kovček, senzorjev, baterij, ki niso enostavne za uporabo … Poenostavite in nato postopoma otežujte, šele potem boste dobili dober prototip/ izdelek.
Priporočena:
Modelni projekt parka svetlobnega onesnaženja: 15 korakov
Modelni projekt parka svetlobnega onesnaževanja: Svetlobno onesnaženje je resen problem v mnogih večjih mestih po vsem svetu. Prekomerna količina svetlobe v naših mestih lahko moti selitvene vzorce različnih živali, na primer želv in ptic, povzroči njihovo pobijanje, pokvari delikatese
DIY žepni preverjevalnik temperature zraka: 6 korakov
DIY žepni preverjevalnik temperature zraka: za to bomo uporabili zaslon Nokia 5110, digitalni temperaturni modul in Arduino Uno. Potreben je tudi priključek 9 V z žicami, ne s sodom, skupaj s stikalom in žicami. Morda boste potrebovali spajkalnik, lahko pa tudi samo zvite žice
Preverjevalnik vrtljajev za mini motor Dc: 11 korakov (s slikami)
Preverjevalnik vrtljajev za mini motor Dc: število vrtljajev na minuto, na kratko je hitrost vrtenja, izražena v vrtljajih v minuti. orodja za merjenje vrtljajev običajno uporabljajo tahometer. Lansko leto se mi je zdel zanimiv projekt, ki ga je izdelal electro18, in to je moj navdih, on je bil nor
Vizualizacija atmosferskega onesnaženja: 4 koraki
Vizualizacija atmosferskega onesnaženja: Problem onesnaženosti zraka pritegne vse več pozornosti. Tokrat smo poskušali spremljati PM2.5 z Wio LTE in novim laserskim senzorjem PM2.5
Preverjevalnik baterije s temperaturo in izbiro baterije: 23 korakov (s slikami)
Preverjevalnik baterije s temperaturo in izbiro baterije: Preizkuševalnik kapacitete baterije. S to napravo lahko preverite kapaciteto baterije 18650, kislino in drugo (največja baterija, ki sem jo preizkusil, je 6v kislinska baterija 4,2A). Rezultat testa je v miliamperih/urah. To napravo ustvarim, ker jo potrebujem za preverjanje