This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:examples:sensor:force [2014/03/03 10:15] – rellermaa | et:examples:sensor:force [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Jõuandur ====== | ====== Jõuandur ====== | ||
| - | + | //Vajalikud teadmised: | |
| - | < | + | [HW] [[et: |
| - | + | [ELC] [[et:electronics:voltage_divider]], \\ | |
| - | //Vajalikud teadmised: [HW] [[et: | + | [AVR] [[et:avr:adc]], |
| + | [LIB] [[et: | ||
| ===== Teooria===== | ===== Teooria===== | ||
| - | [{{ : | + | [{{ : |
| - | [{{ : | + | [{{ : |
| - | FSR (// | + | Takistuslik jõuandur |
| - | FSR koosneb juhtivast | + | FSR koosneb |
| + | |||
| + | 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 ===== | ||
| - | [{{ : | + | [{{ : |
| - | [{{ : | + | |
| - | 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 | + | Kodulabori komplektis on tüüpiline takistuslik jõuandur, mille aktiivse mõõteala diameeter |
| - | Lihtsaim viis mõõta | + | Lihtsaim viis FSR anduri |
| - | Et mõõta FSR anduriga jõudu Njuutonites tuleks ka mikrokontrolleri ADC referentspinge | + | Jõudu leidmiseks njuutonites tuleb mikrokontrolleri ADC võrdluspinge |
| - | R< | + | R< |
| Kus: | Kus: | ||
| - | R< | + | R< |
| - | V< | + | V< |
| - | U – Mõõdetud pinge. 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. 10 k | + | R1 – Pingejaguri teine takisti, näiteks 1 kΩ |
| Seejärel saab arvutada anduri juhtivuse C< | Seejärel saab arvutada anduri juhtivuse C< | ||
| Line 39: | Line 41: | ||
| 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. | + | 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. |
| F< | F< | ||
| - | Näiteprogramm kuvab mõõdetud jõudu | + | Näiteprogramm kuvab mõõdetud jõudu |
| - | + | ||
| - | + | ||
| - | + | ||
| - | ~~PB~~ | + | |
| <code c> | <code c> | ||
| + | // Kodulabori jõuanduri näidisprogramm | ||
| #include < | #include < | ||
| #include < | #include < | ||
| Line 56: | Line 55: | ||
| #include < | #include < | ||
| - | // Muunda väärtus ühest vahemikust teise | + | // Väärtus vahemiku teisendusfunktsioon |
| 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 käivitamine. | + | // LCD seadistamine |
| - | lcd_gfx_init(); | + | lcd_gfx_init(); |
| - | + | lcd_gfx_clear(); | |
| - | // Puhasta LCD. | + | lcd_gfx_write_string(" |
| - | lcd_gfx_clear(); | + | |
| - | + | // ADC mooduli algseadistamine | |
| - | // Prindi programmi nimi. | + | adc_init(ADC_REF_AVCC, |
| - | lcd_gfx_write_string(" | + | |
| - | + | // Lõputu | |
| - | // Käivita | + | while (1) |
| - | adc_init(ADC_REF_AVCC, | + | { |
| - | + | // Analoogkanali väärtuse lugemine | |
| - | // Lõpmatu | + | value = adc_get_value(1); |
| - | while (true) | + | |
| - | { | + | // Analoog väärtuse, mis jääb vahemikku 0-2048 |
| - | // Mõõda | + | // muundamine vahemikku 0-2064 (0 V - 2064 mV) |
| - | value = adc_get_average_value(0, 4); | + | // Kuna Kodulabor III puhul vastab |
| + | // siis pole muundamine vajalik | ||
| + | //voltage = map(value, | ||
| + | | ||
| + | |||
| + | // Anduri takistuse arvutamine | ||
| + | resistance | ||
| + | |||
| + | // Juhtivuse arvutamine | ||
| + | conductance = 1000000/ | ||
| + | |||
| + | lcd_gfx_goto_char_xy(1,3); | ||
| - | // Analoog väärtus jääb vahemikku 0-1023 | + | |
| - | // Muundame selle vahemikku 0-5000 | + | force = conductance |
| - | voltage = map(value, 0, 1023, 0, 5000); | + | sprintf(text, "%lu Njuutonit", |
| + | | ||
| + | lcd_gfx_write_string(text); | ||
| - | // Arvutame anduri takistuse | + | // Kaalu väärtuse arvutamine kilogrammides ja selle kuvamine |
| - | resistance = 5000 - voltage; | + | lcd_gfx_goto_char_xy(1, |
| - | | + | |
| - | resistance /= voltage; // FSR takistus oomides | + | sprintf(text, |
| - | + | lcd_gfx_write_string(text); | |
| - | conductance = 1000000; //Mõõdame mikro-oomides | + | |
| - | conductance /= resistance; // Leiame juhtivuse | + | |
| - | + | ||
| - | lcd_gfx_goto_char_xy(1, | + | |
| - | + | ||
| - | // Arvutame ja prindime jõu | + | |
| - | | + | |
| - | sprintf(text, | + | |
| - | lcd_gfx_goto_char_xy(1, | + | |
| - | lcd_gfx_write_string(text); | + | |
| - | // Arvutame ja prindime massi | + | |
| - | lcd_gfx_goto_char_xy(1, | + | } |
| - | weight = force / 9,8; | + | |
| - | sprintf(text, | + | |
| - | lcd_gfx_write_string(text); | + | |
| - | + | ||
| - | // Ootame | + | |
| - | sw_delay_ms(500); | + | |
| - | } | + | |
| } | } | ||
| </ | </ | ||