Cuprins:

Fântână de apă fără contact: 9 pași (cu imagini)
Fântână de apă fără contact: 9 pași (cu imagini)

Video: Fântână de apă fără contact: 9 pași (cu imagini)

Video: Fântână de apă fără contact: 9 pași (cu imagini)
Video: FEMEIA De 399 De ANI ! #shorts 2024, Iulie
Anonim
Fântâna de apă fără contact
Fântâna de apă fără contact

La sfârșitul primului meu an de student la MCT, am fost însărcinat să realizez un proiect care să conțină toate abilitățile pe care le-am luat de la cursuri pe tot parcursul anului.

Căutam un proiect care să verifice toate cerințele stabilite de profesorii mei și să fie în același timp distractiv pentru mine. Când căutam un subiect, nu m-am putut abține să nu mă simt inspirat de Covid-19 (Acest lucru a fost chiar înainte să ajungă la un focar la nivel mondial). apă potabilă fără a atinge niște butoane înainte ca apa să iasă.

Acest proiect folosește un senzor de distanță pentru a detecta dacă o cană sau pahar a fost plasat sub ieșirea de apă, fântâna va proceda apoi la ieșirea apei timp de 60 de secunde (100 ml / minut). Acest lucru este pentru a-l face mai consecvent, deoarece detectarea dacă sticla a fost trasă s-a dovedit a fi prea dificilă / lentă pentru o sarcină, motiv pentru care a fost pus în funcțiune un cronometru. După ce paharul dvs. a fost umplut cu 100 ml de apă, puteți aștepta 5 secunde și dacă paharul este încă în fața senzorului de distanță, acesta va continua să se umple încă o dată (aceasta înseamnă că există și un timp de expirare de 5 secunde între umplerea a două diferite articole).

Provizii

Componente

- 1x RaspberryPi (am folosit versiunea a 4-a, dar și versiunile mai vechi ar putea funcționa) - 1x tranzistor S8050 sau 1x tranzistor PN2222 ar putea funcționa la fel de bine - 1x fotorezistor - 1x HC-SR04 (senzor de distanță cu ultrasunete) - 1x RFID-RC522- 3x diferit LED-uri de culori (albastru, galben, roșu) - 1x LCD1602- 1x buzzer activ - 1x PCF8574- 1x MCP3008- 1x pompă de apă (A fost utilizată o pompă peristaltică de 12v, link către acest articol)

- 1x sursă de alimentare DC (12v, 600mAh) - 1x cărămidă electrică cu 3 pete - 3x plăci de calcul (probabil ați putea folosi mai puțin) - T-cobbler pentru pinii RaspberryPi GPIO- Cablu T-cobbler (pentru conectarea între pi și cobbler)

Materiale și instrumente utilizate

- Un burghiu cu următoarele burghie:

- 4mm (pentru găurirea prealabilă a șuruburilor) - 15mm (pentru găurirea senzorului de distanță)

- Orice șurubelniță - 30 șuruburi de 45 mm lungime - 6 șuruburi de 20 mm - 2 balamale pentru ușă - O placă de MDF de aproximativ 130cm pe 80cm - Câteva dosare

Pasul 1: Asamblarea circuitului

Asamblarea circuitului
Asamblarea circuitului
Asamblarea circuitului
Asamblarea circuitului
Asamblarea circuitului
Asamblarea circuitului

Pentru circuit avem 2 senzori, un senzor de distanță și un fotorezistor. Senzorul de distanță este folosit pentru a detecta dacă o cană a fost pusă în raza fântânii de apă și opțional am adăugat un fotorezistor, acesta este folosit pentru a detecta dacă carcasa a fost deschisă de cineva care nu ar trebui să o deschidă. În plus, avem un cititor RFID, acesta poate fi utilizat pentru autentificarea unui mecanic care trebuie să deschidă carcasa pentru a reumple rezervorul de apă sau pentru alte probleme mecanice.

Pentru elementele active avem LCD1602, buzzer activ și o pompă peristaltică, LCD-ul este utilizat pentru a afișa starea ca în cazul în care carcasa este deschisă sau pompa funcționează, precum și adresa IP a dispozitivului va fi afișată, buzzerul este folosit pentru a scoate un sunet alarmant atunci când cazul a fost deschis fără ca cineva să-l autorizeze.

Am adăugat panoul de examinare și vizualizările schematice ale circuitului de mai jos.

Pasul 2: Configurarea RaspberryPi

Pentru a configura RaspberryPi, vom descărca software-ul de imagine de pe site-ul Raspberry, cu acesta puteți descărca versiunea de Raspbian pe care o doriți și vă puteți imagina cardul SDCARD. După ce acest instrument și-a făcut treaba, puteți deschide cardul SDCARD în Windows Explorer, veți putea vedea partiția de boot a RaspberryPi. Aici vom găsi un fișier numit cmdline.txt (nu deschideți acest fișier în notepad, deschideți-l în Notepad ++ sau în orice alt IDE). Vom adăuga ip = 169.254.10.1 la sfârșitul acestui fișier pentru a ne asigura că ne putem conecta la dispozitivul nostru prin Ethernet (asigurați-vă că nu adăugați ENTERS la sfârșitul fișierului dvs. sau că veți avea probleme).

Acum puteți pune cardul SDCARD în RaspberryPi și porniți-l, conectați Pi la computer și utilizați Putty pentru a vă conecta la Pi prin SSH. Folosesc următoarea comandă pentru a mă conecta la Pi în loc să folosesc Putty. „ssh [email protected]” acest lucru ar putea expira, deci aveți răbdare și așteptați ca Pi să pornească. După ce vi se solicită o parolă, vom completa parola implicită pentru „zmeură”. Asigurați-vă că modificați această parolă după ce v-ați conectat pentru a preveni accesul Raspberry Pi la oricine cu intenții proaste.

Vom configura acum Pi-ul nostru pentru a oferi funcționalitatea necesară codului nostru. Folosiți „sudo raspi-config” pentru a deschide meniul de configurare și aici vom merge la Opțiuni de interfață.

Aici vom comuta următoarele opțiuni ON: - SPI- I2C

Urmați acest ghid pentru a configura o conexiune la internet wireless pe dispozitivul dvs. Pi, după ce ați făcut acest lucru cu succes, putem ajunge la instalarea pachetelor noastre necesare.

Pachete: (rulați comenzile în ordine așa cum sunt menționate aici)

Următoarele pentru a obține cele mai recente actualizări pentru actualizarea noastră Pi- sudo apt && apt upgrade -y

Instalați serverul și serverul nostru MySQL - sudo apt instalați mariadb-server apache2

Voi folosi MySQL Workbench pentru a configura baza de date mai târziu în acest ghid, dacă nu utilizați acest lucru și preferați phpmyadmin îl puteți instala cu următoarea comandă, puteți utiliza orice alt client MySQL, atât timp cât Puteți importa corect baza de date. - sudo apt install phpmyadmin

După ce ați făcut toate cele de mai sus, trebuie să creăm un utilizator pentru baza noastră de date. Utilizați „sudo mysql -u root” pentru a vă conecta la serverul MySQL, aici vom crea un utilizator numit db_admin cu parola respectivă, păstrați această parolă a fost notată undeva pentru mai târziu în instrucțiuni. ACORDAȚI TOATE PRIVILEGIILE ACTIVATE *. * LA „db_admin” @ „%” IDENTIFICAT DE „Parola dvs. Aici” CU OPȚIUNE DE ACORDARE;

Utilizați comanda „\ q” pentru a ieși din terminalul MySQL.

Pachete Python: În continuare trebuie să instalăm câteva pachete Python înainte de a continua, rulați comanda de mai jos pentru a ne asigura că totul este acolo pentru o experiență impecabilă.

sudo pip3 instalați Flask Flask-Cors Flask-SocketIO gevent gevent-websocket greenlet spi SPI-Pyspidev

La fel și următoarele pachete MySQL connect python: judet apt instalare python3-mysql.connector -y

Dacă totul a mers bine, acum puteți să vă vizitați Pi pe browserul dvs. web cu următoarea adresă

Pasul 3: Configurarea backend-ului

Configurarea backend-ului
Configurarea backend-ului

Aici voi explica cum puteți configura singur backend-ul, descărcați mai întâi fișierul rar de mai jos, dezarhivați-l într-un director temporar. Conectați-vă la RaspberryPi cu FileZilla sau WinSCP cu următoarele acreditări:

IP: 169.254.10.1 Utilizator: pi Parola: zmeură (dacă ați schimbat parola, faceți-o și aici)

Apoi puteți continua să transferați fișierele pe care le-ați dezarhivat în orice director doriți în directorul principal al utilizatorului pi. Din motive de simplitate, vom presupune în această configurație că am încărcat toate fișierele noastre în directorul documentului.

Păstrați programul FTP deschis pentru pasul următor!

Acum deschideți din nou promptul de comandă cu conexiunea SSH, deoarece va trebui să facem câteva modificări la serverul web, astfel încât frontendul să poată comunica cu backend-ul. Vom deschide fișierul de configurare Apache2 implicit și îl vom modifica ușor: sudo nano /etc/apache2/sites-available/000-default.conf

Adăugați următoarele rânduri sub DocumentRoot în fișierul de configurare pe care tocmai l-am deschis: ProxyPass / api / https://127.0.0.1:5000/api/ProxyPassReverse / api /

Puteți arunca o privire la imaginea atașată pentru un exemplu.

Pasul 4: Configurarea frontendului

Înainte de a transfera fișierele noastre, va trebui să facem ceva înainte de a începe transferul fișierelor frontend. Deschideți promptul de comandă cu conexiunea SSH pe care ați făcut-o anterior și utilizați comanda de mai jos pentru a comuta la utilizatorul root al RaspberryPi: "sudo su -"

După aceasta, putem schimba parola utilizatorului nostru root cu următoarea comandă: "passwd" Aceasta vă va cere să introduceți o parolă nouă, după ce ați făcut acest lucru, puteți reveni la programul FTP și vă puteți autentifica cu datele de conectare root:

IP: 169.254.10.1 Utilizator: root Parola:

Descărcați fișierul rar de mai jos și dezarhivați-l într-un folder temporar, puteți muta aceste fișiere în RaspberryPi în următorul director / var / www / html /, după ce ați făcut acest lucru, puteți vizita frontendul pe http: / /169.254.10.1, nu puteți interacționa încă deoarece backend-ul nu rulează încă, vă voi arăta mai târziu în acest ghid cum să faceți acest lucru.

Pasul 5: Importarea bazei de date pentru proiectul nostru

Importul bazei de date pentru proiectul nostru
Importul bazei de date pentru proiectul nostru
Importul bazei de date pentru proiectul nostru
Importul bazei de date pentru proiectul nostru

Deschideți programul preferat de gestionare a serverului MySQL și conectați-vă la Raspberry Pi cu acreditările pe care le-am creat la pasul 2.

Descărcați dump-ul bazei de date de mai jos și importați-l așa cum ați face în mod normal, MySQL workbench ați merge la File> Open SQL Script și selectați dump-ul bazei de date pe care l-ați descărcat. Apoi apăsați CTRL + SHIFT + ENTER și scriptul SQL ar trebui să fie rulat și structura pentru baza de date ar trebui creată.

Am adăugat acreditările pe care le-am folosit pentru RaspberryPi ca exemplu de mai jos, precum și câteva imagini ale structurii bazei de date, puteți să aruncați o privire și să încercați să vă faceți o idee generală despre cum funcționează totul.

Pasul 6: Începerea proiectului nostru

Începerea proiectului nostru
Începerea proiectului nostru
Începerea proiectului nostru
Începerea proiectului nostru

Înainte de a putea lansa proiectul nostru, trebuie să schimbăm acreditările bazei de date din fișierul config.py, dacă ați urmat instrucțiunile exact așa cum a spus acest ghid, le puteți găsi în /home/pi/Documents/Backend/src/config.py aici trebuie să modificați acreditările variabilei db_config pentru a se potrivi cu cele pe care le-am creat anterior pentru baza noastră de date. Am adăugat un exemplu de ceea ce veți vedea în acest fișier de mai jos.

După aceea, vom adăuga un fișier.service, acest fișier se va asigura că proiectul nostru pornește când pornește RaspberryPi, asigurați-vă că schimbați directorul corespunzător locului în care ați instalat fișierele backend. Utilizați următoarea comandă pentru a crea fișierul de serviciu: sudo nano /etc/systemd/system/dispenser.service Aceasta va crea un fișier de serviciu și copiați lipiți codul de mai jos în acest fișier.

[Unitate] Descriere = Water DispenserAfter = mysql.service

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

[Instalare] WantedBy = multi-user.target

Modificați linia pe care scrie /home/pi/Documents/Backend/index.py la locul în care ați instalat fișierele backend, dacă nu faceți acest lucru corect, proiectul nu va fi pornit corect! Voi adăuga un exemplu de fișier mai jos.

După ce ați făcut acest lucru și ați ieșit din editorul de text, putem activa serviciul cu următoarele comenzi: - sudo systemctl daemon-reload- sudo systemctl enable dispenser- sudo systemctl start dispenser

Și, în plus, putem rula: sudo systemctl status dispenserAcesta va afișa câteva informații despre serviciul nostru, dacă este activ sau nu, …

Pasul 7: Cazul

Cazul
Cazul
Cazul
Cazul
Cazul
Cazul
Cazul
Cazul

Felicitări, suntem aproape acolo, voi adăuga câteva imagini care vor arăta cu precizie dimensiunile pe care le-am folosit pentru proiectul meu, am folosit plăci MDF de 18 mm grosime, opțional, puteți folosi o grosime diferită. Carcasa mea poate fi folosită ca ghid pentru proiectarea ta sau poți recrea ceea ce am făcut. (Dacă utilizați o grosime diferită de MDF, desenele mele nu vă vor mai permite să creați designul meu, asigurați-vă că îl adaptați!) Panourile pe care le-am realizat: - 2 panouri de 32cm pe 42cm (panouri laterale) - 1 panou de 24cm de 32cm (placa inferioară) - 2 panouri de 16cm pe 24cm (placa frontală în care stă ecranul LCD și placa vecină) - 1 panou de 28cm pe 24cm (placa din mijloc văzut din față) - 1 panou de 30cm pe 24cm (placa superioară)

Pasul 8: admirați produsul final

Admirați produsul final
Admirați produsul final
Admirați produsul final
Admirați produsul final

Ați ajuns la final și, până acum, ați reușit să faceți ca totul să devină realitate. Dacă ești doar un trecător care citește, de asemenea, bine ai venit, îți mulțumesc că ai citit până la ultimul pas!

Am cheltuit mult sânge, transpirație și lacrimi în acest proiect, așa că aș aprecia dacă ați lăsa un comentariu, orice critică privind îmbunătățirea acestuia este binevenită!

Pasul 9: Problemele

Aș pune proiectul în starea sa actuală ca un prototip funcțional care poate vedea mult mai multe îmbunătățiri.

Baza de cod a backend-ului este structurată în așa fel încât o relație master slave poate fi perfect realizată în cazul în care o fântână ar acționa ca frontend principal și toate celelalte fântâni ar împinge datele și modificările peste API-ul REST al masterului. Există, de asemenea, rămășițe ale unui sistem de jetoane API în cod, deoarece acesta a fost destinat să fie implementat, dar tăiat mai târziu din cauza constrângerilor de timp.

Mi-am încărcat codul pe serverul meu Gitlab și acolo puteți arunca o privire asupra codului ca întreg:

Recomandat: