Gebruiken van 2 ultrasonic sensoren

Arduino specifieke Software
Berichten: 2
Geregistreerd: 03 Okt 2016, 11:56

Gebruiken van 2 ultrasonic sensoren

Berichtdoor Timmeeeeeh » 03 Okt 2016, 12:03

Hoi, ik probeer gebruik te maken van 2 ultrasonic sensoren om te meten of iemand een kamer binnenkomt of verlaat en daarbij te tellen hoeveel mensen er dan in de kamer zijn. Dit is de code die ik ervoor heb gemaakt:
cpp code
const int pingPin = 7;
const int pingPin2 = 8;

void setup() {
Serial.begin(9600); ///begin serieële communicatie
}

void loop() {
long duration, cm;
long duration2, cm2;

pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH); // Snelle low high pulse zodat ie beter werkt
delayMicroseconds(5);
digitalWrite(pingPin, LOW);


pinMode(pingPin2, OUTPUT);
digitalWrite(pingPin2, LOW);
delayMicroseconds(2);
digitalWrite(pingPin2, HIGH); // Snelle low high pulse zodat ie beter werkt
delayMicroseconds(5);
digitalWrite(pingPin2, LOW);

pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);

pinMode(pingPin2, INPUT);
duration2 = pulseIn(pingPin2, HIGH);

cm = microsecondsToCentimeters(duration); //zet tijd om in cm's
cm2 = microsecondsToCentimeters(duration2);

Serial.print(cm);
Serial.print("cm"); //Print naar serieële monitor
Serial.println();
Serial.print(cm2);
Serial.print("cm");
Serial.println();

delay(100);
}

long microsecondsToInches(long microseconds) { //Omrekenen naar cm's
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}

Maar dit geeft maar de waarde in cm's van 1 sensor en de andere geeft ie aan als 0 cm. Het ligt niet aan de sensor want als ik de draadjes omwissel dan doet de ander het weer wel en die het eerst deed niet meer. Het ligt dus aan de code. Hopelijk kan iemand me helpen, alvast bedankt!

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Gebruiken van 2 ultrasonic sensoren

Berichtdoor nicoverduin » 03 Okt 2016, 13:23

Bij de tijd dat je klaar bent om de 1e te verwerken, is de 2e ook al binnen. Dus ben je te laat. Daarnaast krijg je interferentie tussen beide sensoren. Je moet ze achter elkaar verwerken. En als je handig bent maak je daar ook een functie waarbij de parameter de pin is van de sensor.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Gebruiken van 2 ultrasonic sensoren

Berichtdoor Koepel » 03 Okt 2016, 13:26

Er zijn libraries voor de sensors.
https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home
Door een interrupt te gebruiken werkt het nauwkeuriger.

Wat heb je als voorbeeld gebruikt ?
Deze ? http://playground.arduino.cc/Main/UltrasonicSensor

Daar wordt ook in setup() de pinnen als OUTPUT gezet. Kun je dat nog toevoegen ?

Kun je eerst Ping1 doen, en daarna pas Ping2 ?
De timing is heel belangrijk, en dan werkt het nog niet helemaal perfect. Die code moet meteen achter elkaar uitgevoerd worden.
Je kunt dus niet zomaar extra code toevoegen, en door ze te mengen gebeurt dat wel.

Voor een Arduino Uno kost digitalWrite() 5 µs. Dus als je alles bij elkaar optelt, dan heeft Ping1 zomaar 30 µs extra delay voordat de pulse wordt gelezen met pulseIn().

(Terwijl ik dit schrijf had nicoverduin al geantwoord. De interferentie had ik nog niet aan gedacht :o )

Berichten: 2
Geregistreerd: 03 Okt 2016, 11:56

Re: Gebruiken van 2 ultrasonic sensoren

Berichtdoor Timmeeeeeh » 03 Okt 2016, 15:36

Super bedankt voor de hulp! De sensoren werken nu allebei prima, het probleem lag inderdaad aan de timing.

Groetjes Tim :D

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: itedipi, PatrickAbomi en 87 gasten