Innholdsfortegnelse:

Kontaktløs vannfontene: 9 trinn (med bilder)
Kontaktløs vannfontene: 9 trinn (med bilder)

Video: Kontaktløs vannfontene: 9 trinn (med bilder)

Video: Kontaktløs vannfontene: 9 trinn (med bilder)
Video: Псс, пацан, есть чё по грешникам? ► 1 Прохождение Dante’s Inferno (Ад Данте) 2024, Juli
Anonim
Kontaktløs vannfontene
Kontaktløs vannfontene

På slutten av mitt første år som MCT -student fikk jeg i oppgave å lage et prosjekt som inneholdt alle ferdighetene jeg hadde hentet fra kurs gjennom året.

Jeg var på utkikk etter et prosjekt som skulle sjekke alle kravene som ble satt av lærerne mine og samtidig være morsomt for meg å lage. Da jeg lette etter et emne, kunne jeg ikke la være å føle meg inspirert av Covid-19 (Dette var rett før det gikk til et verdensomspennende utbrudd.) Jeg valgte en kontaktfri vannfontene/dispenser, som det ville tilby for en måte å drikkevann uten å berøre noen knapper før det skulle komme vann ut.

Dette prosjektet bruker en avstandssensor til å oppdage om en kopp eller et glass har blitt plassert under vannmengden, og fontenen vil deretter fortsette til utløpsvann i 60 sekunder (100 ml / minutt). Dette er for å gjøre det mer konsistent fordi det var for vanskelig/sakte å oppdage om glasset er trukket vekk, og derfor ble det satt på en tidtaker. Etter at glasset er fylt med 100 ml vann kan du vente i 5 sekunder, og hvis glasset fremdeles er foran distansesensoren, vil det fortsette å fylle en annen tid (dette betyr at det også er en timeout på 5 sekunder mellom å fylle to forskjellige varer).

Rekvisita

Komponenter

- 1x RaspberryPi (jeg brukte den fjerde versjonen, men eldre versjoner kan også fungere)- 1x S8050 transistor eller 1x PN2222 transistor kan fungere like godt- 1x Fotoresistor- 1x HC-SR04 (ultralydavstandssensor)- 1x RFID-RC522- 3x forskjellige farger LED (blå, gul, rød)- 1x LCD1602- 1x Aktiv summer- 1x PCF8574- 1x MCP3008- 1x vannpumpe (En 12v peristaltisk pumpe ble brukt, lenke til dette elementet)

- 1x DC-strømforsyning (12v, 600mAh)- 1x strømstein med 3 flekker- 3x brødbrett (du kan sannsynligvis bruke mindre)- T-skomaker for RaspberryPi GPIO-pinner- T-skomaker-kabel (for tilkobling mellom pi og skomaker)

Materialer og verktøy som brukes

- En drill med følgende borekroner:

- 4 mm (for forboring av skruer) - 15 mm (for boring av avstandssensor)

- Enhver skrutrekker- 30 skruer på 45 mm lange- 6 skruer på 20 mm- 2 hengsler til døren- En plate av MDF på rundt 130 cm x 80 cm- Et par filer

Trinn 1: Montering av kretsen

Montering av kretsen
Montering av kretsen
Montering av kretsen
Montering av kretsen
Montering av kretsen
Montering av kretsen

For kretsen har vi 2 sensorer, en avstandssensor og en fotoresistor. Avstandssensoren brukes til å oppdage om en kopp er satt innenfor rekkevidden til vannfontenen, og eventuelt har jeg lagt til en fotoresistor, denne brukes til å oppdage om huset har blitt åpnet av noen som ikke skal åpne den. På toppen av det har vi en RFID -leser, denne kan brukes til å autentisere en mekaniker som må åpne saken for å fylle opp vannreservoaret eller for andre mekaniske problemer.

For de aktive elementene vi har LCD1602, aktiv summer og en peristaltisk pumpe, brukes LCD -en til å vise status som om saken er åpen eller pumpen går, i tillegg til at IP -adressen til enheten vises, summeren er brukes til å lage en alarmerende lyd når saken er åpnet uten at noen har godkjent det.

Jeg har lagt til brødbrettet og skjematisk visning av kretsen nedenfor.

Trinn 2: Konfigurere RaspberryPi

For å sette opp RaspberryPi, vil vi laste ned bildeprogramvaren fra Raspberry -nettstedet. Med denne kan du laste ned den versjonen av Raspbian du vil ha, og bilde ditt SDCARD for deg. Etter at dette verktøyet har gjort sitt arbeid, kan du åpne SDCARD i Windows Utforsker, og du vil kunne se oppstartspartisjonen til RaspberryPi. Her finner vi en fil som heter cmdline.txt (ikke åpne denne filen i notisblokk, åpne den i Notisblokk ++ eller annen IDE). Vi legger til ip = 169.254.10.1 på slutten av denne filen for å sikre at vi kan koble til enheten vår via ethernet (sørg for at du ikke legger til noen ENTERS på slutten av filen, ellers får du problemer).

Nå kan du sette ditt SDCARD i RaspberryPi og starte det opp, koble Pi til datamaskinen og bruke Putty til å koble til Pi over SSH. Jeg bruker følgende kommando for å koble til Pi i stedet for å bruke Putty. "ssh [email protected]" dette kan ta en timeout, så vær tålmodig og vent til Pi starter opp. Når du blir bedt om et passord, fyller vi ut standardpassordet for "bringebær". Sørg for å endre dette passordet etter at du har logget deg på for å forhindre at alle med onde hensikter får tilgang til Raspberry Pi.

Vi vil nå konfigurere vår Pi til å gi den nødvendige funksjonaliteten for koden vår. Bruk "sudo raspi-config" for å åpne konfigurasjonsmenyen, og her går vi til Grensesnittalternativer.

Under her vil vi slå på følgende alternativer PÅ:- SPI- I2C

Følg denne veiledningen for å sette opp en trådløs internettforbindelse på din Pi, etter at du har lykkes med dette, kan vi installere de nødvendige pakkene våre.

Pakker: (kjør kommandoene i rekkefølgen slik de er angitt her)

Følgende for å få de siste oppdateringene for vår Pi -sudo apt oppdatering && apt upgrade -y

Installer vår MySQL-server og webserver- sudo apt install mariadb-server apache2

Jeg kommer til å bruke MySQL Workbench til å sette opp databasen senere i denne guiden. Hvis du ikke bruker dette og foretrekker phpmyadmin, kan du installere dette med følgende kommando, du kan bruke hvilken som helst annen MySQL -klient så lenge du kan importere databasen ordentlig.- sudo apt install phpmyadmin

Etter at du har gjort alt ovenfor må vi opprette en bruker for vår database. Bruk "sudo mysql -u root" for å logge deg på MySQL -serveren din. Her vil vi opprette en bruker som heter db_admin med sitt respektive passord. dette passordet nevnt et sted for senere i instruksjonene. TILDELE ALLE PRIVILEGER PÅ *. * TIL "db_admin"@"%" IDENTIFISERT AV "yourPasswordHere" MED GRANT -ALTERNATIV;

Bruk kommandoen "\ q" for å gå ut av MySQL -terminalen.

Python -pakker: Vi trenger fortsatt å installere noen python -pakker før vi fortsetter, kjør kommandoen nedenfor for å sikre at alt er der for en feilfri opplevelse.

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

I tillegg til følgende MySQL koble til python -pakker, eller installer python3 -mysql.connector -y

Hvis alt gikk som det skal, kan du nå besøke Pi -en i nettleseren din med følgende adresse

Trinn 3: Konfigurere backend

Sette opp backend
Sette opp backend

Her skal jeg forklare hvordan du kan sette opp backend selv, først laste ned rar -filen nedenfra, fjerne den til en midlertidig katalog. Koble til RaspberryPi med FileZilla eller WinSCP med følgende legitimasjon:

IP: 169.254.10.1Bruker: piPassword: bringebær (hvis du endret passordet, gjør det også her)

Du kan deretter fortsette å overføre filene du avrangerte til hvilken som helst katalog du vil ha i hjemmekatalogen til pi -brukeren. For enkelhets skyld vil vi i dette oppsettet anta at vi har lastet opp alle filene våre under dokumentmappen.

Hold FTP -programmet ditt åpent for neste trinn!

Åpne nå ledeteksten igjen med SSH -tilkoblingen din, fordi vi må gjøre noen endringer i webserveren slik at frontenden kan kommunisere med backend. Vi kommer til å åpne standard Apache2 -konfigurasjonsfil og endre den litt: sudo nano /etc/apache2/sites-available/000-default.conf

Legg til følgende linjer under DocumentRoot i konfigurasjonsfilen vi nettopp åpnet: ProxyPass/api/https://127.0.0.1:5000/api/ProxyPassReverse/api/https://127.0.0.1:5000/api/

Du kan se på bildet vedlagt for et eksempel.

Trinn 4: Sette opp frontenden

Før vi overfører filene våre, må vi gjøre noe før vi kan begynne å overføre frontend -filene våre. Åpne kommandoprompten med SSH -tilkoblingen du gjorde tidligere, og bruk kommandoen nedenfor for å bytte til rotbrukeren til vår RaspberryPi: "sudo su -"

Etter dette kan vi endre passordet til rotbrukeren vår med følgende kommando: "passwd" Dette vil be deg om å skrive inn et nytt passord, etter at du har gjort dette kan du bytte tilbake til FTP -programmet og logge på med root -legitimasjonen din:

IP: 169.254.10.1 Bruker: rootPassword:

Last ned rar -filen nedenfra og fjern den i en midlertidig mappe, du kan flytte disse filene til RaspberryPi til følgende katalog/var/www/html/, etter at du har gjort det, kan du besøke frontend på http:/ /169.254.10.1, du kan ikke samhandle enda fordi backend ikke kjører ennå. Jeg viser deg senere i denne veiledningen hvordan du gjør dette.

Trinn 5: Importere databasen for prosjektet vårt

Importere databasen for prosjektet vårt
Importere databasen for prosjektet vårt
Importere databasen for prosjektet vårt
Importere databasen for prosjektet vårt

Åpne ditt favoritt MySQL -serveradministrasjonsprogram og koble til Raspberry Pi med legitimasjonen vi opprettet i trinn 2.

Last ned databasedumpen nedenfra og importer den som du vanligvis ville, MySQL -arbeidsbenken du ville gå til Fil> Åpne SQL -script og velg databasedumpen du lastet ned. Trykk deretter CTRL + SKIFT + ENTER, og SQL -skriptet skal kjøres og strukturen for databasen skal opprettes.

Jeg la til legitimasjonen jeg brukte for min RaspberryPi som et eksempel nedenfor, i tillegg til flere bilder av databasestrukturen. Du kan ta en titt på den og prøve å få en generell ide om hvordan alt fungerer.

Trinn 6: Start prosjektet vårt

Oppstart av prosjektet vårt
Oppstart av prosjektet vårt
Oppstart av prosjektet vårt
Oppstart av prosjektet vårt

Før vi kan starte prosjektet vårt må vi endre databasens legitimasjon i config.py -filen. Hvis du fulgte instruksjonene nøyaktig slik denne guiden sa, kan du finne disse under /home/pi/Documents/Backend/src/config.py her må du endre legitimasjonen til variabelen db_config for å matche de vi opprettet tidligere for databasen vår. Jeg har lagt til et eksempel på hva du vil se i denne filen nedenfor.

Etter det vil vi legge til en.service -fil. Denne filen vil sørge for at prosjektet vårt starter når RaspberryPi starter. Sørg for at du endrer katalogen på riktig måte der du installerte backend -filene. Bruk følgende kommando for å opprette servicefilen: sudo nano /etc/systemd/system/dispenser.service Dette vil opprette en servicefil og kopiere limekoden nedenfor til denne filen.

[Enhet] Beskrivelse = Vann DispenserAfter = mysql.service

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

[Installer] WantedBy = multi-user.target

Endre linjen der det står /home/pi/Documents/Backend/index.py til der du installerte backend -filene, hvis du ikke gjør dette riktig, starter ikke prosjektet riktig! Jeg vil legge til en eksempelfil nedenfor.

Etter at du har gjort det og gått ut av tekstredigereren kan vi aktivere tjenesten med følgende kommandoer:- sudo systemctl daemon-reload- sudo systemctl aktiver dispenser- sudo systemctl start dispenser

Og som en ekstra kan vi kjøre: sudo systemctl status dispenser Dette viser litt informasjon om tjenesten vår, om den er aktiv eller ikke, …

Trinn 7: Saken

Saken
Saken
Saken
Saken
Saken
Saken
Saken
Saken

Gratulerer vi er nesten der, jeg vil legge til noen bilder som nøyaktig vil vise dimensjonene jeg brukte for prosjektet mitt, jeg brukte MDF -plater på 18 mm tykke, du kan eventuelt bruke en annen tykkelse. Hylsteret mitt kan brukes som en retningslinje for å designe ditt, eller du kan gjenskape det jeg har laget. (Hvis du bruker en annen tykkelse av MDF, vil tegningene ikke lenger tillate deg å lage designet mitt, sørg for å tilpasse det!) Panelene jeg laget:- 2 paneler på 32 cm x 42 cm (sidepaneler)- 1 panel på 24 cm med 32 cm (bunnplate)- 2 paneler på 16 cm x 24 cm (frontplate hvor LCD forblir og naboplate)- 1 panel på 28 cm x 24 cm (midtplate sett forfra)- 1 panel på 30 cm på 24 cm (topplate)

Trinn 8: Beundre det endelige produktet

Beundre det endelige produktet
Beundre det endelige produktet
Beundre det endelige produktet
Beundre det endelige produktet

Du har nådd slutten og nå har du forhåpentligvis klart å gjøre det hele til virkelighet. Hvis du bare er en forbipasserende som leser gjennom, er du også velkommen, jeg takker deg for at du leser til det siste trinnet!

Jeg brukte mye blod, svette og tårer i dette prosjektet, så jeg ville sette pris på det hvis du la igjen en kommentar, all kritikk for å forbedre det er velkommen!

Trinn 9: Problemene

Jeg vil sette prosjektet i sin nåværende tilstand som en fungerende prototype som kan se mange flere forbedringer.

Kodebasen til backend er strukturert på en slik måte at et master -slave -forhold kan opprettes perfekt der en fontene ville fungere som hovedfronten og alle andre fontener ville skyve data og endringer over masterens REST -api. Det er også rester av et API -token -system i koden, da dette var ment å bli implementert, men kuttet senere på grunn av tidsbegrensninger.

Jeg har lastet opp koden min til Gitlab-serveren min, og der kan du se på koden som helhet:

Anbefalt: