Stap 7: BONUS! Lezing FSRs zonder analoge pinnen
Omdat de FSR in principe weerstanden zijn, zijn mogelijk om hen te gebruiken zelfs als u niet over een analoge beschikt pinnen op uw microcontroller (of als zeggen u verbinding wilt maken meer dan hebt u analoge input pinnen. De manier waarop we dit doen is door gebruik te maken van een eenvoudige elektronische eigenschap van weerstanden en condensatoren. Het blijkt dat als je een condensator die aanvankelijk geen spanning is opgeslagen, en sluit deze aan de macht door middel van een weerstand, zal het tot de netspanning langzaam oplaadt. Hoe groter de weerstand, de langzamer is.
Dit is omdat de condensator gedraagt zich als een emmer en de weerstand als een dunne pijp is. Als u wilt een emmer vullen met een zeer dunne pijp duurt genoeg dat je hoe breed de pijp is achterhalen kunt door de timing van hoe lang het duurt om halverwege de emmer vullen.
In dit geval onze 'emmer' is een 0.1uF keramische condensator. U kunt de condensator bijna elke gewenste manier maar de timing waarden ook verandert. 0.1uF lijkt een OK-plek om te beginnen voor deze FSRs.
/ * FSR eenvoudige testen schets.
Sluit het ene uiteinde van de FSR aan de macht, het andere uiteinde aan op pin 2.
Sluit één uiteinde van een 0.1uF condensator van pin 2 op grond
Voor meer informatie zie www.ladyada.net/learn/sensors/fsr.html * /
int fsrPin = 2; de FSR en GLB zijn aangesloten op pin2
int fsrReading; de digitale lezing
int ledPin = 13; u kunt gewoon gebruik maken van de 'ingebouwde' LED
ongeldig setup(void) {}
We sturen foutopsporingsgegevens via de seriële monitor
Serial.begin(9600);
pinMode (ledPin, OUTPUT); hebben een LED voor uitvoer
}
ongeldig loop(void) {}
Lees de weerstand met behulp van de RCtime-techniek
fsrReading = RCtime(fsrPin);
Als (fsrReading == 30000) {}
Als we got 30000 betekent dat time-out we' '
Serial.println ("Nothing aangesloten!");
} else {}
Serial.Print ("RCtime lezing =");
Serial.println(fsrReading); de ruwe analoge lezing
Doen een beetje verwerking zodat de LED knippert
fsrReading / = 10;
Hoe meer druk je op, hoe sneller het knippert!
digitalWrite (ledPin, hoge);
delay(fsrReading);
digitalWrite (ledPin, laag);
delay(fsrReading);
}
delay(100);
}
Maakt gebruik van een digital pin voor het meten van een weerstand (zoals een FSR of fotocel!)
We doen dit door het hebben van de huidige weerstand feed in een condensator en
tellen hoe lang het duurt om naar Vcc/2 (voor de meeste arduinos, thats 2.5V)
int RCtime (int RCpin) {}
int lezing = 0; beginnen met 0
de PIN-code ingesteld op een uitgang en trek op laag (grond)
pinMode (RCpin, uitvoer);
digitalWrite (RCpin, laag);
Nu de pincode instellen op een ingang en...
pinMode (RCpin, INPUT);
terwijl (digitalRead(RCpin) == LOW) {/ / count hoe lang het duurt om het opstaan op hoog
lezing ++; _ / / verhogen als u wilt bijhouden van de tijd
Als (lezen == 30000) {}
Als we dit got ver, de weerstand is zo hoog
zijn waarschijnlijk dat niets is aangesloten!
breken; verlaten van de lus
}
}
OK ofwel we maxed op 30000 of hopelijk kreeg een lezing, keren de graaf
retourneren van lezing;
}
Het is mogelijk om te berekenen van de werkelijke weerstand van de lezing, maar helaas, de variaties in de IDE en arduino board zal het inconsequent maken. Let op dat als u IDE versies van OS's wijzigt, of gebruik een 3.3V arduino in plaats van 5V, of verandering van een 16 mhz Arduino tot een 8 Mhz een (zoals een lilypad) kunnen er verschillen als gevolg van hoe lang het duurt om te lezen van de waarde van een pin. Meestal is dat niet een big deal maar het kan uw project moeilijk te debuggen als je het niet verwacht!