Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA


 Totalt 200 rubel för att köpa en bra grund för ett enkelt jobb. Projektet avslutades med utländska kollegor Adruino Arts. För genomförandet måste veta de grundläggande principerna för robotteknik, elektronik och förstå lite programmering.
 I videoklippet författare till berättar och visar att vi borde få ett resultat.
 Förutom lamporna behöver vi en uppsättning Grove - Toy Kit. Beställ online kan du handla efter pris 79.9 $.
 Den huvudsakliga idén - definition av statiskt eller dynamiskt tillstånd av objektet genom rörelsedetektor. Om svaret är positivt, sedan köra en av ställdon och spela förinspelat meddelande. Annars aktiveras 2nd servo, och en annan ljudinspelning.
 Bestämning av att gå igenom någon form av inmatning. Således får vi resultatet i binär kod 0 eller 1.
 Recorder kan spela upp det inspelade ljudet endast 4 via en extern signal. För att spela in (varje 15 sek.), Är det nödvändigt att slå på knappen «play» att «rekord». Efter inspelningen knappen igen bör byta. Detta kan göras genom kod (funktionen play ()). I servokabel är 3 "plus", "minus" och den digitala datan. Den första 2 ger mat till servo (max 7) och 3: e ansluter till en digital utgång, som tar emot information om tillståndet i växeln och kod.
 Först analyserad lampa. Vi behöver inte elektriska komponenter, men behöver arbeta mycket foundation. Du behöver också några rekvisita och stödelement.
 Gör ett hål i röret för att ansluta vår design.
 Prototypen roboten är klar!

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

 Steg 1: Glöd
 Använda LED-lampa IKEA Oleby (Food soldrivna).
 Switchen fungerar bara i en digital enhet, och därför att det beror på det aktuella nätverket. Om vi ​​byter podsoedynym Pay Seeeduino, kan du ställa in den digitala utgången LOW, och då blir det aktuellt. När du lägger HÖG, återkommer den.
 Även inom lampan och vi koppla ett motstånd för att skydda LED.
 Ställ ljuset element i metallbasen.

Uppgraderad lampa robot med IKEA

 Steg 2: Princip
 Vi har lampan bifogade servodetektor kontroll, trippel axel accelerometer, inspelare och spela fyra olika ljud.
 Den grundläggande principen för lampan är som följer:

 Det visar sig buller (ljud)
 Ljuskälla
 Körs rekord №3
 Handlampa ger rörelse (vänster-höger-vänster)
 Servo kvar i 90 °
 Genomförd transaktion

 Om det finns brus, då:

 Ljuskälla
 Servo med lampa flytta vänster
 Körs rekord №2
 Lampa tillbaka i position 90 °
 Genomförd transaktion

 Om metallarmen når en viss position (hög), sedan spela rekord №4.

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

Uppgraderad lampa robot med IKEA

 Steg 3: Förbättring
 I designarbetet kan göra vissa förbättringar som bädda en switch avgift Seeeduino, för att styra exekvering av kod med hjälp av en vanlig cykel IF. Om omkopplaren är påslagen - start läge auto, om inte - mode manual.
 Auto-läget innehåller standardkoden när lampan reagerar på ljud.
 Manuell-läget ger fjärrhantering via en trippel axel accelerometer, ändra läget på axlarna X och Y.
 Du kan göra en sväng lampor på 360 °, lägga till ett separat servo. Kan jag ställa in att ansluta via Wi-Fi / Ethernet.
 Steg 4: Kod
 Författare kod (MrLdnr) finns nedan.
 [Spoiler]
 #include
 const int buttonPin = 4; // Positionsbrytare
 int buttonState = 0; // Variabel för läsning positionsknappar
 // Servo Setup
 Servo myservo2;
 Servo myservo; // Skapar för servostyrning
 int pos = 0; // Variabel för att lagra servoläge
 int pos2 = 0; // Variabel för att lagra servoläge
 int val1;
 int val2;
 // LED SETUP
 const int ledPin2 = 5; // Huvud ljus
 const int ledPin = 12; // Tube ljus
 int countlamp2 = 0;
 // Buller Setup
 const int thresholdvalue = 300; // Svaret på ljud
 // ställ akseleometra
 int ystate;
 int xstate;
 #include
 #define MMA766ddr 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
 {
 allmänheten:
 char x;
 char y;
 röding z;
};

 röding index;
 char kontroll;
 röding tillstånd;
 int audiodelay = 1000;
 void mma7660_init (void)
 {
 Wire.begin ();
 Wire.beginTransmission (MMA766ddr);
 Wire.send (MMA7660_MODE);
 Wire.send (0x00);
 Wire.endTransmission ();
 Wire.beginTransmission (MMA766ddr);
 Wire.send (MMA7660_SR);
 Wire.send (0x07); // Prover / Second aktivt läge och Auto-Sleep
 Wire.endTransmission ();
 Wire.beginTransmission (MMA766ddr);
 Wire.send (MMA7660_MODE);
 Wire.send (0x01); // aktivt läge
 Wire.endTransmission ();
}

 void setup ()
 {
 mma7660_init (); // Gå i2c buss (adress selektiv masterenhet)
 Serial.begin (9600);
 // Rörelsesensor
 pinMode (6 INPUT); // används 2 meter för extern signal
 // Lampa ljus och bas ljus
 pinMode (ledPin, OUTPUT);
 pinMode (ledPin2 OUTPUT);
 // Servon
 // AUDIO
 DDRD | = 0x0C; // D2 och D3 skriver i läge;
 PORTD & = 0xF3; // D2 och D3 inställd på låg;
 // Buller sensor på Analog 0
 // SWITCH
 pinMode (buttonPin, INPUT);
}
 void rec_2_begin ()
 {
 PORTD = (PORTD | 0b00000100) & 0b11110111;
}
 void rec_2_stop ()
 {
 PORTD & = 0xF3;
}
 void play_2 ()
 {
 PORTD = (PORTD | 0b00000100) & 0b11110111;
 fördröjning (audiodelay);
 PORTD & = 0xF3;
}
 ////////////////////////////////////////////////// ////////////////////
 ////////////////////////////////////////////////// /////
 // Funktion för att kontrollera segment_3
 void rec_3_begin ()
 {
 PORTD = (PORTD | 0b00001000) & 0b11111011;
}
 void rec_3_stop ()
 {
 PORTD & = 0xF3;
}
 void play_3 ()
 {
 PORTD = (PORTD | 0b00001000) & 0b11111011;
 fördröjning (audiodelay);
 PORTD & = 0xF3;
}
 ////////////////////////////////////////////////// ///
 ////////////////////////////////////////////////
 // Funktion för att kontrollera segment_4;
 void rec_4_begin ()
 {
 PORTD = PORTD | 0b00001100;
}
 void rec_4_stop ()
 {
 PORTD & = 0xF3;
}
 void play_4 ()
 {
 PORTD = PORTD | 0b00001100;
 fördröjning (audiodelay);
 PORTD & = 0xF3;
}
 //////////////////////

 void check_move ()
 {
 int sensorValue = digitalRead (6);
 if (sensorValue == 1)
 {
 // DigitalWrite (ledPin, HÖG);
 //Serial.println(sensorValue, December); // output positionssignalen till bildskärmen.
 // Servo1 ();
}
 annars
 {
 // DigitalWrite (ledPin, LÅG);
 //Serial.println(sensorValue, December); // output positionssignalen till bildskärmen.
 // Servo2 ();
}
}
 void servo1_right ()
 {
 myservo.attach (9);
 för (pos = 90; pos = 90; möj- = 1) // går från 0 till 180 grader
 {
 myservo.write (pos); // Berättar servo position genom en variabel "pos"
 fördröjning (10); // Väntar 15 ms tills servo tar positionen
} * /
}
 void servo1_left ()
 {
 myservo.attach (9);
 för (pos = 90; pos & gt; 1; pos - = 1) // går från 0 till 180 grader
 {// Steg om 1 grad
 myservo.write (pos); // Berättar servo position genom en variabel "pos"
 fördröjning (10); // Waits för 15 ms, medan servo inte tar ställning
} / *
 play_2 ();
 fördröjning (1000);
 för (pos = 1; pos90) {
 för (pos = posact, pos & gt; 90, pos - = 1) // returnerar 90 grader
 {// Steg om 1 grad
 myservo.write (pos); // Berättar servo position genom en variabel "pos"
 fördröjning (10); // Waits för 15 ms, medan servo inte tar ställning
}
}
 else {
 för (pos = posact, pos 60, pos - = 1) // går från 0 till 180 grader
 {// Steg om 1 grad
 myservo2.write (pos); // Berättar servo position genom en variabel "pos"
 fördröjning (10); // Waits för 15 ms, medan servo inte tar ställning
} / *
 play_2 ();
 fördröjning (1000);
 för (pos = 1; pos90) {
 för (pos = posact, pos & gt; 90, pos - = 1) // returnerar positionen för 90 grader
 {// Steg om 1 grad
 myservo2.write (pos); // Berättar servo position genom en variabel "pos"
 fördröjning (10); // Waits för 15 ms, medan servo inte tar ställning
}
}
 else {
 för (pos = posact; pos<=90 ;="" pos="" +="1)" goes="" from="" 0="" degrees="" to="" 180="">
 {// Steg om 1 grad
 myservo2.write (pos); // Berättar servo position genom en variabel "pos"
 fördröjning (10); // Waits för 15 ms, medan servo inte tar ställning
}
}
}


 void servo1_no ()
 {
 myservo.attach (9);
 för (pos = 90; pos = 90; möj- = 1) // går 180-0 grader
 {
 myservo.write (pos); // Berättar servo position genom en variabel "pos"
 fördröjning (10); // Waits för 15 ms, medan servo inte tar ställning
}
}
 void servo2 ()
 {
 myservo2.attach (10);
 för (pos2 = 110; pos2< 140;="" pos2="" +="1)" ="" 0="" ="" 180="">
 {//
 myservo2.write (pos2); // Berättar servo position genom en variabel "pos"
 fördröjning (15); // Waits för 15 ms, medan servo inte tar ställning
}
}

 annullera servo1R ()
 {
 myservo.write (90);
 myservo.detach ();
}
 annullera servo2R ()
 {
 myservo2.write (90);
 myservo2.detach ();
}
 void lampblink ()
 {
 // Int sensorValue = digitalRead (6);
 // Om (sensorValue 1 =) {
 digitalWrite (ledPin, HÖG);
 // Delay (1);
 // DigitalWrite (ledPin, LÅG);
 // Delay (1);
 //}
 // Else
 // DigitalWrite (ledPin, LÅG);
}
 void larmprov ()
 {
 for (int i = 0; i<100;>
 {
 digitalWrite (12 HÖG);
 fördröjning (50);
 digitalWrite (12 LÅG);
 fördröjning (50);
}
}
 void lampoff ()
 {
 // Delay (2000);
 digitalWrite (ledPin, LÅG);
}
 // Akseleometr
 annullera Ecom ()
 {
 unsigned char val [3];
 int count = 0;
 val [0] = val [1] = val [2] = 64;
 Wire.requestFrom (0x4c, 3); // Ber 3 byte från enheten i slavläge 0x4c
 medan (Wire.available ())
 {
 Om (räkna 63) // laddar
 {
 val [count] = Wire.receive ();
}
 räkna ++;
}
 // Omvandlar signalen av 7 bitar 8 bitar
 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, december); //
 Serial.print ("y =");
 Serial.println (ret.y, december); //
 Serial.print ("z =");
 Serial.println (ret.z, december); //
}
 char läsning = 0;

 void slinga ()
 {
 Ecom (); // Kontrollera status för accelerometern
 digitalWrite (ledPin2HIGH);
 buttonState = digitalRead (buttonPin); // Läsa lägesbrytare
 if (buttonState == HÖG)
 {
 lampblink (); // sväng LED på:
 myservo.attach (9);
 myservo2.attach (10);
 val1 = ystate;
 val1 = karta (val130 -300.179);
 myservo2.write (val1);
 val2 = xstate;
 val2 = karta (val2 -30.300 179);
 myservo.write (val2); // Ställer servoläget enligt värdet ranzhyruemыm
 if (ystate thresholdvalue)
 {
 Serial.println ("JA");
 // DigitalWrite (ledNoise, HÖG);
 play_4 ();
 // Lampoff ();
 lampblink ();
 servo1_no ();
 servo1_no ();
 servo1R ();
 fördröjning (1000);
}
 annars
 {
 lampoff ();
}
 // Kontroll av rörelse
 int sensorValue = digitalRead (6); // Rörelsedetektor
 if (sensorValue == 1)
 {
 Serial.println ("Flytta");
 // 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);
}
 annars
 {
 // DigitalWrite (ledNoise, LÅG);
 // Servo2 ();
 servo1R ();
 servo2R ();
 lampoff ();
 // Play_2 ();
 // Movestate = 0;
}
}
}  




Яндекс.Метрика