Sommario:

CleanBot di Guillaume Meurillon: 8 passaggi
CleanBot di Guillaume Meurillon: 8 passaggi

Video: CleanBot di Guillaume Meurillon: 8 passaggi

Video: CleanBot di Guillaume Meurillon: 8 passaggi
Video: Демо-день #osoc20 | Открытое лето кода 2020 2024, Luglio
Anonim
CleanBot di Guillaume Meurillon
CleanBot di Guillaume Meurillon
CleanBot di Guillaume Meurillon
CleanBot di Guillaume Meurillon

Questa è una guida per un progetto che ho realizzato per la scuola. L'obiettivo era creare un dispositivo con il Raspberry Pi che fosse connesso a Internet, mentre raccoglieva dati dai sensori. Questi dati dovevano essere archiviati in un database (MySQL). I dati dovevano essere visualizzati con un sito web, codificati in Python con il pacchetto webapp Flask e il template Jinja2.

La mia idea era quella di creare un robot aspirapolvere "hackerato", usando un Raspberry Pi, un Arduino, un robot aspirapolvere già rotto e una serie di sensori.

Passaggio 1: raccolta delle parti

Raccolta delle parti
Raccolta delle parti
Raccolta delle parti
Raccolta delle parti
Raccolta delle parti
Raccolta delle parti
Raccolta delle parti
Raccolta delle parti

Prima di creare qualsiasi cosa, ho fatto molte ricerche su quali parti usare, come collegarle, scrivendo classi software in Python e così via.

L'elenco delle parti verrà incluso come file, in modo da poter cercare facilmente le parti necessarie.

Ho deciso di utilizzare un Arduino Uno accanto al Raspberry Pi, in modo da poter leggere in modo efficiente i miei sensori senza stressare il mio Raspberry Pi. Ho scelto anche per Uno perché ha una buona velocità di clock e per i pin analogici. Avrei potuto usare un ADC (es. MCP3008) per il mio Raspberry Pi, ma avrei avuto bisogno di molti più cavi, sarebbe stato più costoso e il mio Pi avrebbe dovuto lavorare molto di più.

Ho quindi iniziato a ispezionare le parti utilizzabili dal robot aspirapolvere rotto. L'elettronica interna era danneggiata, ma non è stato un problema, perché li sostituirei comunque completamente. Per fortuna i motori a corrente continua erano ancora funzionanti, quindi nessuno di questi doveva essere sostituito.

Elenco delle parti:

  • Raspberry Pi 3 con almeno 8GB MicroSD classe 10 e un case;
  • Raspberry Pi T-cobbler e breadboard;
  • Arduino Uno o simile (preferibilmente una versione non cinese con un ADC decente, alcuni cinesi hanno problemi AREF) con una sorta di custodia;
  • Un cavo ethernet;
  • Un robot aspirapolvere (rotto);
  • 3x moduli a ultrasuoni HC-SR04;
  • 1x modulo sensore hall;
  • Diversi resistori in diversi valori;
  • Un LDR;
  • 6x batterie Li-ion 18650 + porta 3 celle per 12v (preferibilmente dovresti usare batterie nuove o ancora meglio usare batterie LiPo, queste dureranno molto più a lungo);
  • 18650 (o qualunque tipo di batteria utilizzerai) pcb di ricarica a 3 celle 12v;
  • Alcune schede PCB fai da te per saldare i tuoi componenti;
  • Un foglio di plastica poliuretanica;
  • Un computer portatile/desktop.

Elenco degli strumenti:

  • Un trapano con diverse punte;
  • Una smerigliatrice angolare (non usarla se non hai esperienza) o qualcosa come un Dremel;
  • Un pezzo di carta abrasiva;
  • Diversi cacciaviti;
  • Supercolla, colla di montaggio, …;
  • Un saldatore (usa il grasso per saldare più facilmente i fili);
  • Un paio di tronchesi e uno spelafili.

Elenco software (opzionale):

  • Adobe XD: wireframing e creazione di un prototipo;
  • Fritzing: creazione di uno schema elettrico;
  • PyCharm Professional: IDE Python con funzionalità di utilizzo di distribuzione e interprete remoto;
  • Putty: connessione ssh facile e veloce con Pi;
  • Etcher.io: strumento semplice per eseguire il flashing di un'immagine Raspbian su una scheda SD;
  • Win32DiskImager: strumento semplice per creare un'immagine da una configurazione Raspbian esistente;
  • Blocco note dei programmatori: strumento semplice che puoi utilizzare per modificare in sicurezza il file /boot/cmdline.txt.

Passaggio 2: verniciatura a spruzzo e progettazione dell'interfaccia

Verniciatura spray e progettazione dell'interfaccia
Verniciatura spray e progettazione dell'interfaccia
Verniciatura spray e progettazione dell'interfaccia
Verniciatura spray e progettazione dell'interfaccia
Verniciatura spray e progettazione dell'interfaccia
Verniciatura spray e progettazione dell'interfaccia
Verniciatura spray e progettazione dell'interfaccia
Verniciatura spray e progettazione dell'interfaccia

Prima di iniziare a creare il design, ho verniciato a spruzzo l'esterno, perché i colori non mi piacevano affatto. Sono andato al negozio e ho preso un primer per plastica, una lattina di bianco e una di turchese per riverniciare il bauletto.

Dopo aver lasciato asciugare la vernice spray, ho cercato l'esatto codice colore esadecimale per la vernice che ho usato, in modo da poter abbinare perfettamente la mia interfaccia web con il mio dispositivo. Trovare questo codice esadecimale è stato abbastanza facile, dal momento che ho usato i graffiti Montana 94 e i codici esadecimali e RGB erano sul loro sito web.

Ho creato wireframe ad alta fedeltà per ogni pagina del mio sito Web, in modo da sapere perfettamente come creare questa interfaccia. Dopo aver mostrato la mia interfaccia ai miei insegnanti, ho ricevuto il consiglio di rendere lo sfondo un po' più grigio e i pulsanti bianchi, e il risultato secondo me è stato buono.

Passaggio 3: creazione del database

Creazione del database
Creazione del database

Il passo logico successivo è stato iniziare a pensare a quali dati volevo archiviare nel database MySQL. Non ci sono molte persone che amano sapere del loro aspirapolvere, quindi sono andato con le tabelle per gli utenti e i loro dati di accesso, nonché le tabelle per i sensori (batteria, distanza e contenitore della polvere).

L'immagine mostra il layout delle mie tabelle, disegnato in MySQL Workbench, con tutte le relazioni tra le tabelle.

Per i miei utenti, volevo tenere traccia del loro nome e cognome per personalizzare l'interfaccia e le email. Ovviamente per inviare e-mail, avevo bisogno anche del loro indirizzo e-mail. Ho anche aggiunto una tabella per tenere traccia delle preferenze e-mail dei miei utenti (se desiderano o meno ricevere e-mail). L'ultima cosa che volevo memorizzare sugli utenti è il loro ruolo per il dispositivo. Divido gli utenti come amministratori e utenti normali. Gli amministratori hanno il diritto di aggiungere, rimuovere e gestire gli utenti nel sistema, mentre gli utenti normali non possono accedere a questi strumenti.

La tabella successiva contiene "deviceruns", che sono le esecuzioni effettive eseguite dal dispositivo. I devicerun sono di proprietà di un determinato utente (la persona che ha iniziato il run) e hanno un starttime e un endtime, per calcolare il runtime.

Un'altra tabella viene utilizzata per collegare i dati del sensore a ciascun dispositivo eseguito. I sensori stessi sono memorizzati in un'altra tabella, contenente il loro ID, nome e descrizione.

Passaggio 4: collegare le parti insieme

Collegamento delle parti insieme
Collegamento delle parti insieme
Collegamento delle parti insieme
Collegamento delle parti insieme

Dopo aver creato lo schema del database, ho iniziato a utilizzare breadboard e cablaggio per collegare tutte le parti insieme in un prototipo funzionante.

Passaggio 5: configurazione del Raspberry Pi

Configurazione del Raspberry Pi
Configurazione del Raspberry Pi

Per scaricare l'ultima immagine di Raspbian, vai al sito Web di Raspbian. Qui puoi scegliere quale distro vuoi scaricare. Per operazioni più veloci, puoi scaricare la distribuzione headless, per un minore utilizzo della RAM, o scaricare il desktop con la GUI se preferisci un'interfaccia utente grafica.

Per installare il sistema operativo, è sufficiente scaricare Etcher, è uno strumento GUI per scrivere l'immagine sulla scheda micro SD in modo rapido e semplice.

Per abilitare la modalità headless, in modo da poter accedere al pi, dovrai installare Putty sul tuo computer. Il prossimo passo è andare alla cartella Boot creata da Etcher e aprire il file cmdline.txt con il tuo editor di testo preferito, ex Programmers Notepad. Aggiungi questo testo alla fine del file:

ip=169.254.10.1

Assicurati solo di non creare una nuova riga, aggiungila alla fine della riga!

Quindi, torna alla radice della cartella Boot e crea un file chiamato ssh. Non aggiungere alcuna estensione, questo assicurerà che il server SSH si avvii ogni volta che si avvia il Pi. Ora inserisci semplicemente la scheda SD nel tuo Pi, collega una fonte di alimentazione sufficiente al tuo Pi e aggiungi un cavo Ethernet tra il tuo Pi e il tuo computer.

Apri putty e digita l'indirizzo IP: 169.254.10.1. Ora fai clic su S e accedi, il nome utente predefinito è pi e la password è raspberry.

Quindi, esegui il seguente comando per essere aggiornato:

sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y

Il passaggio finale è creare un interprete Python virtuale sul tuo Raspberry Pi, questo eseguirà il tuo codice. Per fare ciò, apri semplicemente stucco e digita quanto segue:

sudo mkdir project1

cd project1 python3 -m pip install --upgrade pip setuptools wheel virtualenv python3 -m venv --system-site-packages venv

Passaggio 6: scrittura dell'applicazione Web

Scrivere l'applicazione Web
Scrivere l'applicazione Web

Dopo aver collegato ogni parte e configurato il Raspberry Pi, ho iniziato a scrivere la mia applicazione web principale utilizzando Flask e Jinja2. Flask è un framework di backend facile da usare per Python e Jinja2 è il linguaggio di template che ho usato. Con Jinja, puoi creare normali file HTML con cicli for, se strutture e così via.

Durante la codifica del backend, ho anche scritto il front-end per l'applicazione, inclusi HTML, CSS e JavaScript per alcuni elementi. Ho usato il metodo ITCSS e la notazione BEM per i miei fogli di stile.

Oltre alla web-app principale, ho creato anche altri 2 programmi principali. Uno è scritto per inviare l'indirizzo IP del dispositivo agli utenti nell'elenco. Ogni utente registrato che ha accettato di ricevere email, riceverà una mail con un link per avviare l'interfaccia web. Questo programma viene eseguito come servizio systemd.

L'altro file principale è per il dispositivo effettivo. Questo main è richiamabile tramite la mia applicazione Flask, per avviare e arrestare il dispositivo e raccogliere dati. I dati raccolti vengono anche caricati nel database del dispositivo tramite questo principale. Questi dati possono poi essere visualizzati nella web-app.

L'app Web è connessa al dispositivo principale eseguito con Python Threading. Quando un utente fa clic sul pulsante di avvio, viene generato un thread per eseguire il dispositivo in background. Nel frattempo, l'utente può navigare perfettamente nell'app. Quando si fa clic su Stop, questo thread viene interrotto e quindi il dispositivo si arresta.

Passaggio 7: creazione di pezzi per rifinire l'involucro

Creazione di pezzi per rifinire l'involucro
Creazione di pezzi per rifinire l'involucro
Creazione di pezzi per rifinire l'involucro
Creazione di pezzi per rifinire l'involucro
Creazione di pezzi per rifinire l'involucro
Creazione di pezzi per rifinire l'involucro
Creazione di pezzi per rifinire l'involucro
Creazione di pezzi per rifinire l'involucro

Dopo aver scritto la maggior parte dell'applicazione, ho iniziato a modificare l'involucro del dispositivo, in modo che i miei sensori e altre parti si adattassero effettivamente. Per fare questo, ho acquistato un foglio di poliuretano in un negozio di bricolage locale e ho iniziato a tagliare 2 staffe. Ho usato questo foglio di poliuretano perché non si rompe in pezzi durante il taglio e perché è abbastanza flessibile, il che è perfetto dato che il mio robot ha una forma circolare.

La prima staffa è realizzata per riempire un foro nella parte superiore, dove prima si trovava un display. Ho sostituito il display con un interruttore on/off in modo che le batterie possano essere effettivamente spente.

L'altra staffa è un supporto per i miei sensori a ultrasuoni HC-SR04 posizionati nella parte anteriore del dispositivo.

L'ultima cosa che mi restava da fare era ritagliare un foro nei rinforzi di una delle ruote, e inserire un magnete, in modo da poter monitorare le rotazioni della ruota.

Dopo aver finito queste staffe, le ho anche verniciate a spruzzo con la vernice che mi era rimasta, per adattarla al disegno.

Passaggio 8: il codice

Per installare il programma, scarica il file code.zip e decomprimilo nella directory project1.

Quindi, esegui questo comando in un terminale su Raspbian o Putty:

sudo cp project1/conf/project-1* /etc/systemd/system/

sudo cp project1/conf/project1-* /etc/systemd/system/sudo systemctl daemon-reload sudo systemctl enable project-1* sudo systemctl enable project1* sudo systemctl riavvia nginx

Quindi, apri il database che hai generato e crea un nuovo utente con una password con hash Argon2. Ora puoi usare il programma.

Divertiti!

Consigliato: