Låg kostnad Spirometer (4 / 5 steg)
Steg 4: Skapa koden
Detta steg var överlägset mest intensiva tidsdelen av detta projekt. Lyckligtvis för dig, har jag gjort de flesta av arbetet redan! I det här steget försöker jag förklara strömningslära och sökvägen jag tog för att komma från spänning till luft volymen med vissa relevanta ekvationer. Jag har också bifogat min Arduino kod som ett pdf-dokument, så känn dig fri att ta en titt på det och ändra parametrar som behövs för din design.
1. konvertera mellan digitala och analoga signaler:
När en analog signal (som spänningen produceras av våra tryckgivare) behandlas av Arduino, konverteras till ett digitalt värde mellan 0 och 1023. Vårt första steg i koden efter behandlingen i detta värde är att konvertera det till en analog värdet. Här är lite kod som gör just detta:
inputVolt = analogRead(analogInPin); Spänning i (0 till 1023)
volt = inputVolt*(vs/1023.0);
2. konvertera från en spänning till trycket:
Syftet med tryckgivaren är att vända en tryckskillnad in i en spänning, men nu vill vi fastställa tryckskillnaden utifrån en given spänning. Databladet innehåller en formel för att göra just detta, och med viss omdisponering, trycket kan beräknas enligt följande:
pressure_psi = (15/2)*(volt-2.492669); Trycket i psi
Du kanske märker att ett värde av 2.492669 används i stället för den 2.5 som jag väntat sensorn att producera vid jämvikt. Jag fastställt detta mer exakt värde efter ett antal kalibreringar visade att min balans värde inte var på exakt 2,5 V. Du kan behöva justera detta nummer baserat på din egen sensor tendenser.
3. psi till Pa
Ekvationen i databladet ger oss trycket i psi. För att underlätta ytterligare beräkningar, kommer vi konvertera detta till Pascal, som är SI-enheten för tryck.
pressure_pa = pressure_psi * 6894.75729; Trycket i Pa
4. beräkning av massflödet från trycket
Detta nästa steg innebär viss strömningslära kunskap och kreativa algebra, men i slutändan kan du konvertera din tryckskillnaden i ett massflöde. Följa ekvationen kan skrivas för att lösa för W, massflöde i kg/s:
dP=((W^2)/2rho)*(1/A2^2−1/A1^2)
När dP är förändringen i tryck över hela röret i Pa, W massflöde i kg/s, rho är tätheten av luft i kg/m ^ 3, och A1 och A2 är områdena tvärsnitt av de två olika delarna av din tub i m ^ 2. Efter omdisponering och inklusive värden för rho, och A1 och A2 för min särskilda röret design, var jag kan beräkna W med följande kod:
massFlow = 1000*sqrt((abs(pressure_pa)*2*rho)/((1/(pow(area_2,2)))-(1/(pow(area_1,2))); Massflöde av luft
Syntaxen i Arduino gör detta lite rörigt, så var noga med att kontrollera din parentes. Jag ingår också en faktor 1000 så att i steg 5, vi hamnar med L/s istället för m ^ 3/s, vilket gör att volymen i en standard enhet.
5. massflöde till volymflödet
Detta steg är relativt lätt-vi kan konvertera massflöde till volymflödet genom att dividera med densiteten.
volFlow = massFlow/rho; Volymflödet av luft
6. beräkna volym
Slutligen har vi nått en punkt där volym kan beräknas. Eftersom Arduino inte har möjlighet att utföra integraler, måste vi manuellt lägga upp våra volymflöde över tiden. Eftersom volymflöde är helt enkelt volym över tid, kan vi sammanfatta volymflöde över små bitar tid att beräkna totala volym. Detta kan göras med en fördröjning i Arduino och multiplicera varje volymflödet pulsvärdet av ett litet dt värde.
volym = volFlow * dt + volym; Total volym (i huvudsak integrerad över tiden)
DT = 0,001;
Delay(1);
Det är alla matten! Resten av koden är bara ställa in LCD-skärmen, definiera variabler och ställa in knappen kontrollerna.
Den om-uttryck i koden sänks volymen beräknas endast när knappen skjuts. Den här funktionen förhindrar beräkningen påverkas av buller och även tillåter användaren att ange när luften faktiskt strömmar genom röret.