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!
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.
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.
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; };
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="">=90> {// 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 } }