Sommario:

Costruisci il tuo robot per lo streaming video controllato da Internet con Arduino e Raspberry Pi: 15 passaggi (con immagini)
Costruisci il tuo robot per lo streaming video controllato da Internet con Arduino e Raspberry Pi: 15 passaggi (con immagini)

Video: Costruisci il tuo robot per lo streaming video controllato da Internet con Arduino e Raspberry Pi: 15 passaggi (con immagini)

Video: Costruisci il tuo robot per lo streaming video controllato da Internet con Arduino e Raspberry Pi: 15 passaggi (con immagini)
Video: CURIOSITÀ, PROGETTI ARDUINO E RASPBERRY 2024, Novembre
Anonim
Costruisci il tuo robot per lo streaming video controllato da Internet con Arduino e Raspberry Pi
Costruisci il tuo robot per lo streaming video controllato da Internet con Arduino e Raspberry Pi
Costruisci il tuo robot per lo streaming video controllato da Internet con Arduino e Raspberry Pi
Costruisci il tuo robot per lo streaming video controllato da Internet con Arduino e Raspberry Pi
Costruisci il tuo robot per lo streaming video controllato da Internet con Arduino e Raspberry Pi
Costruisci il tuo robot per lo streaming video controllato da Internet con Arduino e Raspberry Pi

Sono @RedPhantom (alias LiquidCrystalDisplay / Itay), uno studente israeliano di 14 anni che studia alla Max Shein Junior High School for Advanced Science and Mathematics. Sto realizzando questo progetto affinché tutti possano imparare e condividere!

Potresti aver pensato tra te e te: hmm… sono un geek… E i miei figli vogliono che io faccia un progetto con loro… Voleva costruire un robot. Voleva vestirlo come un cucciolo. È un buon progetto per i fine settimana!

Il Raspberry Pi è perfetto per ogni uso: oggi espliciteremo le capacità di questo microcomputer per realizzare un robot. Questo robot può:

  • Guida e sii controllato tramite LAN (WiFi) utilizzando qualsiasi computer connesso alla stessa rete WiFi di Raspberry Pi.
  • Streaming video in diretta utilizzando il modulo fotocamera Raspberry Pi
  • Invia i dati del sensore usando Arduino

Per vedere di cosa hai bisogno per questo bel progetto di luce, leggi il passaggio successivo (avvertenze) e successivamente il passaggio Wanted: Components.

Ecco il repository GitHub: GITHUB REPO BY ME

Ecco il sito del progetto: PROJECT SITE BY ME

Passaggio 1: Avvertenza: fai attenzione a provarlo a casa

ATTENZIONE:

L'AUTORE DI QUESTO TUTORIAL PRESUME CHE TU ABBIA CONOSCENZE SUFFICIENTI SULL'ELETTRICITÀ E SUL FUNZIONAMENTO DI BASE DELLE APPARECCHIATURE ELETTRICHE. SE NON FATE ATTENZIONE E NON SEGUITE LE ISTRUZIONI IN QUESTO TUTORIAL POTRETE: DANNEGGIARE APPARECCHIATURE ELETTRONICHE, USTIONARVI O CAUSARE UN INCENDIO. Fate attenzione e usate il buon senso. Se non si dispone delle conoscenze necessarie per questo tutorial (saldatura, nozioni di base sull'elettronica), si prega di esibirsi con una persona che lo fa. Grazie.

L'AUTORE DI QUESTO INSTRUCTABLE ELIMINA OGNI RESPONSABILITÀ DA SE STESSO PER DANNI CAUSATI O PERDITA DI PROPRIETÀ O DANNI FISICI. USA IL SENSO COMUNE

Passaggio 2: componenti

Connessioni
Connessioni
Connessioni
Connessioni
Connessioni
Connessioni
Connessioni
Connessioni

Prima di riscaldare il saldatore, dobbiamo esaminare cosa dovrebbe essere collegato a cosa. Ho creato questo semplice grafico (MS Paint non mi delude mai) che descrive dove si trovano determinate parti all'interno del robot.

L'immagine è costruita in modo da poter ingrandire e vedere a piena risoluzione e leggere il testo.

Passaggio 6: indirizzo per il Pi

L'Arduino parla con il Pi secondo il piano. E il Pi parla al computer, quindi come funziona tutto questo?

Diamo un'occhiata alla nostra sequenza di avvio della connessione:

  1. Inizia il Raspberry Pi
  2. Arduino si avvia
  3. Raspberry Pi avvia il client TCP. Rilascia il suo indirizzo IP tramite un LED.
  4. Raspberry Pi avvia il servizio di comunicazione seriale e si connette ad Arduino

Pertanto abbiamo stabilito una sorta di comunicazione:

Computer Raspberry Pi Arduino

Ho usato Visual Basic. NET (Microsoft Visual Studio 2013 Community) per scrivere il programma che dialoga con Raspberry Pi e Python per scrivere il protocollo Arduino/Raspberry Pi.

Tutto quello che devi fare per conoscere il tuo indirizzo IP Pi, è collegarlo a uno schermo HDMI, accedere alla Shell e digitare il comando:

nome host -I

Passaggio 7: il piano

Ora che abbiamo l'indirizzo IP di Pi, lo inseriremo in SSH (SSH è Secure Shell - ci colleghiamo in remoto alla shell di Linux) e scriviamo un file che visualizza l'indirizzo IP del server. Anche il Pi, all'avvio, lo farà e scriverà la porta su cui sta ascoltando. Qui fornirò solo alcuni esempi dal codice, ma è disponibile per il download da questo passaggio e dal ramo GitHub che ho creato. Dettagli su questo più tardi.

Funziona così:

  1. RPi si avvia.
  2. RPi avvia il programma Tcp sul suo IP locale e su una porta designata.
  3. RPI inizia lo streaming video
  4. L'RPI si spegne.

Passaggio 8: passare al fisico

Ora siamo pronti per iniziare a costruire fisicamente il tutto. Se non hai letto il passaggio 1 (testo di avviso e licenza), fallo prima di procedere. Non sono responsabile per eventuali danni causati. E in caso di dubbio, questo robot non deve essere utilizzato per scopi militari a meno che non si tratti di un'apocalisse di zombi. E anche allora usa il buon senso.

Si consiglia di leggere le istruzioni per l'ascolto nell'elenco di lettura.

Scarica lo schema di connessione dal passaggio "Connessioni".

MOTORI

I motori che hai comprato probabilmente assomigliano a questo, e va bene se non lo fanno: se hanno solo due fili (nero e rosso nella maggior parte dei casi) dovrebbe funzionare. Consulta la loro scheda tecnica online per vedere la loro tensione e corrente di funzionamento. Sentiti libero di fare domande nella sezione commenti. le leggo sempre.

H-PONTE

Non ho mai lavorato con un H-Bridge prima. Ho cercato un po' su Google e ho trovato un buon tutorial che spiega i principi di un HB. Puoi anche guardare lì (vedi il passaggio Elenco di lettura) e agganciare anche il tuo. Non spiegherò molto. Puoi leggere lì e sapere tutto ciò che dovresti su questo circuito.

GUIDATO

Questa piccola lampadina può funzionare con una tensione logica solo perché non richiede quasi corrente e una tensione di 3V-5V 4mA-18mA. Opzionale.

ARDUINO

Arduino riceverà segnali e comandi tramite connessione seriale dal Raspberry Pi. Usiamo Arduino per controllare i nostri motori perché Raspberry Pi non può emettere valori analogici tramite il GPIO.

Passaggio 9: avvio automatico di Raspberry Pi

Ogni volta che accendi Raspberry Pi, dovrai digitare il nome utente e la password. Non vogliamo farlo perché a volte non riusciamo a collegare una tastiera al Pi, quindi seguiremo questi passaggi da questo tutorial per avviare automaticamente il programma che prepara il Pi. Se si blocca in un ciclo, possiamo sempre Ctrl+C per interromperlo.

  • sudo crontab -e
  • E poi inseriremo il comando che aggiunge quel file all'avvio automatico nel cron manager.

Chiameremo il file pibot.sh che darà i comandi per avviare tutti i tipi di script Python per far funzionare il robot. Andiamo oltre: (Sudo con i programmi Python corti per consentire al programma di accedere al GPIO)

raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554}' :demux=h264

Il codice che fa tutto il lavoro sul lato del pi sarà chiamato upon_startup.sh.

È un semplice script di shell che esegue tutto.

Passaggio 10: Houeston, abbiamo avuto un problema… I motori CC non sono lo stesso modello

Ho già testato l'H-Bridge e funziona bene, ma quando collego i motori che ho preso dalla piattaforma del robot ho ordinato online quei due motori girano a velocità diverse e fanno rumori diversi. Ho cambiato l'acceleratore al 100% sui motori. Entrambi non potevano correre alla loro massima capacità.

Sembra che siano due motori diversi. Uno ha una coppia maggiore che è ottima per questo tipo di robot, ma l'altro non muoverebbe il robot. Quindi gira in tondo.

A questo punto, quello che ho è che il programma seriale su Arduino funziona perfettamente, ma il server Tcp sul PC e il client Tcp sul Pi non sono ancora codificati. A devo completare questa voce per il concorso. Cosa devo fare?

  1. Primo, triplico la tensione per i motori. La scheda tecnica diceva che 3V, 6V non li hanno spostati. Allora sono 9V. Ho collegato teo batterie in parallelo per raddoppiare la corrente e la tensione rimane la stessa.
  2. Ho altri motori che si adattano al supporto sulla piattaforma? Forse posso vedere se sono modelli simili.
  3. Posso sostituire Servos se il cioccolato colpisce davvero la ventola.

La scuola è iniziata. Devo vedere cosa fare.

Nota: perché mai scrivo i problemi che incontro qui? Quindi se sei meno esperto e anche tu hai gli stessi problemi saprai cosa fare.

La soluzione:

Quindi ho fatto un altro test. Ho adattato la differenza di velocità nel codice Arduino.

NOTA: i motori potrebbero girare a velocità diverse per te! Modifica i valori nello sketch Arduino.

Passaggio 11: [TCP]: perché Tcp e non Secure Shell? Che cos'è il TCP?

Ho due spiegazioni sul perché usare Tcp e non SSH per il PC. -Pi comunicazione.

  1. In primo luogo, SSH (Secure Shell, vedere Spiegazioni) ha lo scopo di lanciare comandi da un computer remoto. Fare in modo che il Pi risponda con le informazioni che desideriamo è più difficile perché la nostra unica opzione per analizzare i dati è attraverso un'elaborazione delle stringhe dura e noiosa.
  2. In secondo luogo, sappiamo già come utilizzare SSH e vogliamo imparare più modi di comunicazione tra i dispositivi in questo tutorial.

TCP, o Transmission Control Protocol, è un protocollo principale di Internet Protocol Suite. Ha avuto origine nell'implementazione iniziale della rete in cui ha integrato il protocollo Internet (IP). Pertanto, l'intera suite viene comunemente denominata TCP/IP. TCP fornisce una consegna affidabile, ordinata e con controllo degli errori di un flusso di ottetti tra le applicazioni in esecuzione su host che comunicano su una rete IP.

(Da Wikipedia)

Quindi i TCP Pro sono:

  • Sicuro
  • Veloce
  • Funziona ovunque su una rete
  • Fornisce metodi per verificare la corretta trasmissione dei dati
  • Flow Control: ha una protezione nel caso in cui il mittente dei dati invii i dati troppo velocemente per la registrazione e l'elaborazione da parte del cliente.

E i contro sono:

  • In TCP non è possibile trasmettere (inviare dati a tutti i dispositivi su una rete) e multicast (uguale ma leggermente diverso: dà la possibilità a ciascun dispositivo di trasmettere come un server).
  • Bug nel tuo programma e nelle librerie del sistema operativo (che gestiscono autonomamente la comunicazione TCP, il tuo router non fa quasi nulla tranne connettere i due [o più] dispositivi)

Perché non usare UDP, potresti chiedere? Bene, a differenza di TCP, UDP non si assicura che il tuo client riceva i dati prima di inviarne altri. Come inviare un'e-mail e non sapere se il cliente la riceve. Inoltre, UDP è meno sicuro. Per maggiori informazioni, leggi questo post di Stack Exchange Super User

Questo articolo è buono e consigliato.

Passaggio 12: [TCP]: facciamo un cliente

Il client (Raspberry Pi nel nostro caso), che riceve i dati dal server (il nostro PC nel nostro caso) riceverà i dati da inviare al Pi (comandi seriali che verranno eseguiti su Arduino) e riceverà i dati indietro (Letture del sensore e feedback direttamente da Arduino. Lo schema allegato mostra la relazione tra i tre.

L'articolo Python Wiki TcpCommunication mostra che è così semplice effettuare tale comunicazione con poche righe di codice utilizzando il modulo socket integrato. Avremo un programma sul PC e un altro programma sul Pi.

Lavoreremo con gli interrupt. Scopri di più nel passaggio Spiegazioni su di loro. Leggi anche sui buffer. Ora, possiamo leggere i dati che abbiamo usando data=s.recv(BUFFER_SIZE) ma saranno quanti caratteri abbiamo definito con bit vuoti. Possiamo usare gli interrupt? Un'altra domanda: il buffer sarà vuoto o aspetterà che il server invii più dati, nel qual caso il server/client genererà un'eccezione di timeout?

Affrontiamolo uno alla volta. Prima di farlo, ho cercato questo articolo di Wikipedia che elenca le porte TCP e UDP utilizzate. Dopo una rapida occhiata ho deciso che questo progetto comunicherà sulla porta 12298 perché non è utilizzato dal sistema operativo e dai servizi locali.

Passaggio 13: prova le nostre comunicazioni Tcp

Per vedere se possiamo usare gli interrupt, facciamo un semplice client e un server usando la riga di comando di Python. Lo farò nei seguenti passaggi:

  1. Avvia un programma che invia un testo tramite Tcp in un ciclo attraverso una porta della tenda
  2. Avvia un altro programma (in parallelo) che legge tutto il testo in un ciclo e lo stampa sullo schermo.

Verranno mostrati solo i segmenti del programma. Tutti i programmi funzionano con Python 3. Tutto ciò che fanno questi programmi è inviare il comando seriale dalla tastiera dell'utente del PC all'Arduino tramite il Pi.

  • SBcontrolPC.py - Da eseguire sul PC. Avvia una connessione TCP sull'indirizzo locale e sulla porta specificata (io uso la porta 12298, vedere il passaggio precedente perché)
  • SBcontrolPi.py - Da eseguire sul Pi. Legge il suo buffer ogni mezzo secondo (0,5 secondi). Avvia uno script di shell che gestisce cose come lo streaming video ecc.

Consigliato: