Analoga vindbommen med Auto ställa in (6 / 8 steg)
Steg 6: Uppgradering till 15 bitars ADC och kod förbättringar
Efter att få vissa foder tillbaka från teknisk support på vektor instrument på detta instructable, gjorde jag några små förändringar till testrigg. De märkte att 10K resistor som jag använde tidigare att skydda torkar kretsen var proberly för stor för nano ADC kapacitans infrastrukturen och så detta var reducerad till 8,25 K och höll för uppgraderingen.
ADC uppgraderades från 10 bit till 15 bitar med en ADS1115 att ge ett mycket bättre utbud. Detta var särskilt användbara när du tittar på problemet med lägsta och högsta värden genom att observera hur de fluktuerade använda följetong monitor.
En annan sak som teknisk support pekade mig till var att om kodning var utformad mycket noga, kan vi få värden av 180 grader nära north point istället för 360. Detta beror på att vi tar en snabb prov sats av 10 eller så avläsningar och ta ett genomsnitt, vilket är bra så länge sensorn inte "omger" norr och plocka upp mycket små och mycket stora värden i samma parti. Koden för att hantera detta är ganska enkelt, det delar alla avläsningar i två grupper - "stora" och "små" - och ignorerar de "små" avläsningarna om antalet "stora" värden är större. Lätt!
Denna bit av koden nedan hand tar om den instans där vindflöjeln är svävar runt north (svävande zon) och plocka upp stora och små värden i samma parti av 11:
Totala utbud handlar om 0 till 24000.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
om (adc0 < 12000)
{
sensorValue4 = sensorValue4 + adc0;
små ++;
}
om (adc0 > = 12000)
{
sensorValue3 = sensorValue3 + adc0;
stora ++;
}
om (stora > små)
{
sensorValue = sensorValue3 / big;
}
om (stora < små)
{
sensorValue = sensorValue4 / liten;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Jag lade också till en liten mängd kod att beräkna variationer som jag fick i behandlingen så att jag kunde bedöma riktigheten av enheten:
void variation()
{
maxValue = max(sensorValue,maxValue);
minValue = min(sensorValue,minValue);
variabilitet = maxValue - minValue;
Serial.Print ("variabilitet i läsning =");
Serial.println(variability);
}
I slutändan variabiliteten likställas med om +-0,5 grader nära norr pekar. Variabilitet i mellanregistret t.ex. 180 grader var ganska mycket noll även om det skulle finnas några sammansatta fel infördes på grund utan att veta vilka ADC alltför väl.