Meten van de stroomsnelheid door warmte advectie
Voor de cursus 'Meten aan water' (TU Delft), we hebben een apparaat voor het meten van de stroomsnelheid door advectie van warm water. In dit artikel beschrijven we hoe we het apparaat gemaakt en hoe de arduino wordt gebruikt voor het meten van de stroomsnelheid. De meting is gebaseerd op de veronderstelling dat de piek in de temperatuur van het warmwater advectie met dezelfde snelheid als het water reizen zal.
Hoe te bouwen van het apparaat?
Om dit instrument te maken moet u een arduino (we gebruikten: UNO), twee temperatuursensoren (TMP 36), een arduino breadboard, wat draadjes en (optioneel) een LCD-scherm. De eerste stap is om uw temperatuur sensoren waterdicht, dat u moet ervoor zorgen dat de "kop" van de sensor zal nog steeds worden in contact met het water. Vervolgens bouwen iets om te houden van de twee termperature-sensoren in plaats, op de dezelfde diepte en dezelfde locatie in het water. We gebruikten een stuk hout met twee gaatjes. De diepte voor de temperatuursensoren is zes cm onder het wateroppervlak. De afstand tussen de temperatuursensoren is tien cm in de richting van de gegevensstroom.
De volgende stap is om te verbinden de temperatuursensoren met je arduino, de + en - zijn aangesloten op de 5V en GND poort van de arduino, en de derde (maatregel) draden van beide sensoren zijn aangesloten op A0 en A1, A0 is voor de stroomopwaartse sensor en A1 voor de downstream sensor.
De code
De code is gebaseerd op de Arduino voorbeelden > 01. basics > ReadAnalogVoltage.
De code die u wilt uitvoeren is geschreven onder dit artikel, het kan worden gebruikt met of zonder het LCD-scherm. Als u geen gebruik van het LCD-scherm maken kunt u de metingen in de seriële monitor van de arduino programma lezen.
De code neemt de gemiddelden van vijf metingen voor beide sensoren en test hen of het gemiddelde is het hoogste gemiddelde tot nu toe, als dit waar het onthoudt de tijd is. De code doet dit voor beide sensoren en vervolgens het verschil in tijd (t2 - t1) wordt berekend. Met de bekende afstand tussen beide sensoren en het verschil in tijd wordt de stroomsnelheid berekend.
De meting
Wanneer u het apparaat hebben bouwen en uploaden van de code, kunt u beginnen met het meten. U kunt het gebruik van een waterkoker voor de hittegolf. De volgende stappen moeten worden gedaan voor elke meting:
1. Druk op de reset-knop op je arduino;
2. zet een standaard hoeveelheid warm water in de stream (stroomopwaarts) dat u wilt meten;
3. de arduino retourneert de stroomsnelheid wanneer de hele hittegolf is omgevlogen.
De hoeveelheid water die wij toegepast was 25 ml, en de afstand stroomopwaarts van de eerste temperatuursensor was 0,75 meter (dit werkte voor ons maar voor uw stream het kan afwijken, dus probeer verschillende afstanden en hoeveelheid water).
Datum: 26-11-2014
Auteurs:
Ludo Schuurman
Daan Houtzager
De arduino-code:
/*
We gebruikten: ReadAnalogVoltage, dan kunnen we een nieuwe code voor het meten van de stroomsnelheid door warmte advectie schreef.
*/
#include < LiquidCrystal.h > / * hier de variabelen zijn gedefinieerd * /
LiquidCrystal lcd(12,11,5,4,3,2);
zweven dt = 0; / * dt is de tijd tussen t1 t2 nl * /
zweven meting = 0; / * meting = stroomsnelheid (u) * /
zweven VN = 0; / * VN is de nieuwe stroom snelheid * /
zweven mn2 = 0; / * mn is het nieuwe bedoel voor sensor 2 * /
u zweven = 0; / * u is de stroom snelheid * /
zweven mean_new = 0; / * mean_new is het nieuwe bedoel voor sensor 1 * /
zweven t1 = 0; / * t1 is de tijd van het hoogste gemiddelde van sensor 1 * /
zweven t2 = 0; / * t2 is de tijd van het hoogste gemiddelde van sensor 2 * /
VOID Setup {}
Serial.begin(9600);
LCD.begin (16, 2);
LCD.Print ("snelheid [m/s]");
}
void loop {}
int sensorValue1 = analogRead(A0); / * hier de code leest de sensor input * /
zweven v1 = sensorValue1 * (5.0 / 1023.0); / * hier de sensor input wordt geconverteerd naar spanning * /
delay(50); / * de vertraging is nodig voor het omzetten van A0 tot A1 * /
int sv1 = analogRead(A1); / * 5 metingen zijn gedaan zoals hierboven voor elke sensor * /
zweven v21 = sv1 * (5.0 / 1023.0);
delay(50);
int sensorValue12 = analogRead(A0);
zweven v2 = sensorValue12 * (5.0 / 1023.0);
delay(50);
int sv2 = analogRead(A1);
zweven v22 sv2 = * (5.0 / 1023.0);
delay(50);
int sensorValue13 = analogRead(A0);
zweven v3 = sensorValue13 * (5.0 / 1023.0);
delay(50);
int sv3 = analogRead(A1);
zweven v23 = sv3 * (5.0 / 1023.0);
delay(50);
int sensorValue14 = analogRead(A0);
zweven v4 = sensorValue14 * (5.0 / 1023.0);
delay(50);
int sv4 = analogRead(A1);
zweven v24 = sv4 * (5.0 / 1023.0);
delay(50);
int sensorValue15 = analogRead(A0);
zweven v5 = sensorValue14 * (5.0 / 1023.0);
delay(50);
int sv5 = analogRead(A1);
zweven v25 = sv5 * (5.0 / 1023.0);
zweven mean1 = (v1 + v2 + v3 + v4 + v5) / 5.0; / * hier de gemiddelde van de vijf metingen wordt berekend voor de meetcel 1 * /
zweven m2 = (v21 + v22 v23 + v24 + v25) / 5.0; / * hier de gemiddelde van de vijf metingen wordt berekend voor sensor 2 * /
delay(100);
Als (mean1 > mean_new) {/ * in de als lus het gemiddelde wordt getest voor mean1 > mean_new * /
mean_new = mean1;
T1 = millis(); / * Als het gemiddelde is tot dusver de hoogste de tijd wordt opgeslagen in t1 * /
Serial.println("time1");
Serial.println(T1);
}
Als (m2 > mn2) {/ * hetzelfde als hierboven, maar voor sensor 2 * /
Mn2 = m2;
T2 = millis();
Serial.println("time2");
Serial.println(T2);
}
Als (t2 > t1) {/ * wanneer de hittegolf groot is zowel middelen zijn verhoging op hetzelfde moment, voor de piek-t2 groter zijn dan t1 moet * /
DT = (t2/1000-t1/1000); / * dt wordt berekend * /
u = (0,1/dt); / * stroomsnelheid wordt berekend * /
Serial.println(u); / * stroomsnelheid wordt afgedrukt op seriële monitor * /
Als (u < VN + 0, 5) {/ * de adaptie-tijd voor de meting is groot, dit lussen filters uit hoge waarden van u die niet onroerend * /
Als (u < 100) {/ * dit als verklaring hoge u's in de adaptie tijd filtert * /
VN = u; meting = u;
}
}
lcd.setCursor(0,1);
LCD.Print(Measurement); / * stroomsnelheid wordt afgedrukt op het LCD-scherm * /
} }