Sommario:
- Passaggio 1: i materiali
- Passaggio 2: il circuito elettrico
- Passaggio 3: codifica dei sensori
- Passaggio 4: preparazione e posizionamento dei sensori
- Passaggio 5: preparazione e posizionamento del modulo matrice
- Passaggio 6: renderlo IoT
- Passaggio 7: collegamento del Raspberry Pi
- Passaggio 8: configurazione del database
- Passaggio 9: creazione del sito Web
- Passaggio 10: connessione al World Wide Web
- Passaggio 11: conclusione
Video: Calciobalilla Raspberry Pi IoT: 11 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
Benvenuti nella mia versione di un biliardino hackerato, come parte di un progetto studentesco per la tecnologia dei nuovi media e della comunicazione. Fondamentalmente sono cresciuto tra biliardino e tavoli da biliardo, quindi ho pensato che sarebbe stato bello provare a connettere uno di questi dispositivi a Internet.
La configurazione principale utilizza un biliardino esistente collegato a un Raspberry Pi che può svolgere tutte le seguenti attività:
- Utilizza i pin GPIO per pilotare i LED/ricevitori IR e i moduli a matrice di punti 8x8
- Esegue un sito Web Flask utilizzando nginx
- Esegue un database MySQL/MariaDB per l'archiviazione dei dati
Per essere in grado di ricreare questo progetto avrai bisogno delle seguenti abilità:
Backend:
- Comprendere HTML/CSS/Javascript per il client del sito web
- Comprendere Python con Flask/Flask-SocketIO/Jinja2 per il lato server del sito web
- Conoscenza base di MySQL
- Sapere come eseguire un server web
Prototipo
- Conoscenze di base su come cablare un circuito elettrico
- saldatura
- Comprensione di base su come scrivere uno script in Python
- Lavorare con Linux (Raspbian)
- Avere molta pazienza perché ci saranno molti debugging coinvolti
Passaggio 1: i materiali
Ecco l'elenco con tutte le parti necessarie per il tavolo:
- Raspberry Pi Model 3 (con custodia)
- T-Cobbler per collegare il Pi alla breadboard
- Calciobalilla (ho usato un tavolo molto vecchio simile a questo. Deve essere disposto a praticare dei fori)
- Modulo a matrice di punti Arduino MAX7219 (2)
- Emettitori LED IR (2+ perché si rompono, simili a questo)
- Ricevitori IR (2+ perché si rompono anche loro, simili a questo)
- breadboard di base senza saldatura
- Tanto, tanto filo (dipende dalle dimensioni del biliardino)
- connettori maschio (30+)
- connettori femmina (10+)
- Resistori da 100-220 Ohm (4+)
- materiali di saldatura
- reggette metalliche
- Supporti LED
- un po' di legno/viti nel caso tu voglia riportare la palla nella grondaia
Il costo totale di questo progetto dipende interamente dal costo del tuo biliardino (costoso). Oltre al tavolo i materiali saranno al massimo 150 euro.
Passaggio 2: il circuito elettrico
Prima di tentare di saldare, assemblare tutti i componenti che consiglio vivamente di testarlo prima su una breadboard. È più facile sostituire i componenti difettosi prima di aver passato ore a saldarli.
All'inizio ho provato a implementare la matrice LED 8x8 con un registro a scorrimento 74HC595 (prima immagine) e un array di transistor ma a causa dei molti fili e dell'uscita molto bassa sono passato al modulo a matrice di punti MAX7219 perché richiede solo 5 fili ed è pilotato direttamente da un autobus SPI.
Il circuito che alla fine ho usato è disegnato con Fritzing. Si prega di notare che i LED IR e i ricevitori possono essere collegati a qualsiasi pin GPIO gratuito.
I ricevitori IR e il LED dovrebbero trovarsi uno di fronte all'altro e la parte superiore del LED dovrebbe essere puntata verso il ricevitore. Perché vogliamo simulare un raggio diretto che può essere interrotto dal movimento della palla, nel qual caso ci sarà un cambio di stato della linea DATA del ricevitore da 0 a 1.
Passaggio 3: codifica dei sensori
Ho codificato la maggior parte di questo progetto utilizzando Pycharm perché consente una facile distribuzione SSH sul tuo Raspberry Pi utilizzando un interprete remoto. Non andrò nei dettagli su come funziona questo programma, ma molte informazioni possono essere trovate sul sito web di pycharm.
Attualmente sto ancora lavorando al progetto, ma una volta che tutto sarà finito l'intero progetto sarà disponibile sul mio profilo github
Il codice per i sensori è composto da 3 classi che vengono eseguite in un thread in background sul mio server Flask (che verrà spiegato in seguito):
- The Goal Class (link) -Questo file avvia tutti i componenti separati, che possono essere richiamati inserendo il corretto dispositivo/bus SPI e il numero di pin
- The Matrix Class (link) -Questa è la classe principale per alimentare il modulo MAX7219
- La classe LED e ricevitore (link) - Questa è la classe principale per alimentare il break-beam a infrarossi utilizzando thread separati per ridurre il carico della CPU dell'RPi
Il LED e il ricevitore funzionano entrambi su una frequenza di 38kHz e i ricevitori si aspettano sempre un impulso del 50% in su e un 50% in giù per funzionare correttamente.
Passaggio 4: preparazione e posizionamento dei sensori
Ora prepariamo il LED IR e il ricevitore. Nell'immagine della tabella puoi trovare le posizioni in cui devono essere posizionati l'RPi e i sensori.
Ma prima dobbiamo preparare il cablaggio:
- Assicurati di misurare la quantità di filo necessaria dalla posizione RPi/breadboard alla posizione del sensore
- Saldare i pin del ricevitore IR a un'estremità del cavo (COM/GND/V+)
- Saldare i pezzi del connettore maschio sull'altra estremità del filo
Adesso prepariamo la tavola:
- Fai un disegno di base (basato sull'immagine) su dove forare. È molto importante che i 2 fori siano allineati tra loro perché questa sarà la posizione del raggio.
- Praticare i fori
- Se hai dei supporti LED (link) puoi metterli all'interno del foro per renderlo più robusto
- Inserire + nastro LED + ricevitore su entrambi i lati
- Lega i fili + fissali sul legno in modo che non si incrocino troppo
- Inserire i pin maschio sulla breadboard secondo il circuito precedentemente fornito
Passaggio 5: preparazione e posizionamento del modulo matrice
Successivamente collegheremo i 2 moduli a matrice di LED
Nota:
Siccome usavo un vecchio biliardino c'erano già dei buchi che salivano verso la parte superiore a causa dei bocchini. Se non li hai, dovrai crearli.
Per preparare i fili:
- Misura il filo dalla breadboard verso la parte superiore del tavolo
- Saldare alcuni connettori femmina alla prima estremità del filo
- Saldare alcuni connettori maschi all'altra estremità del filo
Posizionamento della matrice:
- Tira fuori la matrice attraverso il foro sulla parte superiore
- Lega + nastro i fili all'interno sul legno per evitare che si incrocino
- Inserire i perni maschi sulla breadboard secondo il circuito precedentemente fornito
Ad un certo punto aggiungerò un piccolo passaggio fai-da-te per aggiungere un involucro per il modulo matrice, ma per ora sono nudi.
Passaggio 6: renderlo IoT
Se vuoi solo registrare e visualizzare i punteggi, puoi completare il progetto scrivendo un piccolo script python in esecuzione che esegue un ciclo fino a quando uno dei punteggi raggiunge 9 e quindi si ripristina.
Tuttavia, se vuoi connettere il tuo tavolo a Internet, i prossimi passaggi dovrebbero fare al caso tuo.
Nei prossimi passaggi affronteremo quanto segue:
- Configurazione del Raspberry Pi
- Creare un database per l'archiviazione
- Creazione del sito web
- Lo metto online
A questo punto, se hai familiarità con git, ti consiglio di creare un repository su GitHub/GitLab per tenere traccia dei tuoi file. Se non lo sei puoi creare una cartella con la stessa struttura dell'immagine.
Il progetto completo sarà presto disponibile su GitHub. Tuttavia è disponibile un file rar temporaneo con tutti i file necessari.
Passaggio 7: collegamento del Raspberry Pi
Successivamente configureremo l'ambiente raspberry pi, per fare ciò è necessario eseguire i seguenti passaggi:
- Connettiti su SSH al tuo Rasberry Pi (puoi usare PuTTY)
- Crea una cartella (esempio progetto mkdir) e spostati in questa cartella usando il comando cd
- Crea un ambiente Python virtuale in questa cartella usando il comando python3 -m venv --system-site-packages env
- Attiva l'interprete virtuale con il comando source /env/bin/activate
- Installa i pacchetti dal file require.txt con il comando python -m pip install nome-pacchetto
- Trasferisci i file dal file project_example.rar precedentemente fornito su SSH nella cartella del tuo progetto
Ora dovresti essere in grado di eseguire l'intero progetto sul tuo Raspberry Pi. Ti consiglio di utilizzare un IDE Python come PyCharm che ti consente di utilizzarti per eseguire il debug dal tuo interprete remoto su SSH e caricare direttamente le modifiche se necessario.
Passaggio 8: configurazione del database
Ora è necessario impostare un database di base, basato su questo modello.
Il modo più semplice per farlo è creare il database nel workbench MySQL dove puoi anche eseguire alcuni test.
Una volta fatto puoi esportare un dump del tuo database e caricarlo sul tuo RPi e poi eseguirlo con sudo mariadb < pathtofile/file.sql
Passaggio 9: creazione del sito Web
Successivamente puoi analizzare (e utilizzare) il codice fornito nel file project_example.rar.
Il file principale è il Flask.py che è il pane quotidiano di questo progetto:
- Esegue un'app Flask-SocketIO che gestisce il backend del sito Web
- Crea una connessione tra il database e Flask
- Fornisce la convalida dell'accesso e la registrazione dell'utente
- Fornisce il codice necessario su come giocare a un gioco utilizza socketio per aggiornare il sito Web in tempo reale durante il gioco
- Mette i risultati del gioco nel database
Nelle cartelle static e templates puoi trovare i file HTML/CSS/JS che forniscono la parte frontend del sito. Sentiti libero di modificarli secondo i tuoi gusti.
Passaggio 10: connessione al World Wide Web
Per connettere il nostro sito web al web useremo nginx e uwsgi. Nell'esempio del progetto puoi trovare i file necessari nella cartella conf.
Prima di tutto è necessario aggiornare quanto segue in questi file:
- In uwsgi-flask.ini devi cambiare il percorso del parametro virtualenv sul tuo interprete
- Nel project1-flask.service devi aggiornare la parte [Service] del file con le tue credenziali e i percorsi dei file associati
- Nel file nginx è necessario aggiornare il server e la posizione / percorso al socket associato
Successivamente è necessario sostituire il file del server web nginx predefinito con la posizione del file di configurazione nginx, di seguito è riportato un esempio di comandi linux per farlo
- me@my-rpi:~/project1 $ sudo cp conf/nginx /etc/nginx/sites-available/project1
- me@my-rpi:~/project1 $ sudo rm /etc/nginx/sites-enabled/defaul t
- me@my-rpi:~/project1 $ sudo ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/project1
- me@my-rpi:~/project1 $ sudo systemctl restart nginx.service
Infine devi aggiungere i servizi personalizzati alla tua cartella systemd, questo è un esempio su come farlo:
- me@my-rpi:~/project1 $ sudo cp conf/project1-*.service /etc/systemd/system/
- me@my-rpi:~/project1 $ sudo systemctl daemon-reload
- me@my-rpi:~/project1 $ sudo systemctl start project1-*
- me@my-rpi:~/project1 $ sudo systemctl status project1-*
Se vuoi che il server web si avvii all'avvio del tuo raspberry pi devi usare il comando sudo systemctl enable project1-*.service.
Se fatto correttamente, dopo un riavvio del sistema il tuo sito web dovrebbe essere in esecuzione sul tuo indirizzo IP. Se vuoi modificare uno di questi file di configurazione devi sempre interrompere il servizio, ricaricare i file e utilizzare il comando daemon-reload seguito da un avvio, altrimenti le modifiche non saranno efficaci.
Passaggio 11: conclusione
Durante la digitazione della parte finale di questo tutorial, questo piccolo progetto scolastico è ancora in corso.
Ho trascorso innumerevoli ore a farlo in 2,5 settimane. Anche se tutto è stato un po' affrettato, sono ancora orgoglioso di ciò che ho raggiunto. Durante la fase di montaggio ho riscontrato innumerevoli bug/errori/sensori difettosi quindi non scoraggiarti troppo se tutto non funziona al primo tentativo.
La cosa migliore che puoi fare è chiedere o cercare aiuto su Internet, ci sono molte persone con una conoscenza molto migliore che sono molto desiderose di aiutarti.
Ultimo ma non meno importante, voglio ringraziare i miei insegnanti della New Media and Communication Technology per avermi dato molti consigli e avermi aiutato a finire questo progetto.
Consigliato:
Easy IOT – Hub sensore RF controllato da app per dispositivi IOT a medio raggio: 4 passaggi
Easy IOT – Hub di sensori RF controllato da app per dispositivi IOT a medio raggio: in questa serie di tutorial, costruiremo una rete di dispositivi che possono essere controllati tramite un collegamento radio da un dispositivo hub centrale. Il vantaggio di utilizzare una connessione radio seriale a 433 MHz invece di WIFI o Bluetooth è la portata molto più ampia (con un buon
IoT APIS V2 - Sistema di irrigazione automatizzato autonomo abilitato per IoT: 17 passaggi (con immagini)
IoT APIS V2 - Sistema di irrigazione automatizzato autonomo abilitato per IoT: questo progetto è un'evoluzione del mio precedente istruito: APIS - Sistema di irrigazione automatizzato per piante Uso APIS da quasi un anno e volevo migliorare il design precedente: capacità di monitorare l'impianto da remoto. Questo è come
Modulo di alimentazione IoT: aggiunta di una funzione di misurazione dell'energia IoT al mio controller di carica solare: 19 passaggi (con immagini)
Modulo di alimentazione IoT: aggiunta di una funzione di misurazione dell'energia IoT al mio controller di carica solare: Ciao a tutti, spero che stiate tutti bene! In questo tutorial ti mostrerò come ho realizzato un modulo IoT Power Measurement che calcola la quantità di energia generata dai miei pannelli solari, che viene utilizzata dal mio controller di carica solare t
Installazione di Raspbian in Raspberry Pi 3 B senza HDMI - Iniziare con Raspberry Pi 3B - Configurare il tuo Raspberry Pi 3: 6 passaggi
Installazione di Raspbian in Raspberry Pi 3 B senza HDMI | Iniziare con Raspberry Pi 3B | Configurazione del tuo Raspberry Pi 3: come alcuni di voi sanno, i computer Raspberry Pi sono davvero fantastici e puoi ottenere l'intero computer solo su una singola piccola scheda. Il Raspberry Pi 3 Modello B è dotato di un ARM Cortex A53 quad-core a 64 bit con clock a 1.2 GHz. Questo pone il Pi 3 a circa 50
Calciobalilla autonomo: 5 passaggi (con immagini)
Biliardino autonomo: l'obiettivo principale del progetto era completare un prototipo funzionante per un biliardino autonomo (AFT), in cui un giocatore umano affronta un avversario robotico. Dal punto di vista umano del gioco, il biliardino è molto simile a un tavolo normale. Il gioco