++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Robot2bras Codes ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. include:: volabid.rst :Création: 05/2023 :Maj: 03/08/2024 ==================================================================================================== Présentation ==================================================================================================== .. image:: images/bras.JPG :width: 100 px :align: right **Bras Manipulateur Original (base de départ de l'étude)** Voir `wiki Vorobotics Bras manipulateur`_ .. _`wiki Vorobotics Bras manipulateur` : https://www.vorobotics.com/wiki/index.php?title=Bras_manipulateur .. image:: images/appli_robot.jpg :width: 100 px :align: right et le projet `Arduino - Control Arm Robot via Web`_ sur Hackster.io. .. _`Arduino - Control Arm Robot via Web` : https://www.hackster.io/phpoc_man/arduino-control-arm-robot-via-web-379ef3 .. _refSoftserialConnexions: 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`_ .. _`Mise en place du bluetooth` : https://robotdeuxbras.bitbucket.io/Robot2bras_codes.html#mise-enplace-du-bluetooth 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 :ref:`voir dans serveur` La fonction appInventorInterface retourne WEB quand elle reçoit un 64d (code ASCII de @) Mise enplace du Bluetooth ---------------------------------------------------------------------------------------------------- .. image:: images/mega2560.jpg :width: 100 px :align: right - la carte du premier projet est remplacée par `la carte Arduino 2560`_ .. image:: images/bluetooth.jpg :width: 100 px :align: right - Connexion bluetooth entre le serveur et le bras en liaison softserial (FTDI) cf. `Bibliothèque Serial`_ et entre le smatphone et le bras. .. _`la carte Arduino 2560` : http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.MaterielMega2560 .. _`Bibliothèque Serial` : https://arduino.blaisepascal.fr/bibliotheque-serial/ **Les différents modules Bluetooth utilisés** `puce BC417 puce datasheet`_ .. _`puce BC417 puce datasheet` : https://cdn.sparkfun.com/datasheets/Wireless/Bluetooth/CSR-BC417-datasheet.pdf `BC352`_ .. _`BC352` : https://brasrobots2023.bitbucket.io/_downloads/501b6afeade32d87b3e193cd4586ac8b/BC352239A_CambridgeSiliconRadio.pdf **Commande AT** L'objet de ce paragraphe est la configuration du module Bluetooth pour Arduino. Utilisation du code "robot2brascodes\btCommandeAt" `Mode AT des modules bluetooth HC05`_ .. _`Mode AT des modules bluetooth HC05` : https://telefab.fr/documentation/lelectronique-au-telefab/mode-at-des-modules-bluetooth-hc05/ 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 ! .. index:: pair: I2C; Adresse Commandes:: display this list in alphabetic order Passage en mode AppInventor Passage en mode debug display code status Find I2C device I2C scan Move motor m at angle a passage en mode WEB .. _refValeursServoMoteurs: ==================================================================================================== Définition des différentes valeurs des servomoteurs du bras ==================================================================================================== .. image:: images/rep_mot.jpg :width: 330 px :align: right - **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 .. WARNING:: Quid du passage du mode AppInventor au mode WEB :class: without-title (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`_ .. _`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` : https://www.banggood.com/fr/DSSERVO-DS3225-25KG-180-Degree-Metal-Gear-High-Torque-Waterproof-Digital-Servo-For-RC-Airplane-Robot-Car-p-1353688.html?gmcCountry=FR¤cy=EUR&cur_warehouse=CN&createTmp=1&ID=6301958&ad_id= .. image:: images/servo25kgBanggood.JPG :width: 300 px 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. .. image:: images/ecranV2.png :width: 100 px :align: right Les commandes sont des octets (4 octets par moteur): .. image:: images/commandes_appinventor.jpg :width: 500 px :align: right - 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 ==================================================================================================== Weblinks ==================================================================================================== .. target-notes::