Inhoudsopgave:

Contactloze waterfontein: 9 stappen (met afbeeldingen)
Contactloze waterfontein: 9 stappen (met afbeeldingen)

Video: Contactloze waterfontein: 9 stappen (met afbeeldingen)

Video: Contactloze waterfontein: 9 stappen (met afbeeldingen)
Video: Dit ging niet zoals ik had verwacht..😳 2024, Juli-
Anonim
Contactloze fontein
Contactloze fontein

Aan het einde van mijn eerste jaar als MCT-student kreeg ik de taak om een project te maken dat alle vaardigheden bevatte die ik het hele jaar door had geleerd van cursussen.

Ik was op zoek naar een project dat alle eisen van mijn docenten zou controleren en tegelijkertijd leuk zou zijn om te maken. Bij het zoeken naar een onderwerp kon ik niet anders dan me geïnspireerd voelen door Covid-19 (dit was vlak voordat het tot een wereldwijde uitbraak ging.) Ik koos voor een contactloze waterfontein/dispenser, omdat het een manier zou zijn om drinkwater zonder enkele knoppen aan te raken voordat er water uit zou komen.

Dit project maakt gebruik van een afstandssensor om te detecteren of er een kopje of glas onder de wateruitgang is geplaatst, de fontein zal dan 60 seconden (100 ml / minuut) water afgeven. Dit is om het consistenter te maken, omdat detecteren of het glas is weggetrokken een te moeilijke/langzame taak bleek te zijn, daarom werd er een timer ingesteld. Nadat je glas met 100 ml water is gevuld, kun je 5 seconden wachten en als het glas nog voor de afstandssensor staat, gaat het een andere keer verder met vullen (dit betekent dat er ook een time-out van 5 seconden is tussen het vullen van twee verschillende artikelen).

Benodigdheden

Componenten

- 1x RaspberryPi (ik gebruikte de 4e versie, maar oudere versies zouden ook kunnen werken)- 1x S8050-transistor of 1x PN2222-transistor werkt misschien ook- 1x Fotoresistor- 1x HC-SR04 (Ultrasone Afstandssensor)- 1x RFID-RC522- 3x Anders kleuren LED's (blauw, geel, rood)- 1x LCD1602- 1x Active Buzzer- 1x PCF8574- 1x MCP3008- 1x Waterpomp (Er werd een 12v slangenpomp gebruikt, link naar dit artikel)

- 1x DC voeding (12v, 600mAh)- 1x power brick met 3 spots- 3x breadboards (je zou waarschijnlijk minder gebruiken)- T-cobbler voor RaspberryPi GPIO pins- T-cobbler kabel (voor verbinding tussen pi en cobbler)

Gebruikte materialen en gereedschappen

- Een boormachine met de volgende boren:

- 4 mm (om gaten voor de schroeven voor te boren) - 15 mm (om gaten voor de afstandssensor te boren)

- Elke schroevendraaier - 30 schroeven van 45 mm lang - 6 schroeven van 20 mm - 2 scharnieren voor de deur - Een plaat van MDF van ongeveer 130 cm bij 80 cm - Een paar vijlen

Stap 1: Montage van het circuit

Het circuit samenstellen
Het circuit samenstellen
Het circuit samenstellen
Het circuit samenstellen
Het circuit samenstellen
Het circuit samenstellen

Voor het circuit hebben we 2 sensoren, een afstandssensor en een fotoweerstand. De afstandssensor wordt gebruikt om te detecteren of een kopje binnen het bereik van de waterfontein is geplaatst en optioneel heb ik een fotoresistor toegevoegd, deze wordt gebruikt om te detecteren of de behuizing is geopend door iemand die deze niet mag openen. Bovendien hebben we een RFID-lezer die kan worden gebruikt om een monteur te authenticeren die de behuizing moet openen om het waterreservoir bij te vullen of voor een ander mechanisch probleem.

Voor de actieve elementen hebben we de LCD1602, actieve zoemer en een peristaltische pomp, de LCD wordt gebruikt om de status weer te geven, alsof de behuizing open is of de pomp draait, evenals het IP-adres van het apparaat wordt weergegeven, de zoemer is gebruikt om een alarmerend geluid te maken wanneer de koffer is geopend zonder toestemming van iemand.

Ik heb het breadboard en schematische weergaven van het onderstaande circuit toegevoegd.

Stap 2: Onze RaspberryPi. instellen

Om onze RaspberryPi in te stellen, zullen we de imaging-software downloaden van de Raspberry-site, hiermee kunt u de gewenste versie van Raspbian downloaden en uw SDCARD voor u imagen. Nadat deze tool zijn werk heeft gedaan, kun je de SDCARD openen in Windows Verkenner, je zult de opstartpartitie van je RaspberryPi kunnen zien. Hierin vinden we een bestand met de naam cmdline.txt (open dit bestand niet in Kladblok, open het in Notepad++ of een andere IDE). We zullen ip=169.254.10.1 aan het einde van dit bestand toevoegen om er zeker van te zijn dat we via ethernet verbinding kunnen maken met ons apparaat (zorg ervoor dat je geen ENTREE toevoegt aan het einde van je bestand, anders krijg je problemen).

Nu kunt u uw SDCARD in uw RaspberryPi plaatsen en opstarten, de Pi op uw computer aansluiten en Putty gebruiken om via SSH verbinding te maken met uw Pi. Ik gebruik de volgende opdracht om verbinding te maken met mijn Pi in plaats van Putty te gebruiken. "ssh [email protected]" dit kan een time-out hebben, dus wees geduldig en wacht tot de Pi opstart. Zodra er om een wachtwoord wordt gevraagd, vullen we het standaardwachtwoord "raspberry" in. Zorg ervoor dat u dit wachtwoord wijzigt nadat u zich hebt aangemeld om te voorkomen dat iemand met kwade bedoelingen toegang krijgt tot uw Raspberry Pi.

We zullen nu onze Pi configureren om de nodige functionaliteit voor onze code te bieden. Gebruik "sudo raspi-config" om het configuratiemenu te openen en hier gaan we naar Interfacing-opties.

Hieronder zetten we de volgende opties AAN: - SPI- I2C

Volg deze handleiding om een draadloze internetverbinding op je Pi in te stellen, nadat je dit met succes hebt gedaan, kunnen we onze vereiste pakketten installeren.

Pakketten: (voer de opdrachten uit in de volgorde zoals ze hier worden vermeld)

Het volgende om de laatste updates voor onze Pi-sudo apt update && apt upgrade -y. te krijgen

Installeer onze MySQL-server en webserver- sudo apt install mariadb-server apache2

Ik zal MySQL Workbench gebruiken om de database later in deze handleiding in te stellen, als u dit niet gebruikt en liever phpmyadmin gebruikt, kunt u dit installeren met de volgende opdracht, u bent vrij om elke andere MySQL-client te gebruiken zolang u kan de database correct importeren.- sudo apt install phpmyadmin

Nadat je al het bovenstaande hebt gedaan, moeten we een gebruiker maken voor onze database. Gebruik "sudo mysql -u root" om in te loggen op je MySQL-server, hier zullen we een gebruiker maken met de naam db_admin met het bijbehorende wachtwoord, houd dit wachtwoord staat ergens vermeld voor later in de instructies. VERLENEN ALLE PRIVILEGES OP *.* AAN "db_admin"@"%" GEDENTIFICEERD DOOR "yourPasswordHere" MET SUBSIDIEOPTIE;

Gebruik de opdracht "\q" om de MySQL-terminal te verlaten.

Python-pakketten: we moeten nog enkele python-pakketten installeren voordat we verder gaan, voer de onderstaande opdracht uit om ervoor te zorgen dat alles aanwezig is voor een vlekkeloze ervaring.

sudo pip3 install Flask Flask-Cors Flask-SocketIO gevent gevent-websocket greenlet spi SPI-Pyspidev

Naast de volgende MySQL connect python-pakkettenudo apt install python3-mysql.connector -y

Als alles goed is gegaan, kun je nu je Pi bezoeken in je webbrowser met het volgende adres

Stap 3: De backend instellen

De backend instellen
De backend instellen

Hier ga ik uitleggen hoe je de backend zelf kunt instellen, download eerst het rar-bestand van hieronder, unrar het naar een tijdelijke map. Maak verbinding met uw RaspberryPi met FileZilla of WinSCP met de volgende inloggegevens:

IP: 169.254.10.1 Gebruiker: piPassword: raspberry (als je het wachtwoord hebt gewijzigd, doe dit dan hier)

U kunt dan doorgaan met het overbrengen van de bestanden die u niet hebt opgeslagen naar elke gewenste map in de thuismap van de pi-gebruiker. Voor de eenvoud gaan we er in deze opstelling vanuit dat we al onze bestanden hebben geüpload onder de documentmap.

Houd uw FTP-programma open voor de volgende stap!

Open nu uw opdrachtprompt opnieuw met uw SSH-verbinding omdat we enkele wijzigingen aan de webserver moeten aanbrengen, zodat de frontend kan communiceren met de backend. We gaan het standaard Apache2-configuratiebestand openen en het enigszins wijzigen: sudo nano /etc/apache2/sites-available/000-default.conf

Voeg de volgende regels toe onder DocumentRoot in het configuratiebestand dat we zojuist hebben geopend: ProxyPass /api/ https://127.0.0.1:5000/api/ProxyPassReverse /api/

U kunt als voorbeeld de bijgevoegde afbeelding bekijken.

Stap 4: De frontend instellen

Voordat we onze bestanden overzetten, moeten we iets doen voordat we onze frontend-bestanden kunnen overzetten. Open je opdrachtprompt met de SSH-verbinding die je eerder hebt gemaakt en gebruik het onderstaande commando om over te schakelen naar de rootgebruiker van onze RaspberryPi: "sudo su -"

Hierna kunnen we het wachtwoord van onze root-gebruiker wijzigen met het volgende commando: "passwd"Hierbij wordt u gevraagd een nieuw wachtwoord in te voeren, nadat u dit heeft gedaan kunt u terugschakelen naar uw FTP-programma en inloggen met uw root-inloggegevens:

IP: 169.254.10.1 Gebruiker: rootWachtwoord:

Download het rar-bestand van hieronder en unrar het in een tijdelijke map, je kunt deze bestanden naar je RaspberryPi verplaatsen naar de volgende map /var/www/html/, nadat je dat hebt gedaan, kun je de frontend bezoeken op http:/ /169.254.10.1, je kunt nog geen interactie hebben omdat de backend nog niet draait, ik zal je later in deze handleiding laten zien hoe je dit doet.

Stap 5: De database voor ons project importeren

De database voor ons project importeren
De database voor ons project importeren
De database voor ons project importeren
De database voor ons project importeren

Open uw favoriete MySQL-serverbeheerprogramma en maak verbinding met uw Raspberry Pi met de inloggegevens die we in stap 2 hebben gemaakt.

Download de databasedump van hieronder en importeer deze zoals u normaal zou doen, MySQL-workbench zou u naar Bestand> Open SQL Script gaan en de databasedump selecteren die u hebt gedownload. Druk vervolgens op CTRL + SHIFT + ENTER en het SQL-script moet worden uitgevoerd en de structuur voor de database moet worden gemaakt.

Ik heb de inloggegevens die ik voor mijn RaspberryPi heb gebruikt als voorbeeld hieronder toegevoegd, evenals verschillende afbeeldingen van de databasestructuur, je kunt het bekijken en proberen een algemeen idee te krijgen van hoe alles werkt.

Stap 6: Ons project opstarten

Ons project opstarten
Ons project opstarten
Ons project opstarten
Ons project opstarten

Voordat we ons project kunnen opstarten, moeten we de databasereferenties in het config.py-bestand wijzigen. Als je de instructies precies hebt gevolgd zoals in deze handleiding staat vermeld, kun je deze vinden onder /home/pi/Documents/Backend/src/config.py hier moet u de inloggegevens van de variabele db_config wijzigen zodat deze overeenkomen met de gegevens die we eerder voor onze database hebben gemaakt. Ik heb een voorbeeld toegevoegd van wat je hieronder in dit bestand ziet.

Daarna zullen we een.service-bestand toevoegen. Dit bestand zorgt ervoor dat ons project start wanneer de RaspberryPi start, zorg ervoor dat u de map op de juiste manier wijzigt van waar u de backend-bestanden hebt geïnstalleerd. Gebruik de volgende opdracht om het servicebestand te maken: sudo nano /etc/systemd/system/dispenser.serviceHiermee wordt een servicebestand gemaakt en wordt de onderstaande code in dit bestand gekopieerd.

[Eenheid]Description=Water DispenserAfter=mysql.service

[Service]Type=simpleRestart=alwaysRestartSec=1User=piExecStart=/usr/bin/python3 /home/pi/Documents/Backend/index.py

[Install]WantedBy=doel voor meerdere gebruikers

Pas de regel waar staat /home/pi/Documents/Backend/index.py aan naar waar u uw backend-bestanden hebt geïnstalleerd, als u dit niet correct doet, wordt het project niet correct gestart! Ik zal hieronder een voorbeeldbestand toevoegen.

Nadat je dat hebt gedaan en de teksteditor hebt verlaten, kunnen we de service inschakelen met de volgende opdrachten: - sudo systemctl daemon-reload - sudo systemctl enable dispenser - sudo systemctl start dispenser

En als extra kunnen we uitvoeren:sudo systemctl status dispenserDit zal wat informatie over onze service tonen, of deze actief is of niet, …

Stap 7: De zaak

De zaak
De zaak
De zaak
De zaak
De zaak
De zaak
De zaak
De zaak

Gefeliciteerd we zijn er bijna, ik zal enkele foto's toevoegen die nauwkeurig de afmetingen weergeven die ik voor mijn project heb gebruikt, ik heb MDF-platen van 18 mm dik gebruikt, je kunt optioneel een andere dikte gebruiken. Mijn behuizing kan worden gebruikt als richtlijn om de jouwe te ontwerpen of je kunt recreëren wat ik heb gemaakt. (Als je een andere dikte van MDF gebruikt, zullen mijn tekeningen je niet langer toestaan om mijn ontwerp te maken, zorg ervoor dat je het aanpast!) De panelen die ik heb gemaakt:- 2 panelen van 32cm bij 42cm (zijpanelen)- 1 paneel van 24cm bij 32cm (bodemplaat)- 2 panelen van 16cm bij 24cm (frontplaat waar LCD blijft en aangrenzende plaat)- 1 paneel van 28cm bij 24cm (middenplaat gezien vanaf de voorkant)- 1 paneel van 30cm bij 24cm (bovenplaat)

Stap 8: Bewonder het eindproduct

Bewonder het eindproduct
Bewonder het eindproduct
Bewonder het eindproduct
Bewonder het eindproduct

Je hebt het einde bereikt en hopelijk ben je er nu in geslaagd om het hele ding werkelijkheid te maken. Als je gewoon een voorbijganger bent die doorleest, ook welkom, ik dank je voor het lezen tot de laatste stap!

Ik heb veel bloed, zweet en tranen in dit project gestoken, dus ik zou het op prijs stellen als je een reactie achterlaat, alle kritiek om het te verbeteren is welkom!

Stap 9: De problemen

Ik zou het project in de huidige staat brengen als een werkend prototype dat nog veel meer verbeteringen kan zien.

De codebasis van de backend is zo gestructureerd dat een master-slave-relatie perfect kan worden gemaakt waarbij één fontein als de hoofd-frontend zou fungeren en alle andere fonteinen gegevens en wijzigingen over de REST-api van de master zouden pushen. Er zijn ook overblijfselen van een API-tokensysteem in de code, omdat dit bedoeld was om te worden geïmplementeerd, maar later werd afgebroken vanwege tijdgebrek.

Ik heb mijn code geüpload naar mijn Gitlab-server en daar kun je de code in zijn geheel bekijken:https://git.damon.sh/Yimura/project-1

Aanbevolen: