MEMS cvičenie 2: Rozdiel medzi revíziami
Z SensorWiki
(→Úlohy) |
|||
(7 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 3: | Riadok 3: | ||
http://www.geofex.com/article_folders/potsecrets/potscret.htm | http://www.geofex.com/article_folders/potsecrets/potscret.htm | ||
--> | --> | ||
+ | |||
+ | Na tomto cvičení je cieľom pripojiť odporový senzor k Arduinu a zobraziť jeho zlinearizovanú hodnotu na nejakom miestnom displeji (LED, LCD a pod.) prípadne ju | ||
+ | odoslať po sériovej linke do PC (v simulátore TinkerCAD). | ||
+ | |||
== Potenciometrické snímače == | == Potenciometrické snímače == | ||
Riadok 18: | Riadok 22: | ||
* Príklad na pripojenie analógového senzora: http://senzor.robotika.sk/sensorwiki/index.php/Acrob007 | * Príklad na pripojenie analógového senzora: http://senzor.robotika.sk/sensorwiki/index.php/Acrob007 | ||
* Arduino homepage https://www.arduino.cc/ | * Arduino homepage https://www.arduino.cc/ | ||
+ | |||
+ | Na pridanie do TinkerCAD triedy (classroom) použite [https://www.tinkercad.com/joinclass/1R5VXPBESZZT tento link]. Ak od vás program pýta vstupný kód, je to 1R5VXPBESZZT | ||
+ | |||
+ | |||
+ | |||
+ | <html> | ||
+ | <iframe width="725" height="453" src="https://www.tinkercad.com/embed/6Pg8q4b7Kst?editbtn=1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> | ||
+ | </html> | ||
+ | |||
+ | Ak sa vám nezobrazuje vložený simulátor správne, použite prosím, [https://www.tinkercad.com/things/6Pg8q4b7Kst-misa-basicdemo/editel?sharecode=skOOqybTv7dIz26TpdC7Eigv5BGxx1k0V5tL7xRWX7k tento link]. | ||
+ | <!-- Note to self: generovane linky z TinkerCADu expiruju po 336 hodinach - 14 dni --> | ||
+ | |||
<source lang="cpp"> | <source lang="cpp"> | ||
− | #define positionSensor 0 // define your pin here | + | #define positionSensor 0 // define your pin here 0 |
int adcValue; | int adcValue; | ||
Riadok 48: | Riadok 64: | ||
</source> | </source> | ||
− | + | ||
− | + | == Pripojenie LCD a LED displeja a lokálne zobrazenie meranej veličiny == | |
− | + | ||
+ | V tejto časti cvičenia zobrazíme meranú veličinu na miestnom LED alebo LCD displeji mikropočítača. Z tejto časti vám nevyplýva žiadna úloha, len si pozrite príklady | ||
+ | aby ste ich vedeli prípadne implementovať na svojom vlastnom reálnom Arduine s nejakým displejom. | ||
− | |||
− | + | === Sedemsegmentový zobrazovač === | |
<html> | <html> | ||
<iframe width="725" height="453" src="https://www.tinkercad.com/embed/7X46oojlMjd?editbtn=1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> | <iframe width="725" height="453" src="https://www.tinkercad.com/embed/7X46oojlMjd?editbtn=1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> | ||
+ | </html> | ||
<BR> | <BR> | ||
+ | Ak sa vám príklad nezobrazí správne priamo tu, použite [https://www.tinkercad.com/things/7X46oojlMjd-misa-7-segment-4-digit-led-display/editel?sharecode=4ygjI4gH8xhMVXSfDyxGeZS8eGEbDSuEEmrfXKvw_to tento odkaz]. | ||
<BR> | <BR> | ||
<BR> | <BR> | ||
+ | |||
+ | |||
+ | <html> | ||
<iframe width="725" height="453" src="https://www.tinkercad.com/embed/gjGgeC1wSPg?editbtn=1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> | <iframe width="725" height="453" src="https://www.tinkercad.com/embed/gjGgeC1wSPg?editbtn=1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> | ||
</html> | </html> | ||
+ | |||
+ | Ak sa vám príklad nezobrazí správne priamo tu, použite [https://www.tinkercad.com/things/gjGgeC1wSPg-misa-lcddemo/editel?sharecode=In_RCwIxVqMhXSORfP1HGFq724LNdf4-8hn1Yr6oN0g tento odkaz]. | ||
== Programovateľný LCD displej == | == Programovateľný LCD displej == | ||
Riadok 72: | Riadok 96: | ||
* LCD zobrazovač. Klávesnica. <BR>[http://ap.urpi.fei.stuba.sk/mmp/prednaska02.pdf Obšírnejšie informácie o displejoch] (prednáška z predmetu MMP) | * LCD zobrazovač. Klávesnica. <BR>[http://ap.urpi.fei.stuba.sk/mmp/prednaska02.pdf Obšírnejšie informácie o displejoch] (prednáška z predmetu MMP) | ||
+ | |||
+ | <!-- | ||
=== LCD Modul === | === LCD Modul === | ||
Riadok 301: | Riadok 327: | ||
* Schema zapojenia Arduino https://www.arduino.cc/en/uploads/Main/Arduino-Pro-schematic.pdf | * Schema zapojenia Arduino https://www.arduino.cc/en/uploads/Main/Arduino-Pro-schematic.pdf | ||
+ | |||
+ | --> | ||
+ | |||
+ | |||
+ | |||
+ | == Linearizácia prevodovej charakteristiky == | ||
+ | |||
+ | |||
+ | |||
+ | === 1. Look-up table === | ||
+ | |||
+ | |||
+ | <source lang="cpp"> | ||
+ | #include <avr/pgmspace.h> | ||
+ | |||
+ | const PROGMEM int table[] = {11,12,15,...}; | ||
+ | |||
+ | return( table[adcValue] ); | ||
+ | </source> | ||
+ | |||
+ | Viac info tu: https://www.arduino.cc/en/Reference/PROGMEM | ||
+ | |||
+ | === 2. Po častiach lineárna náhrada === | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | /* segment 1 */ | ||
+ | if (adcValue > x0) && (adcValue <= x1) | ||
+ | y = k1 * adcValue + q1; | ||
+ | |||
+ | /* segment 2 */ | ||
+ | if (adcValue > x1) && (adcValue <= x2) | ||
+ | y = k2 * adcValue + q2; | ||
+ | |||
+ | return(y) | ||
+ | </source> | ||
+ | |||
+ | Dá sa použiť aj funkcia map v Arduine - https://www.arduino.cc/reference/en/language/functions/math/map/ | ||
+ | |||
+ | === 3. Aproximácia funkcie === | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | y = a2 * adcValue^2 + a1 * adcValue + a0; | ||
+ | return(y); | ||
+ | </source> | ||
+ | |||
+ | |||
+ | * http://terpconnect.umd.edu/~toh/spectrum/CurveFitting.html | ||
+ | |||
+ | * https://www.gnu.org/software/octave/doc/interpreter/Polynomial-Interpolation.html | ||
+ | * http://octave.sourceforge.net/optim/function/leasqr.html | ||
+ | * http://octave.sourceforge.net/optim/function/expfit.html | ||
+ | * https://www.gnu.org/software/gsl/manual/html_node/Example-programs-for-Nonlinear-Least_002dSquares-Fitting.html | ||
+ | * https://www.gnu.org/software/octave/doc/interpreter/One_002ddimensional-Interpolation.html#One_002ddimensional-Interpolation | ||
Riadok 322: | Riadok 401: | ||
[[Súbor:Example2-1.png|500px]] | [[Súbor:Example2-1.png|500px]] | ||
− | Hodnotenie: 5 | + | Hodnotenie: 5 bodov |
Deadline: <FONT COlor="red">'''1. 3. 2021 '''</font> | Deadline: <FONT COlor="red">'''1. 3. 2021 '''</font> |
Verzia zo dňa a času 13:54, 23. február 2021
Na tomto cvičení je cieľom pripojiť odporový senzor k Arduinu a zobraziť jeho zlinearizovanú hodnotu na nejakom miestnom displeji (LED, LCD a pod.) prípadne ju
odoslať po sériovej linke do PC (v simulátore TinkerCAD).
Obsah
Potenciometrické snímače
- Poskladajte si odporový senzor polohy so stupnicou (ak nemáte, použite senzor v TinkerCADe).
- Zmerajte prevodovú charakteristiku odporového senzora polohy pomocou ohmmetra (cvičenie 1).
- Senzor pripojte k A/D prevodníku mikropočítača a pomocou programu nižšie zmerajte prevodovú charakteristiku celého meracieho člena.
- Prevodovú charakteristiku zlinearizujte a doložte úspešnosť porovnaním metrologických parametrov.
- Príklad na pripojenie analógového senzora: http://senzor.robotika.sk/sensorwiki/index.php/Acrob007
- Arduino homepage https://www.arduino.cc/
Na pridanie do TinkerCAD triedy (classroom) použite tento link. Ak od vás program pýta vstupný kód, je to 1R5VXPBESZZT
Ak sa vám nezobrazuje vložený simulátor správne, použite prosím, tento link.
#define positionSensor 0 // define your pin here 0
int adcValue;
float outputValue;
void setup()
{
Serial.begin(9600); // typical values are 9600 or 115200
}
void loop()
{
adcValue = analogRead(positionSensor); // read ADC value
/* ======= replace this section with your code ===== */
outputValue = adcValue;
/* ================================================== */
Serial.println( outputValue ); // prints value over serial
delay(100); // delay in milliseconds
}
Pripojenie LCD a LED displeja a lokálne zobrazenie meranej veličiny
V tejto časti cvičenia zobrazíme meranú veličinu na miestnom LED alebo LCD displeji mikropočítača. Z tejto časti vám nevyplýva žiadna úloha, len si pozrite príklady aby ste ich vedeli prípadne implementovať na svojom vlastnom reálnom Arduine s nejakým displejom.
Sedemsegmentový zobrazovač
Ak sa vám príklad nezobrazí správne priamo tu, použite tento odkaz.
Ak sa vám príklad nezobrazí správne priamo tu, použite tento odkaz.
Programovateľný LCD displej
- LCD zobrazovač. Klávesnica.
Obšírnejšie informácie o displejoch (prednáška z predmetu MMP)
Linearizácia prevodovej charakteristiky
1. Look-up table
#include <avr/pgmspace.h>
const PROGMEM int table[] = {11,12,15,...};
return( table[adcValue] );
Viac info tu: https://www.arduino.cc/en/Reference/PROGMEM
2. Po častiach lineárna náhrada
/* segment 1 */
if (adcValue > x0) && (adcValue <= x1)
y = k1 * adcValue + q1;
/* segment 2 */
if (adcValue > x1) && (adcValue <= x2)
y = k2 * adcValue + q2;
return(y)
Dá sa použiť aj funkcia map v Arduine - https://www.arduino.cc/reference/en/language/functions/math/map/
3. Aproximácia funkcie
y = a2 * adcValue^2 + a1 * adcValue + a0;
return(y);
- https://www.gnu.org/software/octave/doc/interpreter/Polynomial-Interpolation.html
- http://octave.sourceforge.net/optim/function/leasqr.html
- http://octave.sourceforge.net/optim/function/expfit.html
- https://www.gnu.org/software/gsl/manual/html_node/Example-programs-for-Nonlinear-Least_002dSquares-Fitting.html
- https://www.gnu.org/software/octave/doc/interpreter/One_002ddimensional-Interpolation.html#One_002ddimensional-Interpolation
Úlohy
Úlohy, ktoré treba odovzdať:
- Graf 1: prevodové charakteristiky
- Chyby podľa EN 60 770
- Nepresnosť
- Meraná chyba
- Nelinearita
- Hysteréza
- Neopakovateľnosť
- Graf 2: chybové krivky (viď obr.)
- Program pre mikroprocesor na linearizáciu
Hodnotenie: 5 bodov
Deadline: 1. 3. 2021