Analoga sensorer - beräkna nunnedok infördes genom en belastning eller dra ner Resistor (2 / 2 steg)
Steg 2: Matematik
Jag var faktiskt arbetar på gång på analoga vindbommen projektet, som är i grunden en kontinuerlig potentiometer med en liten "död zon" på north. Projektet var inledningsvis plågas av de välbekanta bullriga avläsningarna tills jag tittade på motståndet närmare.
För det första, jag ritade den faktiska motstånd kurvan i Microsoft excel, som är det totala motståndet skapad av kombinationen av vindbommen och laddar... och jag kallade det "Totalt (RT)". Inledningsvis var jag besviken eftersom jag inte kunde faktiskt se varje kurva alls, så då ändrade jag båda axlarna till log10. Hey presto! Jag kan se en kurva! (Den blå kurvan till vänster i diagrammet ovan).
Det totala motståndet ges av denna välkända formel:
RT = (Rw * R L ) / (Rw + RL)
- var:
- RT är det totala motståndet
- RW är wiper motståndet
- RL är laddamotståndet
OK, så långt så bra - inte för komplicerat?
Nästa, jag ville se hur min nya tjusiga kurva såg sida vid sida med en tråkig rakt linjär kurva, precis som om resultaten inte var faktiskt en kurva på alla, men en rak linje. Formeln för detta är:
RLIN = (Rw * RTMAX) / RWMAX
- var:
- RLIN är hypotetiska linjära motståndet ("imaginära" motståndet)
- RW är wiper motståndet
- RTMAX är det maximala värdet av det totala motståndet
- RWMAX är det maximala värdet av wiper motståndet
Detta är bra, men där kommer vi att få värdet av det totala motståndet från? Jag trodde verkligen det var kommer att bli enklare än så här, men sedan insåg att vi redan har räknat ut detta värde ovan, det är bara det maximala värdet av RT . Men bara för förtydligande, här är formeln:
RTMAX = (RWMAX * R L ) / (RWMAX + RL)
- så, nu, om vi ersätter ut RTMAX får vi:
RLIN = (RW * RTMAX) / RWMAX = (RW / RWMAX) * (RWMAX * RL) / (RWMAX + RL) = (RW * RL) / (RWMAX + RL)
Nu vi kan rita våra linjär kurva (i rött) och se om det är märkbart skiljer sig från kurviga kurvan... och ja... så länge vi fuska genom att använda log10, kan vi se skillnaden. Om vi öppnar excel-filen, kan vi ändra värdet av belastning motståndet till något dumt litet och få några ganska galet kurvor produceras.
Slutligen, jag insåg att vi kunde sedan subtrahera icke linjära kurvan från linjära kurvan och få ett slutresultat: det faktiska icke-linearitet, eller "skillnaden" mellan linjära och icke linjära resultaten. Detta är ganska blå kurvan till höger och ges av:
RDIFF = RT - RLIN = (RW * RL) / (RW + RL) - (RW * RL) / (RWMAX + RL)
Denna ekvation kan minskas ytterligare, men den arduino nano redan kommer att kämpa med några av de stora siffrorna produceras (vi arbetar med 16-bitars ADCs), så vi måste hjälpa det längs en liten bit.
Så småningom blir formeln översatt till arduino koden:
////////////////////////////////////////////////////////////////////////////////////////////////////////
Icke-linearitet beräkningar:
load2 = laddar / 1000 * maxSensorValue;
Serial.Print ("load2 =");
Serial.println(load2);
långa loadz = load2/5;
lång sensorValuez = sensorValue/5;
lång maxSensorValuez = maxSensorValue/5;
långa en = 5 * ((sensorValuez * loadz) / (sensorValuez + loadz));
långa b = 5 * ((sensorValuez * loadz) / (maxSensorValuez + loadz));
Serial.Print ("a =");
Serial.println(a);
Serial.Print ("b =");
Serial.println(b);
outputValue = sensorValue + a - b.
//////////////////////////////////////////////////////////////////////////////////////////////////////
Här ser du att koden är mer otymplig än formeln och jag har haft att dividera med 5 för att minska storleken på några av siffrorna. Men det fungerar!
Förhoppningsvis, jag har nu också visat inte bara att matematik kan vara roligt men också relevant till den verkliga världen? Men vad allt detta arbete faktiskt uppnå?
Om vi minns från tidigare, rekommenderade minsta lasten motståndet var 100K, men om vi minskar dessa ohm kan vi göra avläsningarna avsevärt stabilare nära döda zonen. Jag försökt massor av olika varianter och med hjälp av formeln ovan för att förneka icke linearitet, slutade jag upp med en super exakt (+ - 0,1%) 30K motstånd och fortfarande har bra avläsningar på due south, som enligt vår excel-diagram är där de flesta nunnedok kommer att inträffa.