Questo sito non è ne attivo ne aggiornato, specialmente la pagina del download รจ ferma a 5 vesioni fa , utilizzate il sito in inglese finchè questo sito non sarà annunciato ufficialmente
Learning Examples | Foundations | Hacking | Links
The Memsic 2125 is a dual axis accelerometer sensor from Parallax able of measuring up to a 2g acceleration. When making very accurate measurements, the sensor counts with a temperature pin that can be used to compensate possible errors.
The pins dedicated to measure acceleration can be connected directly to digital inputs to the Arduino board, while the the temperature should be taken as an analog input. The acceleration pins send the signals back to the computer in the form of pulses which width represents the acceleration.
The example shown here was mounted by Anders Gran, while the software was created by Marcos Yarza, who is Arduino's accelerometer technology researcher, at the University of Zaragoza, Spain. The board is connected minimally, only the two axis pins are plugged to the board, leaving the temperature pin open.
Protoboard with an Accelerometer, picture by Anders Gran
/* Accelerometer Sensor
* --------------------
*
* Reads an 2-D accelerometer
* attached to a couple of digital inputs and
* sends their values over the serial port; makes
* the monitor LED blink once sent
*
*
* http://www.0j0.org
* copyleft 2005 K3 - Malmo University - Sweden
* @author: Marcos Yarza
* @hardware: Marcos Yarza
* @project: SMEE - Experiential Vehicles
* @sponsor: Experiments in Art and Technology Sweden, 1:1 Scale
*/
int ledPin = 13;
int xaccPin = 7;
int yaccPin = 6;
int value = 0;
int accel = 0;
char sign = ' ';
int timer = 0;
int count = 0;
void setup() {
beginSerial(9600); // Sets the baud rate to 9600
pinMode(ledPin, OUTPUT);
pinMode(xaccPin, INPUT);
pinMode(yaccPin, INPUT);
}
/* (int) Operate Acceleration
* function to calculate acceleration
* returns an integer
*/
int operateAcceleration(int time1) {
return abs(8 * (time1 / 10 - 500));
}
/* (void) readAccelerometer
* procedure to read the sensor, calculate
* acceleration and represent the value
*/
void readAcceleration(int axe){
timer = 0;
count = 0;
value = digitalRead(axe);
while(value == HIGH) { // Loop until pin reads a low
value = digitalRead(axe);
}
while(value == LOW) { // Loop until pin reads a high
value = digitalRead(axe);
}
while(value == HIGH) { // Loop until pin reads a low and count
value = digitalRead(axe);
count = count + 1;
}
timer = count * 18; //calculate the teme in miliseconds
//operate sign
if (timer > 5000){
sign = '+';
}
if (timer < 5000){
sign = '-';
}
//determine the value
accel = operateAcceleration(timer);
//Represent acceleration over serial port
if (axe == 7){
printByte('X');
}
else {
printByte('Y');
}
printByte(sign);
printInteger(accel);
printByte(' ');
}
void loop() {
readAcceleration(xaccPin); //reads and represents acceleration X
readAcceleration(yaccPin); //reads and represents acceleration Y
digitalWrite(ledPin, HIGH);
delay(300);
digitalWrite(ledPin, LOW);
}
Accelerometer mounted on prototyping board, by M. Yarza
The following example is an adaptation of the previous one. Marcos Yarza added two 220Ohm resistors to the pins coming out of the accelerometer. The board chosen for this small circuit is just a piece of prototyping board. Here the code is exactly the same as before (changing the input pins to be 2 and 3), but the installation on the board allows to embed the whole circutry in a much smaller housing.