Bonjour, j'utilise 2 capteurs de distance branchés en cascade, c'est à dire sur la même liaison série UART avec Arduino UNO.
Attention des capteurs sont livrés avec des câbles multicouleurs où rouge et noir sont inversés
Le problème c'est que j'ai 20% d'erreur quand je reçois les données des capteurs.
J'explique.
le datasheet du capteur
https://files.seeedstudio.com/products/101990702/TOFSense_User_Manual_V2.0_EN.pdf
un autre plus complet
https://www.waveshare.com/wiki/TOF_Laser_Range_Sensor
Sur Serial j'envoie 8 octets au capteur: 0x57 0x10 0xff 0xff 0xid 0xff 0xff 0xsomme
Une partie c'est des nombres fixes, pour le reste il y a l'identifiant du capteur dont je veux la réponse et en dernier c'est l'octet bas de la somme de toutes les données envoyés avant. Cela permet de pouvoir vérifier que les données reçut sont bien celles envoyées.
En retour je doit recevoir 16 octets. Toujours pareil, quelques nombres fixes, puis l'identifiant du capteur qui vient de répondre, la distance lu par le capteur et à la fin l'octet bas de la somme des données envoyées.
J'ai fait un petit programme qui m'affiche les données reçut par l'Arduino.
Dedans je calcule la somme de ce que je reçois et je la compare avec la somme reçus.
J'ai environ 20% d'erreur.
Je voudrais bien corriger ça. On pourrait penser que c'est normal mais alors pourquoi je n'ai jamais d'erreur quand c'est l'Arduino qui envoie des données aux capteurs, j'ai toujours une réponse, sinon au lieu de recevoir 57 10 ff ff .... j'aurais ffff ffff ffff ffff .... résultat que j'obtiens si aucun capteur correspond à l'identifiant envoyé.
J'ai remarqué aussi que dans la différence des sommes, seul un des 2 chiffres de l'octet en hexa est différent, soit les 4 bits bas soit les 4 bits haut de l'octet: 8a-8c ou 8a-ba.
Si quelqu'un a une idée, a plus
Le code
/* lecture de distance avec 2 capteurs DFROBOT SEN0337
en cascade sur la même liaison série UART
*/
#include <SoftwareSerial.h>
SoftwareSerial capteur(10, 11); // RX, TX
int sommeCalcule,sommeLu,lec,nber1=0,nber2=0,nblec=0;
void setup()
{Serial.begin(9600);
delay(100);
capteur.begin(115200);
Serial.println("Apres begin");
Serial.flush();
}
void loop()
{char str[3];
sommeCalcule=0; //données à envoyer aux capteurs pour avoir en retour la distance de identifiant=1
capteur.write(0x57); //header
capteur.write(0x10); //mark
capteur.write(0xff); //réservé
capteur.write(0xff); //réservé
capteur.write(1); //identifiant du capteur pour lequel on veut la distance
capteur.write(0xff); //réservé
capteur.write(0xff); //réservé
capteur.write(0x57+0x10+0xff+0xff+1+0xff+0xff); //octet bas de la somme des données envoyées
capteur.flush(); //attendre que tout soit bien envoyé
delay(20);
for(int x=0; x<15;x++) //boucle pour lire 15 octets et en faire la somme
{lec=capteur.read(); //lecture
sommeCalcule+=lec; //ajouter à sommeCalcule
sprintf(str, "%02x-", lec);
Serial.print(str); //impression à l'écran
Serial.flush(); //attendre que tout soit bien envoyé
delay(10); //petit delai suplémentaire pour que la prochaine donnée soit bien arrivé
}
sommeLu=capteur.read(); //lecture de la somme reçus
sprintf(str, "%02x/", sommeLu);
Serial.print(str); //impression à l'écran
sommeCalcule=sommeCalcule&0x00ff;
sprintf(str, "%02x", sommeCalcule);
Serial.print(str); //impression à l'écran
if((sommeCalcule&0x00ff)==sommeLu) //si octet bas de sommeCalcule = octet sommeLu
Serial.println(); //passer à la ligne suivante
else //sinon
{nber1++; //augmenter le nombre d'erreur de capteur 1
Serial.print(" -------nb erreur c1:");
Serial.println(nber1); //impression nombre d'erreur capteur 1 à l'écran
}
Serial.flush(); //attendre que tout soit bien envoyé
while(capteur.available()) //tant qu'il y a des données dans le buffer
{capteur.read(); //les lires
Serial.println("err"); //imprimer à l'écran qu'il y avait une données supémentaire
Serial.flush(); //attendre que tout soit bien envoyé
}
delay(500);
sommeCalcule=0; //on recommence avec capteur 2
capteur.write(0x57);
capteur.write(0x10);
capteur.write(0xff);
capteur.write(0xff);
capteur.write(20);
capteur.write(0xff);
capteur.write(0xff);
capteur.write(0x63+20);
capteur.flush();
delay(20);
for(int x=0; x<15;x++)
{lec=capteur.read();
sommeCalcule+=lec;
sprintf(str, "%02x-", lec);
Serial.print(str);
Serial.flush();
delay(10);
}
sommeLu=capteur.read();
sprintf(str, "%02x/", sommeLu);
Serial.print(str);
sprintf(str, "%02x", (sommeCalcule&0x00ff));
Serial.print(str);
if((sommeCalcule&0x00ff)==sommeLu)
Serial.println();
else
{nber2++;
Serial.print(" -------nb erreur c2:");
Serial.println(nber2);
}
Serial.flush();
while(capteur.available())
{capteur.read();
Serial.println("err");
Serial.flush();
}
Serial.print("------------nb de lecture:");
Serial.println(nblec++); //augmenter le nombre de lecture de distance et l'afficher à l'écran
Serial.flush();
delay(500);
}
Les erreurs
Apres begin
57-00-ff-01-9d-7c-4c-00-b7-06-00-04-05-00-ff-81/81
57-00-ff-14-07-83-49-00-cf-06-00-04-05-00-ff-1a/1a
------------nb de lecture:0
57-00-ff-01-dd-81-4c-00-b2-06-00-04-05-00-ff-51/c1 -------nb erreur c1:1
57-00-ff-14-d0-87-49-00-c7-06-00-04-05-00-ff-df/df
------------nb de lecture:1
57-00-ff-01-04-86-4c-00-65-06-00-04-05-00-ff-f0/a0 -------nb erreur c1:2
57-00-ff-14-98-8c-49-00-d1-06-00-04-04-00-ff-b5/b5
------------nb de lecture:2
57-00-ff-01-d1-8a-4c-00-b2-06-00-04-04-00-ff-bd/bd
57-00-ff-14-27-91-49-00-d6-06-00-04-04-00-ff-4e/4e
------------nb de lecture:3
57-00-ff-01-69-8f-4c-00-b2-06-00-04-05-00-ff-5b/5b
57-00-ff-14-b5-95-49-00-d4-06-00-04-05-00-ff-df/df
------------nb de lecture:4
57-00-ff-01-fe-93-4c-00-b3-06-00-04-05-00-ff-f5/f5
57-00-ff-14-fd-9a-49-00-c3-06-00-04-05-00-ff-9b/1b -------nb erreur c2:1
------------nb de lecture:5
57-00-ff-01-cb-98-4c-00-b3-06-00-04-05-00-ff-c7/c7
57-00-ff-14-0c-9f-49-00-ce-06-00-04-04-00-ff-39/39
------------nb de lecture:6
57-00-ff-01-63-9d-4c-00-b3-06-00-04-05-00-ff-64/64
57-00-ff-14-d4-a3-49-00-cd-06-00-04-04-00-ff-04/04
------------nb de lecture:7
57-00-ff-01-f7-a1-4c-00-b4-06-00-04-04-00-ff-fd/fc -------nb erreur c1:3
57-00-ff-14-63-a8-49-00-d3-06-00-04-04-00-ff-9e/9e
------------nb de lecture:8
57-00-ff-01-c5-a6-4c-00-b4-06-00-04-05-00-ff-d0/d0
57-00-ff-14-2b-ad-49-00-ce-06-00-04-04-00-ff-66/66
------------nb de lecture:9
57-00-ff-01-5d-5b-4c-00-b2-06-00-04-05-00-ff-6b/1b -------nb erreur c1:4
57-00-ff-14-ba-b1-49-00-c2-06-00-04-04-00-ff-ed/ed
------------nb de lecture:10
57-00-ff-01-f0-af-4c-00-b6-06-00-04-05-00-ff-07/06 -------nb erreur c1:5
57-00-ff-14-83-b6-49-00-ce-06-00-04-05-00-ff-c8/c8
------------nb de lecture:11
57-00-ff-01-81-b4-4c-00-b2-06-00-04-05-00-ff-d8/98 -------nb erreur c1:6
57-00-ff-14-11-bb-49-00-c8-06-00-04-04-00-ff-54/54
------------nb de lecture:12
57-00-ff-01-b8-b9-4c-00-ad-06-00-04-05-00-ff-6f/cf -------nb erreur c1:7
57-00-ff-14-da-bf-49-00-d3-06-00-04-05-00-ff-2d/2d
------------nb de lecture:13
57-00-ff-01-26-be-4c-00-b5-06-00-04-05-00-ff-4a/4a
57-00-ff-14-68-c4-49-00-cb-06-00-04-04-00-ff-b7/b7
------------nb de lecture:14
57-00-ff-01-bc-c2-4c-00-b3-06-00-04-05-00-ff-e2/e2
57-00-ff-14-31-c9-49-00-d1-06-00-04-04-00-ff-8b/8b
------------nb de lecture:15
57-00-ff-01-53-c7-4c-00-b8-06-00-04-05-00-ff-83/83
57-00-ff-14-bf-cd-49-00-d0-06-00-04-05-00-ff-1d/1d
------------nb de lecture:16
57-00-ff-01-20-cc-4c-00-b6-06-00-04-05-00-ff-53/53
57-00-ff-14-4e-d2-49-00-ce-06-00-04-04-00-ff-ae/ae
------------nb de lecture:17
57-00-ff-01-b6-d0-4c-00-b7-06-00-04-05-00-ff-ee/ee
57-00-ff-14-16-d7-49-00-d9-06-00-04-05-00-ff-87/87
------------nb de lecture:18
57-00-ff-01-4d-d5-4c-00-b7-06-00-04-05-00-ff-8a/8a
57-00-ff-14-a5-db-49-00-cf-06-00-04-04-00-ff-0f/0f
------------nb de lecture:19
57-00-ff-01-e1-d9-4c-00-b2-06-00-04-05-00-ff-1d/1d
57-00-ff-14-33-e0-49-00-d0-06-00-04-04-00-ff-a3/a3
------------nb de lecture:20
57-00-ff-01-b1-de-4c-00-ac-06-00-04-05-00-ff-ec/ec
57-00-ff-14-fc-e4-49-00-d0-06-00-04-04-00-ff-70/70
------------nb de lecture:21
57-00-ff-01-49-e3-4c-00-b5-06-00-04-05-00-ff-92/92
57-00-ff-14-8a-e9-49-00-cb-06-00-04-04-00-ff-fe/fe
------------nb de lecture:22
57-00-ff-01-dd-e7-4c-00-b2-06-00-04-05-00-ff-27/27
57-00-ff-14-19-ee-49-00-c7-06-00-04-04-00-ff-8e/8e
------------nb de lecture:23
57-00-ff-01-74-ec-4c-00-b8-06-00-04-05-00-ff-c9/c9
57-00-ff-14-e1-f2-49-00-d3-06-00-04-04-00-ff-66/66
------------nb de lecture:24
57-00-ff-01-44-e1-4c-00-b7-06-00-04-04-00-ff-9c/8c -------nb erreur c1:8
57-00-ff-14-df-f7-49-00-d6-06-00-04-05-00-ff-fd/6d -------nb erreur c2:2
------------nb de lecture:25
57-00-ff-01-d9-f5-4c-00-b1-06-00-04-05-00-ff-30/30
57-00-ff-14-67-fc-49-00-cb-06-00-04-04-00-ff-be/ee -------nb erreur c2:3
------------nb de lecture:26
57-00-ff-01-aa-fa-4c-00-b1-06-00-04-04-00-ff-05/05
57-00-ff-14-ff-00-4a-00-d8-06-00-04-04-00-ff-98/98
------------nb de lecture:27
57-00-ff-01-41-ff-4c-00-b5-06-00-04-05-00-ff-a6/a6
57-00-ff-14-8d-05-4a-00-cf-06-00-04-04-00-ff-22/22
------------nb de lecture:28
57-00-ff-01-0e-04-4d-00-b1-06-00-04-05-00-ff-75/75
57-00-ff-14-1b-0a-4a-00-cb-06-00-04-04-00-ff-b1/b1
------------nb de lecture:29
57-00-ff-01-a6-08-4d-00-bb-06-00-04-05-00-ff-1b/1b
57-00-ff-14-e2-0e-4a-00-c8-06-00-04-05-00-ff-7a/7a
------------nb de lecture:30
57-00-ff-01-3c-0d-4d-00-bc-06-00-04-05-00-ff-b7/b7
57-00-ff-14-71-13-4a-00-bf-06-00-04-05-00-ff-05/05
------------nb de lecture:31
57-00-ff-01-cf-11-4d-00-b0-06-00-04-05-00-ff-42/42
15-ff-14-ff-17-4a-00-d3-06-00-04-04-00-ff-aa-ffff/12 -------nb erreur c2:4
------------nb de lecture:32
57-00-ff-01-a0-16-4d-00-bb-06-00-04-04-00-ff-22/22
57-00-ff-14-c7-1c-4a-00-da-06-00-04-05-00-ff-7f/7f
------------nb de lecture:33
57-00-ff-01-36-3b-4d-00-b8-06-00-04-05-00-ff-bb/db -------nb erreur c1:9
57-00-ff-14-8f-21-4a-00-cd-06-00-04-04-00-ff-3e/3e
------------nb de lecture:34
57-00-ff-01-03-20-4d-00-bc-06-00-04-05-00-ff-91/91
57-00-ff-14-1e-26-4a-00-d5-06-00-04-04-00-ff-da/da
------------nb de lecture:35
57-00-ff-01-9b-24-4d-00-b3-06-00-04-05-00-ff-24/24
57-00-ff-14-ad-2a-4a-00-b8-06-00-04-04-00-ff-70/50 -------nb erreur c2:5
------------nb de lecture:36
57-00-ff-01-31-29-4d-00-b6-06-00-04-04-00-ff-c1/c1
57-00-ff-14-75-2f-4a-00-a7-06-00-04-04-00-ff-3c/0c -------nb erreur c2:6
------------nb de lecture:37
57-00-ff-01-ff-2d-4d-00-b4-06-00-04-05-00-ff-92/92
57-00-ff-14-3d-34-4a-00-cd-06-00-04-04-00-ff-ff/ff
------------nb de lecture:38
57-00-ff-01-96-32-4d-00-b0-06-00-04-06-00-ff-2a/2b -------nb erreur c1:10
57-00-ff-14-cc-38-4a-00-cb-06-00-04-04-00-ff-90/90
------------nb de lecture:39
57-00-ff-01-65-67-4d-00-b1-06-00-04-05-00-ff-ff/2f -------nb erreur c1:11
57-00-ff-14-95-3d-4a-00-d9-06-00-04-04-00-ff-6c/6c
------------nb de lecture:40
57-00-ff-01-fa-3b-4d-00-b2-06-00-04-05-00-ff-99/99
57-00-ff-14-23-42-4a-00-d3-06-00-04-04-00-ff-f9/f9
------------nb de lecture:41
57-00-ff-01-cb-40-4d-00-b0-06-00-04-04-00-ff-6c/6c
57-00-ff-14-eb-46-4a-00-d7-06-00-04-04-00-ff-c9/c9
------------nb de lecture:42
57-00-ff-01-60-45-4d-00-b4-06-00-04-05-00-ff-0b/0b
57-00-ff-14-7d-4b-49-00-ce-06-00-04-04-00-ff-57/56 -------nb erreur c2:7
------------nb de lecture:43
57-00-ff-01-f4-49-4d-00-b5-06-00-04-05-00-ff-a4/a4
57-00-ff-14-44-50-4a-00-ce-06-00-04-05-00-ff-24/24
------------nb de lecture:44
57-00-ff-01-c5-4e-4d-00-b6-06-00-04-05-00-ff-7b/7b
57-00-ff-14-d3-54-4a-00-cf-06-00-04-04-00-ff-b7/b7
------------nb de lecture:45
57-00-ff-01-5a-53-4d-00-bb-06-00-04-05-00-ff-1a/1a
57-00-ff-14-62-59-4a-00-d0-06-00-04-04-00-ff-4c/4c
------------nb de lecture:46
57-00-ff-01-ee-57-9d-00-ba-06-00-04-05-00-ff-b1/01 -------nb erreur c1:12
57-00-ff-14-2a-5e-4a-00-d1-06-00-04-06-00-ff-1a/1c -------nb erreur c2:8
------------nb de lecture:47
57-00-ff-01-c0-5c-4d-00-b7-06-00-04-05-00-ff-85/85
57-00-ff-14-f2-62-4a-00-d6-06-00-04-04-00-ff-eb/eb
------------nb de lecture:48
57-00-ff-01-53-c1-4d-00-b9-06-00-04-05-00-ff-1f/7f -------nb erreur c1:13
57-00-ff-14-81-67-4a-00-cb-06-00-04-06-00-ff-74/76 -------nb erreur c2:9
------------nb de lecture:49
57-00-ff-01-23-66-4d-00-b6-06-00-04-05-00-ff-f1/f1
57-00-ff-14-4a-6c-4a-00-d3-06-00-04-04-00-ff-4a/4a
------------nb de lecture:50