Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Robot de surveillance Roomberry :Roomba + Pi Zero + Caméra

Roomberry est un robot de surveillance basé sur Roomba utilisant un Raspberry Pi Zero W et un module de caméra. Il y a des années, j'ai commencé à faire des tests pour contrôler un Roomba à distance à l'aide d'un Arduino One avec un module RN-VX WiFly.

 Le mois dernier, j'ai décidé de relancer l'idée mais avec un nouvel objectif :transformer le Roomba en un robot de surveillance capable de prendre des photos et des vidéos. La première idée était de continuer à utiliser l'Arduino comme microcontrôleur en utilisant un module Arducam pour capturer des images. Cependant j'ai vite trouvé que la capacité de traitement d'image d'Arduino était trop limitée pour mes intérêts. La deuxième option était de changer de plateforme et d'utiliser un Raspberry Pi Zero W avec un module caméra. Cette alternative impliquait des défis, notamment en ce qui concerne l'alimentation, mais offrait également plus de possibilités. Dans cet article, je vais expliquer comment construire Roomberry, un robot de surveillance basé sur Roomba utilisant un Raspberry Pi Zero W et un module de caméra.

Une démonstration des capacités de Roomberry et de l'interface Web développé pour interagir avec lui peut être vu dans la vidéo suivante.

iRobot Roomba

Le Roomba d'iRobot offre une interface ouverte (OI) pour interagir avec le robot via un connecteur mini DIN. L'OI est une interface logicielle conçue pour Roomba Creator 2 (une adaptation de la série 600). Cependant, il est également entièrement compatible avec les séries 500 et 700. Il existe néanmoins quelques bugs selon la plateforme et la version du firmware utilisé. L'interface du logiciel vous permet de manipuler le comportement de Roomba et de lire ses capteurs. Une description complète de ses capacités est disponible dans ce document.

Mini connecteur DIN

Le connecteur mini DIN du Roomba est situé sur le côté avant droit du Roomba série 700 et possède 7 broches. Sa position varie légèrement dans la série 600, dont l'emplacement se situe à l'arrière droit du Roomba, sous une protection en plastique déclipsable. Mini DIN 7 les connecteurs mâles sont compliqués à acheter, cependant le plus courant mini connecteur mâle DIN 8 broches est également compatible.

Pour assurer une connexion/déconnexion fluide et fiable du port, j'ai soudé un câble à 5 broches (conçu pour les bandes de LED) avec un connecteur femelle à un connecteur mâle mini DIN 8 broches à l'aide des broches 1-2 (alimentation), 6-7 (terre), 3 (RxD), 4 (TxD) et 5 (BRC). Cependant, comme commenté plus tard, la connexion alimentation/terre n'était finalement pas nécessaire. Le câble résultant peut être vu dans les images suivantes.


Port série Roomba

Pour utiliser l'OI, les commandes doit être envoyé via une communication série bidirectionnelle créé en mini DIN 7 broches 3 (RxD) et 4 (TxD). Ce port UART fonctionne aux niveaux TTL (0 à 5 V). Cette tension convient parfaitement aux microcontrôleurs utilisant une logique 5V, comme la plupart des cartes Arduino. Cependant, ce n'est pas bon pour ceux qui ont des niveaux logiques de tension plus bas (comme le Raspberry Pi).

En théorie, la broche 3 (RxD) prendra 3,3 V comme niveau logique élevé. Mais le Roomba sortira 5V sur sa broche 4 (TxD), ce qui pourrait endommager le Raspberry Pi Zero. Pour protéger le matériel, un décaleur de niveau logique Devrait être utilisé. Le moyen le plus simple de le faire est d'utiliser un diviseur de résistance, comme déjà mis en œuvre dans mon projet précédent Calduino, mais cela peut ne pas fonctionner à haute vitesse (le port série de Roomba fonctionne à 115 200 bauds).

Au lieu de cela, un levier de niveau actif est préférable. Si vous souhaitez créer votre propre circuit, utilisez le transistor à effet de champ AN10441 comme expliqué ici. Une option beaucoup plus simple consiste à utiliser l'un des convertisseurs de niveau logique bidirectionnels existants tels que celui-ci d'Adafruit. Cet appareil peut gérer jusqu'à 4 signaux et les réduire en toute sécurité de 5V à 3,3V. En même temps, les signaux passent de 3,3 V à 5 V.

Alimentation du Raspberry Pi depuis Roomba

Il existe quelques alternatives pour fournir une alimentation via la batterie du Roomba :

Alimentation à partir du Mini DIN 7

Le mini DIN 7 fournit une connexion directe non régulée dans les broches 1/2 (Vcc) - 6/7 (Gnd) à la batterie du Roomba. La connexion est limitée à 200 mA via un fusible réarmable PTC . Il offre une tension comprise entre 20,5 et 10V, limitée à 0,2A avec une puissance de 2W. Le tirage continu de ces deux broches ensemble ne doit pas dépasser 200 mA. Le dessin d'un pic supérieur à 500 mA réinitialisera le fusible.

Un Raspberry Pi Zero W devrait pouvoir fonctionner avec cette alimentation. La Fondation Raspberry Pi évalue la consommation de courant active typique d'une carte nue à 150 mA. Ce benchmark le situe entre 120 mA en inactif statut et 180 MAsous stress (lecture de vidéo FullHD, par exemple). Cependant, ici, la consommation supplémentaire de l'appareil photo n'est pas prise en compte. D'après mes mesures, la caméra (j'utilise celle-ci, avec le même capteur que la caméra Pi officielle version 1) augmente la consommation électrique à plus de 300 mA, avec des pics de 450 mA. Lors de mon test, le fusible s'est déclenché plusieurs fois lors de l'enregistrement de vidéos.

En conclusion, le thermofusible existant rejette l'utilisation de cette connexion pour alimenter le Raspberry Pi Zero W. Je n'ai pas pu savoir s'il est possible et sûr de retirer le fusible de la carte sans endommager les autres composants.

Alimentation à partir d'une banque d'alimentation externe

Il existe quelques alternatives pour éviter cette limite de fusible. D'une part, la solution la plus simple serait d'utiliser une banque d'alimentation pour fournir une alimentation externe au Raspberry Pi Zero. Cependant, il faudra que l'utilisateur le charge périodiquement. Une autre option serait de concevoir une connexion série entre l'alimentation mini DIN 7 et la banque d'alimentation. Avec quelques composants électroniques, il devrait être possible d'utiliser la batterie Roomba pour charger la banque d'alimentation. Pour simplifier ma conception, j'ai décidé d'éviter l'utilisation de sources d'alimentation supplémentaires.

Alimentation à partir de la batterie

J'ai finalement décidé de contourner le fusible en créant une connexion directe  aubatterie . La contrepartie de cette option est que vous devrez démonter partiellement le robot . Dans le Roomba série 600, il y a deux gros pads directement connectés à la batterie sous le bouton de la station d'accueil. Dans le Roomba série 700/800, vous devrez démonter quelques composants supplémentaires. Regardez la vidéo suivante jusqu'à la minute 6 pour voir, étape par étape, comment accéder à la carte mère de votre robot . Une fois cela fait, soudez simplement quelques câbles au bloc de batterie comme indiqué sur les images suivantes.


Ces câbles fourniront une connexion directe à la batterie non limitée par un fusible. Ils fournissent entre 20,5 et 10V, selon le niveau de charge de la batterie. Cependant, le Raspberry Pi Zero W a besoin d'une source d'alimentation régulée de 5 V. Pour réduire la tension, une baisse est utilisé. Il existe de nombreuses options pour ce faire, allant de l'utilisation d'un régulateur linéaire bon marché (comme le 7805 TO-220) avec quelques condensateurs pour installer un régulateur à découpage .

En raison de son efficacité plus élevée , et étant donné qu'il sera toujours connecté, je conseillerais d'utiliser/acheter un bonne qualité (éviter les imitations chinoises) régulateur à découpage abaisseur . J'ai utilisé un régulateur buck Pololu D24V5F5 qui prend une entrée jusqu'à 36 V et la réduit à 5 V pour un courant de sortie maximal de 500 mA. Son efficacité est évaluée entre 85 % et 90 % et a un très faible décrochage. Vous pouvez également utiliser un UBEC (Universal Battery Elimination Circuit), tel que celui couramment utilisé dans le monde RC. J'ai placé mon régulateur de tension dans un espace libre situé au centre – côté droit du robot.

Les connexions étaient correctement protégées avec du thermorétractable et le module D24V5F5 était recouvert de plastique isolant (je n'ai pas pris de photos de cela). J'ai soudé la sortie du module à un câble micro-USB, ce qui me permet de le connecter directement à l'entrée d'alimentation Raspberry Pi Zero W.


À l'aide d'un outil de perçage rotatif et de papier de verre, j'ai créé une petite encoche dans le couvercle supérieur du Roomba pour permettre une sortie propre du câble micro USB comme on peut le voir sur l'image suivante.

Modes OI du Roomba

Le Roomba OI dispose de quatre modes de fonctionnement :Arrêt, Passif, Sûr et Plein.

Mode désactivé :Après un changement de pile ou lors de la première mise sous tension, l'OI est en mode arrêt. Dans cet état, le Roomba écoute le port à la vitesse de transmission par défaut (115200) en attendant la commande anstart. Les commandes de réinitialisation et d'arrêt peuvent être envoyées à tout moment et désactiveront également OI.

Mode passif : Une fois qu'une commande de démarrage est envoyée, Roomba passe en mode passif . Dans cet état, vous pouvez demander et recevoir des données de capteur à l'aide de l'une des commandes de capteur. Cependant, vous ne pouvez pas modifier les paramètres de commande en cours pour les actionneurs (moteurs, haut-parleur, lumières, drivers low side, sorties numériques). Roomba entrera en mode passif aussi si l'une des commandes du mode de nettoyage (Spot, Clean, Seek Dock, etc.) est envoyée.

En mode passif, Roomba passe en mode éteint après cinq minutes d'inactivité pour économiser l'énergie et préserver la batterie. Selon la documentation d'iRobot, la veille peut être désactivée en mettant périodiquement la broche BRC au niveau bas avant l'expiration de ces cinq minutes. Chaque impulsion doit réinitialiser ce compteur de cinq minutes. Dans les tests que j'ai effectués (avec un Roomba 780), tirer bas le BRC ne fera que réveiller le robot, mais cela ne l'empêchera pas de passer en mode économie d'énergie. Le robot émet un bip lorsqu'il se réveille (s'il n'est pas chargé dans la station d'accueil).

Mode sans échec  :Roomba entrera en mode sans échec si la commande Safe est envoyée. Le mode sans échec vous donne un contrôle total du robot et éteint tous les moteurs et LED. Cependant, si une condition liée à la sécurité n'est pas remplie, le robot passe automatiquement en mode passif . Ces conditions de sécurité sont :détection d'une falaise en avançant, chute de roue et branchement du chargeur. Dans ce mode, Roomba ne se chargera pas (bien qu'étant sur la station d'accueil) et n'économisera pas d'énergie en passant en mode arrêt après 5 minutes d'inactivité. Ce point est très important :vous pouvez finir par vider la batterie du robot et l'endommager si vous ne passez pas en mode passif ou éteint.

Mode complet  :lorsque vous envoyez une commande complète à l'OI, Roomba passe en mode complet . Le robot se comportera exactement comme en mode sans échec, mais il ne tiendra pas compte des conditions de sécurité précédemment commentées, alors soyez conscient des risques !

Précautions concernant la batterie :Comme commenté, en mode Passif, Roomba se mettra en veille après 5 minutes d'inactivité pour préserver l'autonomie de la batterie. En modes sûr et complet, Roomba ne dormira jamais, et s'il reste dans cet état pendant une période prolongée, il déchargera profondément sa batterie, même s'il est branché sur le chargeur. Le chargeur alimentera Roomba dans tous les modes, mais il ne chargera pas la batterie en mode sans échec ou complet. Il est important de remettre le Roomba en mode passif ou éteint une fois le travail terminé et/ou lorsque le niveau de la batterie est faible afin de le protéger.

Raspberry Pi Zero W

Le Raspberry Pi Zero W est une version mise à jour du Raspberry Pi Zero avec LAN sans fil et Bluetooth . Le modèle comprend un processeur monocœur de 1 GHz, 512 Mo de RAM, un mini-HDMI, un port micro-USB OTG, un micro-USB pour l'alimentation, un en-tête à 40 broches, une vidéo composite, des en-têtes de réinitialisation, un connecteur de caméra, ainsi que les nouvelles fonctionnalités sans fil. Il utilise la puce sans fil Cypress CYW43438 qui prend en charge le Wi-Fi 802.11b/g/n (2,4 GHz uniquement) et Bluetooth 4.0 (même puce que le Raspberry Pi 3 modèle B). Je l'ai acheté à Pimoroni avec des en-têtes (non soudés) et des adaptateurs pour 16 €.

Caméra

Le connecteur de la caméra Raspberry Pi Zero W CSI est plus petit que celui du Pi 3. Si vous possédez déjà un appareil photo, vous devrez acheter un adaptateur pour l'utiliser. Sinon, je recommanderais d'acheter ce module de caméra, qui intègre un capteur 5MP (identique à la caméra Pi officielle de la version 1) et peut enregistrer des vidéos en 1080p. Il coûte 18€. J'ai choisi la caméra grand angle avec coupe IR. Je sais que je ne pourrai rien voir la nuit mais l'utilisation de LED IR augmentera la consommation d'énergie, que je voulais maintenir basse. Vous pouvez toujours utiliser les lampes Philips HUE pour contrôler à distance l'éclairage de votre maison.

Alimentation du Raspberry Pi Zero W

Il y a quelques considérations à prendre en compte concernant l'alimentation du Pi Zero. Tout d'abord, et contrairement aux modèles plus gros, le Pi Zero n'a pas de régulation ni de fusible pour le protéger des surtensions ou des pointes de courant. Cela signifie que vous devez fournir une source d'alimentation stable avec 5 V. La source d'alimentation peut être connectée au micro-USB du côté droit (Pwr In) ou à la broche 5V sur l'en-tête GPIO. Les deux sont la même ligne. Assurez-vous que si une tension incorrecte est appliquée ou qu'une pointe de courant se produit dans la ligne, vous allez probablement endommager votre Raspberry Pi de façon permanente .

Comme cela a déjà été commenté, des pics de consommation de 400 mA avec la caméra connectée ont été mesurés lors de tests de résistance. La Fondation Raspberry Pi recommande une alimentation d'au moins 1,2 A. Cependant, les 0,5 A fournis par le régulateur buck m'ont suffi. Jusqu'à présent, je n'ai trouvé aucun problème lié à l'alimentation.

Réduction de la consommation électrique

Considérant que le Raspberry fonctionnera sur la batterie du Roomba, il sera intéressant de réduire la consommation d'énergie  autant que possible. Par exemple, sachant que le Pi Zero fonctionnera sans tête (sans moniteur connecté) et ne sera accessible que via SSH, il n'est pas nécessaire d'alimenter les circuits d'affichage. La désactivation du port HDMI peut économiser jusqu'à 25 mA. Pour ce faire, exécutez simplement /usr/bin/tvservice -o (ou avec -p pour réactiver). J'ai placé un court script dans /etc/rc.local qui vérifie si le câble HDMI est connecté ou non et désactive le port HDMI en conséquence.

# Obtenez le type de sortie vidéo actuel et supprimez les bits sans importance
video="$(tvservice -s | sed "s/^.*\[\([^ ]*\) .*$/\1/ ” )“

if [ "$vidéo" !="HDMI" ]; then
printf « HDMI non détecté. Mise hors tension.\n"
tvservice -off> /dev/null
else
printf "HDMI détecté.\n"
fi

Un autre moyen de réduire la consommation électrique consiste à désactiver les LED du Pi. Le Raspberry Pi Zero n'en a qu'un, la LED d'activité, qui clignote à chaque accès à la carte SD. Sa consommation est d'environ 5 mA. Pour le désactiver totalement, ajoutez ces lignes dans votre fichier /etc/rc.local :

# Réglez le déclencheur de la LED Pi Zero ACT sur « none »
echo none | sudo tee /sys/class/leds/led0/trigger

# Éteignez la LED Pi Zero ACT
echo 1 | sudo tee /sys/class/leds/led0/brightness

Vous pouvez également le faire en modifiant le fichier /etc/config.txt :

# Désactiver la LED ACT sur le Pi Zero

dtparam=act_led_trigger=none
dtparam=act_led_activelow=on

Je ne sais pas si cela se traduira par une réelle réduction de consommation, mais comme il ne sera pas utilisé, vous pouvez désactiver le module bluetooth du Pi Zero en ajoutant la ligne suivante à /etc/config .txt :

# Désactiver le bluetooth sur le Pi Zero

dtoverlay=pi3-disable-bt

Enfin, essayez de réduire le logiciel installé et exécuté dans le Pi Zero. Par exemple, utilisez Raspbian lite au lieu de la version de bureau et n'installez pas de logiciel supplémentaire, sauf si vous en avez vraiment besoin. Plus il y a de processus en cours d'exécution sur votre machine, plus sa consommation sera importante.

Autres considérations

Construire Roomberry

Une fois toutes les pièces décrites, voyons comment construire et exécuter Roomberry, votre interface Raspberry avec Roomba.

Mon objectif était d'encapsuler les composants (Raspberry Pi Zero, module caméra, convertisseur de niveau logique et bouton de commutation) dans un boîtier stable avec un accès facile à tous les ports et à la carte SD. La seule option que j'ai trouvée, à l'exception de l'impression de ma propre conception 3D, était celle-ci. Ce boîtier répond à toutes les exigences et me permet d'attacher un HAT (Hardware Attached on Top), une carte d'extension avec le couple de composants électroniques nécessaires. L'image suivante montre le schéma PCB. Notez que les broches Run sont situées dans le Pi Zero et non dans le HAT. Pour le construire, un morceau de carte PCB de 12 x 10 broches suffira. Pour couper le PCB, j'ai utilisé un outil rotatif.

Le convertisseur de niveau logique aura besoin à la fois de haute et de basse tension, qui peuvent être obtenues à partir du GPIO (le Pi Zero comprend un convertisseur abaisseur de 5 à 3,3 V nommé PAM2306AYPKE). J'ai placé le bouton de commutation au milieu du Pi Zero, car c'était une extension du HAT. Ce faisant, la tige du bouton fait ressortir le boîtier afin qu'il puisse être pressé de l'extérieur. Vous devrez percer quelques trous dans le boîtier :un pour le bouton vapeur et un autre (et plus grand) pour l'appareil photo. De plus, j'ai dû poncer soigneusement l'espace du boîtier conçu pour le connecteur CSI afin de faire de la place pour un tour de câble à 180 degrés. Les images suivantes montrent les résultats :


Configuration de Raspbian Stretch

Avant de connecter le Roomberry au connecteur mini DIN 7 du Roomba, quelques étapes de configuration doivent être effectuées. En supposant que le Raspberry Pi Zero W exécute la dernière version de Raspbian et qu'il soit déjà configuré sans tête.

Connectez l'alimentation micro USB construit antérieurement au Pi Zero. Après quelques secondes, le système devrait être opérationnel. Ouvrez une connexion SSH à votre pi Zero.

Par défaut, le port série du Pi est configuré pour être utilisé pour les entrées/sorties de la console . Pour communiquer avec Roomba via ce port, la connexion à la console série doit être désactivée. Vous pouvez le faire avec raspi-configchoosing menu 5 - Options d'interfaçage et P6 - Série. Répondez Non à la question « Voulez-vous vous connecter au shell pour qu'il soit accessible en série ? » et Oui à « Voulez-vous que le matériel du port série soit activé ?". Ne redémarrez pas encore le système. Vous pouvez également commenter la définition de la console et ajouter à la fin du fichier /boot/config la ligne suivante :

#Rechercher et commenter la définition de la console
#console=serial0,115200
...
enable_uart=1

Si vous ne l'avez pas encore fait, activez le module appareil photo . Encore une fois, vous pouvez le faire via raspi-config en choisissant le menu 5 et l'option P1. D'autre part, vous pouvez également éditer le fichier /boot/config et inclure ces modifications (la désactivation de la led de la caméra n'est pas obligatoire mais recommandée pour économiser de l'énergie) :

start_x=1
gpu_mem=128
disable_camera_led=1

Je ne sais pas quelle est la quantité optimale de RAM à attribuer en tant que gpu_memory lorsque le module de caméra est utilisé. Jusqu'à présent, je n'ai trouvé aucune erreur « Pas de ressources » lors de l'utilisation de l'appareil photo, je suppose donc que 128 Mo est un bon choix.

Désactiver tous les swap et montez le répertoire /tmp sur un disque RAM avec 50 Mo d'espace. Cet emplacement sera utilisé pour stocker des fichiers éphémères, tels que des clichés de caméra et des fichiers d'état de Roomba. Augmentez le temps de validation dans etc/fstab à 30 minutes et incluez l'option noatime dans la partition SD. Trouvez les commandes dans cet article.

Il est maintenant temps de tester si tout fonctionne correctement. Éteignez votre Pi et connectez le port série à Roomba. Placez le Roomba sur la station de chargement . Démarrez le système et vérifiez que tout fonctionne comme prévu (et que le robot ne fait rien d'étrange).

Test de lecture depuis le port série :J'ai utilisé minicom pour lire les données envoyées par Roomba. Pour l'installer, tapez simplement :

sudo apt-get minicom

Connectez-vous au port série de Roomba en faisant :

minicom –b 115200 -o -D /dev/serial0

Si votre Roomba est en charge, vous devriez voir un texte similaire à l'image suivante indiquant l'état de charge du Roomba chaque seconde. Appuyez sur CTRL + A et X pour quitter la minicom.

Read More Detail  :Roomberry Surveillance Robot:Roomba + Pi Zero + Camera


Processus de fabrication

  1. Comment créer une plate-forme robotique Arduino+Raspberry Pi
  2. Lecteur de livres BrickPi
  3. Robot boîtier CD Raspberry Pi
  4. Robot d'alarme roulante
  5. Créer un robot Minecraft Creeper
  6. Archimedes :The AI ​​Robot Owl
  7. Robot de surveillance Roomberry :Roomba + Pi Zero + Caméra
  8. Open CV Robot
  9. Robot ROS