Afstand programforslag
På denne side angives to forskellige løsninger til hvordan man kan få en afstandsmåler til at fungere.
Løsningerne tager udgangspunkt i Ping eksemplet[1]. Dette eksempel arbejder med et modul, hvor triggerbenet og echobenet fungerer på samme ben. Det kræver at man vender input og output hele tiden i målingen. De fleste af de moduler til afstandsmåling man kan købe i dag har de to ben delt op på hver sin pin.
Løsning med Seriel port
Koden herunder tager udgangspunkt i en afstandsmåler med 4 ben. VCC der skal til +5V og GND til GND. Echo-benet forbindes til pin 8 og trig-benet forbindes til ben 9.
/*
Ping))) Sensor
This sketch reads a PING))) ultrasonic rangefinder and returns the distance
to the closest object in range. To do this, it sends a pulse to the sensor to
initiate a reading, then listens for a pulse to return. The length of the
returning pulse is proportional to the distance of the object from the sensor.
The circuit:
- +V connection of the PING))) attached to +5V
- GND connection of the PING))) attached to ground
- ECHO connection of the PING))) attached to digital pin 8
- TRIG connection of the PING))) attached to digital pin 9
created 3 Nov 2008
by David A. Mellis
modified 30 Aug 2011
by Tom Igoe
modified 28 Nov 2018 by Bent Arnoldsen
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/Ping
*/
// this constant won't change. It's the pin number of the sensor's output:
const int trigPin = 9;
const int echoPin = 8;
void setup() {
// initialize serial communication:
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
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:
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(5);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
// convert the time into a distance
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Serial.print(inches);
Serial.print("in \t");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}
Hardware til Serielport-løsningen
For at få afstandsmåleren til at fungere på Serial Monitor anvendes følgende hardware:
Figur 2. Afstandsmåler til Serial Monitor
Løsning med Display og Seriel port
Hvis man gerne vil have visningen på et display, så er der selvfølgelig mere hardware der skal kobles til, men visningen bliver mere brugervenlig, og Arduinoen kan fungere uden en computer tilsluttet.
Det er følgende kode der skal anvendes:
/*
Ping))) Sensor
This sketch reads a PING))) ultrasonic rangefinder and returns the distance
to the closest object in range. To do this, it sends a pulse to the sensor to
initiate a reading, then listens for a pulse to return. The length of the
returning pulse is proportional to the distance of the object from the sensor.
The circuit:
- +V connection of the PING))) attached to +5V
- GND connection of the PING))) attached to ground
- ECHO connection of the PING))) attached to digital pin 8
- TRIG connection of the PING))) attached to digital pin 9
created 3 Nov 2008
by David A. Mellis
modified 30 Aug 2011
by Tom Igoe
modified 28 Nov 2018 by Bent Arnoldsen
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/Ping
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// this constant won't change. It's the pin number of the sensor's output:
const int trigPin = 9;
const int echoPin = 8;
void setup() {
// initialize serial communication:
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("Afstandsmåler");
delay(2000);
lcd.clear();
}
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:
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(5);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
// convert the time into a distance
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Serial.print(inches);
Serial.print("in \t");
Serial.print(cm);
Serial.print("cm");
Serial.println();
lcd.setCursor(0,0);
lcd.print("Afst. cm = ");
lcd.print(cm);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Tommer = ");
lcd.print(inches);
lcd.print(" ");
delay(100);
}
long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}
Hardware til Display-løsningen
For at få displayet til at fungere anvendes følgende hardware:
Figur 2. Afstandsmåler med display
Referencer
- ↑ Ping Tutorial på www.arduino.cc