Aller au contenu


dakota99

Inscrit(e) (le) 29 août 2021
Déconnecté Dernière activité févr. 14 2024 07:28
-----

Sujets que j'ai initiés

Communication MODBUS RTU

07 février 2024 - 08:33

Bonjour, je dois réaliser une appli qui récupère les données d’un automate EVCO C-Pro3 via le protocole Modbus RTU. La doc est assez laconique : elle précise les caractéristiques de la communication série. Je me connecte au port BMS connectivity de l'automate via un câble réseau. Je ne connais pas l’adresse IP de l’automate et il n’y a pas de port COM virtuel qui est créé. Lorsque j’installe un serveur DHCP l’automate ne reçoit pas d’adresse IP. Il s’agit donc probablement d’une adresse IP statique. Si je lance un scan des adresses IP aucun résultat.

Quelqu’un a déjà travaillé avec du Modbus RTU ?

Merci

 


Robot suiveur de fil

07 octobre 2023 - 06:14

Bonjour

 

Je réalise un robot bimoteur qui se dirige notamment avec une camera IA et des AruCo.

Je souhaiterais lui ajouter la possibilité de se déplacer en suivant un fil comme un robot tondeuse.

Le principe est, je pense, d'utiliser un capteur à effet hall qui détecte un champ magnétique.

Il y a un paquet de modèles disponibles et cela semble assez facile à utiliser.

Par contre je vois moins bien comment générer un champ magnétique adapté.

Le robot devrait suivre un fil qui va d'un point A à un point B. Ce ne serait donc pas une boucle.

Le plus simple est peut-être d'utiliser le émetteur d'un robot tondeuse ?

 

Quelqu'un a déjà réalisé ce genre de chose ?

 

 

 


Piloter 2 moteurs avec contrôleur Sabertooth 2X32

10 septembre 2023 - 11:15

Bonjour,

 

Je souhaiterais contrôler 2 moteurs DC 12V avec un contrôleur Sabertooth 2x32 et un Arduino Mega

 

Je suis un peu rôdé à cet exercice avec des contrôleurs plus basiques.

Celui-ci offre de nombreuses possibilités et peut gérer des "grosses" puissances. Mais il semble nettement plus compliqué à utiliser.

Et le code à utiliser est différent :

#include <Servo.h>
Servo myservo1; // contrôle moteur 1
Servo myservo2; // contrôle moteur 2

void setup () {
  myservo1.attach(11); 
  myservo2.attach(10); 
}

void loop() {  
  myservo1.write(30); // vitesse moteur 1
  myservo2.write(30); // vitesse moteur 2
  delay(5000);
  myservo1.write(50);// stop motor
  myservo2.write(90);// stop motor
  delay(2000);  
}

La configuration du dip switch sur le contrôleur est : 1 OFF - 2 ON - 3 ON - 4 OFF - 5 ON - 6 ON

Connexion Arduino contrôleur : D10 ARDUINO > S2 Sabertooth et D11 Arduino > S1 Sabertooth

Les 2 moteurs tournent pendant 5 secondes puis s'arrêtent pendant 2 secondes.

Ce qui est curieux c'est que pour arrêter le premier moteur il faut envoyer myservo1.write(50) tandis que pour arrêter le second il faut envoyer myservo1.write(90). Alors que les moteurs sont identiques.

Cette carte peut fonctionner selon différents modes. Peut-être que celui que j'utilise n'est pas le bon.

Elle peut en outre être programmée via une interface usb.

Le code utilisé pour d'autres cartes (celle-cipar exemple) me paraît plus simple :

pinMode(M1, OUTPUT);  // sens de rotation
pinMode(E1, OUTPUT);  // vitesse
digitalWrite(M1,LOW); // définit le sens de rotation
analogWrite(E1,spd1g); // définit la vitesse de rotation

Avez-vous déjà utilisé ce matériel pour une application robotique ?

 

Merci

 

 

 


Arduino : réception données en série

06 juin 2023 - 06:10

Bonjour

 

Je réalise un robot bimoteur qui est composé des éléments suivants : Carte Arduino Mega et Smartphone Android.

La carte Arduino collecte les données de 2 encodeurs (A), un Lidar, une camera AI ( B). La carte envoie ces données au smartphone via une liaison Bluetooth. ©

Le smartphone envoie des commandes de guidage à la carte Arduino qui actionne 2 servos. (D)

Fichier joint  20230606_060703.jpg   116,55 Ko   16 téléchargement(s)

 

L'ensemble fonctionne mais il y a clairement un problème de précision qui est dû à un décalage entre le moment où l'Arduino envoie les données et le moment où le smartphone les reçoit. Ce décalage est variable mais atteint parfois 4 secondes ce qui est énorme surtout quand le robot fait une manoeuvre  qui exige de la précision.

La transmission se fait à 9600 baud via un socket. La vitesse de transmission ne peut pas être augmentée étant donné que c'est du Bluetooth.

Mais même à 9600 baud la réception devrait se faire sans problème quasi instantanément. La chaîne de paramètres envoyée par l'Arduino fait +/- 80 digits.

 

Au niveau du code sur le téléphone (c'est du Windev) :

Il faut d'abord initialiser le socket

SocketEnCours	est une chaîne	= "so01"
MacDispositif	est une chaîne
RetourExiste	est une chaîne
MacDispositif	= "00:0E:EA:CF:71:40" 
e = SocketConnecteBluetooth(SocketEnCours,"SerialPortServiceClass_UUID",MacDispositif) 
SI e = Vrai ALORS
   RetourExiste	= SocketExiste(SocketEnCours)
   LIB_01 = "Connexion établie" 
   SI SocketChangeModeTransmission("so01", SocketSansMarqueurFin) = Vrai ALORS LIB_02 = "Mode de transmission modifié"
SINON
   LIB_01 ="Connexion en Bluetooth impossible " 
   Info(errInfo)
FIN

Ensuite une procédure est lancée toutes les 100 ms

buf = buf + SocketLit("so01",Faux,1000)
buf = Droite(buf,500)
bs = AnsiVersUnicode(buf)  
u2 = Position(bs,"#",0,DepuisFin)     // récupération de la fin de la chaîne
u1 = Position(bs,"@",u2,DepuisFin)    // récupération du début de la chaîne
bs = Milieu(bs,u1,u2-u1+1)
erg = Val(ExtraitChaîne(bs,2,";"))    // encodeur moteur gauche
erd = Val(ExtraitChaîne(bs,3,";"))    // encodeur moteur droit
px1 = Val(ExtraitChaîne(bs,9,";"))    // Coordonnées camera X
px2 = Val(ExtraitChaîne(bs,10,";"))   // Coordonnées camera Y
...

Le problème vient peut-être de cette communication par socket. Mais Windev Mobile ne prend pas en charge une communication série.

Si je connecte l'Arduino sur le port usb d'un pc, la réception des données à 9600 baud est quasiment immédiate.

Il va falloir remplacer le smartphone par un pc :(


Traction ou propulsion ?

17 janvier 2023 - 06:13

Bonjour,

Je suis sur un projet de robot 2 roues motrices destiné dans un premier temps à rouler sur du béton, pavés, ... avec des charges.

Au départ du projet je me suis inspiré des robots tondeuse : 1 ou 2 roues folles devant et 2 roues motrices à l'arrière

 

Et je suis parti sur cette configuration me disant que ces gens avaient sûrement de bonnes raisons de faire comme ça.

Mais dans le cas des tondeuses, c'est peut-être plus facile de mettre les grandes roues derrière pour pouvoir tondre plus près de la bordure.

 

Dans mon cas, les 2 roues frontales font un diamètre de 80 mm. Les roues arrière motrices un diamètre de 280 mm.

 

Est-ce vraiment la bonne solution ?

En cas de franchissement de petit obstacle, bosse, pierre, ... n'est - il pas préférable d'avoir les grandes roues motrices à l'avant qui vont plus facilement le surmonter ?

 

Au niveau du guidage : est-il différent pour une traction ou une propulsion ?

 

Qu'en pensez-vous ?