Lätt DIY Home Automation (med servo växlar) (3 / 4 steg)

Steg 3: programmering




Med Servo växeln alla ihop och fäst på väggen som är kvar är programmering. Låt oss få det testprogram laddas (om du beställt en arduino med ditt kit detta program kommer pre laddade)

Vad den gör

  • Programmet kommer att starta upp, slå din strömbrytare på. Sedan vänta fem sekunder innan den stängs igen. Du kommer att ha din egen strömbrytare rave.
  • Det finns också ett par demo lägen i programmet visade i denna video.

För detaljer om hur tråd för varje demoläge Vänligen se koden. Här är en sammanfattning av de delar som användes.

  • Demo Mode 1 - knappen - Micro strömbrytare finns (här)
  • Demo Mode 2 - Närhetssensor - IR Närhetssensor hittade (här)
  • Demo läge 3 - foto Resistor hittade (här)

Hur man laddar ner koden till din Arduino

Alternativ 1 - ladda ner och packa upp

  • Hämta bifogade zip-filen (05_SESW_Test.zip)
  • Packa upp den till din Arduino skiss katalog (standard/Mina dokument/Arduino /)
  • Starta Arduino miljö och hämta skissen (_SESW_Test)
  • Ladda upp och börja spela

Alternativ 2 - kopiera och klistra in

  • Kopiera den Arduino koden nedan
  • Klistra in den i utvecklingsmiljön Arduino.
  • Ladda upp och börja spela

Hur man använder Servo växlar i din egen kod

  • Kopiera och klistra in i avsnitt från testprogrammet mellan (/ / Servo Switch - (SESW) inledning börja) och (/ / Servo Switch - (SESW) ingress slutet) till toppen av din skiss
  • Kopiera och klistra in i avsnitt från testprogrammet mellan (/ / Servo Switch - (SESW) rutiner starta) och (/ / Servo Switch - (SESW) rutiner slutet) till botten av din skiss
  • kalla servoSwitchSetup(), i din setup() rutin
  • sedan att använda turnOn() och turnOff()
  • justeringar kan göras att stödja mer servo växlar.

Tillägg 1 - Arduino kod (_SESW_Test)

BÖRJAN av NUNCHUCK INGRESSEN - för mer djupgående information besök ursprungliga källan till denna kod http://www.windmeadow.com/node/42
//-------------------------------------------------
/*
* Ledningar Detaljer
* vit - jorda
* röd - 3.3 + v - 5 volt verkar fungera
* grön - data - Analog 4
* gul - klocka - Analog 5
*/

#include #include #undef int #include uint8_t outbuf [6]. matrisen att lagra arduino utgång int cnt = 0; räknare för nunchuck comunication int ledPin = 13. int nunchuckValues [] = {0,0,0,0,0,0,0,0,0,0}. En matris att lagra nuncheck värden / * * index för varje värde i arrayen nunchuckValues [] * dvs. XSTICK värdet lagras vid nunchuckValues [XSTICK] (0) * / #define XSTICK 0 //The joystick värden #define YSTICK 1 #define XAXIS 2 //The tre accelerometer värden #define YAXIS 3 #define ZAXIS 4 #define ZBUTTON 5 //Front knappen värden (0 när du trycker) #define c-knappen 6 #define XAXISDELTA 7 //Change i accelerometer data från senaste Läs; #define YAXISDELTA 8 #define ZAXISDELTA 9 //Nunchuck G beräkning av konstanter / * * för skalning raw värdena från nunchuck till G-värden * detaljer på kalibreringsmönstret och matematik finns på * http://www.wiili.org/index.php/Motion_analysis (kopierad från http://www.wiili.org/index.php/Motion_analysis) noll poäng x_0 = (x_1 + x_2) / 2\, y_0 = (y_1 + y_3) / 2\, z_0 = (z_2 + z_3) / 2\ En G poäng x = \frac{x_{raw}-x_0} {x_3 - x_0} y = \frac{y_{raw}-y_0} {y_2 - y_0} z = \frac{z_{raw}-z_0} {z_1 - z_0} * / / * inte alla av dessa används och kunde tas bort (höll för att göra interpretting matematik * lättare 0 G värde 1-värde noll när handpåläggning tabell 2-värde när de vilar på näsan * 3-värde när de vilar på sidan (vänster sida upp) * / #define X0 500 #define X1 500 # definiera X2 500 #define X3 711 #define Y0 465 #define Y1 481 #define Y2 621 #define Y3 449 #define Z0 578 #define Z1 785 #define Z2 575 #define Z3 582 //END av NUNCHUCK INGRESSEN - för mer djupgående information besök denna kod http://www.windmeadow.com/node/42 ursprungliga källa / /---/ /---/ / START av ARDUINO kontrollerade SERVO ROBOT (SERBISKT) ingress #include #define LEFTSERVOPIN 10 #define RIGHTSERVOPIN 9 #define MAXOMDR 10 //due till kontinuerlig rotation servon arbeta som högsta hastighet är nåddes vid en mycket lägre värde än 90 (detta värde ändras beroende på din servon) (för Parallax servon) Servo leftServo; Servo rightServo; int leftSpeed = 100; Anger hastigheten på roboten (vänster servon) //a andel mellan - MAXOMDR och MAXOMDR int rightSpeed = 100; Anger hastigheten på roboten (båda servon) //a andel mellan - MAXOMDR och MAXOMDR int hastighet = 100; används för enkel kontroll (goForward, goBackward, goLeft och goRight //a andel mellan 0 och MAXOMDR / / slutet av ARDUINO kontrollerade SERVO ROBOT (serbiska) ingress / /---lång lastPrint; //a länge variabel för lagring av tidpunkten som wiimote staten var sista tryckta #define PRINTINTERVAL 1000 //the antalet millisekunder mellan mata nunchuck staten över usb port #define DÖDBAND 20 //A procentsatsen från centrum som är tolkas som fortfarande noll void setup() {Serial.begin(9600); //Starts den seriella porten (används för debuging men gör servon jumpy) nunchuck_init (); Skicka nunchuck initilization handslag serbSetup(); lägger till servon och förbereder alla serbiska relaterade variabler lastPrint = millis(); } void loop() {readNunchuck(); //Reads det aktuella läget för nunchaku knappar och accelerometrar om ()! getNunValue(ZBUTTON)) {moveWiiAcelerometer(); //moves wii deoending på nunchucks accelerationsvärdena} annat {moveWiiJoystick();} if((millis() - lastPrint) > PRINTINTERVAL) {//If en sekund förflutit sedan senaste utskrift nunchuck värden skriva ut dem printData(); //print nunchuck värden Serial.println(); //add en retur lastPrint = millis(); //store aktuell tid som lastPrint}} void moveWiiAcelerometer() {moveDifferential(getYGs() * (float)100,getXGs()*(float)100);} void moveWiiJoystick() {moveDifferential(map(getNunValue(YSTICK) , 30,220,-100,100),map(getNunValue(XSTICK),30,220,-100,100)); } //Takes i en hastighet och en riktning ingång (som en joystick) och översätter till hastighet kommandon void moveDifferential (int ET1, int direction1) {ET1 = deadBandFilter(speed1); direction1 = deadBandFilter(direction1), setSpeedLeft (speed1 + direction1), setSpeedRight (speed1 - direction1);} int deadBandFilter (int value) {om (värde > - DÖDBAND & & värdet < DÖDBAND) {värde = 0;} annat {if(value > 0) {värde = värde - DÖDBAND * 100 / (100-DÖDBAND);} annat {värde = värde + DÖDBAND * 100 / (100-DÖDBAND);}} returvärde;} //START av NUNCHUCK rutiner / /---//Calculates och returnerar xAxis acceleration i Gs flyta getXGs() {return ((float)getNunValue(XAXIS) - X0) / (X-3 - X 0).} //Calculates och returnerar yAxis acceleration i Gs float getYGs() {återvända ((float)getNunValue(YAXIS)-Y0) / (Y2 - Y0);} //Calculates och returnerar zAxis accelerationen i Gs float getZGs() {återvända ((float)getNunValue(YAXIS)-Z0) / (Z1 - Z0);} //START av NUNCHUCK behandlingen kod - mer djupgående information vänligen besök den ursprungliga källa //of denna kod http://www.windmeadow.com/node/42 / /---void readNunchuck() {Wire.requestFrom (0x52 , 6); begära data från nunchuck samtidigt (Wire.available ()) {outbuf [cnt] = nunchuk_decode_byte (Wire.receive ()); / / få byte som ett heltal digitalWrite (ledPin, hög); / / sätter LED på cnt ++;} / / om vi fått 6 byte, gå sedan skriva ut dem om (cnt > = 5) {nunchuckValues [XSTICK] = outbuf [0]; nunchuckValues [YSTICK] = outbuf [1]; int tempNun_xAxis = outbuf [2] * 2 * 2; int tempNun_yAxis = outbuf [3] * 2 * 2; int tempNun_zAxis = outbuf [4] * 2 * 2; nunchuckValues [ZBUTTON] = 0; nunchuckValues [c-knappen] = 0; / / byte outbuf [5] innehåller bitar för z- och c-knapparna / / det innehåller också de minst signifikanta bitarna för accelerometer data / / så vi måste kontrollera varje bit av byte outbuf [5] om ((outbuf [5] >> 0) & 1) {nunchuckValues [ZBUTTON] = 1;} //checking om Z-knappen trycks (0 = pressad 1 = Kolfiberförstärkt) om ((outbuf [5] >> 1) & 1) {nunchuckValues [c-knappen] = 1;} //checking om C-knappen trycks (0 = pressad 1 = Kolfiberförstärkt) om ((outbuf [5] >> 2) och 1) {tempNun_xAxis += 2;} //adding utstationera minst signifikanta biten till x_axis ((outbuf [5] >> 3) & 1) {tempNun_xAxis += 1;} //adding minst signifikanta bit till x_axis om ((outbuf [5] >> 4) & 1) {tempNun_yAxis += 2;} //adding näst minst signifikanta bit till y_axis om ((outbuf [5] >> 5) & 1) {tempNun_yAxis += 1;} //adding minst signifikanta bit till x_axis om ((outbuf [5] >> 6) & 1) {tempNun_zAxis += 2;} //adding näst minst signifikanta bit till Maria Axel om ((outbuf [5] >> 7) & 1) {tempNun_zAxis += 1;} ///adding minst signifikanta lite till x_axis nunchuckValues [XAXISDELTA] = tempNun_xAxis - nunchuckValues [XAXIS]; nunchuckValues [XAXIS] = tempNun_xAxis; nunchuckValues [YAXISDELTA] = tempNun_yAxis - nunchuckValues [YAXIS]; nunchuckValues [YAXIS] = tempNun_yAxis; nunchuckValues [ZAXISDELTA] = tempNun_zAxis - nunchuckValues [ZAXIS]; nunchuckValues [ZAXIS] = tempNun_zAxis; } cnt = 0; send_zero (); skicka begäran om nästa byte} int getNunValue(int valueIndex) {return nunchuckValues [valueIndex];} void nunchuck_init () {Wire.begin (); / / join i2c buss med adress 0x52 Wire.beginTransmission (0x52); / / skicka till enhet 0x52 Wire.send (0x40); / / skickar minnesadress Wire.send (0x00); / / skickar skickas en nolla. Wire.endTransmission (); stopp sändande} void send_zero () {Wire.beginTransmission (0x52); / / skicka till enhet 0x52 Wire.send (0x00); / / skickar en byte (Wire.endTransmission); / / stopp sändande} / / koda data om du vill formatera som de flesta wiimote förare utom / / behövs endast om du använder en av de regelbundna wiimote förare char nunchuk_decode_byte (char x) {x = (x ^ 0x17) + 0x17; return x;} //END NUNCHUCK-koden - för mer djupgående information vänligen besök //original källan till denna kod http://www.windmeadow.com/node/42 / /---/ /---//START av ARDUINO kontrollerade SERVO ROBOT (SERBISKT) rutiner / * * sätter upp din arduino att ta itu med din serbiska med hjälp av de medföljande rutinerna * / void serbSetup() {setSpeed(speed) pinMode (LEFTSERVOPIN, OUTPUT); //sets den vänstra servo signalen pin //to utgång pinMode (RIGHTSERVOPIN, OUTPUT); //sets rätt servo signalen pin //to utgång leftServo.attach(LEFTSERVOPIN); //attaches lämnade servo rightServo.attach(RIGHTSERVOPIN); //attaches rätt servo goStop();} / * * anger hastigheten av roboten mellan 0-(stopped) och 100-(full hastighet) * OBS : hastighet ändras inte den aktuella hastigheten måste du ändra hastighet * sedan ringa gå metoder innan förändringar sker. * / void setSpeed (int newSpeed) {om (newSpeed > = 100) {newSpeed = 100;} //if hastighet är större än 100 //make det 100 if (newSpeed < = 0) {newSpeed = 0;} //if hastighet är mindre än 0 //it 0 hastighet = newSpeed * MAXOMDR / 100; //scales hastigheten är //between 0 och MAXOMDR} / * * anger hastigheten av robotar rightServo mellan-100-(reversed) och 100-(forward) * OBS : samtal till denna rutin kommer att gälla omedelbart * / void setSpeedRight (int newSpeed) {om (newSpeed > = 100) {newSpeed = 100;} //if hastighet är större än 100 //make det 100 if (newSpeed < = -100) {newSpeed = -100;} //if hastighet är mindre än -100 gör //it -100 rightSpeed = newSpeed * MAXOMDR / 100; //scales hastigheten att vara //between - MAXOMDR och MAXOMDR rightServo.write (90 - rightSpeed); //sends det nya värdet till servo} / * * anger hastigheten av robotar leftServo mellan-100-(reversed) och 100-(forward) * OBS : samtal till denna rutin kommer att gälla omedelbart * / void setSpeedLeft (int newSpeed) {om (newSpeed > = 100) {newSpeed = 100;} //if hastighet är större än 100 //make det 100 om (newSpeed < = -100) {newSpeed = -100;} //if hastighet är mindre än -100 gör //it -100 leftSpeed = newSpeed * MAXOMDR / 100; //scales hastigheten att vara //between - MAXOMDR och MAXOMDR leftServo.write (90 + leftSpeed); //sends det nya värdet till servo} / * * skickar roboten framåt * / void goForward() {leftServo.write (90 + hastighet); rightServo.write (90 - hastighet);} / * * skickar roboten bakåt * / void goBackward() {leftServo.write (90 - speed), rightServo.write (90 + hastighet);} / * * skickar roboten rätt * / annullera goRight() {leftServo.write (90 + hastighet); rightServo.write (90 + hastighet);} / * * skickar roboten vänster * / void goLeft() {leftServo.write (90 - speed), rightServo.write (90 - hastighet);} / * * stannar roboten * / void goStop() {leftServo.write(90); rightServo.write(90);} //END av ARDUINO kontrollerade SERVO ROBOT (SERBISKT) rutiner / /---//START av skriva ut rutiner (kan ta bort om du inte använder) / /---//Prints Nunchucks senast läsa data (måste anropa NUN_readNunchuck(); innan ringer void printData() {Serial.print ("XJoy ="); Serial.Print (getNunValue(XSTICK), DEC); Serial.Print ("\t"); Serial.Print ("YJoy ="); Serial.Print (getNunValue(YSTICK), DEC); Serial.Print ("\t"); Serial.Print ("XGs ="); Serial.Print (getXGs() * 1000, DEC); Serial.Print ("\t"); Serial.Print ("YGs ="); Serial.Print (getYGs() * 1000, DEC); Serial.Print ("\t"); Serial.Print ("ZGs ="); Serial.Print (getZGs() * 1000, DEC); Serial.Print ("\t"); Serial.Print ("ZBut ="); Serial.Print (getNunValue(ZBUTTON), DEC); Serial.Print ("\t"); Serial.Print ("YBut ="); Serial.Print (getNunValue(CBUTTON), DEC); Serial.Print ("\t"); } //END OF PRINT ROUTINES //--------------------------------------------------------------------

Se Steg
Relaterade Ämnen

DIY Home Automation för nybörjare. Absolut ingen kodning eller lödning behövs. Android/Arduino för att växla saker på och av

Denna instructiable är att den absoluta nybörjaren. Om du kan hantera en vass kniv utan att skära kan fingrarna av dig göra och anpassa denna hemautomation controller.Dessa instruktioner är också on-line på www.pfod.com.au under Android / Arduino för...

Uber Home Automation med Arduino & Pi

[REDIGERA] Jag skapade ett forum för att samarbeta på gateway kod.http://homeautomation.proboards.com/Board/2/openha...För några år sedan, blev jag en hundägare för första gången. Kändes inte som lämnar Cody i kenneln ensam hela dagen. Jag hade en we...

Smart Home Automation med Android + Ethernet Internet + Arduino

Hemautomation blir mer och mer populära, prisvärda och fascinerar människor. Internet erbjuder sådana möjligheter som aldrig förr. Imponera på dina vänner visar på Smartphone som du kan växla på/av-lampa i din lägenhet miles bort och samtidigt se det...

DIY Smart Home Automation med Android

Smart Home Automation Låt användaren för att styra hem från hans eller hennes telefon och tilldela åtgärder som bör hända beroende på tid eller andra sensormätningar som ljus, temperatur eller ljudet från alla enheter i nätverket hemautomation.VAD KA...

Hur: Lägga till röst-Feedback till din Home Automation med länka den en!

Hej alla,Idag ska jag visa dig, lägga till röst-feedback till din Home Automation.Detta kommer alltid att vara en bra tillsats till din hem-Automation-projekt med länk det en eftersom din Linkit ONE skulle lämna en feedback som en "Jag har vänt på ly...

Gest baserat Home Automation med Intel Edison (Intel IoT))

Gest baserade hemautomation är det nya sättet att interagera med elektriska apparater tillgängliga på vårt hus. I detta projekt kommer vi att använda sensorer i stället för kamera för gestigenkänning, eftersom det ger bättre konsistens, miljö oberoen...

Smart Home Automation med Voice command

Detta är en steg för steg handledning bygga kretsen för "Smarta hem Automation med Voice Command" funktionen.Ladda ner vår gratis Arduino projektkod här.Krav:• Arduino Uno• LED• Resistor (220 ohm)• Bluetooth-modul (BlueSmirf / BlueMate Silver)•...

Home Automation med Raspberry Pi, Arduino, Domoticz, MySensors.

Hej Fellow beslutsfattare,Detta är min första Instructable på Home Automation. Tanken är att bygga en controller och trådlösa noder för att kontrollera och övervaka.Efter en massa hit och prov med många olika styrenheter som OpenHab, DomotiGa, sedan...

KAOS - Home Automation med röststyrning

Innan jag börjar projektbeskrivningen skulle jag vilja tacka Audrey och Nicole för att ge mig Intel Edison styrelsen med en massa sensorer.I detta Instructable har jag använde Intel Edison för hemautomation med komplett röststyrning. I grund och bott...

Små Home Automation med Intel Edison och Microsoft Azure

Sakernas Internet står för "Sakernas Internet" som är en utveckling av Internet där det planeras för varje enhet ha nätverksåtkomst, så att de kan skicka och ta emot data. Och ännu viktigare, att identifiera themselvesto andra enheter.Detta kan...

DIY Home Decor med papper Quilling konst: Fantastiska DIY Room Decor med fågel Quilling mönster

Quilling konst och Quilling hantverk idéer på senare tid har också en favorit bland barnen som ett lätt quilling konstprojekt för barn, tar kortare tid och ger snabb och färgglada resultat.Quilling mönster och quilling mönster täcker ett brett spektr...

Home Automation med en Smartphone (TV, Arduino, ljus, säkerhet, projektor, DVD-spelare...)

Dessa dagar de hemautomation enheterna och hem styrning system är mycket populära. Även i gemenskapen av DIY-ers. Så bestämde mig att göra min egen hem kontroll enhet genom att använda Arduino. Enheten kan styras med en mobiltelefon, och här använde...

Introduktion till Home Automation med Arduino och RF-signaler!

Idag ska jag visa dig en introduktion på hemautomation med RF-signaler.Föreställa sig mitten av vintern, det är kallt och mörkt ute, men tack vare automation du vakna upp till ett varmt och ljust rum, med en varm kopp kaffe ångande vid sidan av sänge...

Basic Home Automation med Phidgets

Detta enkla projekt tar dig igenom grunderna i att få några interiör avkänning och hemautomation inrättas. Projektet löper från en Phidgets SBC, kommer läsa ljus och ljud och sätta ett ljus på och stänga distans. Du kan verkligen växa detta projekt a...

Arduino MEGA 2560 Home automation med 8 kanal relay

Nästa webbsidorna för de schematiska och kod.Steg 1: Schematiskt Här ser du schematiskt.Bör vara mycket lätt att förstå.Anslut bara det som schematiskt visar.Steg 2: KodenDu måste inkludera SPI och Ethernet bibliotek.Förmodligen måste du ändra IP-adr...

PIR Home Automation

SENSZY (Version 1) - Home Automation med PIRJag är sjuk och trött på att trycka på knappar för att stänga på ljus och fan av mitt rum, så jag tänkte på att göra en automation krets för mitt rum, men jag ville inga knappar att trycka ännu ingen skärm...

DIY $10 IoT baserade Home Automation

Sakernas Internet baserade hemautomation projekt utförs med låg kostnad ESP8266 ESPino ESP-12 WiFi modul, den använder reläer och några enkla komponenter, komplett kod och pcb layout tillhandahålls, för mer information om mjukvara setup går iot komma...

SMS-baserade Home Automation system med 1SHEELD

Hej vänner, detta min första instructable och bara vände 16yr gamla för två månader sedan.I detta instructable jag visar hur man gör 5 kanal SMS baserade Home Automation system med 1sheeld. Jag har byggt min egen billigt SSRs med triacs med uppgift L...

Fysisk Home Automation-gränssnittet

Följande två videos förklara vad detta projekt är tänkt för att göra.Ett gränssnitt ger information och tillåter användaren att kontrollera saker. De flesta hemautomation plattformar förlita sig på ett "virtuellt gränssnitt". Du dra ut en smart...