IKEA Robot lampan (4 / 4 steg)

Steg 4: Koden

Koden:
Här är den första versión i koden, behöver en hel del förbättringar. Det finns vissa bibliotek i´m inte med på huvudloop, men kan användas för att ändra beteendet hos lampan.
Så njut! ;-)

/ * För SeeedStudio leksak hacka tävlingen
Base don exemplen av rörelsesensorn, aningen sensor, knopp servo och andra.
www.arduinoarts.com * /

#include < Servo.h >
CONST int buttonPin = 4; Växla staten
int buttonState = 0; variabel för att läsa tryckknapp status

Servo Setup

Servo myservo2;
Servo myservo; skapa objekt för att styra en servo servo
int pos = 0; variabel att lagra servo position
int pos2 = 0; variabel att lagra servo position
int värde1;
int värde2;

INSTALLATIONSPROGRAMMET FÖR LED

CONST int ledPin2 = 5; //Base ljus
CONST int ledPin = 12; //Lamp ljus

int countlamp2 = 0; Antal slingor på servo

Installationsprogrammet för buller

CONST int thresholdvalue = 300; //The tröskel buller svar

Accelerometer SETUP

int ystate;
int xstate;

#include < Wire.h >

#define MMA7660addr 0x4c
#define MMA7660_X 0x00
#define MMA7660_Y 0x01
#define MMA7660_Z 0x02
#define MMA7660_TILT 0x03
#define MMA7660_SRST 0x04
#define MMA7660_SPCNT 0x05
#define MMA7660_INTSU 0x06
#define MMA7660_MODE 0x07
#define MMA7660_SR 0x08
#define MMA7660_PDET 0x09
#define MMA7660_PD 0x0A

klass Acceleration
{
offentlig:
char x;
char y;
char z;
};

char index.
char kontroll;
char staten.

int audiodelay = 1000;

void mma7660_init(void)
{
Wire.BEGIN();
Wire.beginTransmission (MMA7660addr);
Wire.send(MMA7660_MODE);
Wire.send(0x00);
Wire.endTransmission();

Wire.beginTransmission (MMA7660addr);
Wire.send(MMA7660_SR);
Wire.send(0x07); Prover/andra aktiva och Auto-viloläge
Wire.endTransmission();

Wire.beginTransmission (MMA7660addr);
Wire.send(MMA7660_MODE);
Wire.send (0x01); //active läge
Wire.endTransmission();

}

void setup()
{
mma7660_init(); gå med i2c bussen (adress valfritt för master)
Serial.BEGIN(9600);
Motion Sensor
pinMode (6, ingång); //Use stift 2 att ta emot signalen utdata av modulen
Lykta ljus och bas ljus
pinMode (ledPin, produktionen);
pinMode (ledPin2, produktionen);
SERVON

LJUD
DDRD | = 0X0C; D2 och D3 i skrivläge;
PORTD & = 0xF3; D2 och D3 som till låg;
Brus sensor på Analog 0
SWITCH
pinMode (buttonPin, ingång);
}

void rec_2_begin()
{
PORTD = (PORTD | 0b00000100) & 0b11110111;
}
void rec_2_stop()
{
PORTD & = 0xF3;
}
void play_2()
{
PORTD = (PORTD | 0b00000100) & 0b11110111;
Delay(audiodelay);
PORTD & = 0xF3;
}
//////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
funktion för att styra segment_3
void rec_3_begin()
{
PORTD = (PORTD | 0b00001000) & 0b11111011;
}
void rec_3_stop()
{
PORTD & = 0xF3;
}
void play_3()
{
PORTD = (PORTD | 0b00001000) & 0b11111011;
Delay(audiodelay);
PORTD & = 0xF3;
}
/////////////////////////////////////////////////////
////////////////////////////////////////////////
funktion för att styra segment_4;
void rec_4_begin()
{
PORTD = PORTD | 0b00001100;
}
void rec_4_stop()
{
PORTD & = 0xF3;
}
void play_4()
{
PORTD = PORTD | 0b00001100;
Delay(audiodelay);
PORTD & = 0xF3;
}
//////////////////////

void check_move()
{
int sensorValue = digitalRead(6);
IF(sensorValue==1)
{
digitalWrite(ledPin,HIGH);
Serial.println (sensorValue, DEC); //Print tillståndet för signalen genom seriella bildskärmen.
servo1();

}
annat
{
digitalWrite(ledPin,LOW);
Serial.println (sensorValue, DEC); //Print tillståndet för signalen genom seriella bildskärmen.
servo2();
}
}

void servo1_right()
{
myservo.attach(9);
för (pos = 90; pos < 180; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}
/ * play_2();
Delay(1000);
för (pos = 180, pos > = 90; pos-= 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}*/
}
void servo1_left()
{
myservo.attach(9);
för (pos = 90; pos > 1; pos-= 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}/*
play_2();
Delay(1000);
för (pos = 1; pos < = 90; pos + = 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}*/
}

void servo1_return()
{
myservo.attach(9);
int posact = myservo.read();
om (myservo.read() > 90) {
för (pos = posact; pos > 90; pos-= 1) / / tillbaka till 90
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}
}
annat {
för (pos = posact; pos < = 90; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}
}
}

void servo2_right()
{
myservo2.attach(10);
för (pos = 90; pos < 120; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo2.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}
/ * play_2();
Delay(1000);
för (pos = 180, pos > = 90; pos-= 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}*/
}
void servo2_left()
{
myservo2.attach(10);
för (pos = 90; pos > 60; pos-= 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo2.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}/*
play_2();
Delay(1000);
för (pos = 1; pos < = 90; pos + = 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}*/
}

void servo2_return()
{
myservo2.attach(10);
int posact = myservo2.read();
om (myservo2.read() > 90) {
för (pos = posact; pos > 90; pos-= 1) / / tillbaka till 90
{/ / i steg om 1 grad
myservo2.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}
}
annat {
för (pos = posact; pos < = 90; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo2.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}
}
}

void servo1_no()
{
myservo.attach(9);
för (pos = 90; pos < 120; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}
för (pos = 120; pos > = 90; pos-= 1) / / går från 180 grader till 0 grader
{
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(10); Waits 15 MS för servo att nå ställning
}
}

void servo2()
{
myservo2.attach(10);
för (pos2 = 110, pos2 < 140, pos2 += 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo2.write(POS2); berätta servo gå för att placera i variabel "pos"
Delay(15); Waits 15 MS för servo att nå ställning
}

}

void servo1R()
{
myservo.write(90);
myservo.detach();

}
void servo2R()
{
myservo2.write(90);
myservo2.detach();
}

void lampblink()
{
int sensorValue = digitalRead(6);
om (sensorValue = 1) {
digitalWrite(ledPin,HIGH);
fördröjning (1).
digitalWrite(ledPin,LOW);
fördröjning (1).
//}
annat
digitalWrite(ledPin,LOW);
}
void lamptest()
{

för (int jag = 0; jag < 100; i ++)
{
digitalWrite 12, hög.
Delay(50);
digitalWrite 12, låg.
Delay(50);
}
}

void lampoff()
{
fördröjning (2000);
digitalWrite (ledPin, låg);
}

Accelerometer

void Ecom()
{
unsigned char val [3].
int count = 0;
val [0] = val [1] = värde [2] = 64;
Wire.requestFrom(0x4c, 3); begära 3 byte från slav enheten 0x4c

While(Wire.available())
{
IF(Count < 3)
medan (val [antal] > 63) / / Ladda om den jävla saken det är dåligt
{
val [antal] = Wire.receive();

}
greve ++;
}

omforma 7 bitars signerat nummer in i en 8 bitars undertecknat nummer.
Acceleration ret;

ret.x = ((char) (val [0] << 2)) / 4;
ret.y = ((char) (val [1] << 2)) / 4;
ret.z = ((char) (val [2] << 2)) / 4;
ystate = ret.y;
xstate = ret.x;

Serial.Print ("x =");
Serial.println(ret.x,dec); skriva ut läsning

Serial.Print ("y =");
Serial.println(ret.y,dec); skriva ut läsning

Serial.Print ("z =");
Serial.println(ret.z,dec); skriva ut behandlingen * /
}

char läsning = 0;

void loop()
{

Ecom(); kontroll av accelerometer staten
digitalWrite(ledPin2,HIGH);
buttonState = digitalRead(buttonPin); Läs statligt av växeln

om (buttonState == hög)
{
lampblink(); / / slå LED på:
myservo.attach(9); tillmäter objektet servo servo på pin 9
myservo2.attach(10); tillmäter objektet servo servo på pin 9
värde1 = ystate; läser värdet i potentiometern (värde mellan 0 och 1023)
värde1 = karta (värde1, 30, -30, 0, 179); skala den att använda den med servo (värde mellan 0 och 180)
myservo2.write(val1); anger servo skalad värde
värde2 = xstate; läser värdet i potentiometern (värde mellan 0 och 1023)
värde2 = karta (värde2, -30, 30, 0, 179); skala den att använda den med servo (värde mellan 0 och 180)
myservo.write(val2); anger servo skalad värde

om (ystate < -15) {
play_3();
}
}
annat {
kontroll av buller
int sensorValue2 = analogRead (A0); //noise sensor
Serial.println(sensorValue2);
IF(sensorValue2>thresholdvalue)
{
Serial.println("yes");
digitalWrite(ledNoise,HIGH);
play_4();
lampoff();
lampblink();
servo1_no();
servo1_no();
servo1R();
Delay(1000);
}
annat
{
lampoff();
}
kontroll för motion
int sensorValue = digitalRead(6); rörelsesensor
IF(sensorValue==1)
{
Serial.println("Move");
movestate = 1;
lampblink();
servo2();
servo2_right();
servo1_right();
play_2();
fördröjning (1000);
servo2_return();
servo1_return();
servo1_left();
servo2_left();
play_2();
fördröjning (1000);
servo2_return();
servo1_return();
Delay(1000);
}
annat
{
digitalWrite(ledNoise,LOW);
servo2();
servo1R();
servo2R();
lampoff();
play_2();
movestate = 0;

}

}
}

Se Steg
Relaterade Ämnen

IKEA ROBOT

Inspirerad av en kicken project, jag kunde inte gå förbi rutan reservdelar på min lokala Ikea. Så jag tog en påse och fyllde den med hårdvara delar. (mestadels köksskåp gångjärn) En stor säck fylld kostnadsberäknade bara 1,50 Euro.Hemma, jag kan inte...

IKEA Hack hydrokultur System

en enkel att bygga ebb och flow hydrokultur system gjort (oftast) från IKEA behållare.Ebb och flod hydroponiska system är ett bra sätt att komma igång i hydroponics och göra en underbar utbildningsprojekt för barn. För att inte nämna du kan växa mums...

IKEA Samtid humör-ljus uppgradering

Arduino kompatibel WS2812B-baserade RGB LED ring ljus som kan enkelt läggas till din IKEA Samtid lampan. Körs på 5V DC (2.75A). Få alla design filer på github.Steg 1: Lampa församling Först dra ut strömsladden.Ta bort lampskärmen ångra muttern som kl...

Konvertera en vanlig IKEA APPLARO lampa i en vacker lampa.

Min rumskompis köpte ett par IKEA APPLARO lampor och jag tänkte att sätta några av mina överblivna papper ovanpå det skulle göra det ser bättre ut. Och visst ser det bättre. Projektet tog ungefär 2,5-3 timmar. Du kan använda någon tunt papper som int...

Amadeus, servetter innehavaren junkbot

det var en vanlig torsdag på Instructables (sorry, det var Pizza torsdag. Vi har inte vanliga torsdagar på Instructables. Men ni fattar poängen). Jag var i köket, förbereder en lemonad, tänka på hur man förvandlar en ficklampa till en cyborg arm och...

Fractal Lamp

Jag designade, programmerad och byggde denna lampa under loppet av ett år. Projektet börja inte med mig vill bygga en lampa. Det började som en enkel övning i programmering, krets byggnad och hacka. Jag valde att upcycle IKEA Dioder lampan för att ja...

Ascender pappersflygplan

I den video Robbie Robot lampan visar hur man flyger Ascender!Här är en trevlig, enkel pappersflygplan som alla kan göra.Här är en länk att skriva ut några riktningar och mallhttp://www.theonlinepaperairplanemuseum.com/OPAMAscender/OPAM2ASCENDER.docT...

Fjärrstyrda IKEA Dödsstjärnan lampan

Att vara en ingenjör mig kunde jag inte motstå att lägga fjärrkontroll till denna manuellt utbyggbart lampa som jag såg på IKEA, oavsett kostnaden. I detta projekt jag har ersatt draglina med M3 gängade stav och likströmsmotor, lagt till en mikro-con...

Adafruit Adabot Robot hjärtat Plushie

vi < 3 Adafruit. Precis som det finns legioner av iblers som är fans av instructables, för lojala fans av Adafruit (Jösses, vad du kallar dem, adafruits?) gör din egen Adafruit Adabot Robot hjärtat Plushie. Alla behöver en kram.(lim är inte torr på g...

Robot röst Modulator

detta är en enkel att bygga anordning som omvandlar din egen mänskliga rösten till en överlägsen robot röst. Den innehåller också ett antal söta funktioner som en audio-in-kontakten så att du kan koppla in alla dina favorit instrument, mikrofoner och...

LittleBits Grappler: robotic utrymme armen

En grappler är på slutet av ISS Robot Arm och används för att ta på föremål i rymden-som astronauter! Vi skapade en fungerande replik med en akryl röret, en skrivbordslampa och moduler från littleBits Space Kit.Använd grappler hemma för att plocka up...

Robotarm från en skrivbordslampa (IKEA Tertial hacka)

detta projekt svarar mot ett behov som jag hade: en tredje hand som håller en kamera medan jag utföra ett test och tar foton/video (användbart när du har fastnat på labbet sent på kvällen, och plötsligt behöver en fotograf).Nackdelen med en robotarm...

3D tryckta Ikea Hack lampa

IKEA är full av objekt som bara tigger att vara repurposed. Jag gjorde denna lampa med deras generiska hängande socket fixtur, låda drar, och en 3D tryckt universal fäste som ansluter dem.Jag utformade allt i Fusion 360 och tryckt delarna på en Maker...

Billiga & enkel media projektor med en återvunnen ikea lampa

Syftet med projektet är att återanvända en gammal ikea lampa jag har till något mer elegant. I mitt fall, jag vill ha en bättre dekorativ lampa, men med några ändringar kan du ha en diaprojektor (drivs av lysdioder eller vanlig lampa) eller ens en vi...

AAA Robot (autonoma Analog Arduino)

The AAA Robot är en perfekt robot för nybörjare. Den är mångsidig, lätt att bygga, och diskuterar många av de ämnen som roboticists behöver lära sig, inklusive men inte begränsat till transistor switchar, motor kör nad analoga sensorer. Detta Instruc...

HackerBoxes 0001: Robotic Smart Car, NodeMCU, 3D LED-julgran

Detta instructable delar grunderna i arbetar med HackerBoxes #0001. HackerBoxes är den månatliga box prenumerationstjänsten för elektronik hobbyister, beslutsfattare och hackare. Om du vill få en box som denna rätt till din brevlåda varje månad, kan...

Blinky papper Robot - 1: a papper Circuit projektet

Detta roliga lilla projekt är en snabb, billig introduktion till papper kretsar. Det använder sig även av sturdy självständigt papper människor av mitt tidigare "kompatibel (Blinky är en glad liten robot med en glad röd lampa på huvudet. Röda lampan...

Android G1 följetong till Arduino Robot

lära sig hur din Android mobiltelefon kan styra en robot med en Arduino ombord. Telefonen tar kommandon via telnet från en annan telefon eller en PC, så kan du fjärrstyra roboten. Detta projekt kommer annars inte ändra G1 så du kan fortsätta använda...

Arduino Hexapod Avoider Robot

Hej alla,Låt mig presentera min vän, MBR-L109R# 12 servon# Body tillverkad av Acrilic# 5 ultrasonics avståndsmätare# Arduino Mega som Controller# 3300 mAh Li-po strömkälla# UBEC 5A som strömförsörjning för servonSteg 1: Min första Hexapod Det är min...