Start Elkretssimulator Karnaughdiagram Quine McCluskey


Avståndsmätare

Ultrasonic Sensor

Med en Ultrasonic Sensor går det att mäta avstånd. Det heter ultraljud därför att det är ljudfrekvenser som ligger lite ovanför vad vi människor kan höra.



Princip ljudeko

Så, själva konceptet här är följande: Sensorn skickar iväg en ljudpuls. Denna ljudpuls studsar sedan eventuellt mot någonting. Ett eko studsar tillbaka. Vi kan sedan mäta tiden det tar innan detta eko kommer tillbaka. Eftersom vi vet ljudets hastighet, så kan vi räkna ut avståndet med formelt s = v*t.

Dock måste vi såklart komma ihåg att sensorn mäter avståndet båda vägarna, så vi får inte glömma dividera avståndet vi får med 2.

Det är precis såhär en riktig radar fungerar. En riktig radar använder dock mikrovågor, vilket fungerar över väldigt långa avstånd, medans denna avståndsmätare som sagt bara använder ljudvågor. Vilket är fullt tillräckligt inomhus för korta avstånd. Men principen här är densamma som för en radar. Vi skickar ut en ljudvåg och lyssnar ifall något studsar tillbaka. Om något studsar tillbaka så kan vi mäta tiden det tar innan det studsar tillbaka och på så vis kan vi räkna ut avståndet.





Uppkoppling

En rätt så enkel inkoppling. Finns inte så mycket prata om.



Mäta pulslängd med pulseIn

För att förstå hur vi skall designa vårt dataprogram så måste vi förstå hur själva modulen fungerar. Vi triggar alltså en ljudvåg genom att först skicka en signal 10 uS (10 mikrosekunder, dvs 10 miljontedelars sekunder eller 0.000010 sekunder), lång på trigger-pinnen. Efter detta kommer vi få tillbaka en signal på echo -pinnen. Verkar vettigt eller hur? Denna signal - signalen på echo -pinnen alltså - mäter vi längen (duration) på. Pulsen är lika lång som det tagit tid innan vi fått ett eko. När vi mätt längden så kan vi från denna tid räkna ut hur långt avståndet är med hjälp av formelt s = v*t, där v = ljudhastigheten. Längden på pulsen som vi får tillbaka på echo -pinnen är tiden det tagit för signalen att studsa mot föremålet.



Mäta pulslängd med pulseIn

Om vi tittar på ovanstående timing-diagram, så vill vi alltså mäta längden på pulsen vi får som eko (echo) tillbaka. Detta kan vi göra med funktionen pulseIn. Funktionen returnerar det antal microsekunder som pulsen är HIGH i vårt fall.

Så hur omvandlar vi denna pulslängd till ett avstånd? Ljudets hastighet är 340 m/s. Eftersom vi får tiden från pulseIn i mikrosekunder är det käckt veta ljudets hastighet per mikrosekund, sedan behöver vi bara multiplicera med detta.

340 m/s = 0.34 m/millisekund = 0.00034 m/mikrosekund = 0.034 cm/mikrosekund.

Nu får vi sträckan fram och tillbaka mellan radarn och föremålet. Så vi måste också dividera med 2, då vi inte vill ha dubbla sträckan utan bara den ena vägen (="avståndet").

Kod

// Sensorns pinnar
const int triggerPin = 3;
const int echoPin = 4;

long timeMicroseconds;
float dist_cm;

void setup()
{
  Serial.begin(9600);  
  pinMode(triggerPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop()
{
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);

  timeMicroseconds = pulseIn(echoPin, HIGH);
  dist_cm = (float)timeMicroseconds * 0.034 / 2;

  Serial.print(dist_cm);
  Serial.println(" cm");

  delay(100);
}

Nu tar flyt-talsberäkningar lång tid för processorn och det är enkelt för oss att skriva om formeln. Samma som ovan kan skrivas såhär:

// Sensorns pinnar
const int triggerPin = 3;
const int echoPin = 4;

long timeMicroseconds;
long dist_cm;

void setup()
{
  Serial.begin(9600);  
  pinMode(triggerPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop()
{
  digitalWrite(triggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);

  timeMicroseconds = pulseIn(echoPin, HIGH);
  dist_cm = timeMicroseconds / 58;

  Serial.print(dist_cm);
  Serial.println(" cm");

  delay(100);
}

Test

Lite labbande verkar ge att modulen fungerar utmärkt för avstånd från någon centimeter upp till kanske 2 meter. Om man tänker sig ett robotprojekt räcker detta gott och väl för att hitta väggar eller dörr-öppningar och eventuella föremål som står ivägen.



Lycka till !