Aller au contenu


Kylzar

Inscrit(e) (le) 28 oct. 2019
Déconnecté Dernière activité juil. 24 2022 11:52
-----

#111227 Comportement Dynamixel AX-12

Posté par Kylzar - 22 septembre 2020 - 02:19

Bonjour,

J'essaie de faire fonctionner un moteur Dynamixel AX-12. Pour cela j'utilise la librairie <DynamixelSerial.h>. Démarrant par des consignes simples j'essaie simplement de faire aller le moteur d'une position à une autre à une vitesse contrôlée.

 

Voici le code que j'utilise :

 

Au début mon moteur se comporte normalement et fait bien des allers retours, cependant au bout d'un certain temps il se met à se "secouer" sans respecter aucun delay. Le moteur se "secoue" sur quelques degrés autour d'une position fixe ( et qui semble aléatoire car la position change à chaque fois que l'on OFF/ON).

 

Si quelqu'un a une idée à quoi cela peut être dût ? Je soupçonne le  Baudrate qui m'a également posé problèmes lors de mes tests précédents.

 

Merci d'avance !  




#107996 Test de 3 HC-12

Posté par Kylzar - 03 mars 2020 - 12:07

Bonjour à tous, l'objectif du jour est de pouvoir faire communiquer une carte Arduino Uno, Arduino Mega et Arduino Nano ensemble !

Petite contrainte supplémentaire : La carte Uno ne doit écrire qu'a la MEGA, la MEGA n'écrit qu'a la Nano, et enfin la Nano n'écrit qu'a la UNO ! 

cercle.PNG

1er étape : Cabler mes différents capteurs

 

Comme indiqué dans la fiche produit du capteur, je peux brancher mes capteurs HC-12 de manière classique pour la UNO et la NANO :

VCC : 3.3V | GND : GND  | RXD : 4 | TXD : 5 | SET : 6

  montage HC-12.PNG  IMG_20200303_111841.jpg

Note : J'utilise un shield sur la Nano qui n'est pas obligatoire

De même comme il est précisé dans le code du HC-12 pour l'Arduino Mega les Pins RXD et TXD sont imposées, on a donc :

VCC : 3.3V  | GND : GND | RXD : 46 | TXD : 48 

IMG_20200303_111904.jpg

 

2éme étape : Mise en place du code

 

Grâce aux codes fournis dans la fiche produit, je compile les codes avec la librairie "SoftWareSerial" pour l'Arduino Uno et Nano, et le code avec la librairie 

"AltSoftSerial" pour l'Arduino Mega.

Ainsi mes cartes communiquent entre elles : 

- 1 message envoyé depuis la UNO : reçu par la MEGA et la Nano

- 1 message envoyé depuis la MEGA : reçu par la UNO et la Nano

- 1 message envoyé depuis la Nano : reçu par la MEGA et la UNO

 

3éme étape : Communication deux à deux

 

Afin de s'adresser à un capteur HC-12 précis, il est possible de choisir un channel précis ! Pour ce faire il faut utiliser le mode AT.

Afin d'accéder à ce mode, il faut brancher "SET" sur la masse (GND) de vos Arduino.

Commandes existantes :

Vérification du mode : AT --> Renvoie OK (Permet de s'assurer que l'on se trouve dans le mode).

Afficher le Setup : AT+RX à Renvoie les paramètres

Choix du Baudrate : AT + B.... -->  Renvoie OK+B.... Exemple: Si je veux le BaudRate 9600 je commande : AT+B9600, le moniteur répondra OK+B9600.

Choix du Channel : AT+C... --> Renvoie OK+C... Je peux choisir un channel de 001 à 100.

Choix du Mode : OK+FU. --> Renvoie OK+FU. Je peux choisir le mode de 1 à 4 (Le mode de communication classique est le FU3)

Choix du Niveau de communication : OK+P. --> Renvoie OK+P. Choix du niveau ce qui influence la puissance de transmission lvlpuissance.PNG

 

Cas d'application : Si je laisse le channel par défault (1) sur l'Arduino MEGA, et place sur le Channel 2 (AT+C002) l'Arduino Uno et Nano : 

- 1 message envoyé par la MEGA : Reçu par aucune des cartes

- 1 message envoyé par la Nano : Reçu par la UNO uniquement

- 1 message envoué par la UNO : Reçu par la Nano uniquement

 

4éme étape : Atteindre notre objectif !

 

Maintenant que l'on sait communiquer à un channel précis, il reste à automatisé le changement de channel, afin de pouvoir recevoir un message sur un channel et l'envoyer sur un autre channel !

Si on résume les étapes pour changer de channel à partir du mode émission : il faut brancher le SET sur la masse, et envoyé la commande de changement de channel (AT+C...).

Pour ce faire, nous allons brancher le SET sur une Pin Digital que nous feront passer de l'état haut pour l'émission, à l'état bas pour le changement de mode ! Il ne nous restera qu'a écrire dans le Serial la commande souhaité. 

Établissons alors les channels des communications que nous allons utiliser : 

cercle channel.PNG

Et maintenant traduisons cela dans le code :

(Pour la Nano et la UNO)

(Pour la MEGA)

 

Fonctionnement du code : Grâce au switch case, je peux choisir de paramétrer ma carte. Pour y accéder je n'ai qu'a rentrer "$", je peux ensuite rentrer ma commande. Exemple : $p --> affiche les paramètres, $3ac --> Rentre 3 dans channel, affichage 3 et rentre dans la channel 3 du HC12.

 

Alors je vous montrerai le résultat mais en testant le programme, nous avons très vite constaté que le HC-12 est plutôt lent, et qu'il est nécessaire d'appliquer des delay (enfin des safe-delay) afin de laisser les trams de réponses arriver sans être perturbées.

Le programme fonctionne bien, mais il y a toujours un moment où il se "dérègle" et où les trams sont reçu de manière déformée (retour à la ligne à chaque caractère, des symboles étrange comme '⸮').

bug.png

Je ne suis pas parvenu à résoudre le problème pour le faire fonctionner de manière constante.

 




#107696 Attrapeur d'écoCup à ventouse !

Posté par Kylzar - 12 février 2020 - 04:47

Bonjour à tous !

Notre objectif du jour est de récupérer un écocup pendant 2 secondes puis de le relâcher à l'aide d'une ventouse !

 

Pour cela, nous allons utiliser :

 

- Un capteur de courant et de tension MAX771

- Une batterie Lipo 3S (12V)

- Une mini pompe 4.5V

- Un capteur de pression barométrique

- Un électrovanne

- Une Arduino Uno (bien sur !)

- Et enfin un Driver L9110

(le capteur de courant et de tension n'est pas indispensable)

 

Etape 1 : Adapter son alimentation

 

En effet la batterie Lipo 3S alimente mon circuit en 12V. Ma pompe et mon électrovanne fonctionnant en 5V, il est nécessaire d'adapter la tension. Pour cela, je vais utiliser le convertisseur step down réglable ainsi que le capteur de courant et de tension Max471.

En effet je vais brancher ma batterie sur le convertisseur et régler la tension grâce à la petite vis prévue à cet effet. Grâce au MAX 471 et au code fournit par sa fiche produit, je vais pouvoir suivre l'évolution de la tension jusqu'à atteindre les 5V voulu. 

Photo 1.PNG  photo 2.PNG  

Sur Arduino : photo3 amélioré.PNG

C'est bon : j'ai mon alimentation en 5V !

 

Etape 2 : Mise en place de l'électrovanne

La question est simple ? Comment contrôler l'alimentation de ma pompe et de mon électrovanne afin d'atteindre notre objectif ? (c.a.d gripper et relâcher l'écocup à ma guise).

Nous pourrions utiliser les pins de l'Arduino en  mode OUTPUT ? Et bien non, comme l'indique la fiche produit de l'électrovanne le courant est trop important et risquerai de griller notre Pin ( test malheureusement effectué : ça grille bien.)

Je vais donc utiliser un Driver L9110 pour moteur CC avec 2 entrées : 1 pour la pompe et 1 pour l'électrovanne !

Etude du comportement du driver

Dans un premier temps, nous avons effectué les tests à la main en testant le comportement du système grâce à un voltmètre en branchant sur la masse, l'alimentation et débranché chacune des entrées du driver. 

photo post4.PNG   photo4.PNG

Voici la table de vérité obtenue suite aux tests ! (X correspond à un fil débranché)

verite.PNG

Je sais par exemple que pour aspirer il faut que la pompe soit active, et l'électrovanne no-alimentée (fermée)

De la même manière, pour relâcher l'écocup il faut que la pompe soit éteinte et que mon électrovanne soit alimentée (ouverte)

Nous identifions donc les 3 cas qui nous intéresse : OFF(1), l'aspiration(2), (3) Relâcher

Je sais maintenant la procédure d'alimentation à effectuer dans mon programme !

 

Etape 3 : Mise en place du programme

Pour élaborer le programme, je vais partir de celui fournit par le capteur de pression (dans la fiche produit)

Etape préalable : je constate que en branchant le capteur de pression, et que la ventouse agrippe l'écocup, les valeurs montes aux alentours de 8000 avec des pics à 16 000. Je vais donc me servir de ces valeurs pour détecter qu'un écocup est attrapé.

Voici le programme final (le capteur de courant et de tension n'est pas utilisé ici) : 

Je peux finalement tout brancher en raccord avec mon programme ! (ça marche bientôt !)

Note : Lorsque vous effectuez vos montages, pensez toujours à couper toutes les sources de tension, donc ici la batterie et la carte Arduino)

Voici le câblage final !

 photo 5.PNG photo6.PNG

 

Et voilà !




#107551 Test du capteur de courant et de tension MAX471

Posté par Kylzar - 31 janvier 2020 - 10:23

Le capteur de tension peut permettre de suivre la charge d'une batterie. Pour ce qui est du courant, le courant est directement proportionnel au couple du moteur (Cm = Kc*Im, avec Cm le couple du moteur,Kc une constante de couple et Im le courant traversant ton moteur). Mesurer le courant donne donc des informations sur l'effort du moteur, et peu permettre de vérifier qu'il ne dépasse pas sa plage de courant maximum.