banner left Boxtec Banner
Platzhalter BoxtecProdukteForumShopKontaktPlaygroundn/aJobs
 

SDM-IO Ultraschall Distanz Sensor

SDM-IO Ultraschall Sensor Der SDM-IO Ultraschall Sensor hat im Gegensatz zu den meisten anderen Ultraschall-Sensoren eine rel. kleine Blind-Zone. D.h. bei sehr kurzen Distanzen unter 1-2cm werden die Messwerte bei vielen Sensoren ungenau, dies nennt man die Blind Zone.

Leider ist der Sensor aber auch in anderer Hinsicht anders als z.B. der HC-SRC04 den Itead ebenfalls anbietet: D.h. im Klartext die Library “Ultrasonic” lässt sich für den SMD-IO nicht verwenden.

Ein Grund dafür ist u.a., dass der SDM-IO mit negativen Pulsen arbeitet, während der HC-SR04 und die meisten anderen Ultraschall Sensoren wie z.B. der Ultraschall Sensor von Seeed mit postiven Pulsen arbeiten, dies wird jedoch nur aus den Signal Diagrammen der beiden Sensoren ersichtlich:

HC-SR04:

Signal Diagramm HC-SR04

SDM-IO:

Signal Diagramm SDM-IO

Messwert Übermittlung SDM-IO

Ein weiterer Unterschied ist auch, dass beim SDM-IO nicht die Länge des Pulses den Messwert darstellt, sondern die Zeit bis zum Puls. Der Puls selber hat entweder eine Länge von 150us wenn die vorhergehende Zeit einen Messwert darstellt oder 10ms wenn kein Objekt detektiert wurde innerhalb der Messspanne von 150cm.

Arduino Code / Library

Der Sensor kann auch ohne Library relative einfach ausgelesen werden, der Offset ist dabei auf min 150 zu setzen, darauf aufbauend kann mit diesem Wert der Sensor noch leicht feinkalibriert werden:

// (c) 2012 boxtec internet appliances
// This code is under the BSD license
 
#define trig_pin A3
#define echo_pin 2
#define toffset 170
 
volatile long t0, t1;
long duration;
 
void setup() {
  pinMode(trig_pin, OUTPUT);
  pinMode(echo_pin, INPUT);
  digitalWrite(trig_pin, LOW);
  Serial.begin(9600);
  Serial.println("Starting ranging...");
}
 
void loop() {
  digitalWrite(trig_pin, LOW);
  delayMicroseconds(2);
  digitalWrite(trig_pin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig_pin, LOW);
  attachInterrupt(0, timer_stop, FALLING);
  t0 = micros();
  delay(100);
  Serial.print("Delay(us): ");
  Serial.println(t1); 
  Serial.print("Distance: ");
  Serial.println(t1 / 29.411 / 2);  
  detachInterrupt(0);
  delay(1500);
}
 
void timer_stop() {
  t1 = micros() - (t0 + toffset);
}

Die Verwendung eines Interrupts ist suboptimal um es vornehm zu sagen, aber auf die Schnelle ist uns keine andere Idee gekommen. Dies erschwert es notabene auch gleichzeitig die LCD Library oder andere Libraries welche delayMicroseconds einsetzen zu verwenden.

Update von Itead [10.2.2012]

Wir haben Itead benachrichtigt, dass die angebotene Library nicht mit dem Sensor funktioniert und haben darauf folgendes Code Beispiel von Itead erhalten, welches wir hier mit freundlicher Erlaubnis von Itead zur Verfügung stellen:

//---------------------------------------------------------------------------
//Code for using SDM-IO with Arduino
 
#define TIMEOUT_OVERFLOW 1000
 
int TrigPin = 2;
int EchoPin = 3;
unsigned long ultrasoundDuration;
 
void setup()
{
  Serial.begin(9600);
 
}
 
void loop()
{
  unsigned char pin = 0;
  unsigned int time_flag = 0;
 
  pinMode(TrigPin, OUTPUT); //pin is output
  pinMode(EchoPin, INPUT); // pin is now input
  digitalWrite(TrigPin, HIGH);
  delayMicroseconds(2);
  digitalWrite(TrigPin, LOW);
  delayMicroseconds(10);
  digitalWrite(TrigPin, HIGH);
 
  // wait for a LOW pulse
  //ultrasoundDuration = pulseIn(EchoPin, HIGH);// will not work for HIGH pulse
 
  TCCR1A = 0x00;
  TCNT1 = 0x0000;
  TCCR1B = 0x01;
  pin = digitalRead(EchoPin);
  while(pin)
  {
    pin = digitalRead(EchoPin);
    time_flag++;
    if(time_flag > TIMEOUT_OVERFLOW)
      break;
  }
  TCCR1B = 0x00;
  ultrasoundDuration = TCNT1;
  ultrasoundDuration = ultrasoundDuration / 16;
  // get results
  Serial.print(ultrasoundDuration);
  Serial.print(" us, ");
  //Serial.print(ultrasoundDuration/148, DEC); //divide with 148 and you get inches
  //Serial.print(" inches, ");
  Serial.print(ultrasoundDuration*0.017, DEC); //divide with 58 and you get cm
  Serial.print(" cm");
  Serial.println();
  delay(100);
}

Referenzen

 
sensors/sdm-io_ultrasonic.txt · Last modified: 2012/05/13 20:26 by boxtec
 
 

zum Seitenanfang

Letzte Aktualisierung: © boxtec internet appliances · the better security products