This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| et:examples:sensor:force [2015/03/03 22:17] – raivo.sell | et:examples:sensor:force [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Jõuandur ====== | ||
| + | //Vajalikud teadmised: | ||
| + | [HW] [[et: | ||
| + | [ELC] [[et: | ||
| + | [AVR] [[et: | ||
| + | [LIB] [[et: | ||
| + | ===== Teooria===== | ||
| + | |||
| + | [{{ : | ||
| + | [{{ : | ||
| + | |||
| + | Takistuslik jõuandur (inglise keeles // | ||
| + | |||
| + | FSR koosneb voolu juhtivast polümeerist, | ||
| + | |||
| + | 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, | ||
| + | |||
| + | FSR andureid kasutatakse tavaliselt vajutustugevust mõõtvates nuppudes ning näiteks muusikainstrumentides, | ||
| + | |||
| + | ===== Praktika ===== | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | 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, | ||
| + | |||
| + | 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: | ||
| + | |||
| + | R< | ||
| + | |||
| + | Kus: | ||
| + | R< | ||
| + | V< | ||
| + | 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 C< | ||
| + | |||
| + | C< | ||
| + | |||
| + | 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: | ||
| + | |||
| + | F< | ||
| + | |||
| + | Näiteprogramm kuvab mõõdetud jõudu njuutonites ja massi kilogrammides LCD-l. | ||
| + | |||
| + | <code c> | ||
| + | // Kodulabori jõuanduri näidisprogramm | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | // 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(" | ||
| + | |||
| + | // ADC mooduli algseadistamine | ||
| + | adc_init(ADC_REF_AVCC, | ||
| + | |||
| + | // 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/ | ||
| + | |||
| + | // Juhtivuse arvutamine | ||
| + | conductance = 1000000/ | ||
| + | |||
| + | lcd_gfx_goto_char_xy(1, | ||
| + | |||
| + | // Jõu väärtuse arvutamine njuutonites ja selle kuvamine | ||
| + | force = conductance / 80; | ||
| + | sprintf(text, | ||
| + | lcd_gfx_goto_char_xy(1, | ||
| + | lcd_gfx_write_string(text); | ||
| + | |||
| + | // Kaalu väärtuse arvutamine kilogrammides ja selle kuvamine | ||
| + | lcd_gfx_goto_char_xy(1, | ||
| + | weight = force / 9,8; | ||
| + | sprintf(text, | ||
| + | lcd_gfx_write_string(text); | ||
| + | |||
| + | sw_delay_ms(500); | ||
| + | } | ||
| + | } | ||
| + | </ | ||