Sommario:

Fontana d'acqua senza contatto: 9 passaggi (con immagini)
Fontana d'acqua senza contatto: 9 passaggi (con immagini)

Video: Fontana d'acqua senza contatto: 9 passaggi (con immagini)

Video: Fontana d'acqua senza contatto: 9 passaggi (con immagini)
Video: Trucco per vedere sott’acqua senza maschera #shorts 2024, Novembre
Anonim
Fontana d'acqua senza contatto
Fontana d'acqua senza contatto

Per la fine del mio primo anno come studente MCT ho avuto il compito di realizzare un progetto che contenesse tutte le competenze che avevo raccolto dai corsi durante tutto l'anno.

Cercavo un progetto che verificasse tutti i requisiti stabiliti dai miei insegnanti e che allo stesso tempo fosse divertente da realizzare. Quando cercavo un argomento non potevo fare a meno di sentirmi ispirato da Covid-19 (questo era giusto prima che si verificasse un'epidemia in tutto il mondo.) Ho scelto una fontana/dispenser d'acqua senza contatto, in quanto avrebbe offerto un modo di bere acqua senza toccare alcuni pulsanti prima che l'acqua uscisse.

Questo progetto utilizza un sensore di distanza per rilevare se una tazza o un bicchiere è stato posizionato sotto l'uscita dell'acqua, la fontana procederà quindi all'uscita dell'acqua per 60 secondi (100 ml/minuto). Questo per renderlo più coerente perché rilevare se il vetro è stato tirato via si è rivelato un compito troppo difficile/lento, motivo per cui è stato messo in atto un timer. Dopo che il tuo bicchiere è stato riempito con 100ml di acqua puoi aspettare 5 secondi e se il bicchiere è ancora davanti al sensore di distanza si procederà a riempire un'altra volta (questo significa che c'è anche un timeout di 5 secondi tra il riempimento di due diverse Oggetti).

Forniture

Componenti

- 1x RaspberryPi (ho usato la 4a versione ma potrebbero funzionare anche le versioni precedenti) - 1x transistor S8050 o 1x transistor PN2222 potrebbero funzionare anche - 1x fotoresistenza - 1x HC-SR04 (sensore di distanza a ultrasuoni)- 1x RFID-RC522- 3x Different colori LED (blu, giallo, rosso)- 1x LCD1602- 1x cicalino attivo- 1x PCF8574- 1x MCP3008- 1x pompa dell'acqua (è stata utilizzata una pompa peristaltica da 12v, collegamento a questo articolo)

- 1x alimentatore CC (12v, 600mAh)- 1x power brick con 3 spot- 3x breadboard (probabilmente potresti usarne di meno)- T-cobbler per pin GPIO RaspberryPi- Cavo T-cobbler (per il collegamento tra pi e cobbler)

Materiali e strumenti utilizzati

- Un trapano con le seguenti punte:

- 4 mm (per praticare i fori per le viti) - 15 mm (per praticare i fori per il sensore di distanza)

- Un qualsiasi cacciavite- 30 viti da 45 mm di lunghezza- 6 viti da 20 mm- 2 cerniere per la porta- Un piatto di MDF di circa 130 cm per 80 cm- Un paio di lime

Passaggio 1: assemblaggio del circuito

Assemblaggio del circuito
Assemblaggio del circuito
Assemblaggio del circuito
Assemblaggio del circuito
Assemblaggio del circuito
Assemblaggio del circuito

Per il circuito abbiamo 2 sensori, un sensore di distanza e una fotoresistenza. Il sensore di distanza viene utilizzato per rilevare se una tazza è stata messa nel raggio della fontana e opzionalmente ho aggiunto una fotoresistenza, questa viene utilizzata per rilevare se l'involucro è stato aperto da qualcuno che non dovrebbe aprirlo. Inoltre abbiamo un lettore RFID che può essere utilizzato per autenticare un meccanico che deve aprire la custodia per riempire il serbatoio dell'acqua o per qualche altro problema meccanico.

Per gli elementi attivi abbiamo LCD1602, buzzer attivo e una pompa peristaltica, il display LCD viene utilizzato per visualizzare lo stato come se il case è aperto o la pompa è in funzione e verrà mostrato l'indirizzo IP del dispositivo, il buzzer è usato per emettere un suono allarmante quando il caso è stato aperto senza che qualcuno lo autorizzasse.

Ho aggiunto la breadboard e le viste schematiche del circuito sottostante.

Passaggio 2: configurazione del nostro RaspberryPi

Per configurare il nostro RaspberryPi, scaricheremo il software di imaging dal sito Raspberry, con questo puoi scaricare la versione di Raspbian che desideri e creare l'immagine della tua SDCARD per te. Dopo che questo strumento ha svolto il suo lavoro, puoi aprire la SDCARD in Windows Explorer, sarai in grado di vedere la partizione di avvio del tuo RaspberryPi. Qui troveremo un file chiamato cmdline.txt (non aprire questo file nel blocco note, aprilo in Notepad++ o qualsiasi altro IDE). Aggiungeremo ip=169.254.10.1 alla fine di questo file per assicurarci di poterci connettere al nostro dispositivo tramite ethernet (assicurati di non aggiungere alcun INVIO alla fine del tuo file o avrai problemi).

Ora puoi mettere la tua SDCARD nel tuo RaspberryPi e avviarlo, connettere il Pi al tuo computer e usare Putty per connetterti al tuo Pi su SSH. Uso il seguente comando per connettermi al mio Pi invece di usare Putty. "ssh [email protected]" questo potrebbe scadere, quindi sii paziente e attendi che il Pi si avvii. Una volta richiesta una password, inseriremo la password predefinita di "raspberry". Assicurati di cambiare questa password dopo aver effettuato l'accesso per impedire a chiunque con cattive intenzioni di accedere al tuo Raspberry Pi.

Ora configureremo il nostro Pi per fornire le funzionalità necessarie per il nostro codice. Usa "sudo raspi-config" per aprire il menu di configurazione e qui andremo a Opzioni di interfaccia.

Qui sotto attiveremo le seguenti opzioni:- SPI- I2C

Segui questa guida per configurare una connessione Internet wireless sul tuo Pi, dopo averlo fatto con successo possiamo arrivare all'installazione dei nostri pacchetti richiesti.

Pacchetti: (esegui i comandi nell'ordine indicato qui)

Quanto segue per ottenere gli ultimi aggiornamenti per il nostro Pisudo apt update && apt upgrade -y

Installa il nostro server MySQL e webserver- sudo apt install mariadb-server apache2

Userò MySQL Workbench per configurare il database più avanti in questa guida, se non lo usi e preferisci phpmyadmin puoi installarlo con il seguente comando, sei libero di usare qualsiasi altro client MySQL e purché tu sono in grado di importare correttamente il database.- sudo apt install phpmyadmin

Dopo aver fatto tutto quanto sopra, dobbiamo creare un utente per il nostro database. Usa "sudo mysql -u root" per accedere al tuo server MySQL, qui creeremo un utente chiamato db_admin con la sua rispettiva password, mantieni questa password annotata da qualche parte per più avanti nelle istruzioni. CONCEDERE TUTTI I PRIVILEGI SU *.* A "db_admin"@"%" IDENTIFICATO DA "yourPasswordHere" CON L'OPZIONE DI CONCESSIONE;

Usa il comando "\q" per uscire dal terminale MySQL.

Pacchetti Python: dobbiamo ancora installare alcuni pacchetti Python prima di procedere, esegui il comando seguente per assicurarti che tutto sia lì per un'esperienza impeccabile.

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

Oltre al seguente MySQL connect python packagesudo apt install python3-mysql.connector -y

Se tutto è andato bene ora puoi visitare il tuo Pi sul tuo browser web con il seguente indirizzo

Passaggio 3: configurazione del backend

Configurazione del backend
Configurazione del backend

Qui spiegherò come puoi configurare il backend da solo, prima scarica il file rar dal basso, cancellalo in una directory temporanea. Connettiti al tuo RaspberryPi con FileZilla o WinSCP con le seguenti credenziali:

IP: 169.254.10.1 Utente: piPassword: raspberry (se hai cambiato la password fallo anche qui)

Puoi quindi procedere al trasferimento dei file che hai cancellato in qualsiasi directory che desideri nella home directory dell'utente pi. Per semplicità supporremo in questa configurazione di aver caricato tutti i nostri file nella directory dei documenti.

Tieni aperto il tuo programma FTP per il passaggio successivo!

Ora apri nuovamente il prompt dei comandi con la tua connessione SSH perché dovremo apportare alcune modifiche al server web in modo che il frontend possa comunicare con il backend. Apriremo il file di configurazione Apache2 predefinito e lo modificheremo leggermente: sudo nano /etc/apache2/sites-available/000-default.conf

Aggiungi le seguenti righe sotto DocumentRoot nel file di configurazione appena aperto: ProxyPass /api/ https://127.0.0.1:5000/api/ProxyPassReverse /api/

Puoi dare un'occhiata all'immagine allegata per un esempio.

Passaggio 4: configurazione del frontend

Prima di trasferire i nostri file dovremo fare qualcosa prima di poter iniziare a trasferire i nostri file frontend. Apri il tuo prompt dei comandi con la connessione SSH che hai fatto in precedenza e usa il comando seguente per passare all'utente root del nostro RaspberryPi: "sudo su -"

Dopodiché possiamo cambiare la password del nostro utente root con il seguente comando: "passwd"Questo ti chiederà di inserire una nuova password, dopo averlo fatto puoi tornare al tuo programma FTP e accedere con le tue credenziali di root:

IP: 169.254.10.1Utente: rootPassword:

Scarica il file rar dal basso e cancellalo in una cartella temporanea, puoi spostare questi file sul tuo RaspberryPi nella seguente directory /var/www/html/, dopo averlo fatto puoi visitare il frontend su http:/ /169.254.10.1, non puoi ancora interagire perché il backend non è ancora in esecuzione, ti mostrerò più avanti in questa guida come farlo.

Passaggio 5: importazione del database per il nostro progetto

Importazione del database per il nostro progetto
Importazione del database per il nostro progetto
Importazione del database per il nostro progetto
Importazione del database per il nostro progetto

Apri il tuo programma di gestione del server MySQL preferito e connettiti al tuo Raspberry Pi con le credenziali che abbiamo creato nel passaggio 2.

Scarica il dump del database dal basso e importalo come faresti normalmente, MySQL workbench andresti su File> Apri script SQL e seleziona il dump del database che hai scaricato. Quindi premi CTRL + MAIUSC + INVIO e lo script SQL dovrebbe essere eseguito e la struttura per il database dovrebbe essere creato.

Ho aggiunto le credenziali che ho usato per il mio RaspberryPi come esempio di seguito e diverse immagini della struttura del database, puoi dare un'occhiata e provare a farti un'idea generale di come funziona tutto.

Passaggio 6: avvio del nostro progetto

Avviare il nostro progetto
Avviare il nostro progetto
Avviare il nostro progetto
Avviare il nostro progetto

Prima di poter avviare il nostro progetto, dobbiamo modificare le credenziali del database nel file config.py, se hai seguito le istruzioni esattamente come ha detto questa guida, puoi trovarle in /home/pi/Documents/Backend/src/config.py qui è necessario modificare le credenziali della variabile db_config in modo che corrispondano a quelle che abbiamo creato in precedenza per il nostro database. Ho aggiunto un esempio di ciò che vedrai in questo file di seguito.

Dopodiché aggiungeremo un file.service questo file farà in modo che il nostro progetto venga avviato all'avvio di RaspberryPi, assicurati di modificare la directory in modo appropriato in cui hai installato i file di backend. Utilizzare il seguente comando per creare il file di servizio: sudo nano /etc/systemd/system/dispenser.serviceQuesto creerà un file di servizio e copierà e incollerà il codice seguente in questo file.

[Unit]Description=Erogatore d'acquaAfter=mysql.service

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

[Installa]WantedBy=multi-user.target

Modifica la riga dove dice /home/pi/Documents/Backend/index.py dove hai installato i tuoi file di backend, se non lo fai correttamente il progetto non verrà avviato correttamente! Aggiungerò un file di esempio di seguito.

Dopo averlo fatto e usciti dall'editor di testo possiamo abilitare il servizio con i seguenti comandi:- sudo systemctl daemon-reload- sudo systemctl enable dispenser- sudo systemctl start dispenser

E come extra possiamo eseguire:sudo systemctl status dispenserQuesto mostrerà alcune informazioni sul nostro servizio, se è attivo o meno, …

Passaggio 7: il caso

Il caso
Il caso
Il caso
Il caso
Il caso
Il caso
Il caso
Il caso

Congratulazioni ci siamo quasi, aggiungerò alcune immagini che mostreranno esattamente le dimensioni che ho usato per il mio progetto, ho usato lastre di MDF di 18 mm di spessore, puoi opzionalmente usare uno spessore diverso. Il mio involucro può essere utilizzato come linea guida per progettare il tuo oppure puoi ricreare ciò che ho realizzato. (Se utilizzi uno spessore diverso di MDF i miei disegni non ti permetteranno più di realizzare il mio disegno, assicurati di adattarlo!) I pannelli che ho realizzato:- 2 pannelli di 32 cm per 42 cm (pannelli laterali)- 1 pannello di 24 cm di 32 cm (piatto inferiore)- 2 pannelli di 16 cm per 24 cm (piatto anteriore dove alloggia l'LCD e piatto adiacente)- 1 pannello di 28 cm per 24 cm (piatto centrale visto dal davanti)- 1 pannello di 30 cm per 24 cm (piatto superiore)

Passaggio 8: ammira il prodotto finale

Ammira il prodotto finale
Ammira il prodotto finale
Ammira il prodotto finale
Ammira il prodotto finale

Sei arrivato alla fine e ora, si spera, sei riuscito a rendere l'intera cosa una realtà. Se sei solo un passante che sta leggendo, benvenuto anche tu, ti ringrazio per aver letto fino all'ultimo passaggio!

Ho speso molto sangue, sudore e lacrime in questo progetto, quindi ti sarei grato se lasciassi un commento, qualsiasi critica per migliorarlo è benvenuta!

Passaggio 9: i problemi

Metterei il progetto nel suo stato attuale come un prototipo funzionante che può vedere molti più miglioramenti.

La base di codice del backend è strutturata in modo tale che una relazione master-slave possa essere perfettamente realizzata in cui una fontana fungerebbe da frontend principale e tutte le altre fontane spingerebbero dati e modifiche sull'API REST del master. Ci sono anche resti di un sistema di token API nel codice poiché questo doveva essere implementato ma tagliato in seguito a causa di vincoli di tempo.

Ho caricato il mio codice sul mio server Gitlab e lì puoi dare un'occhiata al codice nel suo insieme:

Consigliato: