Bonjour,
Désolé de ce mail un peu long (et un peu technique), mais il faut être précis sur le sujet. J'ai pas mal galéré pour mettre au point des transferts de données entre des capteurs analogiques ou numériques et pure data (je ne suis ni informaticien, ni électronicien, juste un musicien un peu curieux) et aujourd'hui cela fonctionne assez bien. Dès que j'aurais un moment, je déposerai un vade-mecum sur le forum pour que cette expérience soit profitable à d'autres novices comme moi (les sources d'informations sont nombreuses et pas toujours directes sur le sujet).
Mais je me casse un peu les dents sur un télémètre à ultra son (URM37 V3.2 Ultrasonic Sensor) dont les branchements sont un peu moins classiques que les capteurs basiques. En fait, côté Arduino, je m'en suis sorti, mais pas côté Pure Data, c'est pourquoi je m'adresse à ce forum dans l'espoir de trouver quelqu'un qui soit allé plus loin que moi dans la compréhension de l'échange de données entre Arduino et Pure Data.
Pour les capteurs "classiques" (Infra Rouge, piezzo, etc.), le programme standard d'Arduino (Standard Firmata) avec la solution Pduino qui fonctionne assez bien et permet de récupérer les valeurs analogiques et numériques mesurées. Mais pour le télémètre à US, le programme est différent et Pduino ne semble pas convenir.
Le branchement du capteur numérique se fait en appliquant le mode passif PWM.
Pin 1 alim (capteur) -> 5V (Arduino)
Pin 2 terre (capteur) -> terre (Arduino)
Pin 4 PWM (capteur) -> Pin 3 (Arduino)
Pin 6 COMP/TRIG (capteur) -> Pin 5 (Arduino)
Avec le programme fourni par DFRobot (http://www.dfrobot.com/wiki/index.php?t … SEN0001%29), le branchement du capteur sur la carte fonctionne correctement et la console Arduino affiche bien la distance (calculée en cm). Mais Pduino ne semble pas capable de récupérer les données car il fonctionne avec le Standard Firmata.
Savez-vous ce qu'il faut modifier dans Pure data pour que cela fonctionne avec le Standard Firmata ou avec le programme de DFRobot ? Le module "comport" de Pure Data n'est pas vraiment simple à comprendre.
Merci aux experts de ce domaine.
Cordialement,
RP.
Programme DFRobot utilisé :
// # Editor :Jiang from DFRobot
// # Data :18.09.2012
// # Product name:ultrasonic scanner
// # Product SKU:SEN0001
// # Version : 0.2
// # Description:
// # The Sketch for scanning 180 degree area 4-500cm detecting range
// # Connection:
// # Pin 1 VCC (URM V3.2) -> VCC (Arduino)
// # Pin 2 GND (URM V3.2) -> GND (Arduino)
// # Pin 4 PWM (URM V3.2) -> Pin 3 (Arduino)
// # Pin 6 COMP/TRIG (URM V3.2) -> Pin 5 (Arduino)
// #
int URPWM = 3; // PWM Output 0-25000US,Every 50US represent 1cm
int URTRIG=5; // PWM trigger pin
unsigned int Distance=0;
uint8_t EnPwmCmd[4]={0x44,0x02,0xbb,0x01}; // distance measure command
void setup(){ // Serial initialization
Serial.begin(9600); // Sets the baud rate to 9600
PWM_Mode_Setup();
}
void loop()
{
PWM_Mode();
delay(20);
} //PWM mode setup function
void PWM_Mode_Setup(){
pinMode(URTRIG,OUTPUT); // A low pull on pin COMP/TRIG
digitalWrite(URTRIG,HIGH); // Set to HIGH
pinMode(URPWM, INPUT); // Sending Enable PWM mode command
for(int i=0;i<4;i++){
Serial.write(EnPwmCmd[i]);
}
}
void PWM_Mode(){ // a low pull on pin COMP/TRIG triggering a sensor reading
digitalWrite(URTRIG, LOW);
digitalWrite(URTRIG, HIGH); // reading Pin PWM will output pulses
unsigned long DistanceMeasured=pulseIn(URPWM,LOW);
if(DistanceMeasured==50000){ // the reading is invalid.
Serial.print("Invalid");
}
else{
Distance=DistanceMeasured/50; // every 50us low level stands for 1cm
}
Serial.print("Distance=");
Serial.print(Distance);
Serial.println("cm");
}
Hors ligne
À mon avis, continuer à utiliser Firmata/pduino à ce stade, c'est se mettre des bâtons dans les roues. Si Le programme que tu as collé fonctionne et envoie bien des données, c'est 95% du boulot de fait.
Hors ligne
Oui, c'est bien mon avis... Mais la difficulté est de traduire correctement les données transmises par Arduino dans PD avec le module "comport"...
Mais, EUREKA !! J'ai finalement trouvé la solution ce matin en appliquant un module de conversion.
Avec le programme Arduino ci-dessus, j'utilise le patch Pd ci-joint et cela fonctionne très bien !
La mesure du télémètre URM37 est extrêmement précise. C'est super !!
Cordialement.
Hors ligne
cool
Hors ligne
Je viens de regarder les spécifications du télémètre : 4cm > 5m, rs232, et genre 15 € .
Plutôt bien le bidule .
Mais vu que çà sort en rs232 doit y avoir moyen de se passer d'un arduino , non ?
Hors ligne
???
Je ne vois pas comment...
Hors ligne
Ben (sauf à ne pas avoir de port com rs232 sur sa machine (yen a plus sur les mac, je pense)) en le raccordant dessus, doit y avoir moyen de lire les valeurs directement dans pd sans la traduction usb .
Le port rs232 est encore beaucoup utilisé dans l'industrie (robotique) avec justement des capteurs en tous genres .
Dernière modification par sakramh (2012-12-10 12:41:39)
Hors ligne
Pages: 1