Inhoudsopgave:

Automatische waterdispenser om het verbruik bij te houden - Ajarnpa
Automatische waterdispenser om het verbruik bij te houden - Ajarnpa

Video: Automatische waterdispenser om het verbruik bij te houden - Ajarnpa

Video: Automatische waterdispenser om het verbruik bij te houden - Ajarnpa
Video: Geheime TRUC om binnen 10 sec je gasverbruik tot 20% te verlagen! 2024, Juli-
Anonim
Automatische waterdispenser om het verbruik bij te houden
Automatische waterdispenser om het verbruik bij te houden
Automatische waterdispenser om het verbruik bij te houden
Automatische waterdispenser om het verbruik bij te houden

Hoi!

Een paar maanden geleden zat ik in mijn kamer te bedenken wat voor soort project ik wilde maken voor een schoolopdracht. Ik wilde iets maken dat bij me paste en waar ik in de toekomst iets aan zou hebben. Plots kwam mijn moeder de kamer binnen en begon te klagen dat ze niet genoeg water dronk. Ik kreeg meteen een openbaring. Het idee kwam bij mij op om een automatische waterdispenser te maken (zoals in de bioscoop) die dagelijks je waterverbruik bijhoudt.

Met een Raspberry Pi, een paar sensoren, een pompje en weinig kennis probeerde ik dit zo goed mogelijk te maken.

Aan het einde van alle stappen heb je een werkende waterdispenser die je waterfles vult en die verbinding maakt en samenwerkt met je Raspberry Pi. U kunt niet alleen procentueel uw waterverbruik volgen, maar u heeft ook de mogelijkheid om de temperatuur en het waterpeil van uw waterreservoir te bekijken. Ten slotte kunt u uw statistieken bekijken. Als dit interessant voor je klinkt, neem dan zeker een kijkje en probeer het zelf!

De GitHub-repository:

Benodigdheden

Microcontrollers

Raspberry Pi 4

Sensoren en modules

Ik heb 4 sensoren gebruikt:

2xHC-SR04Ultrasone sensor

Ultrasone sensoren meten afstand met behulp van ultrasone golven. De sensorkop zendt een ultrasone golf uit en ontvangt de golf die wordt teruggekaatst door het doel. Ultrasone sensoren meten de afstand tot het doel door de tijd tussen de emissie en ontvangst te meten. Ik heb er twee gebruikt om te controleren of er een fles in de buurt is en om de afstand tot het water in de tank te meten.

Data papier

1x DS18B20 temperatuursensor

De DS18B20 is een 1-draads programmeerbare temperatuursensor van maxim geïntegreerd. Het wordt veel gebruikt om de temperatuur te meten in harde omgevingen zoals in chemische oplossingen, mijnen of grond enz. Ik gebruikte het om de watertemperatuur van de watertank te meten.

Data papier

1x RC522 RFID-module

De RC522 is een 13,56MHz RFID-module die is gebaseerd op de MFRC522-controller van NXP halfgeleiders. De module ondersteunt I2C, SPI en UART en wordt normaal gesproken geleverd met een RFID-kaart en sleutelhanger. Het wordt vaak gebruikt in aanwezigheidssystemen en andere toepassingen voor persoons-/objectidentificatie. In dit project wordt het gebruikt voor een identificatie-/inlogsysteem.

Data papier

En 2 aandrijvingen:

1x Peristaltische Pomp 12-24V

Ik gebruikte een slangenpomp om het water uit de tank naar een waterfles te krijgen. De meeste pompen waren te traag, dus ik ging voor een 24V-versie die ik van stroom voorzien met een 24V-voedingsadapter.

1x LCD-scherm

Het LCD-scherm wordt gebruikt om het IP-adres en belangrijke berichten weer te geven. Een liquid-crystal display (LCD) is een plat beeldscherm of ander elektronisch gemoduleerd optisch apparaat dat gebruikmaakt van de lichtmodulerende eigenschappen van vloeibare kristallen in combinatie met polarisatoren.

Data papier

Behuizing

Over de behuizing gesproken, ik heb een DIY gedaan met benodigdheden van een Home depot (in mijn geval de Brico in België). Ik gebruikte multiplex dat ik op de juiste maat zaagde. Ik zal het hebben over hoe ik mijn zaak in een volgende stap heb gemaakt, maar dit zijn de dingen die je nodig hebt:

  • 3x Multiplex planken
  • 1x Kleine trechter
  • 1x Watertank (je kunt zelf kiezen welke hoeveelheid je wilt, ik ging voor 10L)
  • 1x Lekbak

U vindt alle materialen en prijzen in de bijgevoegde stuklijst.

Stap 1: Alle elektronica aansluiten

Alle elektronica aansluiten
Alle elektronica aansluiten
Alle elektronica aansluiten
Alle elektronica aansluiten

Nu we alle elektronica hebben samengevat, is het tijd om ze aan te sluiten. Ik heb twee Fritzing-circuits gemaakt, een breadboard en een schema, om je te laten zien hoe en waar alle elektronica moet worden aangesloten. De downloadlink naar Fritzing vind je hier: https://fritzing.org/download/. Zoals eerder vermeld, heb ik een Raspberry Pi gebruikt en een RFID-scanner, twee ultrasone sensoren, een temperatuursensor, een LCD en een peristaltische pomp voor het water aangesloten.

Ik heb de twee circuits in een PDF bijgevoegd, als je het van dichterbij wilt bekijken.

Stap 2: De Raspberry Pi instellen

We zullen onze Raspberry Pi gebruiken om alles uit te voeren en te besturen: backend, frontend en database.

Een Raspberry Pi draait niet automatisch. We zullen enkele stappen moeten doorlopen om het te gaan gebruiken.

Stap 1: Raspbian

Als je een gloednieuwe Raspberry Pi gebruikt, heb je raspbian nodig. De downloadlink en tutorial zijn hier te vinden.

Stap 2: De afbeelding naar SD schrijven

Nu je je Raspbian-afbeelding hebt, heb je software voor het schrijven van afbeeldingen nodig (ik raad win32diskimager aan) om het afbeeldingsbestand naar de SD-kaart te schrijven. De volledige tutorial is hier te vinden.

Stap 3: Inloggen op de Raspberry Pi

Open "Powershell" en typ "ssh [email protected]". Als alles goed gaat, vragen ze je om een wachtwoord (standaardwachtwoord is altijd framboos). Normaal gesproken zou dit u moeten aanmelden bij de Raspberry Pi. Nu moeten we enkele wijzigingen aanbrengen in onze instellingen. Typ sudo raspi-config in de terminal en druk op enter. Navigeer naar lokalisatie-opties> verander tijdzone en stel deze in op uw tijdzone. U moet ook uw wifi-land wijzigen in uw eigen locatie. Ga ten slotte naar interface-opties en schakel SPI, I2C en 1-wire in. Dit is belangrijk om de sensoren correct te gebruiken.

Stap 4: De internetverbinding instellen

We gaan gebruik maken van een wifi-netwerk. U kunt uw thuisnetwerk toevoegen via:

wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Je moet je Pi opnieuw opstarten om verbinding te maken. Om te controleren of het werkte, kun je ifconfig gebruiken om te controleren of er een IP-adres is.

Stap 5: De webserver en database instellen

Ten eerste is het het beste om het systeem bij te werken en te upgraden met de volgende reeks opdrachten:

  1. sudo apt dist-upgrade --auto-remove -y
  2. sudo apt-upgrade
  3. sudo apt update
  4. sudo apt autoremove

Zodra dit is gebeurd, hebben we de volgende pakketten nodig voor onze webserver en database:

Apache

sudo apt installeer apache2 -y

PHP

sudo apt installeer php

sudo apt install phpMyAdmin -y

Vergeet niet om een veilig MySQL-wachtwoord in te stellen als er wordt gevraagd om een wachtwoord in te stellen.

MariaDB

sudo apt install mariadb-server mariadb-client -y

sudo apt install php-mysql -y

sudo systemctl herstart apache2.service

Stap 6: Python-bibliotheken installeren

Voor de backend hebben we enkele bibliotheken voor Python nodig. We zullen deze installeren met pip3, omdat we python3 gebruiken.

pip3 installeer mysql-connector-python

pip3 install flask-socketio

pip3 installeer flask-cors

pip3 installeren gevent

pip3 installeren gevent-websocket

sudo apt install python3-mysql.connector -y

pip3 installeer mfrc522! (dit hebben we nodig om gebruik te kunnen maken van de RFID scanner)

Stap 7: Visual Studio-code voorbereiden

Voor het uitvoeren van de code raad ik aan om Visual Studio Code te gebruiken om je Raspberry Pi op aan te sluiten. De downloadlink om VSC te installeren vind je hier.

Als je Remote Development nog niet met SSH hebt geïnstalleerd, kun je hier de stappen vinden om dit te doen.

Stap 3: De database maken

De database maken
De database maken

We slaan al onze sensorgegevens en gebruikersgegevens op in een database.

Mijn database bestaat uit 5 tabellen:

Apparaat

Table Device heeft een DeviceID, die verwijst naar het apparaat zelf. De DeviceName geeft de naam van het apparaat, in dit geval ultrasone sensor, temperatuursensor, … DeviceType geeft het type van het apparaat (sensor of actuator).

Geschiedenis

Tabel Historie bevat alle sensorhistorie, samen met de datum (HistoryDate) waarop de historie is toegevoegd en de waarde van het moment in de historie. Het heeft ook twee buitenlandse sleutels:

  • DeviceID, om een specifiek logboek aan een apparaat te koppelen
  • UserID, om een specifieke gebruiker aan een log te koppelen (dit komt omdat we gebruik maken van een RFID, en we de history log willen toevoegen aan één specifieke gebruiker)

Gebruiker

Table User wordt gebruikt om een User Login System aan te maken met de RFID-scanner. Het bestaat uit een Nickname, FirstName, LastName, Password en RFID (dit is het RFID-nummer van een tag). Iedere gebruiker is gekoppeld aan een Container (watertank) en draagt tevens de ContainerID als Foreign Key.

container

Tafelcontainer bestaat uit alle verschillende containers. Het heeft een ID, een ContainerLocation (dit kan een onderneming, thuis of iets anders zijn). Ten slotte heeft het een MaxLevel, wat staat voor het maximale volume dat de container heeft.

Instellingen

Table Settings heeft een SettingsID en houdt de DailyGoal van elke gebruiker bij + de datum waarop de DailyGoal door de gebruiker is toegevoegd. Dit verklaart de Foreign Key UserID.

Een dump van de database is te vinden in mijn GitHub-repository onder Database.

Stap 4: De backend instellen

Er is geen project zonder een werkende backend.

De backend bestaat uit 4 verschillende dingen:

helpers

De helpers zijn alle klassen die worden gebruikt voor de verschillende sensoren en actuatoren. Er is een helper voor de temperatuursensor (DS18B20), voor de ultrasone sensoren (HCSR05) om de afstand te kunnen meten en voor de LCD om berichten naar het scherm te kunnen schrijven.

repositories

In de map repositories vind je 2 Python-bestanden:

  • Database.py, een hulpmiddel om rijen uit uw database te halen. Het maakt het gemakkelijker om de database uit te voeren en te lezen.
  • DataRepository.py die alle SQL-query's bevat die worden gebruikt in de hoofdcode (app.py). Ze worden gebruikt voor het ophalen, bijwerken of verwijderen van gegevens uit de database.

app.py

Dit is de belangrijkste backend-code van het project. Het doet de installatie door alle pinnen en modi te definiëren en bevat de code om de pomp te laten werken, de temperatuur te krijgen, de gebruiker te krijgen, enzovoort. Het bevat ook de routes die worden gebruikt om gegevens uit de database en alle socketio.on's op te halen. Voor elke HTML-pagina is een andere socketio.on om ervoor te zorgen dat elke functie op het juiste moment werkt.

config.py

We hebben nog één bestand over: config.py. Dit is het bestand met de configuratie-opties om verbinding te maken met uw database. Vergeet niet uw databasereferenties in te stellen.

De backend is te vinden in mijn repository onder Backend.

Stap 5: De frontend instellen

De frontend instellen
De frontend instellen
De frontend instellen
De frontend instellen

Voor de Frontend ben ik begonnen met het maken van een ontwerp van hoe mijn webserver eruit zou moeten zien in AdobeXD. Ik heb gebruik gemaakt van de kleuren in mijn Logo, namelijk oranje en 2 verschillende tinten blauw. Ik heb geprobeerd het ontwerp zo eenvoudig mogelijk te houden en heb een waterdruppel gemaakt die het percentage laat zien in hoeverre je je doel van de dag hebt bereikt.

In mijn GitHub-repository vind je mijn Frontend onder Code > Frontend. Het is belangrijk dat je dit in je /var/html map van je Raspberry Pi plakt om het toegankelijk te maken vanaf de webserver.

Het bestaat uit een aantal HTML-bestanden, die naar de verschillende pagina's leiden. Je vindt ook mijn screen.css met alle CSS die je nodig hebt om het op mijn project te laten lijken. Ten slotte heb je verschillende JavaScript-bestanden onder scripts. Deze scripts communiceren met mijn backend om gegevens uit mijn database of backend te tonen.

De backend is te vinden in mijn repository onder Frontend.

Stap 6: De behuizing maken

De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken
De behuizing maken

Als we het over mijn zaak hebben, zijn er twee hoofdonderdelen:

Buitenbehuizing

Ik heb de zaak helemaal opnieuw opgebouwd. Ik gebruikte multiplex planken en zaagde ze in de juiste maten. Ik heb alle planken aan elkaar geschroefd en gaten geboord voor het LCD-scherm, de knop, de ultrasone sensor om te detecteren of er een waterfles aanwezig is en de trechter om het water te verdelen. Ik verdeelde mijn koffer in verschillende secties om het water en de elektronica gescheiden te houden en ik gebruikte een kabelgoot om de kabels te beschermen tegen waterlekkage. In de bijgevoegde video kun je de meeste aspecten van mijn behuizing zien en hoe ik die heb gemaakt. Ik heb ook een 3D-knop geprint, die op een normale knop is geplakt. Als laatste heb ik een lekbak gebruikt om al het gemorste water op te vangen. Ik gebruikte ook scharnieren om een zijpaneel te kunnen openen en sluiten om naar mijn elektronica te kijken. U kunt altijd een tweedehands dispenser gebruiken of u kunt ook andere materialen gebruiken.

Voor de exacte afmetingen van mijn gebouwde, heb ik een PDF bijgevoegd met alle maten van de platen die in de behuizing zijn gebruikt.

Watertank

De watertank was geen gemakkelijke klus. Ik kreeg een watertank met een gat aan de onderkant, dus ik moest het afplakken om de lekkage te stoppen. Je hebt vier gaten nodig: een voor de temperatuursensor, een voor de slangen van je pomp. een voor de slang om de tank bij te vullen en een voor de ultrasone sensor. Voor deze laatste heb ik er een 3D hoesje voor geprint, die je hier kunt vinden. Hierdoor is de sensor beter beschermd tegen water. Ik heb toen een rechthoek in de bovenkant van de tank geboord om de sensor op te laten rusten.

Aanbevolen: