Go Down

Topic: question about URM37 V3.2 (Read 1 time) previous topic - next topic

fuiyo

i'm testing URM37 v3.2 recently. below is the test result from the serial monitoring:

Distance=24098
Distance=24098
Distance=23842
Distance=24098

may anyone pls tell me how to convert the measurement unit ?i have tried using 'microsecondsToInches' and 'microsecondsToInches', but it seem like not valid. can anyone help me ?

robtillaart


Can you post the code you have sofar?

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

fuiyo

#2
Apr 13, 2012, 03:52 am Last Edit: Apr 14, 2012, 08:44 am by fuiyo Reason: 1
i have changed the sensor position and output value decrease accordingly. but the value i get is so confuse.
24098 is about 1.5m from the object.

Code: [Select]

/* 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 0 (Arduino) -> Pin 9 (URM V3.2)
* Pin 1 (Arduino) -> Pin 8 (URM V3.2)
* www.yerobot.com
* Last modified 20/04/2009
*/

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
 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 ;

 for(int i=0;i<4;i++)
 {
   Serial.print(DMcmd[i],BYTE);
 }

 delay(75); //delay for 75 ms

while(flag)
{
   if(Serial.available()>0)
   {
       int header=Serial.read(); //0x22
       int highbyte=Serial.read();
       int lowbyte=Serial.read();
       int sum=Serial.read();//sum
     
       if(highbyte==255)
       {
         USValue=65525;  //if highbyte =255 , the reading is invalid.
       }
       else
       {
         USValue = highbyte*255+lowbyte;
       }
 
      Serial.print("Distance=");
      Serial.print(USValue);
     
      flag=false;
    }
}
 delay(50);
}



fuiyo

anyone hv the solution or any ideal share wif me ?

robtillaart

Please use code tags when you post code.  It is the # button in the editor (if you modify your post and select the code and press # it will be done automatically)

try to replace:

Code: [Select]
  for(int i=0;i<4;i++)
  {
    Serial.print(DMcmd,BYTE);
  }

with

  for(int i=0;i<4;i++)
  {
    Serial.write(DMcmd);
  }



Then you write

Code: [Select]
if(Serial.available()>0)
    {
        int header=Serial.read(); //0x22
        int highbyte=Serial.read();
        int lowbyte=Serial.read();
        int sum=Serial.read();//sum


You try to read 4 bytes, but you only know there are more than 0. So change this into

Code: [Select]
if(Serial.available()>=4)
    {
        int header=Serial.read(); //0x22
        int highbyte=Serial.read();
        int lowbyte=Serial.read();
        int sum=Serial.read();//sum

optionally print all 4 bytes here for debug


should get you a step closer now
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Go Up