Accéléromètre dés avec Circuits 123D (4 / 8 étapes)

Étape 4: Le Code de l’Arduino

Il y a deux bases de code légèrement différentes pour ce projet car la version de la maquette du circuit requiert un code légèrement différent que la version plus grande et plus puissante.  Cela est dû à la plus version travaillant avec un accéléromètre réels et la maquette travaillant avec un accéléromètre virtuel.  BTW, à secouer l’accéléromètre virtuel il suffit de cliquer dessus.

1) le code de l’Arduino pour la version de la maquette est dans le projet de Circuits 123D, simple-il suffit de cliquer sur l’Arduino puis cliquez sur "Arduino Code Editor"

2) le code de l’Arduino pour la version agrandie plus puissante se trouve sur cette page - défiler vers le bas.

Voici un lien vers la bibliothèque de l’accéléromètre.  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); } 

Articles Liés

Interfaçage accéléromètre ADXL 335 avec une planche Mediatek LinkIt

Interfaçage accéléromètre ADXL 335 avec une planche Mediatek LinkIt

À l'aide Mediatek LinkIt One Vous serez en mesure d'interface ADXL 335.Le ADXL335 est un petite, mince, faible consommation, complète accéléromètre 3 axesavec signal conditionné sorties de tension.Étape 1: composantsADXL 335 : Capteur accéléromètreMe
Accéléromètre, interfaçage avec une planche Mediatek Linkit

Accéléromètre, interfaçage avec une planche Mediatek Linkit

Aujourd'hui, je vais montrer comment Mediatek Linkitone Conseil travaille avec accellerometer ADXL335.Le ADXL335 est un petite, mince, faible consommation, complète accéléromètre 3 axesavec signal conditionné sorties de tension. L'accélération des me
ACCÉLÉROMÈTRE & enregistreur + MAKE & utilisation

ACCÉLÉROMÈTRE & enregistreur + MAKE & utilisation

Contexte et butIl y a quelques semaines, un ami a brisé son avant-bras : elle était dans un autobus dont le chauffeur a violemment tiré les freins, et elle est tombée. Cela m'a rappelé les quelques fois où j'ai eu (poliment) rappelle le chauffeur de
Raspberry Pi - ADXL345 accéléromètre 3 axes Python Tutorial

Raspberry Pi - ADXL345 accéléromètre 3 axes Python Tutorial

Le ADXL345 est un petit, léger, ultra basse puissance, accéléromètre 3 axes avec mesure de (13 bits) de haute résolution à jusqu'à ±16 g. sortie numérique données sont au format 16-bit twos complément et sont accessible via l'interface numérique I2 C
Raspberry Pi - Tutorial de Java accéléromètre 3 axes ADXL345

Raspberry Pi - Tutorial de Java accéléromètre 3 axes ADXL345

Le ADXL345 est un petit, léger, ultra basse puissance, accéléromètre 3 axes avec mesure de (13 bits) de haute résolution à jusqu'à ±16 g. sortie numérique données sont au format 16-bit twos complément et sont accessible via l'interface numérique I2 C
Contrôleur de jeu Bluetooth avec accéléromètre et Arduino

Contrôleur de jeu Bluetooth avec accéléromètre et Arduino

Tout le monde aime jouer à des jeux sur PC:) Consoles de jeux les prennent au prochain niveau et quoi de plus amusant que de faire un vous-même ? Ici, nous avons construit une console de jeu avec l'accéléromètre, Arduino et Bluetooth. L'accéléromètre
Manette de jeu USB avec souris Tilt-accéléromètre

Manette de jeu USB avec souris Tilt-accéléromètre

Faire une manette de jeu avec un accéléromètre à l'intérieur!Ce tutoriel de projet va vous montrer comment vous pouvez convertir une manette de console de jeu dans un clavier souris USB pour jouer à des jeux sur votre PC. La manette de jeu USB peut ê
Utiliser un accéléromètre et un Gyroscope avec Arduino

Utiliser un accéléromètre et un Gyroscope avec Arduino

j'ai acheté récemment une combinaison 3 axes accéléromètre et le gyroscope 2 axes de Sparkfun et je voulais mettre du code j'ai utilisé pour le faire marche.  Je suis décidé de l'utiliser dans un Arduino base contrôleur MIDI que je vais poster bientô
Verre avec lumière accéléromètre contrôlée

Verre avec lumière accéléromètre contrôlée

J'ai commencé ce projet comme un verre de côté de lit avec fonction d'éclairage. Lorsque je me suis déplacé vers l'avant j'ai exploré différents usages dans des contextes différents.Scénario de verre côté lit :Lorsque l'utilisateur se réveille et a b
Servo commande via Bluetooth avec l’accéléromètre

Servo commande via Bluetooth avec l’accéléromètre

Dans notre projet, nous commandera un servomoteur via bluetooth. Nous le faisons avec les mesures de contrôle accéléromètre sensible aux mouvements.plus d'informations : http://Make.robimek.com/servo-control-over-Bluetooth-with-accelerometer/Étape 1:
Inclinez la visualisation de l’angle avec Edison, accéléromètre et Python

Inclinez la visualisation de l’angle avec Edison, accéléromètre et Python

J'ai récemment acheté une carte arduino de Intel Edison. Après le clignotement de la LED intégrée, j'ai voulu faire quelque chose d'un peu plus intéressant mais assez simple. Après avoir lu en ligne vers le haut, j'ai décidé sur accéléromètre basé in
Arduino Nano : Sonde d’I2C accéléromètre Gyroscope boussole MPU9250 avec Visuino

Arduino Nano : Sonde d’I2C accéléromètre Gyroscope boussole MPU9250 avec Visuino

MPU9250est l'un des plus avancés combiné accéléromètre, Gyroscope et boussole capteurs de petite taille actuellement disponibles. Ils ont de nombreuses fonctionnalités avancées, y compris le filtrage passe-bas, détection de mouvement et même un proce
Guide de gyroscope et accéléromètre avec Arduino, y compris le filtrage de Kalman

Guide de gyroscope et accéléromètre avec Arduino, y compris le filtrage de Kalman

ce guide a été publié tout d'abord lors du forum de l'Arduino et peut être trouvé ici : http://arduino.cc/forum/index.php/topic, 58048.0.htmlJ'ai juste elle publiée, donc encore plus obtiendrez utilisation de celui-ci. Le code peut être trouvé ici :h
* Préalable * SPI sur la facture pro forma : communication avec un accéléromètre 3 axes SPI à l’aide d’un Pi de framboise

* Préalable * SPI sur la facture pro forma : communication avec un accéléromètre 3 axes SPI à l’aide d’un Pi de framboise

guide étape par étape sur comment mettre en place des Raspbian et communiquer avec un périphérique SPI à l'aide de la bibliothèque de SPI bcm2835 (pas peu cogné!)C'est encore très préliminaire... J'ai besoin d'ajouter des meilleures photos de raccord