Mange av dere har lagt merke til at ofte i supermarkeder og større kontorlokaler tilgjengelig i forskjellige farger dekorert med vakre glass akvarier. Vi vil prøve å gjenta det samme, men i våre hjem.
Trinn 1: Materialer
Jord Blomst (vi valgte bregne) Glassbeholder med en åpen topp
Trinn 2: Rengjøring Vask glassflasker med såpe og vann. La det tørke før du helle bakken.
Trinn 3: Test Legg forsiktig en blomst i en bolle, midt i potten for å se hvordan det vil se anlegget.
Trinn 4: Edit Vi tar ut blomsten og kuttet av de ekstra grener som trengs, som i vårt tilfelle.
Trinn 5: Jord Overføre nøye anlegget i en beholder, men uten potten. Fyll jorden.
Trinn 6: vanning Vannes blomst å myke jorda. Ikke overdriv dette faktum.
Trinn 7: Klar Dekorere rommet et par blomster.
Totalt 200 rubler for å kjøpe et godt grunnlag for en enkel jobb. Prosjektet ble gjennomført med utenlandske kolleger Adruino Arts. For gjennomføringen må kjenne de grunnleggende prinsippene for robotikk, elektronikk og forstå litt programmering. I videoklippet forfatter av forteller og viser at vi bør få et resultat. I tillegg til lampene må vi et sett av Grove - Toy Kit. Bestill på nettet kan du handle etter pris 79,9 $. Hovedideen - Definisjon av statisk eller dynamisk tilstanden til objektet ved bevegelsesdeteksjon. Hvis svaret er positivt, og deretter kjøre en av aktuatorer og spille av forhåndsinnspilt melding. Ellers aktivert andre servo, og en annen lyd opptak. Fastsettelse av å gå gjennom noen form for innspill. Dermed får vi resultatet i binær kode 0 eller 1. Opptakeren kan spille av innspilt lyd bare 4 via et eksternt signal. For å ta opp (hver 15 sek.), Er det nødvendig å slå på knappen «play» til «record». Etter innspillingen knappen igjen bør bytte. Dette kan gjøres gjennom koden (funksjon play ()). I servo kabelen er 3 "pluss", "minus" og de digitale data. De første 2 skaffe mat til servo (maks 7) og tredje kobles til en digital utgang, som mottar informasjon om tilstanden på bryteren og av kode. Først analyseres lampe. Vi trenger ikke elektriske komponenter, men må jobbe veldig fundament. Du trenger også noen rekvisitter og støtteelementer. Lag et hull i røret for å koble vår design. Prototypen robot er klar!
Trinn 1: Glow Ved hjelp av LED-lampe IKEA Oleby (Food solcelledrevet). Bryteren fungerer bare i en digital enhet, og derfor det avhenger av dagens nettverk. Hvis vi bytter podsoedynym Pay Seeeduino, kan du sette den digitale utgangen LOW, og da blir det strøm. Når du legger HIGH, vises det. Selv innenfor lampe og vi kobler en motstand å beskytte LED. Still lyselement i metallbasen.
Trinn 2: Prinsipp Vi har lampen festet servo detektor kontroll, triple akse akselerometer, opptaker og spille fire forskjellige lyder. Det grunnleggende prinsippet om lampen er som følger:
Det viser seg at støy (lyd) Lampe inkludert Kjører rekord №3 Hånd gir lampen bevegelse (venstre-høyre-venstre) Servo fortsatt ved 90 ° Fullført transaksjonen
Hvis det er støy, deretter:
Lampe inkludert Servo med Lamp flytte igjen Kjører rekord №2 Lampe tilbake i posisjon 90 ° Fullført transaksjonen
Dersom metall arm når en viss (høy) posisjon, deretter spille rekord №4.
Trinn 3: Forbedring I utformingen arbeid kan gjøre noen forbedringer som embedding en bytteavgift Seeeduino, for å kontrollere kjøring av kode ved hjelp av en regelmessig syklus IF. Hvis bryteren er slått på - start modus auto, hvis ikke - Stilling manuelt. Auto-modus inkluderer standard kode når lampen reagerer på lyd. Manuell-modus gir ekstern forvaltning gjennom en trippel akse akselerometer, endre plasseringen av aksene X og Y. Du kan gjøre en sving lysene på 360 °, og legger til det en egen servo. Kan jeg satt opp til å koble til via Wi-Fi / Ethernet. Trinn 4: Code Forfatter kode (MrLdnr) finner du nedenfor. [Spoiler] # Include const int buttonPin = 4; // Posisjonsbryter int = 0 buttonState; // Variabel for å lese stillingsknapper // Servo Setup Servo myservo2; Servo myservo; // Oppretter for servo kontroll int pos = 0; // Variabel å lagre servo stilling int = 0 pos2; // Variabel å lagre servo stilling int VAL1; int val2; // LED OPPSETT const int ledPin2 = 5; // Hoved lys const int ledPin = 12; // Tube lys int = 0 countlamp2; // Noise Setup const int thresholdvalue = 300; // Responsen til lyd // Set 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 klasse Akselerasjon { public: røye x; røye y; røye z; };
røye indeksen; røye kontroll; røye tilstand; 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); // Prøver / Second aktiv modus og Auto-Sleep Wire.endTransmission (); Wire.beginTransmission (MMA766ddr); Wire.send (MMA7660_MODE); Wire.send (0x01); // aktiv modus Wire.endTransmission (); }
void setup () { mma7660_init (); // Bli i2c buss (adresse selektiv hovedenhet) Serial.begin (9600); // Motion Sensor pinMode (6 INPUT); // brukt 2 meter for eksternt signal // Lampe lys og basen lys pinMode (ledPin, UTGANG); pinMode (ledPin2 UTGANG); // Servoer // AUDIO DDRD | = 0x0C; // D2 og D3 skrive i modus; PORTD & = 0xF3; // D2 og D3 satt til lav; // Støy sensor på Analog 0 // SWITCH pinMode (buttonPin, INPUT); } ugyldig rec_2_begin () { PORTD = (PORTD | 0b00000100) og 0b11110111; } ugyldig rec_2_stop () { PORTD & = 0xF3; } void play_2 () { PORTD = (PORTD | 0b00000100) og 0b11110111; forsinkelse (audiodelay); PORTD & = 0xF3; } ////////////////////////////////////////////////// //////////////////// ////////////////////////////////////////////////// ///// // Funksjon for å kontrollere segment_3 ugyldig rec_3_begin () { PORTD = (PORTD | 0b00001000) og 0b11111011; } ugyldig rec_3_stop () { PORTD & = 0xF3; } void play_3 () { PORTD = (PORTD | 0b00001000) og 0b11111011; forsinkelse (audiodelay); PORTD & = 0xF3; } ////////////////////////////////////////////////// /// //////////////////////////////////////////////// // Funksjon for å kontrollere segment_4; ugyldig rec_4_begin () { PORTD = PORTD | 0b00001100; } ugyldig rec_4_stop () { PORTD & = 0xF3; } void play_4 () { PORTD = PORTD | 0b00001100; forsinkelse (audiodelay); PORTD & = 0xF3; } //////////////////////
ugyldig check_move () { int sensorValue = digitalRead (6); if (sensorValue == 1) { // DigitalWrite (ledPin, HIGH); //Serial.println(sensorValue, DEC); // utgang posisjonen signal til skjermen. // Servo1 (); } annet { // DigitalWrite (ledPin, LOW); //Serial.println(sensorValue, DEC); // utgang posisjonen signal til skjermen. // Servo2 (); } } ugyldig servo1_right () { myservo.attach (9); for (pos = 90; pos = 90; besittelses = 1) // går fra 0 til 180 grader { myservo.write (pos); // Forteller servo posisjon gjennom en variabel 'pos' forsinkelse (10); // Waits 15 ms til servo tar stillingen } * / } ugyldig servo1_left () { myservo.attach (9); for (pos = 90, pos & gt; 1; pos - = 1) // går fra 0 til 180 grader {// Trinn på 1 grad myservo.write (pos); // Forteller servo posisjon gjennom en variabel 'pos' forsinkelse (10); // Waits i 15 ms, mens servo ikke ta stilling } / * play_2 (); forsinkelse (1000); for (pos = 1; pos90) { for (pos = posact; pos & gt; 90; pos - = 1) // returnerer 90 grader {// Trinn på 1 grad myservo.write (pos); // Forteller servo posisjon gjennom en variabel 'pos' forsinkelse (10); // Waits i 15 ms, mens servo ikke ta stilling } } else { for (pos = posact; pos 60, pos - = 1) // går fra 0 til 180 grader {// Trinn på 1 grad myservo2.write (pos); // Forteller servo posisjon gjennom en variabel 'pos' forsinkelse (10); // Waits i 15 ms, mens servo ikke ta stilling } / * play_2 (); forsinkelse (1000); for (pos = 1; pos90) { for (pos = posact; pos & gt; 90; pos - = 1) // returnerer posisjonen til 90 grader {// Trinn på 1 grad myservo2.write (pos); // Forteller servo posisjon gjennom en variabel 'pos' forsinkelse (10); // Waits i 15 ms, mens servo ikke ta stilling } } else { for (pos = posact; pos<=90 ;="" pos="" +="1)" goes="" from="" 0="" degrees="" to="" 180="">=90> {// Trinn på 1 grad myservo2.write (pos); // Forteller servo posisjon gjennom en variabel 'pos' forsinkelse (10); // Waits i 15 ms, mens servo ikke ta stilling } } }
ugyldig servo1_no () { myservo.attach (9); for (pos = 90; pos = 90; besittelses = 1) // går 180-0 grader { myservo.write (pos); // Forteller servo posisjon gjennom en variabel 'pos' forsinkelse (10); // Waits i 15 ms, mens servo ikke ta stilling } } ugyldig servo2 () { myservo2.attach (10); for (pos2 = 110; pos2< 140;="" pos2="" +="1)" ??="" 0="" ??="" 180=""> {// myservo2.write (pos2); // Forteller servo posisjon gjennom en variabel 'pos' forsinkelse (15); // Waits i 15 ms, mens servo ikke ta stilling } }