Hur/vart skriver jag in en formel i Arduino sketch
Hur/vart skriver jag in en formel i Arduino sketch
Hej!
Jag håller på och lär mig Arduino UNO och tänkte prova att använda mig av en tryckgivare och sedan få värdet visat på en LCD skärm.
Nu har jag kommit så långt att jag har kopplat in tryckgivaren till Arduinot analog ingång och kan se givarens output i volt, men sedan ska det värdet "gå igenom" en formel för att visa trycket i kPa som är enligt följande
fomel: Uout= (c1*pabs+c0)*US .
Uout= signal output voltage in V (Visas i Arduino)
US = supply voltage in V (5?)
pabs= absolute pressure in kPa (X)
c0 = 15/550 (0,0272727272727273)
c1 = 0.8/550 kPa-1 (0,0014545454545455)
Denna formel tar ju hänsyn till givarens matningsspänning och behöver man "övervaka" den eller är Arduino exakt på att leverera 5V?
så man kan sätta den som en konstant på 5?
Jag har använt mig av Read Analog Voltage från Arduinos hemsida som jag förhoppningsvis lyckats bifoga en bild på
Så min fråga är hur och vart kan jag väva in formeln i sketchen?
Och även -1 som står efter kPa vet jag inte riktigt vad den betyder
Jag hoppas någon begrep vad jag ville ha sagt
Tack på förhand //Kristoffer
Jag håller på och lär mig Arduino UNO och tänkte prova att använda mig av en tryckgivare och sedan få värdet visat på en LCD skärm.
Nu har jag kommit så långt att jag har kopplat in tryckgivaren till Arduinot analog ingång och kan se givarens output i volt, men sedan ska det värdet "gå igenom" en formel för att visa trycket i kPa som är enligt följande
fomel: Uout= (c1*pabs+c0)*US .
Uout= signal output voltage in V (Visas i Arduino)
US = supply voltage in V (5?)
pabs= absolute pressure in kPa (X)
c0 = 15/550 (0,0272727272727273)
c1 = 0.8/550 kPa-1 (0,0014545454545455)
Denna formel tar ju hänsyn till givarens matningsspänning och behöver man "övervaka" den eller är Arduino exakt på att leverera 5V?
så man kan sätta den som en konstant på 5?
Jag har använt mig av Read Analog Voltage från Arduinos hemsida som jag förhoppningsvis lyckats bifoga en bild på
Så min fråga är hur och vart kan jag väva in formeln i sketchen?
Och även -1 som står efter kPa vet jag inte riktigt vad den betyder
Jag hoppas någon begrep vad jag ville ha sagt
Tack på förhand //Kristoffer
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
- Klas-Kenny
- Inlägg: 11339
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Hur/vart skriver jag in en formel i Arduino sketch
Kod: Markera allt
//någonstans innan setup()
#define C0 0.8/550.0
#define C1 15.0/550.0
#define US 5.0
//Efter raden float voltage =...
float pressure = ((voltage/US)-C0)/C1;
Serial.println(pressure);
Att övervaka 5V matningen är inte helt självklart, då måste du ha en annan spänningsreferens för Arduinon och sådär. Du kan nog förutsätta att du har 5V i det här fallet.
Re: Hur/vart skriver jag in en formel i Arduino sketch
Finns ett trick att mäta matspänningen indirekt, man mäter den interna 1.1v ref där adc använder vcc som referens.
https://code.google.com/archive/p/tinke ... meter.wiki
https://code.google.com/archive/p/tinke ... meter.wiki
- hcb
- Moderator
- Inlägg: 5761
- Blev medlem: 23 februari 2007, 21:44:50
- Skype: hcbecker
- Ort: Lystrup / Uppsala
- Kontakt:
Re: Hur/vart skriver jag in en formel i Arduino sketch
"kPa-1" är enheten för konstanten: kPa^-1 eller 1/kPa.
Re: Hur/vart skriver jag in en formel i Arduino sketch
Skriv alltid #define-värde inom () :
annars blir det fel senare i beräkningen.
Kod: Markera allt
#define C0 (0.8/550.0)
#define C1 (15.0/550.0)
Re: Hur/vart skriver jag in en formel i Arduino sketch
Ja, annars försöker väl preprocessorn utföra divisionen, och mig veterligen kan preprocessorn bara utföra heltalsaritmetik.
Personligen gillar jag inte sådana makron, bättre att skriva in det hela direkt i koden.
Sedan kanske man skulle beräkna konstanterna innan, då det blir rätt tidsödande för en enkel 8-bitare att fixa till divisionerna.
Jag skulle nog dessutom försöka räkna om det så det blev heltalsaritmetik i stället.
Personligen gillar jag inte sådana makron, bättre att skriva in det hela direkt i koden.
Sedan kanske man skulle beräkna konstanterna innan, då det blir rätt tidsödande för en enkel 8-bitare att fixa till divisionerna.
Jag skulle nog dessutom försöka räkna om det så det blev heltalsaritmetik i stället.
Re: Hur/vart skriver jag in en formel i Arduino sketch
Tack för alla snabba svar!
Jag skrev sketchen så här:
Men det som händer är att i seriell monitor visar den -14,72 hela tiden och det värdet ändras inte när trycket ökar.
Som jag får till det så blir det ett minus värde när man räknar formeln utan parenteser, jag försökte även att parentesa voltage/US alltså "(((voltage/US)-C0)/C1);"
utan att det blev någon skillnad.
Och även denna lösning utan någon skillnad
Så vad kan vara bekymmret här?
Jag skrev sketchen så här:
Men det som händer är att i seriell monitor visar den -14,72 hela tiden och det värdet ändras inte när trycket ökar.
Som jag får till det så blir det ett minus värde när man räknar formeln utan parenteser, jag försökte även att parentesa voltage/US alltså "(((voltage/US)-C0)/C1);"
utan att det blev någon skillnad.
Och även denna lösning utan någon skillnad
Så vad kan vara bekymmret här?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Hur/vart skriver jag in en formel i Arduino sketch
I värdena för C0 och C1 har du decimalkomma i st f decimalpunkt!
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Hur/vart skriver jag in en formel i Arduino sketch
Nä #define utför bara textsubstitution. Problemet är att division inte är associativ.TomasL skrev:Ja, annars försöker väl preprocessorn utföra divisionen, och mig veterligen kan preprocessorn bara utföra heltalsaritmetik.
Personligen gillar jag inte sådana makron, bättre att skriva in det hela direkt i koden.
Sedan kanske man skulle beräkna konstanterna innan, då det blir rätt tidsödande för en enkel 8-bitare att fixa till divisionerna.
Jag skulle nog dessutom försöka räkna om det så det blev heltalsaritmetik i stället.
(x/15.0)/550.0 ger inte samma resultat som x/(15.0/550.0)
Men jag håller definitivt med om att förberäkna konstanter.
Dessutom kan man förenkla formeln till 137.5 * Vin - 18.75 om man antar att givaren och arduinon matas med samma spänning. Dvs. det spelar ingen roll vad den faktiska spänningen är, man får alltid samma resultat så länge givarens US och arduinons Vref är lika.
Det skulle säkert också gå att ändra formeln till att använda heltal och adc-värdet (0-1023) direkt men det orkar jag inte försöka.
Re: Hur/vart skriver jag in en formel i Arduino sketch
Jodå, preprocessorn utför viss heltalsaretmetik, det går faktisk att skriva hela program med enbart preprocessorn.
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Hur/vart skriver jag in en formel i Arduino sketch
Jo jag vet att den kan beräkna heltal, men inte specifikt med #define. Men t.ex. #if gör det.
Ta t.ex.
så blir resultatet return 1+1; efter preprocessorn. Sen kommer förmodligen kompilatorn att optimera det till return 2.
Blir det något annat så är det icke-standard.
Ta t.ex.
Kod: Markera allt
#define ONEPLUSONE 1+1
int main()
{
#if ONEPLUSONE == 2
return ONEPLUSONE;
#else
return 0;
#endif
}
Blir det något annat så är det icke-standard.
- Jan Almqvist
- Inlägg: 1581
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Hur/vart skriver jag in en formel i Arduino sketch
Jag kan tänka mej att denna konstruktion gör att du tappar all (?) noggrannet eftersom variabeln sensorValue är ett heltal.Dioden skrev: Så vad kan vara bekymmret här?
Kod: Markera allt
int sensorValue = analogRead(A0);
.
.
.
float voltage = sensorValue * (5.0 / 1023.0);
-
- Inlägg: 1397
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Hur/vart skriver jag in en formel i Arduino sketch
analogRead() ger ett heltal mellan 0 och 1023. Att multiplicera ett heltal med ett flyttal ger automatisk cast till flyttal. Problem är som tidigare nämnts komma istället för punkt i konstanterna.
Re: Hur/vart skriver jag in en formel i Arduino sketch
Vill du ha en troligen snabbare rutin som inte använder flyttal, så:
P=(5500xCNT+153450) högerskifta sedan 13 gånger.
Där CNT är värdet från AD-Omvandlaren (förutsätter att det är en 10 bitars med 1023 som maxvärde)
Använder max 32 bitar.
Och jo, du matar givaren med samma spänning som AD-omvandlaren.
P=(5500xCNT+153450) högerskifta sedan 13 gånger.
Där CNT är värdet från AD-Omvandlaren (förutsätter att det är en 10 bitars med 1023 som maxvärde)
Använder max 32 bitar.
Och jo, du matar givaren med samma spänning som AD-omvandlaren.
Re: Hur/vart skriver jag in en formel i Arduino sketch
Helt klart så var det mina ,, som skulle bort och bytas ut mot decimalpunkt, och då fungerade allt som det skulle
Jag skrev också ut givarens output värde samtidigt i monitorn och då kan samma spänningsvärde resultera i olika tryck (om än mycket små skillnader), är det för att den läser mer än två decimaler men visar endast två, så att spänningen varierar men den skriver inte ut det?
Jag skrev också ut givarens output värde samtidigt i monitorn och då kan samma spänningsvärde resultera i olika tryck (om än mycket små skillnader), är det för att den läser mer än två decimaler men visar endast två, så att spänningen varierar men den skriver inte ut det?