Table des matières:

Robot Roomba contrôlé par navigateur avec le Raspberry Pi modèle 3 A+ : 6 étapes (avec photos)
Robot Roomba contrôlé par navigateur avec le Raspberry Pi modèle 3 A+ : 6 étapes (avec photos)

Vidéo: Robot Roomba contrôlé par navigateur avec le Raspberry Pi modèle 3 A+ : 6 étapes (avec photos)

Vidéo: Robot Roomba contrôlé par navigateur avec le Raspberry Pi modèle 3 A+ : 6 étapes (avec photos)
Vidéo: CompTIA Основы ИТ (ITF+) FC0-U61 Полный курс 2024, Novembre
Anonim
Robot Roomba contrôlé par navigateur avec le Raspberry Pi modèle 3 A+
Robot Roomba contrôlé par navigateur avec le Raspberry Pi modèle 3 A+
Robot Roomba contrôlé par navigateur avec le Raspberry Pi modèle 3 A+
Robot Roomba contrôlé par navigateur avec le Raspberry Pi modèle 3 A+

Aperçu

Ce Instructable se concentrera sur la façon de donner à un Roomba mort un nouveau cerveau (Raspberry Pi), des yeux (Webcam) et un moyen de tout contrôler à partir d'un navigateur Web.

Il existe de nombreux hacks Roomba qui permettent le contrôle via l'interface série. Je n'ai pas eu la chance de tomber sur un Roomba doté d'un micrologiciel actuel ou d'une carte mère fonctionnelle. Soit le Roomba est trop vieux, soit le Roomba est mort. J'ai trouvé le Roomba que j'ai utilisé pour ce projet dans une poubelle de friperie locale pour 5 $. Il avait encore une batterie décente, mais une carte mère morte. (J'ai aussi trouvé la webcam dans la même friperie pour environ 5 $). Tout ce que j'utilise du Roomba d'origine, ce sont les moteurs, le châssis et la batterie. Vous n'êtes pas obligé d'utiliser un Roomba pour ce projet. Vous pouvez utiliser différents moteurs, roues et châssis si vous le souhaitez. J'ai juste envie de transformer un morceau de ferraille en quelque chose d'utilisable.

Pour cette construction, j'ai utilisé le Raspberry Pi Model 3 A+ et un contrôleur de moteur Riorand. J'utilise le code du robot contrôlé par navigateur Dexter Industries que j'ai modifié. La version Dexter Industries configure le Pi en tant que serveur Websocket qui vous permet de contrôler leur robot (plateforme brick pi) à partir d'un fichier html client exécutant un autre ordinateur.

J'ai modifié le code en utilisant les broches GPIO et j'ai ajouté un moyen pour le Pi de s'arrêter lorsqu'un bouton est cliqué / lorsque la touche d'échappement est enfoncée dans le navigateur. J'ai également apporté quelques modifications à la page Web de contrôle pour permettre l'affichage d'un flux de mouvement via un iframe, tout en contrôlant le robot dans une seule page. J'ai configuré le Pi avec une adresse IP statique pour héberger le fichier client afin que je puisse me connecter à l'aide de n'importe quel ordinateur ou périphérique sur mon réseau.

Je documente le processus ici dans l'espoir de montrer comment créer un robot de base simple et peu coûteux.

Pièces utilisées

Raspberry Pi 3 A+ (Adafruit Link) 30 $

Contrôleur de pilote de moteur double Riorand H-Bridge (lien Amazon) 22 $

Batterie 12V pour moteurs (lien Amazon) 19 $

Batterie 5V pour Raspberry Pi (Amazon Link) 10 $

Carte Micro SD de 8 Go (Amazon Link) 5 $

Fils de cavalier (lien Amazon) 7 $

Roomba série 500

. Tous ensemble un peu moins de 100 $.

Étape 1: Installez Raspbian et configurez une adresse IP statique

Installer Raspbian et configurer une adresse IP statique
Installer Raspbian et configurer une adresse IP statique

J'ai utilisé Raspbian Stretch Lite. Je n'ai pas vu le besoin du bureau, mais vous pouvez installer la version de bureau si vous préférez.

Je vais supposer que vous savez déjà comment installer Raspbian. Si vous avez besoin d'aide, vous pouvez trouver le guide de la Fondation Raspberry Pi ici.

Une fois que vous avez Raspbian opérationnel, connectez-vous et exécutez le programme raspi-config.

pi@raspberrypi:~ $ sudo raspi-config

Configurez votre connexion WiFi dans raspi-config

Sélectionner

2 options de réseau

Sélectionner

Wifi N2

Sélectionnez un pays, entrez votre SSID et entrez votre mot de passe

Configurer SSH dans raspi-config

Une fois la configuration initiale effectuée, j'ai utilisé SSH pour tout configurer sans tête. (Vous pouvez ignorer cela si vous utilisez un moniteur. Il m'était plus facile d'apporter des modifications au code sans avoir à arrêter le robot et à le brancher sur un moniteur.)

Retour au menu principal de raspi-config

Sélectionner

5 options d'interfaçage

Sélectionner

P2 SSH

Sélectionner

Oui

De retour au menu principal de raspi-config sélectionnez

Vérifiez que vous êtes connecté à votre réseau

pi@raspberrypi:~ $ ifconfig

Vous devriez recevoir une sortie similaire à celle-ci. (Notez l'adresse IP; vous en aurez peut-être besoin plus tard. par exemple 192.168.1.18)

wlan0: drapeaux=4163 mtu 1500

inet 192.168.1.18 masque de réseau 255.255.255.0 diffusion 192.168.1.255 inet6 fe80::c74f:42ec:8cd3:2fda prefixlen 64 scopeid 0x20 ether b8:27:eb:6a:a4:95 txqueuelen 1000 (Ethernet) paquets RX 44396 octets 5847726 (5,5 MiB) Erreurs RX 0 abandonné 0 dépassement 0 trame 0 Paquets TX 30530 octets 39740576 (37,8 MiB) Erreurs TX 0 abandonné 0 dépassement 0 porteuse 0 collisions 0

Vérifiez que vous pouvez accéder à Internet.

pi@raspberrypi:~ $ ping google.com

Vous devriez recevoir une sortie similaire à celle-ci.

PING google.com (216.58.194.110) 56 (84) octets de données.

64 octets de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=1 ttl=54 temps=18.2 ms 64 octets de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=2 ttl =54 temps=19,4 ms 64 octets de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=3 ttl=54 temps=23,6 ms 64 octets de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=4 ttl=54 time=30.2 ms ^C --- google.com ping statistics --- 4 paquets transmis, 4 reçus, 0% de perte de paquets, temps 3004ms rtt min/avg/max/mdev = 18.209/ 22 901/30,267/4,715 ms

Configurer une IP statique

Pour pouvoir vous connecter de manière cohérente à votre robot en utilisant la même adresse sur votre réseau, vous devrez configurer une adresse IP statique.

Obtenez votre adresse réseau actuelle, par exemple 192.168.1.18

J'utilise l'adresse qui a été automatiquement attribuée par DHCP lorsque le Pi s'est connecté à mon réseau. Vous pouvez changer cela à votre guise tant qu'il correspond à votre réseau et n'entre pas en conflit avec d'autres adresses attribuées.

Ouvrez dhcp.conf dans un éditeur de texte. (j'utilise nano)

pi@raspberrypi:~ $ sudo nano /etc/dhcpcd.conf

Faites défiler jusqu'à #Exemple de configuration IP statique et modifiez les lignes suivantes.

#interface eth0

#static ip_address=192.168.11.13 #static routers=192.168.11.1 #static domain_name_servers=192.168.11.1 8.8.8.8

Modifiez pour correspondre à votre réseau et supprimez le # au début de chaque ligne.

Exemple:

interface wlan0

static ip_address=192.168.1.18 static routers=192.168.1.1 static domain_name_servers=192.168.1.1 8.8.8.8

Sauvegarder et quitter.

Redémarrez et connectez-vous au Pi via SSH

pi@raspberrypi:~ $ sudo reboot

Connectez-vous à partir d'un autre ordinateur en utilisant SSH. Les utilisateurs de Windows peuvent utiliser PuTTY ou le sous-système Windows pour Linux (Windows10).

ian@ordinateur:~$ ssh [email protected]

Entrez votre mot de passe (le mot de passe par défaut est framboise).

Mot de passe de [email protected]:

Vous devriez maintenant être à l'invite de commande de votre Pi.

pi@raspberrypi:~$

Étape 2: Installer et configurer Motion

Installer et configurer Motion
Installer et configurer Motion

Motion est un programme utilisé dans de nombreux projets de caméras de sécurité / webcams. Motion a beaucoup de fonctionnalités. Cependant, nous le configurons pour simplement diffuser la vidéo de la webcam vers le port 8081.

Testez votre webcam

Branchez votre webcam et répertoriez les périphériques USB connectés (vous devrez peut-être redémarrer après la connexion).

pi@raspberrypi:~ $ lsusb

Vous devriez obtenir une sortie similaire à celle-ci. Notez le Logitech C210.

Bus 001 Périphérique 002: ID 046d:0819 Logitech, Inc. Webcam C210

Bus 001 Périphérique 001: ID 1d6b:0002 Concentrateur racine Linux Foundation 2.0

Si votre appareil photo ne s'affiche pas, il se peut qu'il ne soit pas compatible ou que vous deviez installer des pilotes supplémentaires.

Installer Motion

Mettre à jour les packages.

pi@raspberrypi:~ $ sudo apt-get update

Installez Motion.

pi@raspberrypi:~ $ sudo apt-get install motion -y

Une fois Motion installé, modifiez le fichier de configuration.

pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf

Modifiez les lignes suivantes pour qu'elles correspondent ci-dessous.

démon sur

largeur 640 hauteur 480 framerate 100 output_pictures désactivé ffmpeg_output_movies désactivé text_right stream_port 8081 stream_quality 100 stream_localhost désactivé webcontrol_localhost désactivé

Démarrer le démon de mouvement au démarrage

Ouvrez le fichier /etc/default/motion.

pi@raspberrypi:~ $ sudo nano /etc/default/motion

Changer pour

start_motion_daemon=oui

Enregistrez le fichier et quittez

Redémarrer

pi@raspberrypi:~ $ sudo reboot

Une fois que le Pi a redémarré, ouvrez le navigateur et vérifiez que vous avez la vidéo en streaming dans le navigateur sur le port 8081

Exemple:

192.168.1.18:8081

Dépannage du démon de mouvement

J'ai rencontré des problèmes pour démarrer le démon de mouvement au démarrage alors que j'essayais différentes options dans le fichier motion.conf.

Si vous démarrez le mouvement avant le démon de mouvement dans Raspian Stretch, vous rencontrerez probablement des problèmes pour le faire démarrer au démarrage plus tard. L'exécution de "sudo motion" sans configurer le démon pour le faire crée d'abord le répertoire /var/log/motion sans accorder d'autorisation d'écriture à l'utilisateur.

Étape 3: Installer Apache et configurer la page de contrôle Web

Installer Apache et configurer la page de contrôle Web
Installer Apache et configurer la page de contrôle Web

Apache est le serveur Web de la page Web de contrôle du robot. Nous allons remplacer le fichier Apache index.html par défaut par un fichier téléchargé depuis github. Vous allez également modifier quelques lignes de code pour afficher le flux vidéo en mouvement et attribuer où envoyer les commandes pour contrôler le robot.

Installer Apache et Git

pi@raspberrypi:~ $ sudo apt-get install apache2 git -y

Une fois apache et git installés, téléchargez les fichiers.

pi@raspberrypi:~ $ git clone

Ouvrez le répertoire roombarobot.

pi@raspberrypi:~ $ cd roombarobot

Remplacez le fichier index.html dans le dossier /var/www/html par le fichier index.html dans le /home/pi/roombarobot

pi@raspberrypi:~/roombarobot $ sudo cp index.html /var/www/html

Modifier le fichier index.html

Ouvrez le fichier index.html avec un éditeur de texte.

pi@raspberrypi:~/roombarobot $ sudo nano /var/www/html/index.html

Repérez ces deux lignes

var hôte = "ws://YOURIPADDRESS:9093/ws";

Remplacez « YOURIPADDRESS » par l'adresse IP statique que vous avez configurée à l'étape 1 et enregistrez le fichier.

Exemple:

var hôte = "ws://192.168.1.18:9093/ws";

Sur un autre ordinateur, ouvrez un navigateur et entrez l'adresse IP de votre Pi. Vous devriez voir la page Web de contrôle avec une boîte sur la gauche, la vidéo en streaming depuis votre webcam et les boutons de contrôle Web sur la droite.

Étape 4: Configurer et tester le code

Configurer et tester le code
Configurer et tester le code

Ce code est écrit en python et nécessite la bibliothèque tornado. Le code utilise la bibliothèque pour configurer un serveur pour écouter les commandes de la page Web de contrôle via des Websockets sur le port 9093.

Installer PIP et la bibliothèque Tornado

Installer le pépin

pi@raspberrypi:~ $ sudo apt-get install python-pip

Installer la bibliothèque de tornades

pi@raspberrypi:~ $ sudo pip install tornado

Démarrez le programme Roombabot et testez la connexion

Démarrez le programme roombabot.py

pi@raspberrypi:~$ sudo python /home/pi/roombarobot/roombabot.py

Une fois exécuté, vous devriez voir "Prêt" dans le terminal. Ouvrez la page Web de contrôle dans un navigateur et cliquez sur se connecter. Cliquez ensuite sur l'un des boutons directionnels de la page. Vous pouvez également utiliser les touches fléchées de votre clavier.

Vous devriez voir une sortie similaire à celle-ci dans le terminal.

Prêt

connexion ouverte… connexion ouverte… reçue: u 8 Running Forward connexion ouverte… reçue: l 6 Tourner à gauche connexion ouverte… reçue: d 2 Running Reverse connexion ouverte… reçue: r 4 Tourner à droite

Appuyez sur ctrl+c pour arrêter le programme.

Une fois que vous avez terminé de tester l'alimentation du Pi.

pi@raspberrypi:~$ sudo poweroff

Bugs

J'ai remarqué un problème avec le bouton d'arrêt sur la page Web de contrôle. Parfois, le bouton d'arrêt ne fait rien lorsqu'il est cliqué ou touché. Je n'ai pas réussi à comprendre ce qui cause cela, mais il existe une solution de contournement. Si vous souhaitez éteindre le robot et que le bouton d'arrêt ne fonctionne pas, rechargez la page, cliquez/appuyez sur le bouton de connexion, puis cliquez/appuyez sur le bouton d'arrêt. Il devrait s'éteindre.

Étape 5: Assemblage

Assemblée
Assemblée
Assemblée
Assemblée
Assemblée
Assemblée
Assemblée
Assemblée

Comme mentionné précédemment, vous n'êtes pas obligé d'utiliser un Roomba pour ce projet. N'importe quoi avec deux moteurs, deux roues et un cadre fonctionnerait. J'ai démonté le Roomba et tout enlevé sauf les modules de roues et la batterie.

Modules de roue

Les roues et les moteurs du Roomba sont logés ensemble dans un module amovible. Chaque module a un boîtier extérieur bleu contenant le moteur, la boîte de vitesses, la roue, le ressort de suspension et la carte d'interface.

Tableau d'interface

Chaque carte d'interface est reliée à six fils. Il y a deux fils (rouge [+], noir [-]) qui font tourner le moteur, un fil de données pour un capteur à effet Hall, un fil pour le commutateur de chute de roue, un fil 5V et un fil GND pour alimenter le capteur. Vous devrez démonter le module pour accéder à la carte d'interface. J'ai tout retiré au moteur et soudé de nouveaux fils [+] et [-] au moteur (voir photos). C'est à vous de décider si vous souhaitez conserver les capteurs ou non.

Ressorts de suspension

Une fois que vous avez retiré la partie sous vide, le poids du Roomba est rejeté. Si vous ne retirez pas les ressorts, le Roomba sera incliné. À l'origine, je les ai supprimés, mais je les ai ensuite rajoutés lorsque j'ai découvert qu'il avait du mal à rouler sur le tapis. Remettre le ressort a résolu le problème.

Câblage des moteurs au contrôleur de moteur

Les moteurs sont tournés l'un vers l'autre. Cela signifie que pour faire avancer le Roomba, un moteur devra tourner vers l'avant tandis que l'autre tourne vers l'arrière. Je n'y ai pas beaucoup réfléchi jusqu'à ce que j'aie tout câblé. J'ai fini par écrire le code sur la façon dont j'ai initialement câblé les moteurs. Ce fut un heureux accident car chaque fois que le Raspberry Pi s'allume/s'éteint, il y a une tension de sortie vers les broches GPIO. La façon dont j'ai câblé les choses, le Roomba tourne jusqu'à ce que le Raspberry Pi ait démarré (environ trente secondes) et tourne lors de l'arrêt jusqu'à ce que l'alimentation soit coupée. S'il était câblé différemment, il pourrait potentiellement rouler en avant / en arrière, ce qui serait irritant. Je prévois éventuellement de résoudre ce problème avec un simple interrupteur pour le contrôleur de moteur.

Câblage des moteurs et de la batterie au contrôleur de moteur

Alimentation- - - - - - - - - - - - - - - - 12V [+]- - - - - - - - - - - - -Batterie Roomba [+]

Moteur 2- - - - - - - - - - - - - - - Noir- - - - - - - - - - - - - -Moteur gauche [-] Moteur 2- - - - - - - - - - - - - - - Rouge- - - - - - - - - - - - - - -Moteur gauche [+] Moteur 1- - - - - - - - - - - - - - - Noir- - - - - - - - - - - - - -Moteur droit[-] Moteur 1- - - - - - - - - - - - - - - Rouge- - - - - - - - - - - - - - -Moteur droit[+] GND- - - - - - - - - - - - - - - - - 12V [-]- - - - - - - - - - - - -Batterie Roomba [-]

Câblage du contrôleur de moteur au Raspberry Pi

Broches du contrôleur de moteur Couleur du fil (voir photos) Broches Raspberry Pi

GND- - - - - - - - - - - - - - - - - Noir- - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - Bleu - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - - Vert- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Jaune - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Orange - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - - Rouge- - - - - - - - - - - - - - -5V

Montage de l'électronique

Il n'y a pas grand chose à faire pour tout assembler. J'ai démonté le roomba de son châssis. Une fois le couvercle retiré, vous pouvez facilement couper les entretoises en plastique existantes et percer des trous pour monter l'électronique. Il existe des ports existants pour faire passer les câbles des moteurs. Si vous utilisez la batterie Roomba d'origine, il y a déjà une découpe pour accéder aux bornes de la batterie.

Piles

J'ai utilisé des batteries séparées pour le Raspberry Pi et le contrôleur de moteur. La batterie du Pi n'est qu'une batterie 5V utilisée pour booster les téléphones portables. Pour le contrôleur de moteur, j'ai utilisé la batterie Roomba d'origine qui l'accompagnait. Les bornes de la batterie ne sont pas étiquetées, il est donc préférable de vérifier la tension avec un voltmètre avant de la câbler au contrôleur de moteur. Pour attacher les fils à la batterie du Roomba, j'ai utilisé quatre aimants néodyme (voir photos). J'ai soudé deux des aimants aux fils et les deux autres j'ai collé aux bornes de la batterie. La soudure démagnétise les aimants. Cependant, le revêtement extérieur peut toujours se fixer aux aimants des bornes et conduire l'électricité. Cela rend la connexion et la déconnexion de la batterie un jeu d'enfant.

Essai

Une fois que vous avez tout assemblé, vérifiez que tout est correctement câblé, placez votre robot sur quelque chose (afin qu'il ne roule pas) et allumez-le.

Connectez-vous et démarrez le programme roombabot.py

pi@raspberrypi:~$ sudo python /home/pi/roombarobot/roombabot.py

Accédez à la page de contrôle Web et testez-le. Si tout est câblé correctement, les roues doivent tourner dans le sens correspondant lorsque les boutons sont cliqués / les touches fléchées sont enfoncées (n'oubliez pas de cliquer sur connecter).

Étape 6: démarrer le code Python au démarrage / terminer

Démarrer le code Python au démarrage / Terminer
Démarrer le code Python au démarrage / Terminer
Démarrer le code Python au démarrage / Terminer
Démarrer le code Python au démarrage / Terminer

La dernière chose que nous devons faire est de dire à Raspbian de démarrer le programme python au démarrage. Pour ce faire, nous allons créer un script et le programmer pour qu'il s'exécute au redémarrage à l'aide de crontab.

Créer le scénario

Créez un nouveau fichier de script appelé startrobot.sh dans le répertoire utilisateur pi

pi@raspberrypi:~ $ sudo nano startrobot.sh

Copiez les lignes suivantes dans le fichier

#!/bin/sh

#startrobot.sh cd / cd /home/pi/roombarobot sudo python roombabot.py cd /

Enregistrez le fichier et quittez

Rendre le fichier startrobot.sh exécutable

pi@raspberrypi:~$ sudo chmod 755 startrobot.sh

Testez-le (appuyez sur ctrl + c pour arrêter)

pi@raspberrypi:~$ sh startrobot.sh

Modifier le fichier crontab

pi@raspberrypi:~$ sudo crontab -e

Ajoutez la ligne suivante en bas du fichier

# commande m h dom mon dow

@reboot sh /home/pi/startrobot.sh

Sauvegarder et quitter

Le programme roombabot.py devrait maintenant démarrer lorsque le Pi est redémarré ou éteint.

Finir

À ce stade, vous devriez avoir un robot fonctionnel que vous pouvez contrôler à l'aide du navigateur à partir de n'importe quel appareil de votre réseau. J'ai poussé cela un peu plus loin depuis la construction d'origine et j'ai configuré un VPN pour pouvoir accéder au robot lorsque je suis loin de chez moi. J'ai l'intention d'apporter quelques modifications supplémentaires à l'avenir. J'envisage de le rendre autonome et éventuellement de suivre les mouvements tout en pouvant reprendre les commandes quand je le souhaite.

Conseillé: