Dados de acelerómetro con circuitos 123D (4 / 8 paso)

Paso 4: El código de Arduino

Hay dos bases de código ligeramente diferente para este proyecto debido a que la versión de protoboard del circuito requiere código ligeramente diferente de la versión más de gran alcance más grande.  Esto es debido a la mayor versión trabajando con un acelerómetro real y la protoboard con un acelerómetro virtual.  Por cierto, para sacudir el acelerómetro virtual haga clic en él.

1) el código de Arduino para la versión de la placa es en el proyecto de circuitos 123D, simplemente, haga clic en el Arduino luego haga clic en "Editor de código de Arduino"

2) el código de Arduino para la versión más de gran alcance más grande está en esta página - Desplácese hacia abajo.

Aquí hay un enlace a la biblioteca de acelerómetro.  https://code.Google.com/p/MMA7361-Library/

 #include <AcceleroMMA7361.h> //should be in Documents/Arduino/Libraries (on a Mac) //download it here https://code.google.com/p/mma7361-library/ //mapping of the Arduino board to the large 7-segment from Sparkfun, letter is segment, number is Aruino Digital Output // https://www.sparkfun.com/products/8530 // a // f b // g // e c // d int a = 0; int b = 6; int c = 5; int d = 4; int e = 3; int f = 1; int g = 2; //mapping of the accelerometer board from sparkfun, these are Arduino outputs // https://www.sparkfun.com/products/9652 int st = 8; //self test (output from Arduino) int gsel = 9; //g-force range, +-1.5g and +-6g (output from Arduino) int zg = 10; //zero g (input to Arduino) int slp = 11; //sleep (output from Arduino) AcceleroMMA7361 accelero; //create the accelero object // the setup routine runs once when you press reset button on Arduino or power up: void setup() { // initialize the digital pin as an output. pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT); pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); writeDigit(-1); // turn off all segments // Serial.begin(9600); //uncomment this line for debugging, it will otherwise mess with the numbers! accelero.begin(slp, st, zg, gsel, A0, A1, A2); //config the accelero to use the pins from above and to read analog values from A0, A1, A2 accelero.setARefVoltage(5); //telling accelero that the AREF voltage is 5V (to get higher resolution you'd set this to 3.3 and blue-wire it on the board) accelero.setSensitivity(LOW); //sets the sensitivity to +-1.5G accelero.calibrate(); //you need to do this for brake light, probably not for dice. } void writeDigit(int digit) { //calling this function sets the segments to look like an intiger 0-9, we never show 0, or 9. -1 is all off. Serial.print("digit: "); Serial.print(digit); Serial.print("\n"); switch(digit) { case 0: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, LOW); break; case 1: digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break; case 2: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, LOW); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, HIGH); break; case 3: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, HIGH); break; case 4: digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break; case 5: digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break; case 6: digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break; case 7: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break; case 8: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break; case 9: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break; case -1: digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break; } } int get_g() { //gets the length of the g force vectors int x = accelero.getXAccel(); int y = accelero.getYAccel(); int z = accelero.getZAccel(); int gf = abs(sqrt(x*x+y*y+z*z)-100); // the "-100" is roughly subtracting out gravity if (gf > 50) { Serial.print("g: "); Serial.print(gf); Serial.print("\n"); } return gf; } int digit = 0; int count = 0; // counter int count2 = 0; // another counter int state = 0; // 0 = idle // 1 = shaking // 2 = show_result int sum = 0; int cur = 0; int res; // the loop routine runs over and over again forever: void loop() { cur = get_g(); sum += cur; if (sum < 0) sum = 0; switch(state) { case 0: // idle state, if cur is >70 then go to state 1 if (cur > 70) { state = 1; count = 0; count2 = 0; } break; case 1: // actively shaking, if (count2 == 10) { // 10 is 100ms writeDigit(sum % 6 + 1); // show a random number every 100ms. Sum is a random number depending on how long the code is running and how you shake the die. count2=0; } else { count2++; } if (cur > 55) { // from here until the break it is checking how long it has been since shaking stopped, if over 250ms without seeing g>55 go to state 2 state = 1; count = 0; } else { if (count > 25) { state = 2; count = 0; } else { count ++; } } break; case 2: // showing the result, the delay times are in ~ centi-seconds if (count == 0) writeDigit(sum % 6 + 1); if (count == 10) writeDigit(sum % 6 + 1); if (count == 25) writeDigit(sum % 6 + 1); if (count == 45) writeDigit(sum % 6 + 1); if (count == 70) writeDigit(sum % 6 + 1); if (count == 100) writeDigit(sum % 6 + 1); if (count == 135) { // from here to close of {} it is showing the final result, slowing down as it goes res = sum % 6 + 1; writeDigit(res); } if (count == 185) writeDigit(-1); if (count == 235) writeDigit(res); if (count == 285) writeDigit(-1); if (count == 335) { writeDigit(res); state = 0; count = 0; } count++; break; } delay(10); //uncomment out this small loop to test that all segments are working. (comment out the other "void loop" lines) //void loop() { // writeDigit(8); // delay(10); } 

Artículos Relacionados

Arpa láser con circuitos 123D

Arpa láser con circuitos 123D

¿Disfrutar de diseño electrónico? ¿Disfrute de la impresión 3D? ¿Disfrutar de la música? Sin problema. Vamos a hacer un proyecto sencillo y disfrutar de todos ellos.Hicimos esto como forma de demostración de algunas cosas que puedes hacer con nuestra
GY-521 MPU6050 giroscopio de 3 ejes y acelerómetro con Arduino

GY-521 MPU6050 giroscopio de 3 ejes y acelerómetro con Arduino

Este video tutorial va sobre la instalación y configuración de un tablero de GY-521 MPU6050 3 ejes giroscopio y acelerómetro con un Arduino. Después de algunos problemas iniciales con pude conseguir el componente de trabajo. Al principio tuve problem
Guía de giroscopio y acelerómetro con Arduino incluye filtrado de Kalman

Guía de giroscopio y acelerómetro con Arduino incluye filtrado de Kalman

esta guía fue publicada primero en el foro de Arduino y se puede encontrar aquí: http://arduino.cc/forum/index.php/topic, 58048.0.htmlYo apenas había publicado, así que aún más conseguirá un uso. El código se puede encontrar aquí:https://github.com/T
Acelerómetro con un tablero de Mediatek Linkit

Acelerómetro con un tablero de Mediatek Linkit

Hoy voy a mostrar cómo Mediatek Linkitone Junta trabaja con accellerometer ADXL335.El ADXL335 es pequeña, delgada, de bajo consumo, acelerómetro de 3 ejes completacon la señal había condicionada salidas de voltaje. La aceleración de las medidas de pr
Registrador de datos geo: Arduino + GPS + SD + acelerómetro para registrar, sello de tiempo y datos del sensor geo-tag

Registrador de datos geo: Arduino + GPS + SD + acelerómetro para registrar, sello de tiempo y datos del sensor geo-tag

versiones17 de octubre de 2013: he publicado una guía sobre el uso de tu teléfono Android para llevar a cabo una tarea similar al aprovechar tu Android dispositivo de construido en GPS y sensores.06 de febrero de 2013: Aparece en GeoAwesomeness http:
Conectar abierto loger y acelerómetro

Conectar abierto loger y acelerómetro

Estoy escribiendo esto por lo que puedo recordar cómo hacer este último. Se trata de un hack tirado unos años atrás y sólo salen del armario para volver a utilizar.ANTECEDENTESEs común que desea guardar los datos de un acelerómetro con un dispositivo
Acelerómetro y giroscopio Tutorial

Acelerómetro y giroscopio Tutorial

IntroducciónEsta guía está dirigida a todos los interesados en el uso de acelerómetros y giróscopos, así como dispositivos de combinación IMU (Unidad de medición inercial) en sus proyectos de electrónicaCubriremos:¿Qué mide un acelerómetro?¿Qué mide
Controlador de Bluetooth juegos con acelerómetro y Arduino

Controlador de Bluetooth juegos con acelerómetro y Arduino

Todo el mundo le gusta jugar juegos en PC :) ¿Consolas de juegos llevan al siguiente nivel y es más diversión que hacer uno mismo? Aquí hemos construido una consola de juegos con acelerómetro, Arduino y Bluetooth. El acelerómetro en la consola de jue
Vidrio con luz de acelerómetro controlado

Vidrio con luz de acelerómetro controlado

He empezado este proyecto como un vidrio de lado de la cama con función de iluminación. Cuando he avanzado exploré diferentes usos en diferentes contextos.Escenario de cristal de lado de cama:Cuando el usuario se despierta y necesita beber agua, él o
Servo Control por Bluetooth con acelerómetro

Servo Control por Bluetooth con acelerómetro

En nuestro proyecto, controlamos un servomotor a través de bluetooth. Lo hacemos con las medidas de control del acelerómetro sensible al movimiento.más información: http://make.robimek.com/servo-control-over-Bluetooth-with-Accelerometer/Paso 1: mater
Captura de movimiento con un acelerómetro de Arduino con XBee comunicaciones

Captura de movimiento con un acelerómetro de Arduino con XBee comunicaciones

***************************************ACTUALIZADO 10 DE JUNIO DE 2014 ***Según lo prometido, este Instructable ha sido actualizado para incluir una sección sobre comunicación XBee. Además, un Instructable nuevas se publicarán pronto sobre el desarro
Arduino Nano: Sensor acelerómetro giroscopio MPU9250 brújula I2C con Visuino

Arduino Nano: Sensor acelerómetro giroscopio MPU9250 brújula I2C con Visuino

MPU9250es uno de los más avanzados sensores de tamaño pequeño acelerómetro, giroscopio y brújula actualmente disponibles combinados. Tienen muchas características avanzadas, incluyendo filtrado de paso bajo, detección de movimiento e incluso un proce
Acelerómetro ADXL 335 con Mediatek LinkIt uno tablero de interconexión

Acelerómetro ADXL 335 con Mediatek LinkIt uno tablero de interconexión

Utilizando MediaTek LinkIt uno Podrás interfaz ADXL 335.El ADXL335 es pequeña, delgada, de bajo consumo, acelerómetro de 3 ejes completacon la señal había condicionada salidas de voltaje.Paso 1: componentesADXL 335: El Sensor del acelerómetroUn table
Game Pad USB con inclinación-acelerómetro ratón

Game Pad USB con inclinación-acelerómetro ratón

Hacer un cojín con un acelerómetro dentro del juego!Este tutorial de proyecto le mostrará cómo puede convertir un gamepad de consola en un ratón de teclado USB para jugar en tu PC. El Gamepad USB se puede utilizar con casi cualquier software, como un