Viimasel ajal küsisin endalt võimaluse kohta mõõta potentsiomeetri takistust Arduinoga.
Minu küsimused on järgmised:
- kas see on võimalik?
- Kui see on võimalik, siis millised piirangud on Arduinol mõõdetud takistuse väärtusega?
Viimasel ajal küsisin endalt võimaluse kohta mõõta potentsiomeetri takistust Arduinoga.
Minu küsimused on järgmised:
Kui teate Ohmi seadust (mida peaksite) ja mõistate, et ADC mõõdab pinget, peaksite saama selle sealt välja töötada. Kuid ma tutvun teie üksikasjadega üksikasjalikult, et saaksite aru.
Ohmi seadus määratleb pinge (V), voolu (I) ja takistuse (R) vahelise seose.
R = V / I
Ühe tundmatu väärtuse (teie puhul R) leidmiseks peate teadma kahte ülejäänud väärtust. See tähendab, et takisti kaudu voolav vool ja kogu takisti langenud pinge.
Meil pole mingit võimalust voolu otseselt mõõta, kuid pinget saame mõõta ADC abil. Nii et kui saame kuidagi pinget mõõta ja seda voolu arvutamiseks kasutada, on meil kolm väärtust kaks ja saame arvutada kolmanda. Voolu arvutamiseks on siiski vaja teada takistust - see on see, mida me tahame teada saada.
Seega peame seejärel pakkuma teadaolevat takistust, mida saame mõõta kogu pinge ja leiavad sellest läbi voolava voolu. Kõigepealt paar meeldetuletust põhitõdedest:
Nii et kui asetame kaks takistit järjestikku ja rakendame sellele fikseeritud pinget (meie puhul 5 V), siis voolab neist mõlemast läbi üksik vool. Selle tulemusel langevad takistid üle kahe pinge - ja need kaks pinget lisavad kuni 5 V. arvutage teadaoleva takisti kaudu voolav vool. Ja see vool on sama vool, mis voolab läbi tundmatu takisti. Ja kuna me teame selle takisti pingelangust, saame selle takistuse arvutada selle pinge ja äsja arvutatud voolu abil.
Siin on just kirjeldatud vooluring:
Viinake 5V. Olgu R1 näiteks 10KΩ (piisavalt tavaline väärtus). R2, mida me ei tea.
Arduino ADC abil mõõdame väärtuse 681. Kõigepealt teisendame selle pingeks:
Vout = 681 / 1024.0 * 5,0 = 3,325 V
Nii et me teame, et R2-l on üle selle langenud 3,325 V ja kuna kõik pinged peavad olema kokku 5 V, siis teame, et R1-l on (5–3,325) 1,675 V langes üle selle.
Nii et vool (I = V / R) kuni R1 peab olema (1,675 / 10 000) 167,5 µA (0,0001675A).
Nüüd saame arvutada takistuse R2-st, kuna R = V / I ja V on 3,325 ja I on 0,0001675, seega peab R olema 19850Ω - või üsna palju 20KΩ.
See on pikapoolne versioon praegusest vaatenurgast. Siiski on olemas otsetee.
Kuna väljundpinge on sisendpinge lihtne suhe, mis on määratud takistite vahelise suhtega, saame seda kasutada palju lihtsama valemi loomiseks.
Väljundi kohal olevast näitest pinge on kaks kolmandikku sisendpingest - ja R2 on kaks kolmandikku kogu takistusest (R1 + R2). Need kaks sobivad ideaalselt. Nii et saame takisti saamiseks kasutada lihtsat suhtarvu.
Näiteks suhtevalem:
Vout = R2 / (R1 + R2) * Vin
(see on R2 kogu takistuse ja sisendpinge korrutisena)
Kui R2 on ümber korraldatud, annab see meile:
R2 = R1 * (1 / ((Vin / Vout) - 1))
Nii et võtame ülalpool mõõdetud pinge (3.325) ja teadaoleva takisti (10 000Ω) ning sisendi pinge (5 V) ja asendades need väärtused valemiga, saame:
R2 = 10 000 * (1 / ((5 / 3,325) - 1)) = 10 000 * (1 / (1,504) ) - 1) = 10 000 * (1 / 0,504) = 10 000 * 1,984 = 19840
Või päris palju 20KΩ. (Märkus: tulemuste lahknevus on puhtalt ümardamisvigade tõttu. Kasutage suuremaid täpsusväärtusi ja saate paremaid tulemusi).
Kuid selleks, et valida võrreldava väärtusega R1 nii, et pinge Vout oleks täpse mõõtmise jaoks piisavalt suur, peab teil olema ligikaudne ettekujutus takisti suuruse järjestusest, mida proovite leida.
Samuti peate olema teadlik, et ADC sisendil on üsna (suhteliselt) väike impedants (seda võib väga toorelt mõelda kui sisendi ja maapinna vahelist takistit), mida mõõdetakse madala mega -ohm vahemik. See võib mõjutada ADC-ga loetud väärtusi, kui teie takistid on liiga kõrged, kuna see takistus on paralleelne takistiga R2, nii et tegelikult mõõdaksite paralleelselt nii R2 kui ka ADC sisendi takistust . Väga kõrge takistuse mõõtmiseks peaksite kõigepealt puhverdama ADC pinge jälgija kaudu väga kõrge (kümneid või sadu tera-oomi) impedantsi sisendiga.
Küsimus pole selgesõnaliselt selge, see vastus põhineb ühe teadaoleva väärtuspoti omamisel ja soovil teada saada selle vastupanu ükskõik millises punktis, selle asemel et proovida täielikult leida tundmatut vastupanu
Otseselt vastupanu ei saa mõõta. Mida saate teha, on aga potentsiomeetri pinge mõõtmine.
Arduino pakub väga head näidet , mille leiate siit.
Nüüd on see võimalik selle muutmiseks vastupanuväärtuseks, pisut koodi muutes
int potPin = A0; // Valige potentsiomeetri sisendi tihvt potR = 1000; // See on teie maksimaalne potentsiomeetri takistus Ohmsint val = 0; // Muutuv sensorfloat-pingest tuleneva väärtuse salvestamiseks; // See on poti ujumiskindluse klaasipuhasti pinge; // See on poti takistus wipervoidi seadistamisel () {Serial.begin (9600);} void loop () {val = analogRead (potPin); // Loe väärtus poti klaasipuhasti pingest = val * (5,0 / 1023,0); // Väärtuse teisendamine pingetakistuseks = (pinge / 5,0) * potR; // Teisenda pinge takistuseks Serial.print ("Pinge ="); Seeriaprint (pinge); // Trüki pinge Serial.println ("V"); Serial.print ("Takistus ="); Seeriaprint (takistus); // Trükkige takistus Serial.println ("R"); viivitus (1000); // Lisage väike viivitus}
Mis puutub teie teise küsimusse, siis see võib põhjustada nii suurt vastupanu kui soovite. Niikaua kui värskendate koodi potR väärtust oma poti takistusega (nt 1000000 1MOhm poti jaoks)
Olen kaubanduslikult elektroonikainsener, nii et minu koodi saaks tõenäoliselt puhastada üles ja muudetud efektiivsemaks, see on alles lähtepunkt