_17_Ultraschall_Abstandssensor

Der Ultraschall-Entfernungs-Sensor gibt seine Werte über die serielle Schnittstelle aus.

/*
 * Ultraschall-Entfernungssensor
 * Laesst sich evtl von Umgebungsgeraeuschen beeinflussen.
 * Vorteil gegenueber Infrarot-Entfernungssensor:
 * Erkennt Objekte in einem groesseren Winkel als die IR-Sensoren, die
 * nur Objekte auf einer Linie vor sich erkennen
 */

const int pingPin = 2; // choose pin 2 as sensor pin

void setup() {
  // initialize serial communication:
  Serial.begin(9600);
}

void loop() {
  // establish variables for duration of the ping,
  // and the distance result in inches and centimeters:
  long duration, inches, cm;

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);

  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);

  // convert the time into a distance
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);

  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();

  delay(100);
}

long microsecondsToInches(long microseconds) {
  // According to Parallax's datasheet for the PING))), there are
  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
  // second).  This gives the distance travelled by the ping, outbound
  // and return, so we divide by 2 to get the distance of the obstacle.
  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds) {
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;
}

Dieses Beispiel herunterladen

Aktuelle Beiträge

Servos – alternative Bewegungsbeispiele

Unter diesem Link gibt es eine zip-Datei mit verschiedenen Bewegungsarten für Servo-Motoren. Hier eine kurze Beschreibung der einzelnen Beispiele:

  • completelyRandom: Nach zufällig ausgewählten Zeitabschnitten denkt sich das Programm neue Zufalls-Zielpositionen und -Geschwindigkeiten für den Servo aus.
  • servoChameleon: Der Servo bewegt sich ein Stück in eine Richtung und dann ein etwas kleineres Stück wieder zurück, dann wieder hin, usw. Wenn er an einer Seite angekommen ist, läuft das ganze rückwärts.
  • sinMovement: Servo bewegt sich wie von Sinus-Kurven bekannt, dh. er beginnt langsam an einer Seite, wird auf seinem Weg zur Mittelposition schneller und dann wieder langsamer, je näher er der anderen Seite kommt. Dann geschieht das Selbe rückwärts.
  • slowlyGettingFaster: Wie sinMovement, nur wird der Servo gegen Ende einer Bewegung nicht langsamer.
  • tickBackAndForth: Servo “tickt” von links nach rechts und wieder zurück, dh. er macht immer nur kleine Schritte wie ein Uhrzeiger.
  • verySlow: Servo bewegt sich sehr langsam von links nach rechts und wieder zurück. Weil Servos nur ganze Zahlen von 0-180 entgegennehmen, gibt es auch hier ein “Ticken”. Eine komplett weiche Bewegung ist leider mit Standard-Servos unmöglich.

Viel Spaß beim Tüfteln!

Marius

Veröffentlicht in Labor
  1. .ino! Kommentare deaktiviert
  2. Überarbeitung der Beispiele Kommentare deaktiviert
  3. Experience Design im Sommersemester 11 Kommentare deaktiviert
  4. Physical Computing I & II Kommentare deaktiviert