Vajalikud teadmised:
[HW] Kasutajaliidese moodul, [HW] Kombomoodul,
[ELC] Pingejagur,
[AVR] Analoog-digitaalmuundur,
[LIB] Analoog-digitaalmuundur, [LIB] Graafiline LCD
Takistuslik jõuandur (inglise keeles force-sensing resistor, lühend FSR) on sisuliselt piesoelektriline takisti, mille takistus muutub temale mõjuva rõhumisjõudu toimel. Anduriga saab mõõta pigistamist või kaalu. Odavad takistuslikud jõuandurid on lihtsalt kasutatavad, kuid ei ole väga täpsed. See tähendab, et anduriga ei ole võimalik mõõta absoluutseid väärtuseid vaid pigem suhtelisi suuruseid. Nagu kõikide takistuslike anduritega piisab anduri väärtuse lugemiseks mikrokontrolleriga lihtsast pingejaguri ühendusskeemist, kus pingejaguri väljund ühendatakse mikrokontrolleri analoogsisendisse. Kuigi FSR on suhteliselt hea pingetaluvuse ja löögikindlusega võib see kahjustuda, kui survejõudu avaldatakse pika aja jooksul.
FSR koosneb voolu juhtivast polümeerist, mis muudab oma takistust vastavalt sellele avaldatud rõhumisjõule. Mõõteelement koosneb nii elektrit juhtivatest kui -mittejuhtivatest osakestest, mis on paigutatud maatriksisse. Vajutades polümeerile muutub elektrit juhtivate osakeste asukoht ja need puutuvad rohkem kokku ning seeläbi materjali takistus muutub.
FSR jõuandurite tööpiirkond on tavaliselt vahemikus 0,3 N kuni 100 N, mis tähendab kaaluvahemikku 30 g - 10 kg. See on küllalt suur mõõtepiirkond ja võimaldab seega antud jõuandureid rakendada väga erinevates süsteemides. Samuti on võimalik tööpiirkonda suurendada näiteks kangmehhanismi abil, juhul, kui on vaja mõõta suuremat kaalu. Tähele tuleks siiski panna seda, et antud andur ei ole mõeldud täpismõõtmisteks vaid pigem mingi jõuvahemiku tuvastamiseks. Samuti tuleb arvestada anduri reaktsiooniaega, eriti jõu eemaldamisel, mil andur taastab oma vaikeväärtuse. Taastumisaeg sõltub eelnevalt rakendatud jõust ja selle rakenduskestusest.
FSR andureid kasutatakse tavaliselt vajutustugevust mõõtvates nuppudes ning näiteks muusikainstrumentides, autoistmetes (istuva inimese tuvastamiseks) ja robootikas.
Kodulabori komplektis on tüüpiline takistuslik jõuandur, mille aktiivse mõõteala diameeter on 12,7 mm. Mida suuremat jõudu mõõtealale avaldada, seda väiksem anduri takistus. Anduri tundlikus on optimeeritud inimese näpuvajutuse tuvastamiseks. Jõu - takistuse graafik illustreerib anduri takistuse sõltuvust avaldatud rõhumisjõust, mis tüüpiliselt jälgib eksponentsfunktsiooni pöördväärtuse graafikut.
Lihtsaim viis FSR anduri kasutamiseks on ühendada see pingejagurisse mikrokontrolleri toite ja sisendsignaali vahele ning konstantne takisti signaali ja maa vahele. Pingejaguri konstantseks takistiks võib valida 1 kΩ. Pingejaguri väljundpinge ühendatakse mikrokontrolleri analoogsisendisse. Kui FSR anduri takistus väheneb, siis pingejaguri pinge suureneb.
Jõudu leidmiseks njuutonites tuleb mikrokontrolleri ADC võrdluspinge seadistada samaks mikrokontrolleri toitepingega. Seejärel on lihtne arvutada FSR anduri takistus kasutades valemit:
RFSR = ( (Vcc * R1) / U) - R1
Kus: RFSR – FSR anduri takistus Vcc – Toitepinge. Tavaliselt 5 V (Kodulaborid I ja II) või 3,3 V (Kodulabor III) U – Pingejaguri väljundpinge. ADC pingevahemik peab olema vahemikus 0 V - Vcc (Kodulabor III puhul 0 - 2,064 V) R1 – Pingejaguri teine takisti, näiteks 1 kΩ
Seejärel saab arvutada anduri juhtivuse CFSR ühikuga S/m [Siemens meetri kohta]. Juhtivuse ja takistus on omavahel pöördvõrdelises seoses:
CFSR = 1 / RFSR
Selleks, et leida jõu väärtus, tuleks juhtivust võrrelda anduri juhtivus-jõu graafikuga, et leida sealt andurile avaldatud jõud. Graafikust võib tuletada ka valemi, mis on tavaliselt sõltuvuses mõõtepiirkonnast. Näiteks 0-1 Kg mõõtmiseks võib kasutada valemit:
FFSR = CFSR / 80
Näiteprogramm kuvab mõõdetud jõudu njuutonites ja massi kilogrammides LCD-l.
// Kodulabori jõuanduri näidisprogramm #include <stdio.h> #include <homelab/adc.h> #include <homelab/delay.h> #include <homelab/pin.h> #include <homelab/module/lcd_gfx.h> // Väärtus vahemiku teisendusfunktsioon long map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } // Põhiprogramm int main(void) { signed short value; // Analoogmõõtmise tulemus char text[50]; int voltage; // Analoogmõõtmise tulemus teisendatuna pingeks unsigned long resistance; // Pinge teisendatuna takistuseks unsigned long conductance; long force; // Takistus teisendatuna jõuks long weight; // Jõud teisendatuna massiks // LCD seadistamine lcd_gfx_init(); lcd_gfx_clear(); lcd_gfx_write_string("Jõu andur"); // ADC mooduli algseadistamine adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); // Lõputu tsükkel while (1) { // Analoogkanali väärtuse lugemine value = adc_get_value(1); // Analoog väärtuse, mis jääb vahemikku 0-2048 // muundamine vahemikku 0-2064 (0 V - 2064 mV) // Kuna Kodulabor III puhul vastab ADC tulem peaaegu pingele 1 mV, // siis pole muundamine vajalik //voltage = map(value, 0, 2048, 0, 2064); voltage = value; // Anduri takistuse arvutamine resistance = (3300000/voltage) - 1000; // Juhtivuse arvutamine conductance = 1000000/resistance; lcd_gfx_goto_char_xy(1,3); // Jõu väärtuse arvutamine njuutonites ja selle kuvamine force = conductance / 80; sprintf(text, "%lu Njuutonit", force); lcd_gfx_goto_char_xy(1,3); lcd_gfx_write_string(text); // Kaalu väärtuse arvutamine kilogrammides ja selle kuvamine lcd_gfx_goto_char_xy(1,4); weight = force / 9,8; sprintf(text, "%lu kg ", weight); lcd_gfx_write_string(text); sw_delay_ms(500); } }