Mäta flödeshastigheten genom värme advektion
Mäta flödeshastigheten genom värme advektion
För kursen "Gem aan vatten" (TU Delft), vi har gjort en enhet för att mäta strömningshastighet genom advektion hett vatten. I den här artikeln beskriver vi hur vi gjorde enheten och hur arduino som används för att mäta flödeshastigheten. Mätningen baseras på antagandet att toppen i temperatur på varmvatten advektion kommer att resa med samma hastighet som vattnet.
Hur till bygga enheten?
För att göra detta instrument du behöver en arduino (vi använde: UNO), två temperaturgivare (TMP 36), en arduino bakbord, några kablar och (valfritt) en LCD-skärm. Det första steget är att göra din temperatur sensorer vatten bevis, måste du se till att "huvudet" av sensorn kommer i kontakt med vattnet. Sedan bygga något för att hålla två termperature sensorer på plats, på samma djup och samma plats i vattnet. Vi använde en bit av trä med två hål i den. Djupet för temperatursensorer är sex cm under vattenytan. Avståndet mellan temperaturgivare är tio cm i riktning mot strömmen.
Nästa steg är att ansluta temperaturgivare med din arduino, den + och - är anslutna till 5V och GND port för arduino, och tredje (åtgärd) trådar av båda sensorerna är anslutna till A0 och A1, A0 är för uppströms sensor och A1 för nedströms sensorn.
Koden
Koden bygger på Arduino exempel > 01. grunderna > ReadAnalogVoltage.
Koden måste du köra skrivs under denna artikel, den kan användas med eller utan LCD-skärmen. Om du inte använder LCD-skärmen kan du läsa mätningar i följetong monitor av arduino programmet.
Koden tar genomsnittet av fem mätningar för både sensorer och sedan testa dem om genomsnittet är den högsta genomsnittligt hittills, om detta är sant det minns tiden. Koden gör detta för båda sensorerna och sedan beräknar skillnaden i tid (t2 - t1). Med kända avståndet mellan både sensorer och skillnaden i tid beräknas strömningshastighet.
Mätning
När du har bygga enheten och laddat upp koden, kan du börja mäta. Du kanske vill använda en vattenkokare för värmeböljan. Nästa steg måste utföras för varje mätning:
1. Tryck på reset-knappen på din arduino;
2. sätt ett standardbelopp på varmt vatten i bäcken (upstream) du vill mäta;
3. arduino returnerar strömningshastighet när hela värmeböljan har flugit av.
Mängden vatten som vi tillämpat var 25 ml avstånd uppströms första temperaturgivaren var 0,75 meter (detta arbetat för oss men för ström det kan vara olika, så försök olika avstånd och mängder av vatten).
Datum: 26-11-2014
autors:
Fia Schuurman
Daan Houtzager
Arduino koden:
/*
Vi använde: ReadAnalogVoltage, sedan vi skrev en ny kod för att mäta flödeshastigheten genom värme advektion.
*/
#include < LiquidCrystal.h > / * här variabler definieras * /
LiquidCrystal lcd(12,11,5,4,3,2);
flyta dt = 0; / * dt är tiden mellan t2 sv t1 * /
flyta mätning = 0; / * mätning = strömningshastighet (u) * /
flyta FN = 0; / * FN är den nya flöde hastighet * /
flyta mn2 = 0; / * mn är det nya medelvärdet för sensor 2 * /
flyta u = 0; / * u är flödet hastighet * /
flyta mean_new = 0; / * mean_new är den nya medelvärdet för sensor 1 * /
flyta t1 = 0; / * t1 är tidpunkten för det högsta medelvärdet av sensor 1 * /
flyta t2 = 0; / * t2 är tidpunkten för det högsta medelvärdet av sensor 2 * /
void setup() {
Serial.BEGIN(9600);
LCD.BEGIN (16, 2);
LCD.Print ("snelheid [m/s]");
}
void loop() {
int sensorValue1 = analogRead(A0); / * här koden läser sensor input * /
flyta v1 = sensorValue1 * (5.0 / 1023.0); / * här sensorn ingång konverteras till spänning * /
Delay(50); / * fördröjningen behövs för att konvertera från A0 till A1 * /
int sv1 = analogRead(A1); / * 5 mätningar görs enligt ovan för varje sensor * /
flyta v21 = sv1 * (5.0 / 1023.0);
Delay(50);
int sensorValue12 = analogRead(A0);
flyta v2 = sensorValue12 * (5.0 / 1023.0);
Delay(50);
int sv2 = analogRead(A1);
flyta v22 = sv2 * (5.0 / 1023.0);
Delay(50);
int sensorValue13 = analogRead(A0);
flyta v3 = sensorValue13 * (5.0 / 1023.0);
Delay(50);
int sv3 = analogRead(A1);
flyta v23 = sv3 * (5.0 / 1023.0);
Delay(50);
int sensorValue14 = analogRead(A0);
flyta v4 = sensorValue14 * (5.0 / 1023.0);
Delay(50);
int sv4 = analogRead(A1);
flyta v24 = sv4 * (5.0 / 1023.0);
Delay(50);
int sensorValue15 = analogRead(A0);
flyta v5 = sensorValue14 * (5.0 / 1023.0);
Delay(50);
int sv5 = analogRead(A1);
flyta v25 = sv5 * (5.0 / 1023.0);
flyta mean1 = (v1 + v2 v3 + v4 + v5) / 5.0; / * här medelvärdet av de fem mätningarna beräknas för sensor 1 * /
flyta m2 = (v21 v22 v23 + v24 + + v25) / 5.0; / * här medelvärdet av de fem mätningarna beräknas för sensor 2 * /
Delay(100);
om (mean1 > mean_new) {/ * i om loop medelvärdet är testad för mean1 > mean_new * /
mean_new = mean1;
T1 = millis(); / * Om medelvärdet är den högsta hittills tiden lagras i t1 * /
Serial.println("time1");
Serial.println(T1);
}
om (m2 > mn2) {/ * samma som ovan men för sensor 2 * /
MN2 = m2.
T2 = millis();
Serial.println("Time2");
Serial.println(T2);
}
om (t2 > t1) {/ * när värmeböljan är stora båda medel ökar samtidigt, för peak t2 måste vara större än t1 * /
DT = (t2/1000-t1/1000); / * dt beräknas * /
u = (0,1/dt); / * strömningshastighet beräknas * /
Serial.println(u); / * strömningshastighet trycks i följetong monitor * /
om (u < FN + 0, 5) {/ * anpassning tiden för mätning är stor, detta loopar filtrerar bort höga värden av er som inte är riktiga * /
om (u < 100) {/ * detta om uttalande filtrerar bort hög besis i anpassning tid * /
FN: s = u; mätning = u;
}
}
lcd.setCursor(0,1);
LCD.Print(Measurement); / * strömningshastighet trycks på LCD-skärmen * /
} }