Go Down

Topic: Gestion module ultrason URM 37 V3.2 (Read 993 times) previous topic - next topic

herve

Bonjour,

Voulant gerer l' altitude de mon aeroquad avec le module URM 37, je me suis aperçu que je ne pouvais pas utiliser le module avec une carte Arduino Duemilanove . En effet la carte ne possede qu'un seul port de com serie .
Aprés quelques recherches sur le web la solution trouvée est de créer un second port serie avec les voies TOR pour communiquer avec le module à ultra son.
Voici mon programme qui est une evolution du programme de www.yerobot.com:
/* Ultrasound Sensor
*------------------
* URM V3.2 ultrasonic sensor TTL connection with Arduino
* Reads values (0-300) from an ultrasound sensor (3m sensor)
* and writes the values to the serialport.
* Pin12 (Arduino)-> Pin 1 VCC (URM V3.2)
* GND (Arduino) -> Pin 2 GND (URM V3.2)
* Pin11 (Arduino) -> Pin 7 (URM V3.2)
* Pin 2 (Arduino) -> Pin 9 (URM V3.2)
* Pin 3 (Arduino) -> Pin 8 (URM V3.2)
* www.yerobot.com programme modifie pour carte arduino duemilanove
* lecture distance sur module URM 37
* le 9/9/10
*/


#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3);  // creation d'un nouveau port de communication serie voies 2 et 3
int UREnable = 11; // Ultrasound enable pin
int URPower = 12; // Ultrasound power pin
int val = 0;
int USValue = 0;
int timecount = 0; // Echo counter
int ledPin = 13; // LED connected to digital pin 13
boolean flag=true;
uint8_t DMcmd[4] = { 0x22, 0x00, 0x00, 0x22}; //distance measure command

void setup() {
 Serial.begin(9600);                  // Sets the baud rate to 9600
 mySerial.begin(9600);                // initialisation du port de com vers le capteur ultrason
                                     // application du 5v sur les bornes 1 et 7 du module URM 37  
 pinMode(ledPin, OUTPUT);            // Sets the digital pin as output
 pinMode(UREnable, OUTPUT);
 digitalWrite(UREnable, HIGH); // Set to High
 pinMode(URPower, OUTPUT);
 digitalWrite(URPower, HIGH); // Set to High

delay(200); //Give sensor some time to start up --Added By crystal  from Singapo, Thanks Crystal.
}

void loop()
{

 flag=true;
 //Sending distance measure command :  0x22, 0x00, 0x00, 0x22 ;
 //trame à envoyer au module URM 4 mots: code fonction,val_1,val_2,somme(code fonction + val_1+ val_2 )
 // codage des fonctions 0x11 :lecture T°
 //                      0x22 :lecture de la distance ,il est possible d'utiliser un servo sur lequel est positionner le modul URM
 //                            alors val_1 sera egal a l'angle de rotation du servo
 //                      0x33 : lecture de l'EEPROM
 //                      0x44 : ecriture de l'EEPROM
 // pour plus d'information consulter le site www.yerobot.com
 
 for(int i=0;i<4;i++)
 {
       mySerial.print(DMcmd,BYTE);  //ecriture de 4 valeurs par communication serie vers la carte URM
 }

 delay(75); //delay for 75 ms

while(flag)
{
   if(Serial.available()>0)
   {
       int header=mySerial.read(); //0x22   lecture de 4 valeurs venant de la communication vers la carte URM
       int highbyte=mySerial.read();
       int lowbyte=mySerial.read();
       int sum=mySerial.read();//sum
     
       if(highbyte==255)
       {
         USValue=65525;  //if highbyte =255 , the reading is invalid.
       }
       else
       {
         USValue = highbyte*255+lowbyte;
       }
 
      Serial.print("Distance=");
      Serial.println(USValue);
     
      flag=false;
    }

}
 delay(50);
}


Maintenant, si quelqu'un sait comment l'interfacer avec le programme de l'aeroquad je suis preneur .



Go Up