Table des matières:

Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi : 15 étapes (avec photos)
Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi : 15 étapes (avec photos)

Vidéo: Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi : 15 étapes (avec photos)

Vidéo: Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi : 15 étapes (avec photos)
Vidéo: Présentation et configuration de la Raspberry PI Caméra 2024, Novembre
Anonim
Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi
Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi
Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi
Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi
Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi
Construisez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi

Je suis @RedPhantom (alias LiquidCrystalDisplay / Itay), un étudiant israélien de 14 ans qui étudie à l'école secondaire Max Shein pour les sciences avancées et les mathématiques. Je fais ce projet pour que tout le monde puisse apprendre et partager!

Vous vous êtes peut-être dit: hum… je suis un geek… Et mes enfants veulent que je fasse un projet avec eux… Il voulait construire un robot. Elle voulait l'habiller comme un petit chiot. C'est un bon projet de week-end !

Le Raspberry Pi est parfait pour tous les usages: aujourd'hui nous allons expliciter les capacités de ce micro-ordinateur à faire un robot. Ce robot peut:

  • Conduisez et soyez contrôlé via LAN (WiFi) en utilisant n'importe quel ordinateur connecté au même réseau WiFi que Raspberry Pi.
  • Diffusez des vidéos en direct à l'aide du module de caméra Raspberry Pi
  • Envoyer des données de capteur à l'aide d'Arduino

Pour voir ce dont vous avez besoin pour ce beau projet d'éclairage, lisez simplement l'étape suivante (avertissements) et ensuite l'étape Wanted: Components.

Voici le repo GitHub: GITHUB REPO BY ME

Voici le site du projet: PROJET SITE BY ME

Étape 1: Avertissement: Faites attention en essayant ceci à la maison

AVERTIR:

L'AUTEUR DE CE TUTORIEL ASSUME QUE VOUS AVEZ DES CONNAISSANCES SUFFISANTES SUR L'ÉLECTRICITÉ ET LE FONCTIONNEMENT DE BASE DES ÉQUIPEMENTS ÉLECTRIQUES. SI VOUS N'ÊTES PAS PRUDENT ET NE SUIVEZ PAS LES INSTRUCTIONS DE CE TUTORIEL, VOUS POURRIEZ: ENDOMMAGER L'ÉQUIPEMENT ÉLECTRONIQUE, VOUS BRLER OU PROVOQUER UN INCENDIE. Soyez prudent et faites preuve de bon sens. Si vous n'avez pas les connaissances requises pour ce tutoriel (soudure, bases de l'électronique), veuillez effectuer avec une personne qui les possède. Merci.

L'AUTEUR DE CET INSTRUCTABLE DÉCLINE TOUTE RESPONSABILITÉ DE LUI-MÊME POUR LES DOMMAGES CAUSÉS OU LA PERTE DE PROPRIÉTÉ OU LES DOMMAGES PHYSIQUES. UTILISER LE BON SENS

Étape 2: Composants

Connexions
Connexions
Connexions
Connexions
Connexions
Connexions
Connexions
Connexions

Avant de chauffer le fer à souder, nous devons examiner ce qui doit être connecté à quoi. J'ai créé ce tableau simple (MS Paint ne me laisse jamais tomber) qui décrit l'emplacement de certaines pièces dans le robot.

L'image est construite pour que vous puissiez zoomer et voir en pleine résolution et lire le texte.

Étape 6: Adresse pour le Pi

L'Arduino parle avec le Pi selon le plan. Et le Pi parle à l'ordinateur, alors comment tout cela fonctionne-t-il ?

Regardons notre séquence d'initiation de connexion:

  1. Raspberry Pi démarre
  2. Arduino démarre
  3. Raspberry Pi démarre le client TCP. Il tire son adresse IP via une LED.
  4. Raspberry Pi démarre le service de communications série et se connecte à Arduino

C'est pourquoi nous avons établi une sorte de communication:

Ordinateur Raspberry Pi Arduino

J'ai utilisé Visual Basic. NET (Communauté Microsoft Visual Studio 2013) pour écrire le programme qui parle avec Raspberry Pi et Python pour écrire le protocole Arduino/Raspberry Pi.

Tout ce que vous avez à faire pour connaître votre adresse IP Pi, c'est de la connecter à un écran HDMI, de vous connecter au Shell et de taper la commande:

nom d'hôte -I

Étape 7: Le plan

Maintenant que nous avons l'adresse IP de Pi, nous allons y entrer en SSH (SSH est Secure Shell - nous nous connectons à distance au shell Linux) et écrirons un fichier qui affiche l'adresse IP du serveur. Le Pi, au démarrage, le fera également et écrira le port qu'il écoute. Ici, je ne donnerai que quelques exemples du code, mais il est disponible en téléchargement à partir de cette étape et de la branche GitHub que j'ai créée. Détails là-dessus plus tard.

Cela fonctionne comme ceci:

  1. RPi démarre.
  2. RPi démarre le programme TCP sur son IP locale et un port désigné.
  3. RPI commence à diffuser la vidéo
  4. RPI s'arrête.

Étape 8: Passer au physique

Maintenant, nous sommes prêts à commencer à construire physiquement le tout. Si vous n'avez pas lu l'étape 1 (texte d'avertissement et licence), veuillez le faire avant de continuer. Je ne suis pas responsable des dommages causés. Et en cas de doute, ce robot ne doit pas être utilisé à des fins militaires sauf s'il s'agit d'une apocalypse zombie. Et même alors, faites preuve de bon sens.

Il est suggéré que vous lisiez les instructables écouter dans la liste de lecture.

Téléchargez le schéma de connexion à partir de l'étape "Connexions".

MOTEURS

Les moteurs que vous avez achetés ressemblent probablement à ceci, et ce n'est pas grave s'ils ne le font pas: s'ils n'ont que deux fils (noir et rouge dans la plupart des cas), cela devrait fonctionner. Recherchez leur fiche technique en ligne pour voir leur tension et leur courant de fonctionnement. N'hésitez pas à poser des questions dans la section commentaire. Je les lis toujours.

PONT H

Je n'ai jamais travaillé avec un H-Bridge auparavant. J'ai googlé un peu et j'ai trouvé un bon instructable expliquant les principes d'un HB. Vous pouvez aussi y regarder (voir l'étape Liste de lecture) et accrocher le vôtre aussi. Je n'expliquerai pas grand-chose. Vous pouvez y lire et tout savoir sur ce circuit.

LED

Cette petite ampoule peut fonctionner à partir d'une tension logique simplement parce qu'elle ne nécessite presque aucun courant et une tension de 3V-5V 4mA-18mA. Optionnel.

ARDUINO

Arduino obtiendra des signaux et des commandes via une connexion série à partir du Raspberry Pi. Nous utilisons Arduino pour contrôler nos moteurs car Raspberry Pi ne peut pas sortir de valeurs analogiques via le GPIO.

Étape 9: Démarrage automatique de Raspberry Pi

Chaque fois que vous allumerez Raspberry Pi, vous devrez saisir le nom d'utilisateur et le mot de passe. Nous ne voulons pas faire cela car parfois nous ne pouvons tout simplement pas connecter un clavier au Pi, nous suivrons donc ces étapes de ce didacticiel pour démarrer automatiquement le programme qui prépare le Pi. S'il reste bloqué dans une boucle, nous pouvons toujours Ctrl+C pour l'interrompre.

  • sudo crontab -e
  • Et puis nous entrerons la commande qui ajoute ce fichier au démarrage automatique dans le gestionnaire cron.

Nous appellerons le fichier pibot.sh qui donnera des commandes pour démarrer toutes sortes de scripts python pour faire fonctionner le robot. Passons en revue: (Nous sudo avec des programmes Python rideaux pour permettre au programme d'accéder au GPIO)

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

Le code qui fait tout le travail du côté du pi sera appelé upon_startup.sh.

C'est un simple script shell qui exécute tout.

Étape 10: Houeston, nous avons eu un problème… Les moteurs à courant continu ne sont pas le même modèle

J'ai déjà testé le H-Bridge et il fonctionne bien, mais lorsque j'accroche les moteurs que j'ai reçus de la plate-forme robotique que j'ai commandée en ligne, ces deux moteurs tournent à des vitesses différentes et font des bruits différents. J'ai changé la manette des gaz à 100% sur les moteurs. Les deux ne pouvaient pas fonctionner à leur capacité maximale.

On dirait que ce sont deux moteurs différents. L'un a un couple plus important, ce qui est excellent pour ce type de robot, mais l'autre ne déplacerait tout simplement pas le robot. Alors ça tourne en rond.

À ce stade, ce que j'ai, c'est que le programme série sur l'Arduino fonctionne parfaitement, mais le serveur TCP sur le PC et le client TCP sur le Pi ne sont pas encore codés. J'ai besoin de compléter cette inscription pour le concours. Que fais-je?

  1. Premièrement, j'ai triplé la tension pour les moteurs. La fiche technique dit que 3V, 6V ne les ont pas déplacés. C'est du 9V alors. J'ai connecté des batteries teo en parallèle pour doubler le courant et la tension reste la même.
  2. Ai-je d'autres moteurs qui s'adaptent au support sur la plate-forme ? Peut-être que je peux voir si ce sont des modèles similaires.
  3. Je peux remplacer les servos si le chocolat frappe vraiment le ventilateur.

L'école a commencé. Je vais devoir voir quoi faire.

Remarque: Pourquoi diable dois-je écrire les problèmes que je rencontre ici ? Donc, si vous êtes moins expérimenté et que vous avez aussi les mêmes problèmes, vous saurez quoi faire.

La solution:

J'ai donc fait un autre test. J'ai adapté la différence de vitesse dans le code Arduino.

REMARQUE: les moteurs peuvent tourner à différentes vitesses pour vous ! Modifiez les valeurs dans l'esquisse Arduino.

Étape 11: [TCP]: Pourquoi TCP et pas Secure Shell ? Qu'est-ce que TCP?

J'ai deux explications pour lesquelles utiliser Tcp et non SSH pour le PC. - Communication Pi.

  1. Premièrement, SSH (Secure Shell, voir les explications) est destiné à lancer des commandes depuis un ordinateur distant. Faire en sorte que le Pi réponde avec les informations que nous voulons est plus difficile car notre seule option pour analyser les données consiste à utiliser un traitement de chaîne difficile et fastidieux.
  2. Deuxièmement, nous savons déjà comment utiliser le SSH et nous voulons en savoir plus sur les moyens de communication entre les appareils dans ce tutoriel.

TCP, ou Transmission Control Protocol, est un protocole central de la suite de protocoles Internet. Il est né de la mise en œuvre initiale du réseau dans laquelle il complétait le protocole Internet (IP). Par conséquent, l'ensemble de la suite est communément appelé TCP/IP. TCP fournit une livraison fiable, ordonnée et vérifiée par erreur d'un flux d'octets entre les applications s'exécutant sur des hôtes communiquant sur un réseau IP.

(De Wikipédia)

Les pros TCP sont donc:

  • Sécurise
  • Rapide
  • Fonctionne n'importe où sur un réseau
  • Fournit des méthodes pour vérifier la transmission correcte des données
  • Contrôle de flux: offre une protection au cas où l'expéditeur des données envoie des données trop rapidement pour que le client puisse les enregistrer et les traiter.

Et les inconvénients sont:

  • En TCP, vous ne pouvez pas diffuser (Envoyer des données à tous les appareils d'un réseau) et multicast (identique mais peu différent - donne la possibilité à chaque appareil de diffuser comme un serveur).
  • Bugs dans vos bibliothèques de programme et de système d'exploitation (qui gèrent eux-mêmes la communication TCP, votre routeur ne fait presque rien à part connecter les deux [ou plus] appareils)

Pourquoi ne pas utiliser UDP, me demanderez-vous ? Eh bien, contrairement à TCP, UDP ne s'assure pas que votre client obtient les données avant d'en envoyer plus. Comme envoyer un e-mail et ne pas savoir si le client le reçoit. De plus, UDP est moins sécurisé. Pour plus d'informations, lisez cet article de Stack Exchange Super User

Cet article est bon et recommandé.

Étape 12: [TCP]: Créons un client

Le client (Raspberry Pi dans notre cas), qui reçoit les données du serveur (Notre PC dans notre cas) obtiendra les données à envoyer au Pi (commandes série qui seront exécutées sur l'Arduino) et recevra les données en retour (lectures du capteur et les commentaires directement de l'Arduino. Le schéma ci-joint montre la relation entre les trois.

L'article Python Wiki TcpCommunication montre qu'il est si simple de faire une telle communication avec quelques lignes de code en utilisant le module socket intégré. Nous aurons un programme sur le PC et un autre programme sur le Pi.

Nous allons travailler avec des interruptions. Apprenez-en plus à leur sujet dans l'étape Explications. Lisez-y aussi sur les tampons. Maintenant, nous pouvons lire les données que nous avons en utilisant data=s.recv(BUFFER_SIZE) mais ce sera le nombre de caractères que nous avons définis avec des bouchées vides. Peut-on utiliser des interruptions ? Autre question: le tampon sera-t-il vide ou attendra-t-il que le serveur envoie plus de données, auquel cas le serveur/client lancera une exception de délai d'attente ?

Attaquons-le un à la fois. Avant de le faire, j'ai consulté cet article de Wikipedia qui répertorie les ports TCP et UDP utilisés. Après un rapide coup d'œil, j'ai décidé que ce projet communiquera sur le port 12298 car il n'est pas utilisé par le système d'exploitation et les services locaux.

Étape 13: Essayez nos communications TCP

Afin de voir si nous pouvons utiliser des interruptions, créons un simple client et un serveur en utilisant la ligne de commande Python. Je vais le faire dans les étapes suivantes:

  1. Démarrer un programme qui envoie un texte via Tcp en boucle via un port rideau
  2. Démarrez un autre programme (en parallèle) qui lit tout le texte en boucle et l'affiche à l'écran.

Seuls les segments du programme seront affichés. Tous les programmes fonctionnent avec Python 3. Tous ces programmes envoient la commande série du clavier de l'utilisateur du PC à l'Arduino via le Pi.

  • SBcontrolPC.py - À exécuter sur le PC. Démarre une connexion TCP sur l'adresse locale et sur le port spécifié (j'utilise le port 12298, voir l'étape précédente pourquoi)
  • SBcontrolPi.py - À exécuter sur le Pi. Lit son tampon toutes les demi-secondes (0,5 seconde). Démarre un script shell qui gère des choses telles que le streaming vidéo, etc.

Conseillé: