Robot2bras Codes

_images/lg.jpg _images/robot_2bras.png
Auteur

Gilles Lecorsier

Blog

La technologie dans tous ses états 1

Association

BricoLab Groslay(95)

Entity

VoRoBoTics 2

Page principale

Readme 3

Création

05/2023

Maj

03/08/2024

Présentation

_images/bras.JPG

Bras Manipulateur Original (base de départ de l’étude)

Voir wiki Vorobotics Bras manipulateur 4

_images/appli_robot.jpg

et le projet Arduino - Control Arm Robot via Web 5 sur Hackster.io.

L’appli web (PHPoc) parle en angles moteur, l’appli Android bras robot parle en switch je tourne/j’arrête

Idée : possibilité d’adaptation pour rendre le code Arduino de départ compatible d’un pilotage avec des angles.

Adaptation du code Arduino

Notre décision : on repart du code Arduino (bras_manip_rot_control_bluetooth.ino) et on essaie de le rendre compatible de la version web PHPoc.

Répertoire de travail

robot_2bras\robot2brascodes\bras_manip_etincel_control_bluetooth\bras_manip_etincel_control_bluetooth.ino

Etape 1 : regroupement des fonctions du mode APP-INVENTOR

On sépare les fichiers cpp en web d’une part et app inventor d’autre part

Dépendances

Utilisation de la bibliothèque SoftwareSerial version 1.0
Utilisation de la bibliothèque Wire version
Utilisation de la bibliothèque Adafruit_PWM_Servo_Driver_Library version 2.4.1

Test du mode APP_INVENTOR

Mise en place du bluetooth 6

Le serveur doit être déconnecté (Bluetooth) de l’Arduino.

Etape 2 : mode WEB

Le serveur doit être connecté (Bluetooth) à l’Arduino. Passage en mode WEB, rappel nous avons ajouté @ en début de trame web voir dans serveur

La fonction appInventorInterface retourne WEB quand elle reçoit un 64d (code ASCII de @)

Mise enplace du Bluetooth

_images/mega2560.jpg _images/bluetooth.jpg
  • Connexion bluetooth entre le serveur et le bras en liaison softserial (FTDI) cf. Bibliothèque Serial 8 et entre le smatphone et le bras.

Les différents modules Bluetooth utilisés

puce BC417 puce datasheet<fichiersJoints/CSR-BC417-datasheet.pdf> 9

BC352<fichiersJoints/BC352239A_CambridgeSiliconRadio.pdf> 10

Commande AT

L’objet de ce paragraphe est la configuration du module Bluetooth pour Arduino. Utilisation du code « robot2brascodesbtCommandeAt »

Mode AT des modules bluetooth HC05 11

Passage du module en Commande AT : débrancher la broche d’alimentation 3.3V du module bluetooth HC05. Rebrancher la broche 3.3V Tout en appuyant sur le bouton poussoir du module. La LED clignote alors lentement 2s. Les commandes AT répondent en 38400, suivant les modules les commandes doivent être en majuscule ou en minuscule

Le module que j’utilise attend des commandes en majuscule et accepte AT+ NAME

Envoie des commande AT:

+VERSION:2.0-20100601
+NAME:HC-05
+UART:9600,0,0
+ROLE:0
+PSWD:1234
Changement de nom: AT+NAME=Bras2023_HC05
+NAME:Bras2023_HC05
+CMOD:1
+BIND:98d3:31:300e42
+ADDR:98d3:32:31115a

A la mise sous tension la broche KEY ou EN doit être connectée au 3.3V (la LED clignote alors lentement 2s)

Conclusion

Même si la LED BT clignote rapidement, il n’est pas nécessaire de refaire l’appairage.

Il n’est pas nécessaire de se désappairer d’un appareil pour s’appairer avec un autre.

Quand tout va bien, appairé et connecté, la led émet 2 clignotements bref toutes les 2s environs.

Mode debug

Afin de faire les calage des valeurs des servo, nous nous sommes aperçus que nous avions besoin de commander finement le bras indépendamment de l’interface web.

Nous avons ajouté le mode debug qu’on peut activer en envoyant * sur la liaison serveur.

Ajout des fichier SerialCommand.h et .cpp

Vitesse de debug descendue à 9600 !

Commandes:

      <h> display this list in alphabetic order

<A> Passage en mode AppInventor
<D> Passage en mode debug
<E> display code status
<F> Find I2C device I2C scan
<M m a> Move motor m at angle a
<W> passage en mode WEB

Définition des différentes valeurs des servomoteurs du bras

_images/rep_mot.jpg
  • servo1 : Plateforme

    • valeur Initiale : 0

    • Valeur Maxi : 180

    • valeur Mini : 0

    • sens : 1

    • valeur de rangement : 60

  • servo2 : Epaule

    • valeur Initiale : 90

    • Valeur Maxi : 100

    • valeur Mini : 0

    • sens : 1

    • valeur de rangement : 15

  • servo3 : Coude

    • valeur Initiale : 80

    • Valeur Maxi : 180

    • valeur Mini : 0

    • sens : 1

    • valeur de rangement : 120

Mise au point web vs physique

La trame reçue en position de repos depuis l’interface WEB:

@90,90,180,180,90,17

Nous on a:

90,80,90,85,0,10

Passage à la classe Joint

Evaluation de l’impact

  • Fonction initialisation() propre au mode AppInventor

Avertissement

Quid du passage du mode AppInventor au mode WEB

(les varaibles du mode web ne sont alors pas initialisées avec la position courante des moteurs)

L’impact se limite au fichier fonctionsRobotWeb.cpp

Transformer 7 tableaux en 1 tableau de 7 instances de la classe Joint:

  • dest_angles[]

  • cur_angles[]

  • direction[]

  • angle_offset[]

  • angle_max[]

  • angle_min[]

  • angleSteps[]

Servo vitesse

Un exemple from Banggood: DSSERVO DS3225 25KG 180 degrés Engrenage en métal à couple élevé et étanche Servo numérique pour avions RC, robots et voitures - 1 pc 12

_images/servo25kgBanggood.JPG

Vitesse de fonctionnement (5.0V): 0.15 sec/60 degrés

sous 4.8VV 0.18s/60° soit pour 180° : 540ms 3ms/°

Communication Bluetooth et smartphone Android

Lorsqu’un bouton est enfoncé, un octet est envoyé à l’Arduino pour commander la rotation du servomoteur en question (h=horaire, ah=anti horaire).

Lorsqu’un bouton est relâché, un octet est envoyé à l’Arduino pour arrêter la rotation du servomoteur en question.

_images/ecranV2.png

Les commandes sont des octets (4 octets par moteur):

_images/commandes_appinventor.jpg
  • 6 et 60 coude rotation ah

  • 7 et 70 coude rotation h

  • 8 et 80 epaule rotation ah

  • 9 et 90 épaule rotation h

  • 12 et 120 plateforme rotation ah

  • 13 et 130 plateforme rotation h

Plus les 5 commandes spéciales :

  • 100 init

  • 200 rangement

  • 201 enregistrer la position

  • 202 lancement (des positions enregistrées)

  • 250 appui Ampoule

  • 251 relâche Ampoule

 //---Controle Servo plateforme (no 1) 130°---
valRotationPlate1 = POS_INIT_PLATEF;
pulseLen = map(valRotationPlate1, 0, 180, SERVOMIN, SERVOMAX);
pwm.setPWM(SERVOPLATEFORME, 0, pulseLen);
delay(DELAY);

L’appli web (PHPoc) parle en angles moteur, l’appli Android bras robot parle en switch je tourne/j’arrête