Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:sensor:force [2014/10/10 13:36] raivo.sellet: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:hardware:homelab:digi]], [HW] [[et:hardware:homelab:combo]], [AVR] [[et:avr:adc]], [ELC] [[et:electronics:voltage_divider]], [AVR] [[et:avr:adc]], [LIB] [[et:software:homelab:library:adc]], [LIB] [[et:software:homelab:library:module:lcd_graphic]]//+//Vajalikud teadmised:  
 +[HW] [[et:hardware:homelab:digi]], [HW] [[et:hardware:homelab:combo]],  
 +[ELC] [[et:electronics:voltage_divider]], \\ 
 +[AVR] [[et:avr:adc]], 
 +[LIB] [[et:software:homelab:library:adc]], [LIB] [[et:software:homelab:library:module:lcd_graphic]]//
  
 ===== Teooria===== ===== Teooria=====
Line 8: Line 11:
 [{{ :en:examples:sensor:forse_sensing_resistor.png?200|Jõust sõltuva takisti kihid}}] [{{ :en:examples:sensor:forse_sensing_resistor.png?200|Jõust sõltuva takisti kihid}}]
  
-Takistluslik 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.+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 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. FSR andureid kasutatakse tavaliselt vajutustugevust mõõtvates nuppudes ning näiteks muusikainstrumentides, autoistmetes (istuva inimese tuvastamiseks) ja robootikas.
Line 16: Line 21:
 ===== Praktika ===== ===== Praktika =====
  
-[{{ :en:examples:sensor:force_conductance_graph.png?250|Jõu-juhtivuse graafik}}]+[{{ :en:examples:sensor:force_conductance_graph.png?370|Jõu-juhtivuse graafik}}]
  
 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. 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 GND vahele. Pingejaguri konstantseks takistiks võib valida 10 kΩ. Pingejaguri väljundpinge ühendatakse mikrokontrolleri analoogsisendisse. Kui FSR anduri takistus väheneb, siis pingejaguri pinge suureneb. +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 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: Jõudu leidmiseks njuutonites tuleb mikrokontrolleri ADC võrdluspinge seadistada samaks mikrokontrolleri toitepingega. Seejärel on lihtne arvutada FSR anduri takistus kasutades valemit:
  
-R<sub>FSR</sub> = ( (V<sub>cc</sub> - U) * R1) / U+R<sub>FSR</sub> = ( (V<sub>cc</sub> * R1) / U) - R1
  
 Kus: Kus:
 R<sub>FSR</sub> –  FSR anduri takistus R<sub>FSR</sub> –  FSR anduri takistus
-V<sub>cc</sub> – Toitepinge. Tavaliselt 5 V (Kodulaborid I ja II) või 3.3V (Kodulabor III) +V<sub>cc</sub> – 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  +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 10 +R1 – Pingejaguri teine takisti, näiteks 
  
 Seejärel saab arvutada anduri juhtivuse C<sub>FSR</sub> ühikuga S/m [Siemens meetri kohta]. Juhtivuse ja takistus on omavahel pöördvõrdelises seoses: Seejärel saab arvutada anduri juhtivuse C<sub>FSR</sub> ühikuga S/m [Siemens meetri kohta]. Juhtivuse ja takistus on omavahel pöördvõrdelises seoses:
Line 43: Line 48:
  
 <code c> <code c>
-// Kodulabori jüuanduri näidisprogramm +// Kodulabori jõuanduri näidisprogramm
 #include <stdio.h> #include <stdio.h>
 #include <homelab/adc.h> #include <homelab/adc.h>
Line 54: 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)
 { {
-  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;+    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
 } }
- +
 // Põhiprogramm // Põhiprogramm
 int main(void) int main(void)
 { {
- signed short value; // Analoogmõõtmise tulemus +    signed short value; // Analoogmõõtmise tulemus 
- char text[16]; +    char text[50]; 
- int voltage; // Analoog mõõtmise tulemus teisendatuna pingeks +    int voltage; // Analoogmõõtmise tulemus teisendatuna pingeks 
- 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("Jõu andur"); +    lcd_gfx_write_string("Jõu andur"); 
-  + 
- // ADC mooduli algseadistamine +    // ADC mooduli algseadistamine 
- adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); +    adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); 
-  + 
- // 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 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);
  
- // Analoog väärtuse, mis jääb vahemikku 0-1023 +        // Jõu väärtuse arvutamine njuutonites ja selle kuvamine 
- /muundamine vahemikku 0-5000 (0 V - 5000 mV+        force = conductance 80; 
-         voltage = map(value0, 1023, 0, 5000);+        sprintf(text, "%lu Njuutonit", force); 
 +        lcd_gfx_goto_char_xy(1,3); 
 +        lcd_gfx_write_string(text);
  
- // Anduri takistuse arvutamine +        // Kaalu väärtuse arvutamine kilogrammides ja selle kuvamine 
- resistance = 5000 - voltage;      +        lcd_gfx_goto_char_xy(1,4); 
-         resistance *= 10000; // 10 KOhm takisti +        weight = force / 9,8
-         resistance /= voltage; // FSR takistus oomides +        sprintf(text, "%lu kg   ", weight); 
-  +        lcd_gfx_write_string(text);
- conductance = 1000000; // Mõõdetuna mikro-oomides +
-         conductance /= resistance; // Juhtivuse leidmine +
-  +
-  lcd_gfx_goto_char_xy(1,3); +
-   +
- // Jõu väärtuse arvutamine njuutonites +
-  // ja selle ekraanile 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 +        sw_delay_ms(500); 
-  // ja selle ekraanile 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); +
- }+
 } }
 </code> </code>
et/examples/sensor/force.1412948177.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0