Aller au contenu


Photo
- - - - -

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


6 réponses à ce sujet

#1 dakota99

dakota99

    Habitué

  • Membres
  • PipPip
  • 228 messages
  • Gender:Male

Posté 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)

20230606_060703.jpg

 

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 :(



#2 dakota99

dakota99

    Habitué

  • Membres
  • PipPip
  • 228 messages
  • Gender:Male

Posté 28 juin 2023 - 04:20

Bonjour

Je n'ai pas trouvé de solution à ce problème.

J'ai remplacé le smartphone Android par un pc sous Windows.

La vitesse est passée à 38400 baud et là plus aucun problème la réception et l'émission sont quasi immédiates.



#3 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 769 messages
  • Gender:Male

Posté 28 juin 2023 - 05:30

Excellent !

 

Peux tu me rappeler pourquoi tu tiens à utiliser un smartphone ?



#4 dakota99

dakota99

    Habitué

  • Membres
  • PipPip
  • 228 messages
  • Gender:Male

Posté 28 juin 2023 - 06:09

Parce ce que le smartphone :

 

- est compact

- a un écran tactile

- consomme peu et bonne autonomie

- a des capteurs intégrés : boussole, accéléromètre, ...

- a un gps

 

et fonctionnait très bien pour cette application mais manifestement pas suffisamment bien pour la communication en bluetooth avec l'Arduino.



#5 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 769 messages
  • Gender:Male

Posté 28 juin 2023 - 06:30

Je ne sais pas si cela peut t'aider.

Un nouvel Arduino Uno 32 bits vient de sortir avec Wifi et Bluetooth : https://www.robot-ma...-coin/?p=118896



#6 dakota99

dakota99

    Habitué

  • Membres
  • PipPip
  • 228 messages
  • Gender:Male

Posté 28 juin 2023 - 07:03

Merci Oracid

Je l'ai vu et commandé chez Gotronic.

 

 



#7 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 521 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 30 juin 2023 - 06:14

Je ne sais pas si cela peut t'aider.

Un nouvel Arduino Uno 32 bits vient de sortir avec Wifi et Bluetooth : https://www.robot-ma...-coin/?p=118896

Oracid, dit moi, tu touches un pourcentage pour en faire de la pub comme cela? :laugh1: :laugh1: :laugh1: :laugh1: (je plaisante)


Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:




Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users