Förbättra ultraljud utbud Sensor noggrannhet (2 / 3 steg)
Steg 2: Koden!
För att förbättra sensorns utbud noggrannhet, kommer att koden beräkna vad ljudets hastighet är enligt den omgivande temperaturen. Formeln för som rusas av solitt genom luften vid en viss temperatur är: Vair = (331.3 + 0.606 * Tc) m/s där Vair är ljudets hastighet och Tc är temperaturen i Celsius enligt http://en.wikipedia.org/wiki/Speed_of_sound. När ljudets hastighet har beräknats, mäts avståndet på samma sätt som det är i andra ultraljud utbud sensor koder. Tiden är multiplicerad med hastigheten och sedan halveras lämnar dig med enheter av avståndet till objektet.
Om du planerar att använda detta i extrema temperaturer, var noga med att kontrollera den temperatursensor datablad som de kommer att ge ett rekommenderat temperaturområde. Temperaturgivare fungerar ibland alldeles utmärkt i ett stort utbud men du kan behöva ändra koden lite för att kompensera för variationer i temperatursensor utdata.
Slutligen, som med alla min kod, jag använder en enkel debug knep min vän lärde mig. Med hjälp av ett booleskt värde och om uttalanden, du kan enkelt slå seriell kommunikation på eller av genom att ändra debug till sant eller falskt.
Jag bifogade filen ursprungliga koden, annars koden kan kopieras direkt från här:
/*******************************************************************************************************
********************************************************************************************************
Förbättrad ultraljud utbud Sensing skapad av Calvin Kielas-Jensen
Genom att använda en Arduino UNO, Anslut en TMP36 temperatur sensor data stift till A0 och en 4-pin ultraljud utbud sensor med trig stift på digital stift 8 och echo stift på digital pin 9.
Detta skript ökar exaktheten i en Ultraljuds utbud sensor genom mätning av omgivningstemperaturen. Ljudet rör sig genom luften på hastighet beroende på den omgivande temperaturen enligt följande ekvation: Vair = (331.3 + 0.606 * Tc) m/s där Vair är ljudets hastighet och Tc är temperaturen i Celsius.
Alla är välkomna att använda och modifiera denna kod så länge jag får kredit. Tack för att respektera rörelsen för öppen källkod!
******************************************************************************************************** *******************************************************************************************************/
Majoriteten av denna kod tas och modifierad från ARDX temperatur sensor koden och PING
sensor kod.
int temperaturePin = A0; Ställa in temperaturen pin input float temperaturen; Inställda temperaturen variabel
booleska debug = sant; För seriell kommunikation set debug till true, för snabbare kod inställd på debug false
lång varaktighet, cm; Ställ in tid och cm för avstånd sensing
int trig = 10, echo = 9. Ställa in stift för trig och echo
void setup() {om (debug) {Serial.begin(9600);}}
void loop() {temperatur = (getVoltage(temperaturePin) - 0,5) * 100.
om (debug) {Serial.println(temperature);}
Ge en kort låg puls förhand för att säkerställa en ren hög puls: pinMode (trig, OUTPUT); digitalWrite (trig, låg); delayMicroseconds(2); digitalWrite (trig, hög); delayMicroseconds(5); digitalWrite (trig, låg); längd = pulseIn (echo, hög);
cm = microsecondsToCentimeters (längd, temperatur); om (debug) {Serial.println(cm); Serial.println("cm"); } }
flyta getVoltage (int pin) {return (analogRead(pin) *. 004882814), //Converting från 0 till 1024 till 0 till 5v}
långa microsecondsToCentimeters (lång mikrosekunder, länge temp) {return (mikrosekunder * (331.3 + 0.606 * temp)) / 2; //Multiplying som rusas av solitt genom en viss temperatur luft genom //length tid det tar för att nå objektet och tillbaka, dividerat med två}