This is an old revision of the document!
Vajalikud teadmised: [HW] Andurite moodul, [HW] Kasutajaliidese moodul, [AVR] Analoog-digitaalmuundur, [LIB] Analoog-digitaalmuundur, [LIB] Graafiline LCD, [LIB] Andurid
FSR (force-sensing resistor) e jõust sõltuv takisti on andur, millega on võimalik mõõta rõhumisjõudu, pigistamist või kaalu. FSR on põhimõtteliselt takisti, mille takistus sõltub sellest, kui tugevasti seda kokku vajutada. Andurid on suhteliselt odavad ja lihtsasti kasutatavad kuid on ebatäpsed. See tähendab, et anduriga ei ole võimalik mõõta absoluutseid väärtuseid vaid tuleks lugeda suhtelisi suuruseid. Nagu kõikide takistuslike anduritega piisav anduri lugemiseks lihtsast pingejaguri skeemist. Kuigi FSR on hea löögikindlusega võib see kahjustuda, kui sellele avaldada jõudu väga pikka aega.
FSR koosneb juhtivast polümerist, mis muudab oma takistust vastavalt sellele avaldatud rõhumisjõule. Seda toodetakse tavaliselt kas polümerkihina või prinditava “tindina”. Mõõteelement koosneb nii elektrit juhtivatest kui -mittejuhtivatest osakestest, mis on paigutatud maatriksisse. Vajutades polümerile muutub elektrit juhtivate osakeste asukoht, need puutuvad rohkem kokku ja seeläbi materjali takistus muutub.
FSR andureid kasutatakse tavaliselt vajutustugevust mõõtvates nuppudes ning näiteks muusikainstrumentides, autoistmetes (istuva inimese tuvastamiseks) ja robootikas.
Pololu FSRil on 12.7mm diameetriga aktiivne mõõtmisala, mis muundab jõu takistuseks. Mida suurem jõud, seda väiksem takistus. Anduri tundlikus on optimeeritud inimese vajutuse tuvastamiseks. Jõu - takistus karakteristik näitab FSR anduri takistuslikku käitumist. Tavaliselt jälgib FSR anduri graafik eksponentsfunktsiooni pöördväärtuse graafikut.
Lihtsaim viis mõõta FSR anduri takistust on ehitada andurist ja takistist (Nt 10k oomi) pingejagur mikrokontrolleri toite ja GND vahele. Pingejagurist saadav pinge tuleks ühendada mikrokontrolleri analoogsisendiga. Kui FSR anduri takistus väheneb, siis pingejaguri pinge suureneb.
Et mõõta FSR anduriga jõudu Njuutonites tuleks ka mikrokontrolleri ADC referentspinge seadistada samaks mikrokontrolleri toitepingega. Seejärel on lihtne arvutada FSR anduri takistus kasutades valemit:
RFSR = ( (Vcc - U) * R1) / U
Kus: RFSR - FSR Takistus Vcc – Toitepinge. Tavaliselt 5 V (Kodulaborid I ja II) või 3.3V (Kodulabor III) U – Mõõdetud pinge. ADC pingevahemik peab olema vahemikus 0 V - Vcc R1 – Pingejaguri teine takisti. 10 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. Nt 0-1Kg mõõtmiseks võib kasutada valemit:
FFSR = CFSR / 80
Näiteprogramm kuvab mõõdetud jõudu Njuutonites ja massi kilogrammides LCDl.
#include <stdio.h> #include <homelab/adc.h> #include <homelab/delay.h> #include <homelab/pin.h> #include <homelab/module/lcd_gfx.h> // Muunda väärtus ühest vahemikust teise 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[16]; int voltage; // Analoog mõõ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 käivitamine. lcd_gfx_init(); // Puhasta LCD. lcd_gfx_clear(); // Prindi programmi nimi. lcd_gfx_write_string("Jõu andur"); // Käivita ADC moodul. adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); // Lõpmatu tsükkel. while (true) { // Mõõda ADC kanalist 0 väärtus value = adc_get_average_value(0, 4); // Analoog väärtus jääb vahemikku 0-1023 // Muundame selle vahemikku 0-5000 (0V - 5000mV) voltage = map(value, 0, 1023, 0, 5000); // Arvutame anduri takistuse resistance = 5000 - voltage; resistance *= 10000; // 10K takisti resistance /= voltage; // FSR takistus oomides conductance = 1000000; //Mõõdame mikro-oomides conductance /= resistance; // Leiame juhtivuse lcd_gfx_goto_char_xy(1,3); // Arvutame ja prindime jõu force = conductance / 80; sprintf(text, "%lu Njuutonit", force); lcd_gfx_goto_char_xy(1,3); lcd_gfx_write_string(text); // Arvutame ja prindime massi lcd_gfx_goto_char_xy(1,4); weight = force / 9,8; sprintf(text, "%lu kg ", weight); lcd_gfx_write_string(text); // Ootame sw_delay_ms(500); } }