Inhoudsopgave:

TheAir - Gassensorproject - Ajarnpa
TheAir - Gassensorproject - Ajarnpa

Video: TheAir - Gassensorproject - Ajarnpa

Video: TheAir - Gassensorproject - Ajarnpa
Video: MQ-135 Gas Sensor Module 2024, November
Anonim
TheAir - Gassensorproject
TheAir - Gassensorproject

Koolmonoxide en kooldioxide, ook bekend als CO en CO2. Gassen die in hoge concentraties in een afgesloten ruimte kleurloos, geurloos, smaakloos en ronduit gevaarlijk zijn. Als je bijvoorbeeld in een studentenkamer woont die slecht geïsoleerd is, geen goede luchtstroom en om de een of andere reden maakt de broodrooster een raar geluid tijdens het roosteren. Dan zou je in contact kunnen komen met deze gassen en als dat gebeurt, laten we hopen dat het alleen maar eindigt met een kleine hoofdpijn, want in hoge concentratie kan het je onbekwaam maken of zelfs doden (hoewel zeer zelden).

Dus besloot ik dit project te bedenken. Mijn idee is simpel, gebruik ventilatoren om een luchtstroom te maken. Goede lucht erin en slechte lucht eruit, zeg maar. Voor extra bruikbaarheid heb ik een extra temperatuursensor toegevoegd, een knop voor handmatige activering van fans en ook een website voor degenen die graag statistieken willen zien en/of fans willen activeren vanaf hun computer.

Als student, ouder, alleenstaande of levend wezen. Dit is iets wat je normaal gesproken zou willen vermijden als je in het comfort van je eigen huis woont. Dit helpt degenen die hun leven graag een beetje gemakkelijker willen maken.

Benodigdheden

  • Raspberry Pi 3+
  • Mini-usb-oplader 5V/2.5A
  • Micro SD kaart
  • Sensoren

    • MQ-7 (CO)
    • MQ-135 (CO2)
    • DS18B20 (temperatuur)
  • 2 x 12V DC-ventilator
  • 2 x 2n2222-transistors
  • LCD 16*2 scherm
  • Druk op de knop
  • MCP3008
  • Logi-niveau-omzetter
  • Ethernet-kabel (om installatieredenen)

Stap 1: Raspberry Pi-installatie

Raspberry Pi-configuratie
Raspberry Pi-configuratie
Raspberry Pi-configuratie
Raspberry Pi-configuratie

Voordat we met de Rpi gaan werken, hebben we wat software nodig.

  • WinSCP of FilleZilla (optioneel als u bestanden van uw computer naar de Rpi wilt overbrengen)
  • Win32-schijf of Etcher (die je liever hebt)
  • Putty of MobaXterm (die je liever hebt)
  • Raspbian-afbeelding met bureaublad

Voordat ik begin, zou ik willen vermelden dat wanneer ik deze tutorial maak, wanneer ik een programma verkies boven het andere, NIET betekent dat ik het aanbeveel. Ik gebruik bijvoorbeeld graag etser omdat het gebruiksvriendelijker is, maar Win32 heeft de mogelijkheid om back-ups te maken. Nu dat uit mijn systeem is, laten we beginnen.

Als je al een Rpi hebt die is verbonden met je wifi-netwerk, ga dan naar stap 3.

Eerst gaan we Etcher gebruiken om de Raspbian-afbeelding op je SD-kaart te plaatsen. Voordat we de SD-kaart tevoorschijn halen, gaan we wat "dingen" wijzigen in het cmdline.txt-bestand, dat te vinden is in de afbeelding. Open het.txt-bestand -> Voeg deze regel "ip=169.254.10.1" (geen aanhalingstekens) toe aan het einde van de regel (alles op 1 regel) -> Bestand opslaan

Maak vervolgens een lege map met de naam "ssh" in de opstartpartitie (zonder aanhalingstekens).

Daarna kunt u de Microsd veilig uitwerpen en in de Rpi plaatsen.

De reden voor het hard gecodeerde statische IP is om het gemakkelijker te maken om verbinding te maken met de Rpi. Als de Rpi om de een of andere reden geen ip met DHCP heeft, dan gebruik je gemakkelijk de statische ip.

Stap 2: Verbinding maken en Rpi Wireless verbinden met uw lokale netwerk

Een verbinding maken en Rpi Wireless verbinden met uw lokale netwerk
Een verbinding maken en Rpi Wireless verbinden met uw lokale netwerk
Een verbinding maken en Rpi Wireless verbinden met uw lokale netwerk
Een verbinding maken en Rpi Wireless verbinden met uw lokale netwerk
Een verbinding maken en Rpi Wireless verbinden met uw lokale netwerk
Een verbinding maken en Rpi Wireless verbinden met uw lokale netwerk
Een verbinding maken en Rpi Wireless verbinden met uw lokale netwerk
Een verbinding maken en Rpi Wireless verbinden met uw lokale netwerk

We gaan de Rpi opstarten -> sluit de ethernetkabel aan tussen computer en Rpi.

  1. Start Putty en vul dit in:

    • Hostnaam (of IP-adres): 169.254.10.1
    • Poort: 22
  2. Er verschijnt een terminal en u typt de standaard gebruikersnaam en wachtwoord in:

    • Gebruikersnaam: pi
    • Wachtwoord: framboos

Nu we lokaal verbonden zijn met de rpi, willen we dat de Rpi een verbinding heeft met je wifi.

  1. Extra: typ "sudo raspi-config" in
  2. Hier moet u het wachtwoord voor pi-gebruiker wijzigen (veiligheidsredenen)
  3. Ga daarna naar Lokalisatie-opties -> Tijd wijzigen (kies de juiste) -> Ga vervolgens naar Wifi-land -> kies land.
  4. Sluit raspi-config en start opnieuw op.
  5. Wanneer ingelogd, maak jezelf tijdelijk root gebruiker -> sudo -i
  6. Schrijf deze opdracht om uw netwerk toe te voegen aan de Rpi (code onder lijst)

    • wachtwoord = "wachtwoord" (met aanhalingstekens)
    • Naam netwerk = "SSID"
    • Vergeet niet dubbel te gebruiken >> !Belangrijk!

echo "wachtwoord" | wpa_passphrase "SSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Start nu opnieuw op

Controleer bij het opnieuw verbinden uw ip door te typen:

ifconfig

en vink wlan0 aan, naast inet.

Nu we een internetverbinding hebben, laten we een "snelle" update doen.

sudo apt update

sudo apt dist-upgrade -y

Dit kan enige tijd duren.

Stap 3: Sensor DS18B20 (temperatuur) -- 1-draads

Sensor DS18B20 (temperatuur) -- 1-draads
Sensor DS18B20 (temperatuur) -- 1-draads
Sensor DS18B20 (temperatuur) -- 1-draads
Sensor DS18B20 (temperatuur) -- 1-draads

Bij elk project zal er altijd iets speciaals zijn dat gedaan moet worden, anders werkt het niet.

Deze keer hebben we het met de DS18B20-temperatuursensor die 1-draads vereist, wat ik niet zal uitleggen waarom, maar ik zal uitleggen hoe je het op zijn minst kunt laten werken.

Hiervoor moeten we terug naar de raspi-config op de Rpi, het mooie blauwe scherm.

  1. Ga naar interface-opties
  2. Kies 1-Wire en kies inschakelen.

Gedaan…

Grapje.

Nu moeten we /boot/config.txt. aanpassen

sudo nano /boot/config.txt

Voeg deze regel onderaan toe.

# Eendraads inschakelen

dtoverlay=w1-gpio

Sudo start dat ding nu opnieuw op en nu zijn we klaar.

Om te controleren of het werkt, sluit u de sensor aan op de Rpi, gaat u terug naar de terminal en typt u deze code (zie volgende stap Hardware voor het aansluiten van de temperatuursensor).

cd /sys/bus/w1/devices/w1_bus_master1

ls

Je zou links bovenaan iets moeten zien met cijfers en letters in donkerblauw, zorg ervoor dat je dit stukje informatie opschrijft voor later wanneer we met de code van github gaan werken.

Als het om wat voor reden dan ook niet werkt, controleer dan deze link die er dieper op ingaat.

Stap 4: MCP3008 - Analoge detectie

MCP3008 - Analoge detectie
MCP3008 - Analoge detectie
MCP3008 - Analoge detectie
MCP3008 - Analoge detectie

Omdat we een wijziging hebben aangebracht voor de temperatuursensor, moeten we ook enkele wijzigingen aanbrengen voor de andere sensoren, omdat we analoge gegevens moeten inlezen. Dit waar de MCP3008 van pas komt, we moeten ook de SPI-interface veranderen.

sudo raspi-config

Ga naar Interfacing-opties -> Selecteer SPI -> inschakelen.

Dan Voltooien.

Stap 5: Hardware

We zijn nog niet helemaal klaar met de Rpi, maar genoeg zodat we kunnen beginnen met het bouwen en in elkaar zetten van de hardware.

Een advies is om uw aansluitingen tijdens het bouwen grondig te controleren om er zeker van te zijn dat u de Rpi niet opblaast.

Ook zul je in het schema merken dat sommige componenten er maar één keer op staan, ook al zullen we met meer dan 1 van dezelfde component werken. Het betekent alleen dat je hetzelfde proces van het bouwen van dat ene onderdeel moet herhalen. Er is 1 kleine uitzondering, de mq-x sensoren hebben geen extra level converter of MCP3008 nodig. Voeg gewoon een extra groene kabel (in pdf) toe aan de level converter en MCP3008.

Extra edit: De fans moeten een transistor als schakelaar gebruiken. Ik gebruik een 2n2222A transistor voor 1 ventilator, omdat 2 ventilatoren misschien een te zware belasting zijn.

Als je een transistor hebt die een grotere stroom aankan dan goed, sla dan het laatste deel van deze stap over.

Als je er geen hebt zoals ik, dan moet je het als volgt doen, 1 fan = 1 transistor, 2 fans = 2 transistors, enzovoort (elke fan heeft zijn eigen transistor + diode zoals in de pdf).

Je moet ook wat code toevoegen aan app.py in backend_project later in Stap 7: Git-code….

Stap 6: Een Mariadb-database maken

Een Mariadb-database maken
Een Mariadb-database maken

Zoals de titel al aangeeft, gaan we een database maken zodat we plaats hebben om onze sensorgegevens op te slaan.

Download eerst Mariadb op de Rpi.

sudo apt-get install mariadb-server

Laten we het na de installatie gebruiken.

mysql -u root

Wachtwoord is leeg, dus niets om te typen. Druk op Enter.

Laten we nu een gebruiker aanmaken.

MAAK GEBRUIKER 'gebruiker'@'%' GEDENTIFICEERD DOOR 'userdb';

VERLENEN ALLE VOORRECHTEN OP *.* AAN 'gebruiker'@'%' MET SUBSIDIEOPTIE;

SPOEL VOORRECHTEN;

Druk op Ctrl + C om af te sluiten en de service snel opnieuw op te starten:

sudo-service mysql opnieuw opstarten

Login met gebruikersnaam: gebruiker & wachtwoord: userdb:

mysql -u gebruiker -p

Tijd om nu de database aan te maken.

MAAK DATABASE project_db STANDAARD KARAKTERINSTELLING utf8;

GEBRUIK project_db

Maak een tabel "historiek" (betekent geschiedenis).

MAAK TABEL ALS NIET BESTAAT `historiek` (`id` INT NOT NULL AUTO_INCREMENT, `sensorID` VARCHAR(5) NOT NULL, `datum` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `waarde` FLOAT(4) NULL DEFAULT 0, PRIMAIRE SLEUTEL (`id`)) ENGINE = InnoDB;

En voila, de database is gemaakt.

Stap 7: Github-code en testen

Github-code en testen
Github-code en testen

We naderen het einde van ons project.

Voordat we de code krijgen, moeten we enkele modules in de Rpi importeren:

pip3 installeer Flask_MySQL

pip3 install flask-socketio

pip3 install -U flask-cors

pip3 installeer spidev

Nu hebben we de code nodig om het te laten werken, typ in de terminal:

git-kloon

Controleer of de map er is met:

ls

Nu heb je 2 terminals nodig, dus het is handig om met de rechtermuisknop op de terminal te klikken en op Sessies dupliceren te klikken:

Ga naar backend_project en temperatuur met behulp van het cd-commando.

Nu voordat we de programma's opstarten voor testdoeleinden. Herinner je je stap 3 met de 1-draads sensor nog waar je wat cijfers moet opschrijven? Maak je geen zorgen als je dat hebt gedaan, neem gewoon een snelle blik op stap 3.

We gaan deze cijfers aan de code toevoegen, omdat hij de juiste sensor moet kennen wanneer hij deze gebruikt.

In de terminal met de temperatuurmap vind je app.py. We gaan hem openen.

sudo nano app.py

Zoek naar de functie die "def temperatuur():" heet, daar moet je de "**" vervangen door de getallen die je hebt opgeschreven. In mijn geval zou ik deze regel code krijgen (elk nummer is uniek).

sensor_file_name = '/sys/devices/w1_bus_master1/28-0316a4be59ff/w1_slave

Tijd testen. Beide terminals in zowel backend_project als temperatuur map, typ:

python3 app.py

Onthoud nu stap 5: hardware waar je code moet toevoegen als je meerdere fans en transistors gebruikt?

Goed, zo niet, ga terug naar stap 5.

Nu moeten we code toevoegen zoals ik al zei aan app.py in backend_project. Om het makkelijker te maken heb ik hier een voorbeeld van gemaakt in de code. Elke regel commentaarcode met "fan1" erin, verwijder die regels en voila, nu kun je 2 fans gebruiken.

Als je meer dan 2 fans wilt gebruiken, kopieer en plak dan dezelfde code eronder maar met een ander nummer. Nadeel hiervan is meer persoonlijk werk voor jou en minder gpio.pins beschikbaar. Hier zijn geen voordelen aan voor zover ik weet.

Stap 8: Voer code uit bij opstarten

Voer code uit bij opstarten
Voer code uit bij opstarten

We willen dat deze 2 python-scripts worden uitgevoerd op het moment dat onze Rpi opstart en in het geval dat een script zou crashen, zou het vanzelf opnieuw moeten opstarten. Hiervoor gaan we 2 diensten maken.

Typ hiervoor:

sudo nano /etc/systemd/system/temperature.service

Kopieer en plak dit voor een temperature.service:

[Eenheid]Description=Temperatuurservice After=multi-user.target

[Service] Type=eenvoudig

ExecStart=/usr/bin/python3 /home/pi/Documents/nmct-s2-project-1-TheryBrian/temperature/app.py

StandardInput=tty-force

Opnieuw opstarten = bij falen

HerstartSec = 60s

[Installeren]

WantedBy=multi-user.target

Sluiten en opnieuw doen, maar dan voor een backend_project.service:

Eerste open tekst:

sudo nano /etc/systemd/system/backend_project.service

Kopieer en plak vervolgens opnieuw:

[Eenheid]Beschrijving=backend_project-service

Na=multi-user.target

[Onderhoud]

Type=eenvoudig

ExecStart=/usr/bin/python3 /home/pi/Documents/nmct-s2-project-1-TheryBrian/backend_project/app.py

StandardInput=tty-force

Opnieuw opstarten = bij falen

HerstartSec = 60s

[Installeren]

WantedBy=multi-user.target

Opslaan en afsluiten.

Laatste deel is dit aan het typen:

sudo systemctl daemon-reload

sudo systemctl temperatuur.service inschakelen sudo reboot

Nu zouden onze 2 python-scripts automatisch moeten worden uitgevoerd bij het opstarten.

Stap 9: Website instellen

Toen je de repository downloadde, zou je ook een map met de naam front moeten hebben gekregen. Dit is waar de inhoud voor de website is.

Eerst hebben we apache nodig voordat we de map kunnen gebruiken. Volg de gids op deze link voor apache.

Wanneer je klaar bent. Ga naar waar de voorste map zich bevindt:

cd /Documents/nmct-s2-project-1-TheryBrian

Typ dan:

sudo mv front /var/www/html

Als dat is gebeurd, ga dan naar de html-map en bereid je voor op wat vervelend werk (mijn fout).

cd /var/www/html/

ga dan naar de voorste map en begin alles naar de html-map te verplaatsen.

voorbeeld:

sudo mv css /var/www/html

Verwijder vervolgens de voorste map.

En we zijn klaar met alles.

Veel geluk:).

Stap 10: Optioneel - miniatuur prototype

Optioneel - miniatuur prototype
Optioneel - miniatuur prototype
Optioneel - miniatuur prototype
Optioneel - miniatuur prototype

Om testredenen heb ik een prototype gemaakt van alleen een doos met alle hardware erin, zodat ik kan zien of alles werkt om te bestellen.

Normaal gesproken zou dit project op grotere schaal worden uitgevoerd. Bijvoorbeeld: een kamer, een huis, een fabriek, een winkel enzovoort…

Maar uiteraard voordat we gaten in de muren gaan maken (leuk rijm). We willen eerst kijken of het gewoon werkt. Je hoeft niet echt een doos te maken om te testen, maar het is altijd leuk om wat te knutselen.

Hier is mijn voorbeeld.