(→Présentation du projet Arduino) |
(→Explication) |
||
(8 versions intermédiaires masquées) | |||
Ligne 1 : | Ligne 1 : | ||
{{avertissement}} | {{avertissement}} | ||
- | {{vidéo|numérovidéo = <videoflash type="mediaspip" num ="1">http:// | + | {{vidéo|numérovidéo = <videoflash type="mediaspip" num ="1">http://youtu.be/EZlY4I2ARqE|400|300</videoflash>}} |
==Présentation du projet Arduino== | ==Présentation du projet Arduino== | ||
On souhaite pouvoir commander le simulateur de vol de Google Earth avec un Nunchuk de Wii grâce à l'Arduino. | On souhaite pouvoir commander le simulateur de vol de Google Earth avec un Nunchuk de Wii grâce à l'Arduino. | ||
- | + | Ce projet permet une interaction plus intuitive avec le simulateur de vol de Google Earth, nous permettant de "voler" n'importe où sur la terre afin de consulter des images satellites, des cartes et des bâtiments 3D. | |
+ | |||
+ | On pourra ainsi, en se rendant sur le logiciel de navigation, choisir son avion (le SR22 est plus facile à piloter que le F16) et un aéroport pour ensuite démarrer le vol en utilisant le nunchuk. | ||
==Liste du matériel== | ==Liste du matériel== | ||
+ | * [[Image:Google-Earth-Logo.jpg|50px]] [[Google Earth]] | ||
* [[Image:Arduino_Diecimila.jpg|50px]] Un [[Arduino]] avec son câble USB | * [[Image:Arduino_Diecimila.jpg|50px]] Un [[Arduino]] avec son câble USB | ||
* [[Image:Computer.jpg|50px]] Un [[ordinateur]] | * [[Image:Computer.jpg|50px]] Un [[ordinateur]] | ||
* [[Image:Arduino_Uno_logo.png|50px]] Le [[logiciel Arduino]] | * [[Image:Arduino_Uno_logo.png|50px]] Le [[logiciel Arduino]] | ||
- | |||
* [[Fichier:Nunchuk.jpg|50px]] Un [[Nunchuk]] | * [[Fichier:Nunchuk.jpg|50px]] Un [[Nunchuk]] | ||
* [[Image:Plaquecablage bb.jpg|50px]] Un [[Adaptateur pour Nunchuck]] | * [[Image:Plaquecablage bb.jpg|50px]] Un [[Adaptateur pour Nunchuck]] | ||
+ | * [[Image:Plaque2.jpg|50px]] Une plaque labdec ou [[Breadboard]] | ||
+ | * [[Image:Fils1.jpg|50px]] Du [[fil électrique]] (noir, rouge…) | ||
* [[Fichier:Soldering_iron.jpg|50px]] Un [[fer à souder]] | * [[Fichier:Soldering_iron.jpg|50px]] Un [[fer à souder]] | ||
==réalisation du projet== | ==réalisation du projet== | ||
===Explication=== | ===Explication=== | ||
- | + | ||
+ | Afin de raccorder le nunchuk de wii à l'arduino, il est nécessaire de disposer d'une plaque labdec sur laquelle on relira les deux. Pour ce faire, il faut utiliser un adaptateur que l'on fixe au Nunchuk et de souder des fils de couleurs (pour mieux se repérer) cet adaptateur. | ||
+ | |||
+ | Il faut ensuite à partir d'un ordinateur paramétrer le code de l'arduino avec le code donné sur cette page. | ||
+ | |||
===Code=== | ===Code=== | ||
<pre> | <pre> |
Sommaire |
On souhaite pouvoir commander le simulateur de vol de Google Earth avec un Nunchuk de Wii grâce à l'Arduino.
Ce projet permet une interaction plus intuitive avec le simulateur de vol de Google Earth, nous permettant de "voler" n'importe où sur la terre afin de consulter des images satellites, des cartes et des bâtiments 3D.
On pourra ainsi, en se rendant sur le logiciel de navigation, choisir son avion (le SR22 est plus facile à piloter que le F16) et un aéroport pour ensuite démarrer le vol en utilisant le nunchuk.
Afin de raccorder le nunchuk de wii à l'arduino, il est nécessaire de disposer d'une plaque labdec sur laquelle on relira les deux. Pour ce faire, il faut utiliser un adaptateur que l'on fixe au Nunchuk et de souder des fils de couleurs (pour mieux se repérer) cet adaptateur.
Il faut ensuite à partir d'un ordinateur paramétrer le code de l'arduino avec le code donné sur cette page.
/* * WiichuckSerial * * Uses Nunchuck Library discussed in Recipe 16.5 * sends comma-separated values for data * Label string separated by commas can be used by receiving program * to identify fields */ #include <Wire.h> #include "Nunchuck.h" // values to add to the sensor to get zero reading when centered int offsetX, offsetY, offsetZ; #include <Wire.h> #include "Nunchuck.h" void setup() { Serial.begin(57600); nunchuckSetPowerpins(); nunchuckInit(); // send the initialization handshake nunchuckRead(); // ignore the first time delay(50); } void loop() { nunchuckRead(); delay(6); boolean btnC = nunchuckGetValue(wii_btnC); boolean btnZ = nunchuckGetValue(wii_btnZ); if(btnC) { offsetX = 127 - nunchuckGetValue(wii_accelX) ; offsetY = 127 - nunchuckGetValue(wii_accelY) ; } Serial.print("Data,"); printAccel(nunchuckGetValue(wii_accelX),offsetX) ; printAccel(nunchuckGetValue(wii_accelY),offsetY) ; printButton(nunchuckGetValue(wii_btnZ)); Serial.println(); } void printAccel(int value, int offset) { Serial.print(adjReading(value, 127-50, 127+50, offset)); Serial.print(","); } void printJoy(int value) { Serial.print(adjReading(value,0, 255, 0)); Serial.print(","); } void printButton(int value) { if( value != 0) value = 127; Serial.print(value,DEC); Serial.print(","); } int adjReading( int value, int min, int max, int offset) { value = constrain(value + offset, min, max); value = map(value, min, max, -127, 127); return value; } You can send nunchuck joystick values instead of the accelerometer values by replacing the two lines that begin printAccel with the following lines: printJoy(nunchuckGetValue(wii_joyX)); printJoy(nunchuckGetValue(wii_joyY)); You can use the Processing sketch from Recipe 4.10, but this enhanced version displays the control position in the Processing window and activates the flight simulator using the nunchuck ‘z’ button: /** * GoogleEarth_FS.pde * * Drives Google Flight Sim using CSV sensor data */ import java.awt.AWTException; import java.awt.Robot; import java.awt.event.InputEvent; import java.awt.Dimension; import processing.serial.*; Serial myPort; // Create object from Serial class arduMouse myMouse; String message = null; int maxDataFields = 7; // 3 axis accel, 2 buttons, 2 joystick axis boolean isStarted = false; int accelX, accelY, btnZ; // data from msg fields will be stored here void setup() { size(260, 260); PFont fontA = createFont("Arial.normal", 12); textFont(fontA); short portIndex = 1; // select the com port, 0 is the first port String portName = Serial.list()[portIndex]; println(Serial.list()); println(" Connecting to -> " + portName) ; myPort = new Serial(this, portName, 57600); myMouse = new arduMouse(); fill(0); text("Start Google FS in the center of your screen", 5, 40); text("Center the mouse pointer in Google earth", 10, 60); text("Press and release Nunchuck Z button to play", 10, 80); text("Press Z button again to pause mouse", 20, 100); } void draw() { processMessages(); if (isStarted == false) { if ( btnZ != 0) { println("Release button to start"); do{ processMessages();} while(btnZ != 0); myMouse.mousePress(InputEvent.BUTTON1_MASK); // start the SIM isStarted = true; } } else { if ( btnZ != 0) { isStarted = false; background(204); text("Release Z button to play", 20, 100); print("Stopped, "); } else{ myMouse.move(accelX, accelY); // move mouse to received x and y position fill(0); stroke(255, 0, 0); background(#8CE7FC); ellipse(127+accelX, 127+accelY, 4, 4); } } } void processMessages() { while (myPort.available () > 0) { message = myPort.readStringUntil(10); if (message != null) { //print(message); String [] data = message.split(","); // Split the CSV message if ( data[0].equals("Data"))// check for data header { try { accelX = Integer.parseInt(data[1]); accelY = Integer.parseInt(data[2]); btnZ = Integer.parseInt(data[3]); } catch (Throwable t) { println("."); // parse error } } } } } class arduMouse { Robot myRobot; // create object from Robot class; static final short rate = 4; // pixels to move int centerX, centerY; arduMouse() { try { myRobot = new Robot(); } catch (AWTException e) { e.printStackTrace(); } Dimension screen = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); centerY = (int)screen.getHeight() / 2 ; centerX = (int)screen.getWidth() / 2; } // method to move mouse from center of screen by given offset void move(int offsetX, int offsetY) { myRobot.mouseMove(centerX + (rate* offsetX), centerY - (rate * offsetY)); } // method to simulate pressing mouse button void mousePress( int button) { myRobot.mousePress(button) ; } }
D'autres expériences utilisant l'Arduino sont disponible dans ce wiki. Vous pouvez les retrouver ici : Catégorie : Arduino.
Vous pouvez retrouver une multitude d'expériences sur l'arduino sur Arduino forum.
quelles peuvent être les applications technologique de ce montage, ou est-ce qu'on retrouve des programme qui y ressemble ?
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique