Sommario:
- Forniture
- Passaggio 1: assemblaggio del circuito
- Passaggio 2: configurazione del nostro RaspberryPi
- Passaggio 3: configurazione del backend
- Passaggio 4: configurazione del frontend
- Passaggio 5: importazione del database per il nostro progetto
- Passaggio 6: avvio del nostro progetto
- Passaggio 7: il caso
- Passaggio 8: ammira il prodotto finale
- Passaggio 9: i problemi
Video: Fontana d'acqua senza contatto: 9 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:00
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
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
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
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
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
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
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:
Controller MIDI senza contatto: 6 passaggi (con immagini)
Controller Midi senza contatto: rendere le cose senza contatto è stata la tendenza al giorno d'oggi. Ho creato un semplice controller midi usando Arduino Pro micro e alcune schede di rilevatori di prossimità IR che hanno un comparatore integrato, questo dovrebbe essere disponibile abbastanza facile ed economico. Questo progetto ca
Dispenser di disinfettante per le mani senza contatto fai-da-te senza un Arduino o un microcontrollore: 17 passaggi (con immagini)
Dispenser di disinfettante per le mani senza contatto fai-da-te senza un Arduino o un microcontrollore: come tutti sappiamo, l'epidemia di COVID-19 ha colpito il mondo e ha cambiato il nostro stile di vita. In questa condizione, l'alcol e i disinfettanti per le mani sono fluidi vitali, tuttavia devono essere utilizzati correttamente. Toccare contenitori di alcol o disinfettanti per le mani con mani infette c
Termometro IR senza contatto: 8 passaggi (con immagini)
Termometro IR senza contatto: il mio dipartimento della salute locale mi ha contattato perché aveva bisogno di un modo per monitorare quotidianamente la temperatura corporea della salute dei propri dipendenti durante la crisi di Covid-19 del 2020. Normale, i termometri IR standard iniziavano a scarseggiare
Indicatore del livello dell'acqua e controllo del motore senza contatto e senza corrosione: 5 passaggi
Indicatore del livello dell'acqua senza contatto e senza corrosione e controllo del motore.: CIAO, in questo tutorial vedremo come ottenere lo stato del serbatoio dell'acqua in base ai livelli dell'acqua (alto, medio, basso) del serbatoio sopraelevato utilizzando tre diversi led colorati in un Modo senza contatto con l'aiuto del sensore a ultrasuoni e della scheda Arduino uno.P
Dispositivo di raffreddamento/supporto per laptop a costo zero (senza colla, senza foratura, senza dadi e bulloni, senza viti): 3 passaggi
Dispositivo di raffreddamento/supporto per laptop a costo zero (senza colla, senza foratura, senza dadi e bulloni, senza viti): AGGIORNAMENTO: PER FAVORE, PER FAVORE, PER FAVORE, PER IL MIO ISTRUTTORE, GRAZIE ^_^ POTRESTI ANCHE VOTARE PER IL MIO ALTRO CONCORSO ISCRIZIONE A www.instructables.com/id/Zero-Cost-Aluminum-Furnace-No-Propane-No-Glue-/ O FORSE VOTA PER IL MIO MIGLIORE AMICO