Arduino animatörerna-gör din awesome kostymer mer awesome! (13 / 15 steg)
Steg 13: Gå trådlöst med XBee
Exempel 9-Wireless XBee radioapparater
Detta kan du använda Nunchuck kontroll men gör det genom att inrätta en controller som en sändare och en annan styrenhet som mottagaren. Jag använder Adafruit XBee trådlös adaptern eftersom det är super lätt att använda och kan fungera på både 3V och 5V så det är bra för de flesta någon trådlös Arduino projekt. Servo styrelsen är inställd för punkt till punkt kommunikation och XBee adaptern ansluts direkt i ett uttag på toppen av styrelsen. Denna inställning skulle riktigt bra för att kontrollera spökhus attraktioner.
Du kan få XBee adapter och radioapparater här-
http://www.adafruit.com/index.php?main_page=product_info&cPath=29&products_id=126
Det finns en komplett XBee handledning för att bygga XBee adaptern och konfigurera det här-
http://www.Ladyada.net/make/XBee/
Till skillnad från föregående nuchuck kontrollkod använder denna kod en ny nunchuck bibliotek som rensar upp koden betydligt. Det kallas nunchuck_funcs.h
Du kan få det här-
http://todbot.com/blog/2008/02/18/wiichuck-Wii-Nunchuck-adapter-available/comment-Page-3/
Placera bara nunchuck_funcs.h biblioteket i din Arduino bibliotek mapp och du är good to go.
Ledningarna för detta är exakt som ledningarna till exempel 6 utom nunchuck är ansluten till sändaren och servon och lysdioder är ansluten till mottagaren.
Obs - du inte kan ansluta USB till seriell adapter medan XBee-adaptern är ansluten till sin sockel som de använder samma data överföring linjer. Du måste programmeras först och sedan koppla in XBee adapter. Om du behöver för att kunna övervaka den seriella porten medan du använder XBee kan du använda ett par kablar för att ansluta XBee RX och TX till digital ut stift 2 och 3 som visas i Adafruit Point-to-Point-tutorial.
Här är koden för sändare-
/*
* Exempel 9a
* Nunchuck XBee sändare
* Denna kod använder nunchuck fungerar biblioteket och en XBee radio (w / Adafruit XBee adapter)
* att göra en Wii nunchuck en trådlös enhet
* Honus 2010
* Nunchuck fungerar biblioteket från Tod E. Kurt, http://todbot.com/blog
*/
#include "Wire.h" / / include tråd biblioteket
#include "nunchuck_funcs.h" / / include nunchuck fungerar biblioteket
int loop_cnt = 0;
byte accx, accy, zbut, cbut, joyy, joyx;
int ledPin = 13.
void setup()
{
Serial.BEGIN(9600);
nunchuck_setpowerpins();
nunchuck_init(); Skicka initilization handslag
pinMode (ledPin, produktionen);
}
void loop()
{
digitalWrite (ledPin, hög); ställa in lysdioden på
om (loop_cnt > 100) {/ / varje 100 uppdateringsförsök få nya data
loop_cnt = 0;
nunchuck_get_data();
accx = nunchuck_accelx(); varierar från ca 70-182
accy = nunchuck_accely(); varierar från ca 65-173
zbut = nunchuck_zbutton();
CMen = nunchuck_cbutton();
joyx = nunchuck_joyx();
joyy = nunchuck_joyy();
Serial.Print("joyx:");
Serial.Print((byte)joyx,dec);
Serial.Print("joyy:");
Serial.Print((byte)joyy,dec);
Serial.Print("accx:");
Serial.Print((byte)accx,dec);
Serial.Print("accy:");
Serial.Print((byte)accy,dec);
Serial.Print("\tzbut:");
Serial.Print((byte)zbut,dec);
Serial.Print("\tcbut:");
Serial.println((byte)CBUT,dec);
}
loop_cnt ++;
Delay(1);
}
Här är koden för mottagaren-
/*
* Exempel 9b
* Nunchuck XBee mottagare
* Denna kod tar emot input från en Wii nunchuck använder en XBee radio (w / Adafruit XBee adapter)
* och kontroller fyra servon och två digitala stift att vända på lysdioder
* Honus 2010
*/
#include "Servo.h" / / include Servo biblioteket
int joyx, joyy = 135;
int accx, accy = 135;
int zbut, CMen = 0;
int ledPin1 = 13.
int ledPin2 = 12;
int lightvalue1 = 255;
int lightvalue2 = 255;
char nunchuckData;
int val = 0;
int tempval = 0;
int servo1Pos;
int servo2Pos;
int servo3Pos;
int servo4Pos;
int buttonState1 = 0;
int buttonState2 = 0;
int lightMode1 = 0;
int lightMode2 = 0;
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
int servoPin1 = 9;
int servoPin2 = 8;
int servoPin3 = 7.
int servoPin4 = 6;
void setup()
{
Serial.BEGIN(9600);
Serial.Print ("Nunchuck ready\n");
Serial.BEGIN(9600);
servo1.attach(servoPin1);
servo2.attach(servoPin2);
servo3.attach(servoPin3);
servo4.attach(servoPin4);
pinMode (ledPin1, produktionen);
pinMode (ledPin2, produktionen);
}
void loop() {
om (accy > 125) {
servo1Pos = 90-(accy-125);
om (servo2Pos < 45)
servo1Pos = 45;
servo1.write(servo1Pos);
}
om (accy < 125) {
servo1Pos = 90+(125-accy);
om (servo1Pos > 135)
servo1Pos = 135;
servo1.write(servo1Pos);
}
om (accx > 125) {
servo2Pos = 90-(accx-125);
om (servo2Pos < 45)
servo2Pos = 45;
servo2.write(servo2Pos);
}
om (accx < 125) {
servo2Pos = 90+(125-accx);
om (servo2Pos > 135)
servo2Pos = 135;
servo2.write(servo2Pos);
}
om (joyy > 125) {
servo3Pos = 90-(joyy-125);
om (servo3Pos < 45)
servo3Pos = 45;
servo3.write(servo3Pos);
}
om (joyy < 125) {
servo3Pos = 90+(125-joyy);
om (servo3Pos > 135)
servo3Pos = 135;
servo3.write(servo3Pos);
}
om (joyx > 125) {
servo4Pos = 90-(joyx-125);
om (servo4Pos < 45)
servo4Pos = 45;
servo4.write(servo4Pos);
}
om (joyx < 125) {
servo4Pos = 90+(125-joyx);
om (servo4Pos > 135)
servo4Pos = 135;
servo4.write(servo4Pos);
}
om (CMen! = buttonState1) {/ / knappen staten har förändrats!
om (CMen == 1) {/ / kolla om knappen trycks
om (lightMode1 == 0) {/ / lampan är släckt
lightMode1 = 1; ljuset är på!
digitalWrite (ledPin1, hög);
} annat {
lightMode1 = 0; ljuset är på!
digitalWrite (ledPin1, låg);
}
}
}
om (zbut! = buttonState2) {/ / knappen staten har förändrats!
om (zbut == 1) {/ / kolla om knappen trycks
om (lightMode2 == 0) {/ / lampan är släckt
lightMode2 = 1; ljuset är på!
digitalWrite (ledPin2, hög);
} annat {
lightMode2 = 0; ljuset är på!
digitalWrite (ledPin2, låg);
}
}
}
buttonState1 = CMen; spara den nya staten i våra variabel
buttonState2 = zbut; spara den nya staten i våra variabel
While(Serial.available()) {
tempval = Serial.read();
om (tempval == "x") {
nunchuckData = 'x';
Val = 0;
}
annat if (tempval == "y") {
nunchuckData = "y";
Val = 0;
}
annat if (tempval == "X") {
nunchuckData = 'X';
Val = 0;
}
annat if (tempval == "Y") {
nunchuckData = "Y";
Val = 0;
}
annat if (tempval == "Z") {
nunchuckData = "Z";
Val = 0;
}
annat if (tempval == "C") {
nunchuckData = 'C';
Val = 0;
}
annars om (tempval > = "0" & & tempval < = '9') {
Val = val * 10;
Val = val + (tempval - '0');
om (nunchuckData == "x") {
joyx = val;
}
annat if (nunchuckData == "y") {
joyy = val;
}
annat if (nunchuckData == "X") {
accx = val;
}
annat if (nunchuckData == "Y") {
accy = val;
}
annat if (nunchuckData == "Z") {
zbut = val;
}
annat if (nunchuckData == "C") {
CMen = val;
}
}
} //end av input i följetong buffert
}