FSR Tutorial! (7 / 7 steg)
Steg 7: BONUS! Läsa FSRs utan analog pins
Eftersom FSRS är i princip motstånd, det är möjlighet att använda dem även om du inte har någon analog stiften på din mikrokontroller (eller om säga du vill ansluta mer än du har analog ingång stift. Det sätt vi gör detta är genom att utnyttja en grundläggande elektroniska egenskap av motstånd och kondensatorer. Det visar sig att om du tar en kondensator som ursprungligen lagrar ingen spänning, och Anslut den till makten genom en resistor, kommer det ta ut upp till nätspänningen långsamt. Ju större motståndet, den långsammare det är.
Detta är eftersom kondensatorn fungerar som en hink och motståndet är som en tunn pipa. För att fylla en hink med en mycket tunn pipa tar nog tid som du kan räkna ut hur bred röret är av timing hur lång tid det tar för att fylla hinken upp halvvägs.
I detta fall våra "hink" är en 0.1uF keramiska kondensator. Du kan ändra kondensatorn nästan som du vill men tidpunkten värdena ändras också. 0.1uF verkar vara ett OK ställe att börja för dessa FSRs.
/ * FSR enkel testning skiss.
Anslut ena änden av FSR att driva, den andra änden till stift 2.
Anslut ena änden av en 0.1uF kondensator från stift 2 till marken
För mer information se www.ladyada.net/learn/sensors/fsr.html * /
int fsrPin = 2; FSR och cap är anslutna till pin2
int fsrReading; digital läsning
int ledPin = 13. Du kan bara använda den "inbyggda" LED
void setup(void) {
Vi skickar avlusningsinformation via seriell bildskärmen
Serial.BEGIN(9600);
pinMode (ledPin, produktionen); har en LED för utdata
}
void loop(void) {
Läs motståndet med RCtime teknik
fsrReading = RCtime(fsrPin);
om (fsrReading == 30000) {
om vi fick 30000 som innebär att gått vi"ut"
Serial.println ("ingenting ansluten!");
} annat {
Serial.Print ("RCtime läsning =");
Serial.println(fsrReading); den råa analoga behandlingen
Göra en liten bearbetning för att hålla LED blinkar
fsrReading = 10;
Ju mer du trycker, desto snabbare det blinkar!
digitalWrite (ledPin, hög);
Delay(fsrReading);
digitalWrite (ledPin, låg);
Delay(fsrReading);
}
Delay(100);
}
Använder en digital pin för att mäta en resistor (som en FSR eller fotocell!)
Vi gör detta genom att ha motstånd matar strömmen i en kondensator och
räkna hur lång tid det tar för att få till Vcc/2 (för de flesta arduinos, som är 2.5V)
int RCtime (int RCpin) {
int läsa = 0; börja med 0
Ange PIN-koden till en utgång och dra till låg (marken)
pinMode (RCpin, OUTPUT);
digitalWrite (RCpin, låg);
Nu ange PIN-koden till en ingång och...
pinMode (RCpin, indata);
medan (digitalRead(RCpin) == låg) {/ / räkna hur lång tid det tar för att stiga upp till hög
behandlingen ++; steg att hålla reda på tid
om (läser == 30000) {
om vi fick detta långt, motståndet är så hög
det troligt att ingenting är ansluten!
bryta; lämna loopen
}
}
Antingen vi maxade OK på 30000 eller förhoppningsvis fick en läsning, returnera antalet
returnera behandlingen.
}
Det är möjligt att beräkna det verkliga motståndet från den behandlingen men tyvärr variationer i IDE och arduino ombord kommer att göra det inkonsekvent. Vara medveten om att om du ändrar IDE versioner av operativsystem, eller använda en 3.3V arduino istället för 5V eller förändring från en 16 mhz Arduino till en 8 Mhz en (som en lilypad) det kan finnas skillnader på grund av hur lång tid det tar för att läsa värdet av en PIN-kod. Vanligt det är inte en stor sak men det kan göra ditt projekt svårt att felsöka om du inte har förväntat dig det!