Az arduinoba kötött gyorsulásmérőből kiolvasott adatot soros porton átküldve a Processinghez az vizualizálja az adatokat.
itt: http://www.hobbielektronika.hu/cikkek/mma7260qt_gyorsulasmero_hasznalata_avr-rel.html?pg=2
Az arduinoba kötött gyorsulásmérőből kiolvasott adatot soros porton átküldve a Processinghez az vizualizálja az adatokat.
itt: http://www.hobbielektronika.hu/cikkek/mma7260qt_gyorsulasmero_hasznalata_avr-rel.html?pg=2
Működéséről egy cikk a hobbielektronikán:
"Az érzékelő vagy szenzor olyan elem, amely egy mérendő tulajdonságtól függő jelet szolgáltat. A mérendő tulajdonság és a jel egyaránt lehet fizikai, kémiai, biológiai stb. jellegű. Fontos, hogy a mérendő tulajdonság, és az érzékelő által szolgáltatott jel egymásnak kölcsönösen egyértelmű függvényei legyenek."
http://hu.wikipedia.org/wiki/%C3%89rz%C3%A9kel%C5%91
Amit érzékelhet: fény, mozgás, mágneses tér, távolság, gyorsulás, páratartalom, hőmérséklet, nyomás, érintés, stb. A fizikai, kémiai vagy biológiai változásokat elektromos jelekké alakítják.
Az alábbi lista nem teljes, inkább csak ízelítő:
Mozgásérzékelő
Adott területen érzékeli a mozgást, áltlában infrávörös fénnyel működik. PIR-nek is hívják (passive infrared). Arduinohoz is kapható, 5-12V-on működik:
példa: http://www.ladyada.net/learn/sensors/pir.html
Mágneses kapcsoló
Ajtóra, ablakra stb szerelhető. Működése: http://www.hw2sw.com/2012/09/07/connecting-a-magnetic-reed-door-switch-into-arduino/
példa: http://m.instructables.com/id/simpleTweet01python/?ALLSTEPS
Digitális mágneses érzékelő modul
DFR0033 típus.
példa: http://www.dfrobot.com/wiki/index.php/Digital_magnetic_sensor_(SKU:_DFR0033)
(DIY elektromágneses mező érzékelése: http://hackaday.com/2010/12/31/arduino-emf-sensor/)
Digitális dőlés szenzor modul
példa: http://www.dfrobot.com/wiki/index.php?title=DFRobot_Tilt_Sensor_(SKU:DFR0028)
Giroszkóp
Tinkerkit 2 tengelyes T000060
Gyorsulásmérő
példa: http://www.robotshop.com/gorobotics/articles/microcontrollers/arduino-5-minute-tutorials-lesson-7-accelerometers-gyros-imus
példa Arduino MEGA-hoz: http://lex.iguw.tuwien.ac.at/toysrus/index.php/Accelerometer_Tinkerkit
Digitális rezgés érzékelő modul
Ebből is több fajta van, pl.
Az utóbbihoz manual itt: http://www.dfrobot.com/wiki/index.php?title=DFRobot_Digital_Vibration_Sensor_(SKU:DFR0027)
Nyomásérzékeny ellenállás
FSR = Force Sensitive resistor
példa: http://garagelab.com/profiles/blogs/tutorial-force-sensitive-resistor-and-arduino
DIY verzió: http://www.instructables.com/id/DIY-Force-Sensitive-Resistor-FSR/
Hajlás szenzor (flex, bend)
Példa: flex szenzor LEDsorral: http://arduinobasics.blogspot.hu/2011/05/arduino-uno-flex-sensor-and-leds.html
Nyúlás szenzor (stretch)
DIY verzió: http://www.instructables.com/id/Connecting-a-textile-analog-sensor-to-Arduino/?ALLSTEPS
Kapacitív érzékelő
Az arduino capacitive sensing library-jével akár egy alufólia darabbal is készíthetünk érintés szenzort:
http://www.arduino.cc/playground/Code/CapacitiveSensor
http://arduino.cc/playground/Main/CapacitiveSensor?from=Main.CapSense
Vagy egyéb hardwerekkel felerősíthetjük a jelet, pl. MPR121 (touch senor):
http://bildr.org/2011/05/mpr121_arduino/
Érintés érzékelő modul (touch)
Kapacitív érzékelő ez is.
Másodikhoz példa: http://www.dfrobot.com/wiki/index.php/DFRobot_Capacitive_Touch_Sensor_(SKU:DFR0030)
Piezoelektromos szenzor
Olyan anyagból készül amiben összenyomás hatására feszültség keletkezik. Burkolattal és anélkl is kapható.
Példa lejjebb - hang érzékelőknél.
Infrás távolságérzékelő
Sharp infravörös távolságérzékelő szenzor
"A robotikában használt egyik speciális szenzor a Sharp infravörös távolságérzékelő szenzor. Amint az alábbi képről is jól látható többféle szenzor is létezik, különböző méréstartománnyal. A szenzor az ún. háromszögeléses módszerrel működik. A szenzor egy keskeny infravörös fénnyalábot bocsát ki (az IR fény hullámhossza 850nm ± 70nm). A kibocsátott IR fény a tárgyakról visszaverődik. Az érzékelő egy optikával leképezi a visszavert fényt egy CCD-re. Attól függően hogy milyen messze van a céltárgy, más-más szögben érkezik vissza a visszavert fény, és ennek megfelelően más-más CCD pixelre fókuszálódik. Ebből már meghatározható a távolság. Van analóg és digitális kimenetű szenzor is. Az analóg szenzor egy, a távolsággal fordítottan arányos, nemlineáris, analóg kimeneti feszültségjelet ad."
http://www.hobbielektronika.hu/cikkek/will-i_v20_robotika_es_avr_kezdoknek.html?pg=6
Ultrahangos távolságérzékelő
Tutorial: http://arduino.cc/en/Tutorial/Ping?from=Tutorial.UltrasoundSensor
IR vevő modul
Kell hozzá egy infra kibocsátó egység is amit érzékelni tud, pl. Infra LED. Magában is kapható. Példa az oldal közepén: http://www.diyphonegadgets.com/2012/04/tutorial-how-to-control-ir-helicopter.html
LDR, Fotóellenállás
A fotoellenállások fénytől függő ellenállások. A fényérzékeny rétegek kialakítására nagyon erős fényelektromos tulajdonságokkal bíró anyagokat (kadmium-szulfid CdS, ólomszulfid PbS stb.) használnak. Minél jobban megvilágítunk egy fotoellenállást, annál inkább csökken az ellenállása. A fotoellenállás meghatározott fényerősséghez tartozó ellenállásértéke azonos típusoknál is meghatározott tartományban szór, ez a tartomány az ún. szórási sáv. A fotoellenállás meghatározott fényhullámhossznál éri el a legnagyobb érzékenységet, ezt spektrális érzékenységnek nevezzük. Vannak olyan fotoellenállások amelyek kimondottan speciális hullámhosszra, azaz színekre érzékenyek.
Analóg pinbe kötve analogRead-del kiolvassuk az értékeket. Lehet esetleg kalibrálni is:
http://arduino.cc/en/Tutorial/Calibration
Modul formában is létezik:
Színszenzor modul
TCS3200, arduino kódja letölthető innen: http://www.dfrobot.com/index.php?route=product/product&product_id=540#.UKPlTeOe-0I
Piezo elektromos szenzor (lásd feljebb)
Példa - érzékelőkét: kopogás érzékelése bejegyezés.
Másik példa- hangforrásként: http://www.adafruit.com/blog/2009/05/19/piezo-with-an-arduino-photoresistor/
Hang érzékelő modul
példa: http://www.emartee.com/product/42148/Mini%20Sound%20Sensor%20%20Arduino%20Compatible
Digitális hőmérő modul
Másodikhoz példa: http://www.emartee.com/product/41849/Arduino%20Temperature%20Sensor%20DS18B20
DS18B20
DS18B20
Hőmérséklet mérése LM35-tel:
http://www.danielandrade.net/2008/07/05/temperature-sensor-arduino/
Hőmérséklet és páratartalom szenzor
példa: http://garagelab.com/profiles/blogs/tutorial-humidity-and-temperature-sensor-with-arduino
Digitális hőmérséklet és páratartalom szenzor
példa: http://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=&products_id=450
Analóg páratartalom szenzor
Hozzá az Arduino Library: http://code.google.com/p/arduino-humidity-sensor-library/
HUMIDITY SENSOR HIH4030
4-5.8V
arduino példa kód serial motorral: http://itp.nyu.edu/physcomp/sensors/Reports/ArduinoCode
Nyomásérzékelő
MPX4115A
példa: http://www.oz9aec.net/index.php/arduino/343-mpx4115a-pressure-sensor-with-arduino
Barometrikus nyomás érzékelő
BMP085 Breakout
példa: http://www.sparkfun.com/tutorials/253
példa: http://garagelab.com/profiles/blogs/tutorial-how-to-use-a-barometric-pressure-sensor-with-arduino
A digitális giroszkóp egy 3d-s gyorsulásérzékelő chip. A Föld mágneses pólusait (Észak, Dél) érzékeli és abból számolja az elmozdulást. Ebben a példában a dölés szöget és az mozdulat sebességét tudjuk kiolvasni serial monitoron.
A tinkerkit library-t is telepíteni kel hozzá, innen:
http://tinkerkit.com/en/Tutorials/Home
Hivatkozások:
TKGyro gyro(I0,I1,TK_4X);
gyro.getXAxis();
//x tengely értéke 0-1023gyro.getYAxis();
//y tengely értéke 0-1023gyro.getXAxisRate();
//x tengely fizikai helyzete: -6000°/s-tól 6000°/s-iggyro.getYAxisRate();
//y tengely fizikai helyzete: -6000°/s-tól 6000°/s-ig
TinkerKit Gyroscope 2 Axis sensitivity 1X
Bekötése:
x tengely A0
y tengely A1
+ pinek 5V-ba mindkettő
- pinek Gnd-be mindkettő
Arduino kód a hivatalos Manual-ból:
/* TinkerKit! Gyroscope [T000060-64]
*
* This sketch shows how to read this 2-axis gyroscope,
* turning in a given angular velocity and then converting it
* in the simplest way in an angular position (/inclination).
*
* Connect: the X-axis to the Analog Input Pin 0 (I0)
* the Y-axis to the Analog Input Pin 1 (I1)
* Optional: connect a servo to Analog Output Pin 9 (O2)
*
* created by Federico Vanzati / f.vanzati@arduino.cc
* in September 2011
*
* inspired from www.arduino.cc/playground/Main/Gyro
* by eric barch / ericbarch.com
*/
#include <Servo.h>
// Pin used in this example
#define SERVO 9
#define X_GYRO 0
#define Y_GYRO 1
#define ADCresolution 4.89f // = 5000mV/1023counts: Arduino analog pins resolution expressed in mV/count
#define Sensitivity 0.67f // [mV/dps] sensitivity of the sensor, took from datasheet (4x output mode)
// Conversion coefficient, we do here because is a constant! so we'll not do the calculation every loop
#define K ADCresolution/Sensitivity // the constant!
#define nrSamples 6 // Number of samples that we take for each measure
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
// Timing variables
unsigned long time, sampleTime = 12;
unsigned long printTime = 0, serialRefresh_time = 500;
float deltaT = (float)sampleTime*nrSamples/1000;
//Gyroscope variables
int roll_zeroVoltage, pitch_zeroVoltage;
int roll_rawADC[nrSamples], pitch_rawADC[nrSamples]; // store 3 values...just to avverage
float roll_rate, pitch_rate; //
float roll_angle = 0, pitch_angle = 0;
int c=0; // just a counter to count the samples
int pos; // variable to store the servo position
void setup()
{
delay(1000);
myservo.attach(SERVO); // attaches the servo on pin 9 to the servo object
myservo.write(pos);
Serial.begin(57600);
Serial.print("TinkerKit! Gyroscope [T000062] Test Example\n\n");
int correctionY=0, correctionX=0;
for (int i=0; i<50; i++)
{
correctionY += analogRead(Y_GYRO);
correctionX += analogRead(X_GYRO);
delay(20);
}
roll_zeroVoltage = correctionY/50;
pitch_zeroVoltage = correctionX/50;
Serial.print(roll_zeroVoltage);
Serial.print(" ");
Serial.println(pitch_zeroVoltage);
time = millis();
}
void loop()
{
// Every 40ms take a sample from gyro
if(millis() - time > sampleTime)
{
time = millis();
roll_rawADC[c] = analogRead(Y_GYRO);
pitch_rawADC[c] = analogRead(X_GYRO);
c++;
}
if(c==nrSamples) // Well, we have 3 samples
{
// Transform the raw data into an angular velocity
roll_rate = (filterGyro(roll_rawADC) - roll_zeroVoltage) * K;
pitch_rate = (filterGyro(pitch_rawADC) - pitch_zeroVoltage)*K;
// Integrate the angular veloity to obtain angular position (or inclination)
// Using the trapeziod method for numerical integration
// sampleTime*nrSamples
// The variable that take mind of the integration time is deltaT = --------------------
// 1000
// - we multiply for nrSamples because
// - divide for 1000 because angular velocity is expessed in seconds,
// but sampleTime is expressed in milliseconds
roll_angle += roll_rate*deltaT/2;
pitch_angle += pitch_rate*deltaT/2;
//Keep our angle between 0-359 degrees
if (roll_angle < 0)
roll_angle += 360;
else if (roll_angle > 359)
roll_angle -= 360;
if (pitch_angle < 0)
pitch_angle += 360;
else if (pitch_angle > 359)
pitch_angle -= 360;
// Now we control the servo: home position is setted in the center at 90 degrees
if(roll_angle >= 0 && roll_angle <= 90) // counterclockwise rotation of the gyro...
pos = 90 + (int)roll_angle; // ...produces rotation from 90 to 180 deg on servo
if(roll_angle >= 270) // clockwike rotation of the gyro...
pos = (int)roll_angle - 270; // ...produces rotation from 90 to 0 deg on servo
myservo.write(pos); // send the position to servo
if(millis() - printTime > serialRefresh_time)
{
printTime = millis();
Serial.print("Roll speed: "); Serial.print((int)roll_rate);
Serial.print("\t Angle: "); Serial.print((int)roll_angle);
Serial.print("\t Pitch speed: ");Serial.print((int)pitch_rate);
Serial.print("\t Angle: ");Serial.println((int)pitch_angle);
Serial.print("Servo: "); Serial.println(pos);
}
c=0; // reset the counter
}
}
int filterGyro(int buffer[])
{
int mean=0;
for(byte i=0; i<nrSamples; i++)
mean += buffer[i];
mean /= nrSamples;
return mean;
}
Egy példa, grafikus interfész processingben, ami a giró adatait mutatja: http://scuola.arduino.cc/en/content/realizziamo-uninterfaccia-grafica-modulo-giroscopio-tinkerkit
forrás
http://www.tinkerkit.com/bp/reference/, http://tinkerkit.com/en/Tutorials/Home, http://sensorwiki.org/doku.php/sensors/gyroscope
10-80 cm között mér. Feszültség ellátás 4.5-5.5 V és áramfogyasztás 30mA.
Bekötése:
Datasheet: http://www.sharpsma.com/webfm_send/1489
balról jobbra: analóg 0, földelés, 5V
Adat kiolvasása Serial Monitorral:
int sensorpin = 0;
// az analóg 0-ba van kötve a sharp szenzor
int val = 0;
// változó ami a szenzor értékeit tárolja
// inicializáljuk 0-ként
void setup(){
Serial.begin(9600);
// serial monitor elindítása
}
void loop(){
val = analogRead(sensorpin);
// érték kiolvasása a szenzorból
Serial.println(val);
// érték kiírása serial monitorral
delay(500);
// fél mp vár mielőtt újra kiolvassa az értéket
}