Indholdsfortegnelse:

CPC -klassepolutionschecker: 10 trin
CPC -klassepolutionschecker: 10 trin

Video: CPC -klassepolutionschecker: 10 trin

Video: CPC -klassepolutionschecker: 10 trin
Video: Anh nài gà giải trí nhất Thomo !!! 2024, November
Anonim
CPC -klasseforureningskontrol
CPC -klasseforureningskontrol
CPC -klasseforureningskontrol
CPC -klasseforureningskontrol
CPC -klasseforureningskontrol
CPC -klasseforureningskontrol

Hej der, jeg er studerende fra Belgien, og dette er mit første store projekt for min bachelorgrad! Denne instruktør handler om, hvordan man laver en airpolution -måler til lukkede lokaler, især klasseværelser!

Jeg hører dig tænke hvorfor dette projekt? Det hele startede, da jeg gik i gymnasiet. Om eftermiddagen efter en god frokost og en pause starter lektionerne igen. Men der er et problem, underviseren glemte at åbne vinduet, mens vi spiste frokost, så det er varmt, svedigt og du kan ikke koncentrere dig, fordi du falder i søvn. Det er fordi der er for meget CO2 i luften.

Mit projekt vil løse dette og gøre alle elever mere koncentrerede, mens de er i lektionerne.

Forbrugsvarer

1 xRaspberry Pi 4 (€ 55)

1 x steppenmotor med driver (€ 5)

2 x 12v 6800 mAh batterier (2x € 20)

2 x stepdown -modul (2x € 5)

1 x 16x2 LCD (€ 1,5)

Sensorer: 1x MQ8, 1x MQ4, 1x MQ7, 1x MQ135, 1x HNT11, 1x TMP36 (1 x € 23)

IC'er: 1x MCP3008, 2x 74hc595AG (1x € 2,30, 2x € 0,40)

LED'er: 2x grøn, 2x rød, 3x gul (findes i gammel hardware, normalt 0,01 € pr. Stk.)

Stik til batterierne (2 x 0,35 €)

40 f-til-f-stik kabler (€ 1,80)

40 f-til-m-stik kabler (€ 1,80)

20 m-til-m-stik kabler (€ 1,80)

2 x printkort til lodning (2x € 0,70)

Værktøjer:

Loddejern (helst 60 Watt)

Tin til lodning

Aluminiumsplade 50x20

Kabinet (jeg brugte en gammel mini computerkasse)

Dette kan let være nogle MDF eller egne ideer.

Trin 1: Opsætning af din RPi

Opsætning af din RPi
Opsætning af din RPi

Så vores hjerte vores hjerne og vores sjæl er i dette produkt. Tru det godt, for det kan på en eller anden måde skade dig. Jeg bruger en RPi 4B 4gb, andre modeller burde klare sig fint. Du kan forvente noget mere forsinkelse på ældre modeller.

Vi fik OS fra vores skole med noget forudinstalleret software, såsom phpMyAdmin.

Sørg først og fremmest for, at du kan oprette forbindelse til din Raspberry Pi via ssh, vi har brug for det masser af tid.

Så først skulle vi aktivere SPI-bussen, GPIO-benene og deaktivere andre busser, vi har ikke brug for dem.

Du kan gøre dette i menuen raspi-config. Naviger til grænseflader og aktiver GPIO og SPI normalt, det vil ikke være nødvendigt at Mens du er her, skal du udvide din lagerplads ved at gå til avanceret og derefter trykke på enter på udvid lagring.

Genstart nu. Vi får brug for nogle udvidelser for at bruge VS -kode på vores pi, til at køre vores server og database.

Installationsprocessen for VS Code Extension kan findes her.

Nu installerer vi udvidelserne til vores server og database. Brug terminalen og skriv 'python installationskolbe, kolbe-cors, mysql-python-connector, eventlet', vent til den er færdig.

Nu kan vi starte med at lave projektet.

Trin 2: MCP3008 + TMP36

MCP3008 + TMP36
MCP3008 + TMP36
MCP3008 + TMP36
MCP3008 + TMP36
MCP3008 + TMP36
MCP3008 + TMP36

Så vi har 6 sensorer: 4 gas, 1 luftfugtighed + temperatur og 1 temperatursensor. Det er en reel opgave at få dem til at fungere. Alle sensorer er analoge sensorer, så vi skal konvertere det analoge signal til et digitalt signal. Det er fordi RPi (Rasberry Pi) kun kan "forstå" digitale signaler. For mere info klik her.

For at fuldføre denne opgave skal du bruge en MCP3008, dette vil gøre jobbet godt!

Den har 16 porte, der tæller fra toppen (den lille boble) til venstre, ned, den anden side og op. Pin1-8 er input til det analoge signal fra vores sensorer. Pin 9 på den anden side er en GND, denne skal tilsluttes GND'en for hele kredsløbet, ellers ville dette ikke fungere. Pin 10-13 skal forbindes mere omhyggeligt, disse overfører data til og fra RPi. Pin 14 er en anden GND og ben 15 og 16 er VCC'erne, disse skal forbindes til den positive side af kredsløbet.

Dette er layoutet for thr ledninger:

  • MCP3008 VDD til ekstern 3.3V MCP3008 VREF til ekstern 3.3V
  • MCP3008 AGND til ekstern GND
  • MCP3008 DGND til eksternGND
  • MCP3008 CLK til Raspberry Pi pin 18
  • MCP3008 DOUT til Raspberry Pi pin 23
  • MCP3008 DIN til Raspberry Pi pin 24
  • MCP3008 CS/SHDN til Raspberry Pi pin 25

Dette er også et godt tidspunkt at forbinde GND fra RPI til den eksterne GND. Dette får elektriciteten til at flyde fra RPi.

Sådan forbinder du den på den rigtige måde.

Sørg for at forbinde den rigtige måde, ellers kan du kortslutte alt!

Det første stykke kode kommer på plads her.

Du kan kopiere min kode fra mit projekt github under models. Analog_Digital.

Nederst på siden finder du kildekode for at få det til at fungere.

Men vi har brug for vores første sensor, så vi kan teste.

Vi skal teste vores sensor, hvis den virker. Tilslut en 3,3V eller 5V strømforsyning til den positive side af TMP36. Glem ikke også at koble den til GND, det er måske noget dumt der sker, men tro mig. Det er virkeligheden;). Du kan teste med dit multimeter sensorens output, dette er den midterste pin. Med denne enkle ligning kan du kontrollere temperaturen i ° C. ((milivolt*indgangsspænding) -500)/10 og voila donne! Farvel! Nå nej hahah vi har brug for MCP3008. Tilslut den analoge pin til din TMP36 til den første inputpin på MCP3008. Dette er pin 0.

Du kan bruge eksempelkoden i bunden til denne MCP-klasse. Eller noget, du finder online, klarer opgaven fint.

Trin 3: Database

Så nu vi, at vi kan læse i vores første sensor, skal vi logge den til en database. Dette er vores hjernes hukommelse. Jeg har designet denne database til at kunne udvides og let ændres til fremtidige ændringer.

Så først skal vi tænke over, hvad vi får som input, og hvis vi skal logge bestemte ting som f.eks. Status for bestemte objekter.

Mit svar ville være: input fra 6 sensorer, så vi skal lave en sensortabel, med disse sensorer laver vi værdier. Hvad er knyttet til en værdi? For mig er det status for vinduet, er det åbent eller er det lukket, mens sensoren målte værdien. Men placeringen er også en faktor for min værdi, så vi vil tilføje det til. Tid og dato for en værdi er også vigtig, så jeg tilføjer det til.

Til fremtidig udvidelse tilføjede jeg en bruger tabel.

Så hvad er min idé som for tabeller: tabelværdier, bordadresse (knyttet til værelse), bordrum (knyttet til værdi), bordvindue (knyttet til værdi), bordføler (knyttet til værdi) og en tabel i naturen for brugere.

Hvad angår sammenkædning af tabellerne. Hver værdi har brug for en sensor, et vindue, en værdi for sensoren, et id, så vi kan gøre værdien unik, et tidsstempel for hvornår værdien blev foretaget, og som sidste har vi ikke brug for et værelse, så det er valgfrit, men kan være tilføjet.

Så sådan ser det ud nu. Det er det, jeg bruger til resten af mit projekt.

Trin 4: HNT11, til Real Boys

Så da vi ikke måtte bruge nogen form for biblioteker. Vi skal selv programmere alt.

HNT11 er et en-tråds system, så det betyder, at du har en GND og VCC som enhver anden elektronisk enhed, men 3-stiften er en ind- og udgangsstift. Så det er lidt mærkeligt, men jeg lærte meget af det.

Tilslut VCC til den eksterne 3.3V og GND til den eksterne GND.

Databladet til DHT11 indeholder alt for at bruge disse sensorer.

Vi kan bestemme, at en høj bit indeholder en lav og høj bit. Men varigheden af den høje del bestemmer bitten i virkeligheden. Hvis den høje del udsendes længere end 100 µs (normalt 127 µs), er boret højt. Er bit kortere end 100µs (normalt omkring 78µs) er bit lidt.

Når HNT11 er aktiveret, begynder den at udsende signaler. Dette er altid 41 bits. Det starter med en startbit, det betyder ikke noget, så vi kan springe denne over. De første 16 bits/ 2 bytes er heltal og float -del for fugtigheden. Det er det samme for de sidste 2 bytes, men nu er det for temperaturen.

Så vi behøver kun at beregne varigheden af hver bit, og så er vi færdige.

I kildekoden under DHT11 finder du min metode til at løse dette problem.

Trin 5: Gassensorer (kun legender)

Gassensorer (kun legender)
Gassensorer (kun legender)
Gassensorer (kun legender)
Gassensorer (kun legender)

Så jeg tænkte i starten af projektet, at det ville være en god idé at bruge mange sensorer. Tænk, før du handler og køber lokalt, så sparer du mange sovetimer! Fordi du kan starte tidligere, og dette vil du gøre mere villigt til at gå efter det.

Så jeg har 4 gassensorer. MQ135, MQ8, MQ4 og en MQ7 alle disse sensorer har specifikke gasser, som de måler bedst. Men disse er alle forskellige i deres konfiguration.

Så først brugte jeg databladet, det gjorde mig ikke til noget. Derefter søgte jeg efter kodeeksempler. Det, jeg fandt, var et bibliotek fra Adafruit. Jeg prøvede at replikere det så godt som muligt. Det fungerede med en af de fire sensorer.

Jeg lod det hvile et stykke tid og kom tilbage til det.

Hvad jeg gjorde for at få det til at fungere for den ene sensor er:

- Jeg brugte databladet til at markere punkter på den gas, som jeg ville måle. Så 1 ro/rs til 400ppm, 1,2 til 600ppm …

- Derefter satte jeg alle de punkter i excell og ekstraherede formlen for kurven. Jeg gemte dette i min database.

- Fra databladet læste jeg også den normale modstand og ren luftmodstand. Disse værdier blev også gemt i databasen.

Jeg hældte det hele ind i en eller anden kode, du kan finde dette som de sidste tre funktioner i MCP3008 klassen. Men dette er ikke færdigt endnu, desværre havde jeg ikke tid nok.

Trin 6: Shiftregister, 74HC595AG

Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG
Shiftregister, 74HC595AG

Så dette er en IC. Og det gør noget særligt, med denne enhed er det muligt at bruge færre GPIO -udgange til det samme udgangssignal. Jeg brugte dette til LCD (Liquid Crystal Display) og mine lysdioder. Jeg viser IP -adressen på LCD'et, så alle kan surfe til webstedet.

LED'erne vælger klogt 2 røde, 3 gule og 2 grønne. Dette vil til enhver tid vise luftkvaliteten i rummet.

Skifteregisteret er en paralleludgangsenhed, så det er ikke muligt at udsende forskellige signaler i en tidsperiode. Dette ville være muligt, hvis det programmeres udefra, men ikke er indbygget bakket ind.

Hvordan bruges IC? Du har godt 5 input og 9 output. 8 logiske udgange til de 8 ben og derefter 9. pin til at sende dataene til overs til et andet skiftregister.

Så vi slutter pin 16 til den eksterne VCC, den næste pin er den første output, så til LCD'et får vi brug for den. Pin 14 er datalinjen, her sender vi data til. Den 13. pin er tændt på kontakten, et lavt signal gør det muligt for IC et højt signal er nødvendigt for at lukke det ned. Pin 12 er den pin, hvor vi kan bestemme, hvornår en bit blev sendt, når du trækker denne pin ned, så fra høj til lav læser den signalstatus for pin 13 og gemmer den i sin 8 -bit hukommelse. Pin 11 ligner hinanden, når denne pin er sat højt og lavt, sender den 8 bits til dens port. Og den sidste pin, pin 10 er master reset, denne pin skal forblive høj, ellers fungerer den ikke. Den sidste forbindelse er GND pin 8, vi har brug for at slutte denne til den eksterne GND.

Så forbind nu stifterne, som du vil lide, til hindbærpi. Måden jeg gjorde det på, var at forbinde dem så tæt som muligt på hinanden for at sikre, at jeg vidste, hvor de var.

Når du får det rigtige output. Du kan lodde dette til et printkort med LED'erne. og 220 Ohm modstande. Lod lod IC -output til den tilsvarende LED. Du skulle nu have sådan noget.

Du kan finde min testkode her under Shiftregister. Når du arbejder med en 74HC595N, har du ikke brug for MR, så du kan lade den ikke være tilsluttet.

LCD'et er stort set det samme. Det er ret let at bruge det med shiftregister, fordi input til LCD'et er nøjagtigt input til shiftregister.

Til LCD'en er der en anden kode til at få det til at fungere, men det er nogenlunde det samme som bare shifregister. Du kan finde testkoden her under LCD.

Trin 7: Frontend, en værdifuld lektion

Så her vil jeg vandre væk, dette er et afsnit af, hvordan du skal gøre det. Dette er noget meget meget værdifuldt, der lærte.

Lav frontend før backend !!!!

Jeg gjorde det omvendt. Jeg lavede ubrugelige opkald til min database, jeg bruger for meget tid på dette.

På destinationssiden havde jeg brug for den aktuelle temperatur og fugtighed og værdierne for alle gassensorerne i et flot diagram. Jeg skal også vise RPi'ens ip -adresse.

På siden af sensorerne har jeg brug for valg af en sensor og valgtid. Jeg valgte til valg af en dag og derefter perioden fra den dag. Dette gjorde det meget lettere for mig, fordi jeg kunne kontrollere det mere.

På den sidste side er indstillingssiden det muligt at styre visse værdier, såsom sund farlig eller farlig gas og temperaturniveauer. Du kan også få RPi til at genstarte, hvis du føler behov for det.

Så først lavede jeg et design, så jeg let kunne begynde at arbejde med kodningsdelen. Jeg gjorde gradvist fremskridt en ting ad gangen. Opgaven var mobil først, så jeg fokuserer først på det. Så tager jeg til de større skærme.

Du kan finde mine sider, css og js i min Github.

Trin 8: Backend

Denne del er den del, jeg blandede med frontenden. Da jeg lavede noget til frontend, fik jeg det til at fungere på backend. Så det ville ikke være nødvendigt at revidere senere. Dette var noget, jeg ikke gjorde i første omgang, og på grund af dette mistede jeg bestemt 2 ugers tid. Dumt mig! Men en lektion jeg med glæde tager til andre projekter.

Så når du laver backend, skal du lave noget, du vil bruge. Men gør det fremtidssikret ved at gøre det genanvendeligt og ikke hårdt kodet. Så når jeg har brug for de sidste 50 værdier af min DHT11, vil jeg kontrollere, om der laves værdier? Ja, hvordan placerer jeg dem i databasen. Hvordan får jeg dem ud af databasen. Hvordan viser jeg det? Diagram, graf eller bare almindelige data? Derefter laver jeg en ny rute med de forskellige parametre og egenskaber, såsom datoer, specifikke sensornavne eller hvad jeg vil ringe til. Jeg mener, kalder jeg alle værdierne fra MQ -sensorerne, eller kalder jeg alle sensorerne med MQ i sit navn. Derefter satte jeg lidt fejlhåndtering i. Når anmodningen fra opkaldet kun er den rigtige metode, så kan det fortsætte, ellers får det en dejlig fejl.

Også her er trådene placeret, disse stykker software giver dig mulighed for at køre parallelkode. Du kan køre webstedsopkald, værdiskabelsesfunktionen og led+shiftregister. Disse funktioner kører fuldstændigt uafhængigt af hinanden.

Så for ledere. Jeg lavede en bund/ sund værdi for CO2. Denne værdi kom fra flere gouvernementelle kilder. Den sunde værdi for klasseværelser er under 600 ppm CO2 pr. Kubikmeter. Den usunde værdi er alt over 2000 ppm. Så LED'erne danner broen. Hvis værdien af MQ4 -sensoren er 1400, beregnes den automatisk i hvilket fareniveau det er. 2000 - 600 = 1400, så det samlede område er 1400 /7 = 200. Så når værdien når 550 viser det en grøn lysdiode. 750 viser 2 grønne lysdioder, 950 1 gule 2 grønne lysdioder. Og så videre.

Når værdien går over midten åbnes vinduet. Jeg brugte en steppenmotor på grund af det høje moment og præcision. Og når værdien går over 2000 går en lille alarm. Dette er for at alarmere folk inde i rummet.

Vi kan også registrere røggasser, så når der er brand. Det registrerer også dette. Når den går over en bestemt værdi, går alarmen og LED'en blinker.

LCD'et er hovedsageligt der for at vise IP -adressen, så du kan surfe til webstedet.

Du kan finde alt + kode inde i min Githubin app.py

Trin 9: Fremstilling af sagen

At lave sagen
At lave sagen
At lave sagen
At lave sagen
At lave sagen
At lave sagen

Jeg fandt en lille computerkasse til alle mine komponenter.

Jeg klipper en aluminiumsplade i størrelse. Og borede nogle huller, hvor arket ville hvile. Dette svarer til bundkortets huller.

Derefter kiggede jeg på, hvordan alt ville passe ind i kassen. Jeg lagde alt op og begyndte at flytte.

Da jeg var tilfreds med, hvordan det ville fungere, begyndte jeg at markere de huller, jeg havde brug for til sensorerne, RPi, printkort, kraftmoduler og steppenmotormodul. Hullerne er til PCB -standoff, dette vil give plads, så metaldelene ikke kommer i kontakt med aluminiumspladen. Det giver det også et flot look.

Jeg greb kablerne fra hver IC eller anden enhed og bandt dem sammen. Det er fordi jeg kunne se, hvad kabler er til hvad. Jeg placerede hvert alt pænt på nogle standoffs og brugte nogle møtrikker og skruer til at holde alt pænt på plads.

Til at drive alt dette brugte jeg 2 batterier. Disse giver meget strøm, men det er stadig batterier, så disse vil blive opbrugt med tiden. Jeg monterede disse med lidt velcro. Jeg brugte velcro, fordi jeg så let kunne udskifte eller slippe af med batterierne.

Steppenmotoren, LCD og LED'er kommer ud af toppen af kabinettet. Så jeg lagde forsigtigt dækslet ovenpå og markerede hullerne og borede dem med en boremaskine. Så vi kan let se alt.

Da sagen er færdig, skal vi tilslutte alt, her kan du finde ledningsskemaet.

Trin 10: Evaluering og konklusion

Evaluering og konklusion
Evaluering og konklusion

Så dette er/var mit første projekt.

Det ser okay ud synes jeg.

Jeg lærte en masse nye ting, lærte den store og den dårlige side af projektstyring. Det var virkelig en værdifuld lektion. Jeg lænede mig op ad, at du ikke kan vente, du skal virkelig blive ved med at give. Du skal dokumentere hvert træk (næsten meget flytte), og at du skal gøre det, når du lige har gjort det.

Fokuser på 1 ting ad gangen. Vil du have temperaturen på din skærm? Gør det, det og det. Vent ikke eller prøv at lade det passere. Det hjælper ikke. Og det vil miste dig så dyrebar tid.

Også 4 uger virker meget tid. Men mindre er sandt. Dette er bare ikke rigtigt. Du har kun 4 uger. De første 2 uger ikke rigtig så meget pres. 3 ugers afslutning og 4 uges søvnløs nat. Sådan skal du ikke gøre det.

Jeg var måske lidt ambitiøs: Jeg er en super lille sag, ikke let at bruge sensorer, batterier … Gør det meget enklere og gør det gradvist sværere og sværere, først da får du en god prototype/ produkt.

Anbefalede: