This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:examples:sensor:force [2014/10/13 08:59] – raivo.sell | et:examples:sensor:force [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ~~PB~~ | ||
| ====== Jõuandur ====== | ====== Jõuandur ====== | ||
| - | //Vajalikud teadmised: [HW] [[et: | + | //Vajalikud teadmised: |
| + | [HW] [[et: | ||
| + | [ELC] [[et: | ||
| + | [AVR] [[et: | ||
| + | [LIB] [[et: | ||
| ===== Teooria===== | ===== Teooria===== | ||
| Line 8: | Line 11: | ||
| [{{ : | [{{ : | ||
| - | Takistluslik | + | Takistuslik |
| FSR koosneb voolu juhtivast polümeerist, | 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 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, | FSR andureid kasutatakse tavaliselt vajutustugevust mõõtvates nuppudes ning näiteks muusikainstrumentides, | ||
| Line 18: | Line 21: | ||
| ===== Praktika ===== | ===== 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, | 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 GND vahele. Pingejaguri konstantseks takistiks võib valida | + | 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 |
| Jõudu leidmiseks njuutonites tuleb mikrokontrolleri ADC võrdluspinge seadistada samaks mikrokontrolleri toitepingega. Seejärel on lihtne arvutada FSR anduri takistus kasutades valemit: | Jõudu leidmiseks njuutonites tuleb mikrokontrolleri ADC võrdluspinge seadistada samaks mikrokontrolleri toitepingega. Seejärel on lihtne arvutada FSR anduri takistus kasutades valemit: | ||
| - | R< | + | R< |
| Kus: | Kus: | ||
| R< | R< | ||
| V< | V< | ||
| - | U – Pingejaguri väljundpinge. ADC pingevahemik peab olema vahemikus 0 V - Vcc | + | 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 | + | R1 – Pingejaguri teine takisti, näiteks |
| Seejärel saab arvutada anduri juhtivuse C< | Seejärel saab arvutada anduri juhtivuse C< | ||
| Line 45: | Line 48: | ||
| <code c> | <code c> | ||
| - | // Kodulabori | + | // Kodulabori |
| #include < | #include < | ||
| #include < | #include < | ||
| Line 56: | Line 58: | ||
| long map(long x, long in_min, long in_max, long out_min, long out_max) | long map(long x, long in_min, long in_max, long out_min, long out_max) | ||
| { | { | ||
| - | | + | |
| } | } | ||
| - | + | ||
| // Põhiprogramm | // Põhiprogramm | ||
| int main(void) | int main(void) | ||
| { | { | ||
| - | signed short value; // Analoogmõõtmise tulemus | + | |
| - | char text[16]; | + | char text[50]; |
| - | int voltage; // Analoog mõõtmise | + | int voltage; // Analoogmõõtmise |
| - | unsigned long resistance; // Pinge teisendatuna takistuseks | + | unsigned long resistance; // Pinge teisendatuna takistuseks |
| - | unsigned long conductance; | + | unsigned long conductance; |
| - | long force; // Takistus teisendatuna jõuks | + | long force; // Takistus teisendatuna jõuks |
| - | long weight; // Jõud teisendatuna massiks | + | long weight; // Jõud teisendatuna massiks |
| - | + | ||
| - | // LCD seadistamine | + | // LCD seadistamine |
| - | lcd_gfx_init(); | + | lcd_gfx_init(); |
| - | lcd_gfx_clear(); | + | lcd_gfx_clear(); |
| - | lcd_gfx_write_string(" | + | lcd_gfx_write_string(" |
| - | + | ||
| - | // ADC mooduli algseadistamine | + | // ADC mooduli algseadistamine |
| - | adc_init(ADC_REF_AVCC, | + | adc_init(ADC_REF_AVCC, |
| - | + | ||
| - | // Lõputu tsükkel | + | // Lõputu tsükkel |
| - | while (true) | + | while (1) |
| - | { | + | { |
| - | // Analoogkanali väärtuse lugemine | + | // Analoogkanali väärtuse lugemine |
| - | value = adc_get_average_value(0, 4); | + | value = adc_get_value(1); |
| + | |||
| + | // Analoog väärtuse, mis jääb vahemikku | ||
| + | // 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,3); | ||
| - | // Analoog | + | |
| - | // muundamine vahemikku 0-5000 | + | force = conductance |
| - | voltage = map(value, 0, 1023, 0, 5000); | + | sprintf(text, "%lu Njuutonit", |
| + | | ||
| + | lcd_gfx_write_string(text); | ||
| - | // Anduri takistuse | + | |
| - | resistance = 5000 - voltage; | + | lcd_gfx_goto_char_xy(1, |
| - | resistance *= 10000; // 10 KOhm takisti | + | |
| - | resistance /= voltage; // FSR takistus oomides | + | sprintf(text, |
| - | + | lcd_gfx_write_string(text); | |
| - | conductance = 1000000; // Mõõdetuna mikro-oomides | + | |
| - | conductance /= resistance; // Juhtivuse leidmine | + | |
| - | + | ||
| - | lcd_gfx_goto_char_xy(1, | + | |
| - | + | ||
| - | // Jõu väärtuse arvutamine njuutonites | + | |
| - | // ja selle ekraanile kuvamine | + | |
| - | | + | |
| - | sprintf(text, | + | |
| - | lcd_gfx_goto_char_xy(1, | + | |
| - | lcd_gfx_write_string(text); | + | |
| - | // Kaalu väärtuse arvutamine kilogrammides | + | |
| - | // ja selle ekraanile kuvamine | + | } |
| - | lcd_gfx_goto_char_xy(1, | + | |
| - | weight = force / 9,8; | + | |
| - | sprintf(text, | + | |
| - | lcd_gfx_write_string(text); | + | |
| - | + | ||
| - | sw_delay_ms(500); | + | |
| - | } | + | |
| } | } | ||
| </ | </ | ||