Taula de continguts:

Creeu el vostre robot de transmissió de vídeo controlat per Internet amb Arduino i Raspberry Pi: 15 passos (amb imatges)
Creeu el vostre robot de transmissió de vídeo controlat per Internet amb Arduino i Raspberry Pi: 15 passos (amb imatges)

Vídeo: Creeu el vostre robot de transmissió de vídeo controlat per Internet amb Arduino i Raspberry Pi: 15 passos (amb imatges)

Vídeo: Creeu el vostre robot de transmissió de vídeo controlat per Internet amb Arduino i Raspberry Pi: 15 passos (amb imatges)
Vídeo: Настройка 3D-принтера с помощью MKS sGen L v1.0 Часть 3 2024, Desembre
Anonim
Creeu el vostre robot de transmissió de vídeo controlat per Internet amb Arduino i Raspberry Pi
Creeu el vostre robot de transmissió de vídeo controlat per Internet amb Arduino i Raspberry Pi
Creeu el vostre robot de transmissió de vídeo controlat per Internet amb Arduino i Raspberry Pi
Creeu el vostre robot de transmissió de vídeo controlat per Internet amb Arduino i Raspberry Pi
Creeu el vostre robot de transmissió de vídeo controlat per Internet amb Arduino i Raspberry Pi
Creeu el vostre robot de transmissió de vídeo controlat per Internet amb Arduino i Raspberry Pi

Sóc @RedPhantom (també conegut com LiquidCrystalDisplay / Itay), un estudiant de 14 anys d'Israel que aprèn a la Max Shein Junior High School for Advanced Science and Mathematics. Estic fent aquest projecte perquè tothom pugui aprendre i compartir.

Potser us heu pensat: hmm … sóc un friqui … I els meus fills volen que faci un projecte amb ells … Volia construir un robot. Volia vestir-lo com un cadellet. És un bon projecte de caps de setmana!

El Raspberry Pi és perfecte per a qualsevol ús: avui explicarem les habilitats d’aquest microordinador per fabricar un robot. Aquest robot pot:

  • Conduïu i controleu-vos mitjançant LAN (WiFi) mitjançant qualsevol ordinador connectat a la mateixa xarxa WiFi que Raspberry Pi.
  • Reprodueix vídeos en directe mitjançant el mòdul de càmera Raspberry Pi
  • Envieu dades del sensor mitjançant Arduino

Per veure el que necessiteu per a aquest bonic projecte de llum, només cal llegir el següent pas (advertències) i després el pas Wanted: Components.

Aquí teniu el repositori de GitHub: GITHUB REPO BY ME

Aquí teniu el lloc del projecte: LLOC DEL PROJECTE

Pas 1: advertència: aneu amb compte intentant això a casa

PRECAUCIÓ:

L’AUTOR D’AQUEST TUTORIAL ASSUMEIX QUE TÉU UN CONEIXEMENT SUFICIENT SOBRE L’ELECTRICITAT I EL FUNCIONAMENT BÀSIC DE L’EQUIPAMENT ELÈCTRIC. SI NO ÉS CURA I NO SEGUIU LES INSTRUCCIONS D’AQUEST TUTORIAL QUE PODEU: DANYAR L’EQUIPAMENT ELECTRONNIC, CREUAR-SE O CAUSAR UN INCENDI. Tingueu cura i utilitzeu el sentit comú. Si no teniu els coneixements necessaris per a aquest tutorial (soldadura, conceptes bàsics d'electrònica), si us plau, realitzeu-ho amb una persona que ho faci. Gràcies.

L’AUTOR D’AQUEST INSTRUCTABLE ELIMINA QUALSEVOL RESPONSABILITAT DELS MATEIXS PER DANYS CAUSATS O PERDITS DE LA PROPIETAT O DANYS FÍSICS. ÚS DEL SENTIT COMÚ

Pas 2: components

Connexions
Connexions
Connexions
Connexions
Connexions
Connexions
Connexions
Connexions

Abans d’escalfar el soldador, hem d’examinar el que hauria d’estar connectat a què. Vaig fer aquest senzill gràfic (MS Paint mai no em deixa caure) que descriu on es troben determinades parts dins del robot.

La imatge està creada perquè pugueu ampliar-la i veure-la a màxima resolució i llegir el text.

Pas 6: Adreça del Pi

L'Arduino parla amb el Pi segons el pla. I el Pi parla amb l'ordinador, doncs, com funciona tot això?

Vegem la nostra seqüència d'inici de connexió:

  1. Raspberry Pi comença
  2. Arduino s'inicia
  3. Raspberry Pi inicia TCP Client. Dispara la seva adreça IP mitjançant un LED.
  4. Raspberry Pi inicia el servei de comunicacions en sèrie i es connecta a Arduino

Per tant, hem establert algun tipus de comunicació:

Ordinador Raspberry Pi Arduino

He utilitzat Visual Basic. NET (Microsoft Visual Studio 2013 Community) per escriure el programa que parla amb el Raspberry Pi i Python per escriure el protocol Arduino / Raspberry Pi.

Tot el que heu de fer per conèixer la vostra adreça IP Pi és connectar-la a una pantalla HDMI, iniciar sessió al Shell i escriure l’ordre:

nom d'amfitrió -I

Pas 7: el pla

Ara que tenim l'adreça IP de Pi, hi incorporarem SSH (SSH és Secure Shell, ens connectem remotament a l'intèrpret d'ordres de Linux) i escrivim un fitxer que mostra l'adreça IP del servidor. El Pi, en iniciar-se, també ho farà i escriurà el port que escolta. Aquí només donaré alguns exemples del codi, però es pot descarregar des d’aquest pas i des de la branca GitHub que he creat. Detalls sobre això més endavant.

Funciona així:

  1. RPi s'inicia.
  2. RPi inicia el programa Tcp en la seva IP local i en un port designat.
  3. RPI comença a transmetre vídeo
  4. RPI s'apaga.

Pas 8: anar físicament

Ara, estem preparats per començar a construir físicament tot. Si no heu llegit el pas 1 (text d’advertència i llicències), feu-ho abans de continuar. No sóc responsable dels danys causats. I en cas de dubte, aquest robot no s’ha d’utilitzar amb fins militars tret que es tracti d’un apocalipsi zombi. I fins i tot llavors utilitzeu el sentit comú.

Es recomana que llegeixi les instruccions que podeu escoltar a la llista de lectura.

Baixeu-vos l'esquema de connexions des del pas "Connexions".

MOTORS

Els motors que heu comprat probablement tinguin aquest aspecte i estarà bé si no ho fan: si només tenen dos cables (negre i vermell en la majoria dels casos) hauria de funcionar. Cerqueu el full de dades en línia per veure la seva tensió i corrent de funcionament. No dubteu a fer preguntes a la secció de comentaris. Sempre els llegeixo.

PONT H

Mai no havia treballat amb un pont H. Vaig buscar una mica en google i vaig trobar un bon instructiu explicant els principis d’un HB. També podeu mirar-hi (vegeu el pas de la llista de lectura) i enganxar-ne la vostra també. No explicaré molt. Podeu llegir-hi i saber tot el que cal sobre aquest circuit.

LED

Aquesta petita bombeta pot funcionar des de la tensió lògica només perquè gairebé no necessita corrent i una tensió de 3V-5V 4mA-18mA. Opcional.

ARDUINO

Arduino rebrà senyals i ordres a través de la connexió sèrie des del Raspberry Pi. Utilitzem Arduino per controlar els nostres motors perquè Raspberry Pi no pot generar valors analògics mitjançant el GPIO.

Pas 9: arrencada automàtica de Raspberry Pi

Cada vegada que engegueu Raspberry Pi, haureu d’escriure el nom d’usuari i la contrasenya. No ho volem fer perquè de vegades no podem connectar un teclat al Pi, de manera que seguirem aquests passos d’aquest tutorial per iniciar automàticament el programa que prepara el Pi. Si es manté en un bucle, sempre podem Ctrl + C per interrompre-la.

  • sudo crontab -e
  • A continuació, introduirem l’ordre que afegeix aquest fitxer a l’arrencada automàtica al gestor de cron.

Anomenarem el fitxer pibot.sh que donarà ordres per iniciar tot tipus d’escriptures python per fer funcionar el robot. Anem a repassar-ho: (Sudo amb cortina de programes Python per permetre que el programa accedeixi 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

El codi que fa tot el treball al costat del pi es cridarà upon_startup.sh.

És un simple script shell que ho executa tot.

Pas 10: Houeston, hem tingut un problema … Els motors DC no són el mateix model

Ja he provat el pont H i funciona bé, però quan enganxo els motors que he obtingut de la plataforma del robot he demanat en línia que aquests dos motors giren a velocitats diferents i fan sorolls diferents. Vaig canviar l’accelerador al 100% en els motors. Tots dos no van poder córrer amb la seva màxima capacitat.

Sembla que es tracta de dos motors diferents. Un té un parell més gran que és fantàstic per a aquest tipus de robot, però l’altre no movia el robot. Així es converteix en cercles.

En aquest moment, el que tinc és que el programa de sèrie de l'Arduino funciona molt bé, però el servidor Tcp del PC i el Client Tcp del Pi encara no estan codificats. A he de completar aquesta inscripció a la competició. Què faig?

  1. En primer lloc, triplico la tensió dels motors. El full de dades deia que 3V, 6V no els movia. Aleshores són 9V. Vaig connectar bateries teo en paral·lel per doblar el corrent i la tensió continua sent la mateixa.
  2. Tinc altres motors que s’adapten al muntatge de la plataforma? Potser puc veure si són models similars.
  3. Puc substituir a Servos si la xocolata colpeja realment el ventilador.

Va començar l’escola. Hauré de veure què fer.

Nota: Per què diable escric aquí els problemes que trobo? Per tant, si teniu menys experiència i teniu els mateixos problemes, sabreu què fer.

La solució:

Així que he fet una altra prova. He adaptat la diferència de velocitat al codi Arduino.

NOTA: els motors poden girar a velocitats diferents. Canvieu els valors de l'esbós d'Arduino.

Pas 11: [TCP]: per què Tcp i Shell no segur? Què és TCP?

Tinc dues explicacions per què utilitzar Tcp i no SSH per al P. C. - Comunicació Pi.

  1. En primer lloc, SSH (Secure Shell, vegeu Explicacions) està destinat a iniciar comandes des d’un ordinador remot. Fer que el Pi respongui amb la informació que desitgem és més difícil perquè la nostra única opció per analitzar les dades és mitjançant un processament de cadenes dur i tediós.
  2. En segon lloc, ja sabem utilitzar SSH i volem aprendre més formes de comunicació entre dispositius en aquest tutorial.

TCP, o Protocol de control de transmissió, és un protocol bàsic de la suite de protocols d’Internet. Es va originar en la implementació inicial de la xarxa en què complementava el protocol d’Internet (IP). Per tant, tota la suite es coneix habitualment com TCP / IP. TCP proporciona un lliurament fiable, ordenat i comprovat d’errors d’un flux d’octets entre les aplicacions que s’executen en hosts que es comuniquen a través d’una xarxa IP.

(De Wikipedia)

Per tant, els professionals de TCP són:

  • Segur
  • Ràpid
  • Funciona a qualsevol lloc d'una xarxa
  • Proporciona mètodes per comprovar la transmissió de dades correcta
  • Control de flux: té protecció en cas que el remitent de dades enviï dades massa ràpidament perquè el client pugui registrar-les i processar-les.

I els inconvenients són:

  • A TCP no es pot emetre (enviar dades a tots els dispositius de la xarxa) i el multidifusió (igual però poc diferent) dóna la possibilitat a cada dispositiu d’emetre com un servidor).
  • Hi ha errors al vostre programa i a les biblioteques del sistema operatiu (que gestionen la comunicació TCP per si mateixos, el vostre encaminador no fa pràcticament res, tret de connectar els dos o més dispositius)

Per què no utilitzeu UDP, és possible que ho demaneu? Bé, a diferència de TCP, UDP no s’assegura que el vostre client obtingui les dades abans d’enviar-ne més. Com enviar un correu electrònic i no saber si el client el rep. A més, UDP és menys segur. Per obtenir més informació, llegiu aquesta publicació de Stack Exchange Super User

Aquest article és bo i recomanable.

Pas 12: [TCP]: Permet fer un client

El client (Raspberry Pi en el nostre cas), que rep les dades del servidor (el nostre PC en el nostre cas), rebrà dades per enviar-les al Pi (ordres de sèrie que es realitzaran a l’Arduino) i les rebrà (Lectures del sensor) i comentaris directament des de l’Arduino. L’esquema adjunt mostra la relació entre els tres.

L’article Python Wiki TcpCommunication mostra que és tan senzill fer aquesta comunicació amb unes poques línies de codi mitjançant el mòdul de sòcol integrat. Tindrem un programa al PC i un altre al Pi.

Treballarem amb interrupcions. Obteniu més informació al pas Explicacions sobre elles. Llegiu-ne també sobre els buffers. Ara, podem llegir les dades que tenim utilitzant data = s.recv (BUFFER_SIZE), però serà el nombre de caràcters que hem definit amb les mossegades buides. Podem utilitzar interrupcions? Una altra pregunta: la memòria intermèdia estarà buida o esperarà que el servidor enviï més dades, en aquest cas el servidor / client llançarà una excepció de temps d'espera?

Permet abordar-ho un a la vegada. Abans de fer-ho, he buscat aquest article de la Viquipèdia que llista els ports TCP i UDP usats. Després d'un cop d'ull ràpid, he decidit que aquest projecte es comunicarà al port 12298 perquè no és utilitzat pel sistema operatiu ni pels serveis locals.

Pas 13: proveu les nostres comunicacions de Tcp

Per veure si podem utilitzar interrupcions, fem un simple client i un servidor mitjançant la línia d'ordres de Python. Ho faré en els passos següents:

  1. Inicieu un programa que envia un text mitjançant Tcp en bucle a través d'un port de cortina
  2. Inicieu un altre programa (en paral·lel) que llegeixi tot el text en bucle i l'imprimeixi a la pantalla.

Només es mostraran segments del programa. Tots els programes s’executen amb Python 3. Tot el que fan aquests programes és enviar l’ordre sèrie des del teclat de l’usuari del PC a l’Arduino mitjançant el Pi.

  • SBcontrolPC.py: s'executarà a l'ordinador. Inicia una connexió TCP a l'adreça local i al port especificat (faig servir el port 12298, vegeu el pas anterior per què)
  • SBcontrolPi.py: s'executarà al Pi. Llegeix el seu buffer cada mig segon (0,5 segons). Inicia un script d'intèrpret d'ordres que gestiona coses com ara la transmissió de vídeo, etc.

Recomanat: