Sommario:

Calciobalilla Raspberry Pi IoT: 11 passaggi
Calciobalilla Raspberry Pi IoT: 11 passaggi

Video: Calciobalilla Raspberry Pi IoT: 11 passaggi

Video: Calciobalilla Raspberry Pi IoT: 11 passaggi
Video: Foosball automated scoring system using #Raspberrypi and #Arduino 2024, Novembre
Anonim
Calciobalilla Raspberry Pi IoT
Calciobalilla Raspberry Pi IoT

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

Il circuito elettrico
Il circuito elettrico
Il circuito elettrico
Il circuito elettrico
Il circuito elettrico
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

Codifica dei sensori
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):

  1. 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
  2. The Matrix Class (link) -Questa è la classe principale per alimentare il modulo MAX7219
  3. 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

Preparazione e posizionamento dei sensori
Preparazione e posizionamento dei sensori
Preparazione e posizionamento dei sensori
Preparazione e posizionamento dei sensori
Preparazione e posizionamento dei sensori
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:

  1. Assicurati di misurare la quantità di filo necessaria dalla posizione RPi/breadboard alla posizione del sensore
  2. Saldare i pin del ricevitore IR a un'estremità del cavo (COM/GND/V+)
  3. Saldare i pezzi del connettore maschio sull'altra estremità del filo

Adesso prepariamo la tavola:

  1. 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.
  2. Praticare i fori
  3. Se hai dei supporti LED (link) puoi metterli all'interno del foro per renderlo più robusto
  4. Inserire + nastro LED + ricevitore su entrambi i lati
  5. Lega i fili + fissali sul legno in modo che non si incrocino troppo
  6. Inserire i pin maschio sulla breadboard secondo il circuito precedentemente fornito

Passaggio 5: preparazione e posizionamento del modulo matrice

Preparazione e posizionamento del modulo matrice
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:

  1. Misura il filo dalla breadboard verso la parte superiore del tavolo
  2. Saldare alcuni connettori femmina alla prima estremità del filo
  3. Saldare alcuni connettori maschi all'altra estremità del filo

Posizionamento della matrice:

  1. Tira fuori la matrice attraverso il foro sulla parte superiore
  2. Lega + nastro i fili all'interno sul legno per evitare che si incrocino
  3. 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

Rendendolo IoT
Rendendolo 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

Configurazione del database
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

Creazione del sito web
Creazione del sito web
Creazione del sito web
Creazione del sito web
Creazione del sito web
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

Finendo
Finendo

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: