MEMS meranie s A/D prevodníkom
Zo stránky SensorWiki
Note: v 2025
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/
Meranie charakteristiky senzora mikroprocesorom s A/D prevodníkom
Azda najjednoduchší program na meranie je tento
#define mySensor 4 // 4: potenciometer
int adcValue;
float outputValue;
void setup()
{
Serial.begin(57600); // typicke rychlosti su 9600 alebo 57600
}
void loop()
{
adcValue = analogRead(mySensor); // read ADC value
outputValue = adcValue; // information processing (if necessary)
Serial.println(outputValue); // prints result over serial
delay(500); // delay in milliseconds
}
Funkcia analogRead() zavolá A/D prevodník integrovaný na čipe, ktorý prevedie vstupné napätie v rozsahu 0 - 5 V na celé číslo v rozsahu 0 - 1023 (zodpovedajúce 10-bitovému prevodníku). Ak chceme zobraziť hodnotu napätia a nie číslo z prevodníka, zmeníme kód na riadku 15 napr. nasledovne:
outputValue = adcValue * 5 / 1023;
Funkcia Serial.println() potom vyšle výsledné číslo po sériovej linke do PC, kde si ich odchytíme v terminálovom okne. Pozor, prenosová rýchlosť v termináli musí byť zhodná s tou, ktorú sme nastavili funkciou Serial.begin, t.j. 57 600 Baud.
Uvedený kód môžeme ďalej vylepšovať - napríklad odstránime časť šumu na vstupe tak, že meranie spravíme viackrát a spriemerujeme. Napríklad takto:
/* odmeraj N hodnot a vypocitaj priemer */
sensorValue = 0;
for ( int i=1; i<=64; i++)
sensorValue += analogRead(A4);
sensorValue = sensorValue / 64;
Hint: viete, prečo je lepšie počítať priemer zo 16, 32 alebo 64 hodnôt a nie z 10 alebo 100?
Ďalšie zlepšenie by mohlo byť pridanie indikácie pripravenosti na meranie LED diódou a spustenie samotného merania tlačidlom (je pripojené na A5, resp. D19)
/* Zadefinovanie tlacitka */
#define PUSHBUTTON 19
/* Do casti setup() treba pridat konfiguraciu a uvodny vypis */
pinMode(LED_BUILTIN, OUTPUT);
pinMode(PUSHBUTTON, INPUT);
Serial.println("*** MISA measurement (press Red PB to start): ***\n\n");
/* Do casti loop(), ktora sa opakuje pridame indikaciu LED a cakanie na tlacitko */
digitalWrite(LED_BUILTIN,HIGH); // Led ON = Ready
while ( digitalRead(PUSHBUTTON)== 1) // Wait for press
{ /* just wait here */ }
digitalWrite(LED_BUITLIN,LOW); // Led OFF = Measuring...
/* a tu uz nasleduje meranie a odoslanie hodnoty */
Ú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
- Porovnať namerané výsledky s predošlými
Hodnotenie: 5 bodov
Deadline: 8. 3. 2022