Ramai daripada anda perasan yang sering di pasar raya dan ruang pejabat yang lebih besar boleh didapati dalam pelbagai warna dihiasi dengan akuarium kaca yang indah. Kami akan cuba untuk mengulangi perkara yang sama, tetapi di rumah kita.
Langkah 1: Bahan
Tanah Bunga (kami memilih pakis) Bekas kaca dengan bahagian atas terbuka
Langkah 2: Pembersihan Basuh botol kaca dengan sabun dan air. Tinggalkan kering sebelum anda menuang tanah.
Langkah 3: Ujian Dengan berhati-hati meletakkan bunga di dalam mangkuk, betul-betul di periuk untuk melihat bagaimana ia akan melihat tumbuhan.
Langkah 4: Edit Kami mengambil bunga dan memotong cawangan tambahan seperti yang diperlukan, seperti dalam kes kami.
Langkah 5: Tanah Dengan berhati-hati memindahkan kilang di dalam bekas, tetapi tanpa periuk. Penuhilah bumi.
Langkah 6: menyiram Bunga disiram untuk melembutkan tanah. Jangan keterlaluan fakta ini.
Langkah 7: Bersedia Hiaskan bilik bunga beberapa.
Jumlah 200 Rubles untuk membeli secara baik untuk kerja yang mudah. Projek ini telah siap dengan rakan-rakan asing Adruino Arts. Untuk pelaksanaannya mesti tahu prinsip-prinsip asas robotik, elektronik dan memahami pengaturcaraan sedikit. Dalam klip video pengarang memberitahu dan menunjukkan bahawa kita harus mendapat hasil. Selain lampu yang kita perlukan satu set Grove - Toy Kit. Pesanan dalam talian anda boleh membeli-belah dengan harga $ 79.9. Idea utama - takrif keadaan statik atau dinamik objek oleh pengesanan gerakan. Jika jawapan adalah positif, kemudian berjalan satu daripada penggerak dan mainan semula mesej yang telah dirakam. Jika tidak, diaktifkan servo 2, dan rakaman bunyi yang berbeza. Penentuan melalui beberapa bentuk input. Oleh itu, kita akan mendapat hasil dalam kod binari 0 atau 1. Perakam boleh memainkan semula bunyi yang dirakam hanya 4 melalui isyarat luaran. Untuk merakam (setiap 15 saat.), Ia adalah perlu untuk menghidupkan butang «bermain» untuk «rekod». Selepas butang rakaman lagi perlu menukar. Ini boleh dilakukan melalui kod (fungsi main ()). Dalam servo kabel adalah 3 "plus", "tolak" dan data digital. Yang pertama 2 menyediakan makanan untuk servo (max 7) dan ke-3 untuk menyambung output digital, yang menerima maklumat mengenai keadaan suis dan oleh kod. Pertama dihuraikan lampu. Kita tidak memerlukan komponen elektrik, tetapi perlu bekerja sangat asas. Anda juga memerlukan prop dan menyokong unsur-unsur. Buat lubang di dalam tiub untuk menyambung reka bentuk kami. Prototaip robot bersedia!
Langkah 1: Glow Menggunakan LED lampu IKEA OLEBY (Makanan solar). Suis hanya berfungsi dalam peranti digital, dan oleh itu ia bergantung kepada rangkaian semasa. Jika kita menukar podsoedynym Pay Seeeduino, anda boleh menetapkan output RENDAH digital, dan kemudian akan ada semasa. Apabila meletakkan TINGGI, ia muncul semula. Malah dalam lampu dan kita pasang perintang untuk melindungi LED. Tetapkan unsur cahaya dalam asas logam.
Langkah 2: Prinsip Kami mempunyai lampu dipasang servo kawalan pengesan, tiga paksi pecutan, perakam dan bermain 4 bunyi yang berbeza. Prinsip asas lampu adalah seperti berikut:
Ternyata bunyi (bunyi) Lampu dimasukkan Larian rekod №3 Lampu tangan menyediakan gerakan (kiri-kanan-kiri) Servo kekal pada 90 ° Urusniaga yang telah lengkap diisi
Jika terdapat bunyi, maka:
Lampu dimasukkan Servo dengan Lampu langkah meninggalkan Larian rekod №2 Lampu belakang dalam kedudukan 90 ° Urusniaga yang telah lengkap diisi
Jika lengan logam mencapai (tinggi) kedudukan yang tertentu, kemudian bermain rekod №4.
Langkah 3: Penambahbaikan Dalam kerja-kerja reka bentuk yang boleh membuat beberapa penambahbaikan seperti pembenaman yuran Seeeduino suis, untuk mengawal pelaksanaan kod menggunakan kitaran biasa IF. Jika suis dihidupkan - memulakan mod auto, jika tidak - manual mod. Auto-mod termasuk kod standard apabila lampu yang bertindak balas kepada bunyi. Manual-mod menyediakan pengurusan jarak jauh melalui paksi pecutan triple, mengubah kedudukan paksi X dan Y. Anda boleh membuat lampu menghidupkan 360 °, menambah kepadanya servo yang berasingan. Bolehkah saya ditubuhkan untuk menyambung melalui Wi-Fi / Ethernet. Langkah 4: Kod Kod Pengarang (MrLdnr) boleh didapati di bawah. [Spoiler] #temasuk int malar buttonPin = 4; // Jawatan suis int buttonState = 0; // Pembolehubah untuk membaca butang kedudukan // Persediaan Servo Myservo2 servo; Myservo servo; // Mencipta untuk kawalan servo int pos = 0; // Pembolehubah untuk menyimpan kedudukan servo int pos2 = 0; // Pembolehubah untuk menyimpan kedudukan servo int VAL1; int VAL2; // SETUP LED int malar ledPin2 = 5; // cahaya Utama int malar ledPin = 12; // cahaya Tube int countlamp2 = 0; // Persediaan Bunyi malar int thresholdvalue = 300; // Sambutan membunyikan // Set akseleometra int ystate; int xstate; #temasuk #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 kelas Pecutan { awam: char x; char y; z arang; };
indeks arang; kawalan arang; char negeri; int audiodelay = 1000; mma7660_init tidak sah (tidak sah) { Wire.begin (); Wire.beginTransmission (MMA766ddr); Wire.send (MMA7660_MODE); Wire.send (0x00); Wire.endTransmission (); Wire.beginTransmission (MMA766ddr); Wire.send (MMA7660_SR); Wire.send (0x07); // Sampel / Mod Aktif Kedua dan Auto-Tidur Wire.endTransmission (); Wire.beginTransmission (MMA766ddr); Wire.send (MMA7660_MODE); Wire.send (0x01); // mod aktif Wire.endTransmission (); }
persediaan tidak sah () { mma7660_init (); // Sertai bas I2C (alamat peranti terpilih master) Serial.begin (9600); // Motion Sensor pinMode (6 INPUT); // digunakan 2 kaki untuk isyarat luaran // Cahaya lampu dan cahaya asas pinMode (ledPin, OUTPUT); pinMode (ledPin2 OUTPUT); // Servos // AUDIO DDRD | = 0x0C; // D2 dan D3 tulis dalam mod; PORTD & = 0xF3; // D2 dan D3 bakal rendah; // Sensor bunyi ke atas Analog 0 // SWITCH pinMode (buttonPin, INPUT); } rec_2_begin tidak sah () { PORTD = (PORTD | 0b00000100) & 0b11110111; } rec_2_stop tidak sah () { PORTD & = 0xF3; } play_2 tidak sah () { PORTD = (PORTD | 0b00000100) & 0b11110111; tunda (audiodelay); PORTD & = 0xF3; } ////////////////////////////////////////////////// //////////////////// ////////////////////////////////////////////////// ///// // Fungsi untuk mengawal segment_3 yang rec_3_begin tidak sah () { PORTD = (PORTD | 0b00001000) & 0b11111011; } rec_3_stop tidak sah () { PORTD & = 0xF3; } play_3 tidak sah () { PORTD = (PORTD | 0b00001000) & 0b11111011; tunda (audiodelay); PORTD & = 0xF3; } ////////////////////////////////////////////////// /// //////////////////////////////////////////////// // Fungsi untuk mengawal segment_4 itu; rec_4_begin tidak sah () { PORTD = PORTD | 0b00001100; } rec_4_stop tidak sah () { PORTD & = 0xF3; } play_4 tidak sah () { PORTD = PORTD | 0b00001100; tunda (audiodelay); PORTD & = 0xF3; } //////////////////////
check_move tidak sah () { int sensorValue = digitalRead (6); jika (sensorValue == 1) { // DigitalWrite (ledPin, TINGGI); //Serial.println(sensorValue, Disember); // output isyarat kedudukan ke monitor. // Servo1 (); } lain { // DigitalWrite (ledPin, RENDAH); //Serial.println(sensorValue, Disember); // output isyarat kedudukan ke monitor. // Servo2 (); } } servo1_right tidak sah () { myservo.attach (9); untuk (pos = 90; pos = 90; pos- = 1) // pergi 0-180 darjah { myservo.write (pos); // Menceritakan kedudukan servo melalui 'pos' ubah tunda (10); // Menunggu sehingga 15 ms servo yang mengambil kedudukan } * / } servo1_left tidak sah () { myservo.attach (9); untuk (pos = 90; pos & gt; 1; pos - = 1) // pergi 0-180 darjah {// Kenaikan sebanyak 1 darjah myservo.write (pos); // Menceritakan kedudukan servo melalui 'pos' ubah tunda (10); // Menunggu 15 ms, manakala servo yang tidak mengambil kedudukan } / * play_2 (); tunda (1000); untuk (pos = 1; pos90) { untuk (pos = posact; pos & gt; 90; pos - = 1) // mengembalikan 90 darjah {// Kenaikan sebanyak 1 darjah myservo.write (pos); // Menceritakan kedudukan servo melalui 'pos' ubah tunda (10); // Menunggu 15 ms, manakala servo yang tidak mengambil kedudukan } } lain { untuk (pos = posact; pos 60; pos - = 1) // pergi 0-180 darjah {// Kenaikan sebanyak 1 darjah myservo2.write (pos); // Menceritakan kedudukan servo melalui 'pos' ubah tunda (10); // Menunggu 15 ms, manakala servo yang tidak mengambil kedudukan } / * play_2 (); tunda (1000); untuk (pos = 1; pos90) { untuk (pos = posact; pos & gt; 90; pos - = 1) // mengembalikan kedudukan 90 darjah {// Kenaikan sebanyak 1 darjah myservo2.write (pos); // Menceritakan kedudukan servo melalui 'pos' ubah tunda (10); // Menunggu 15 ms, manakala servo yang tidak mengambil kedudukan } } lain { untuk (pos = posact; pos<=90 ;="" pos="" +="1)" goes="" from="" 0="" degrees="" to="" 180="">=90> {// Kenaikan sebanyak 1 darjah myservo2.write (pos); // Menceritakan kedudukan servo melalui 'pos' ubah tunda (10); // Menunggu 15 ms, manakala servo yang tidak mengambil kedudukan } } }
servo1_no tidak sah () { myservo.attach (9); untuk (pos = 90; pos = 90; pos- = 1) // pergi 180-0 darjah { myservo.write (pos); // Menceritakan kedudukan servo melalui 'pos' ubah tunda (10); // Menunggu 15 ms, manakala servo yang tidak mengambil kedudukan } } servo2 tidak sah () { myservo2.attach (10); untuk (pos2 = 110; pos2< 140;="" pos2="" +="1)" ??="" 0="" ??="" 180=""> {// myservo2.write (pos2); // Menceritakan kedudukan servo melalui 'pos' ubah tunda (15); // Menunggu 15 ms, manakala servo yang tidak mengambil kedudukan } }
tidak sah servo1R () { myservo.write (90); myservo.detach (); } tidak sah servo2R () { myservo2.write (90); myservo2.detach (); } lampblink tidak sah () { // Int sensorValue = digitalRead (6); // Jika (sensorValue 1 =) { digitalWrite (ledPin, TINGGI); // Kelewatan (1); // DigitalWrite (ledPin, RENDAH); // Kelewatan (1); //} // Yang lain // DigitalWrite (ledPin, RENDAH); } lamptest tidak sah () { untuk (int i = 0; i<100;>100;> { digitalWrite (12 TINGGI); tunda (50); digitalWrite (12 RENDAH); tunda (50); } } lampoff tidak sah () { // Kelewatan (2000); digitalWrite (ledPin, RENDAH); } // Akseleometr tidak sah Ecom () { char Val tidak ditandatangani [3]; kiraan int = 0; Val [0] = Val [1] = Val [2] = 64; Wire.requestFrom (0x4c, 3); // Minta 3 bait dari alat dalam hamba-mod 0x4c manakala (Wire.available ()) { jika (mengira 63) // tambah nilai { Val [kiraan] = Wire.receive (); } mengira ++; } // Menukarkan isyarat 7 8 bit bit Pecutan ret; ret.x = ((arang) (Val [0] 2)) / 4; ret.y = ((arang) (Val [1] 2)) / 4; ret.z = ((arang) (Val [2] 2)) / 4; ystate = ret.y; xstate = ret.x; Serial.print ("x ="); Serial.println (ret.x, Disember); // Serial.print ("y ="); Serial.println (ret.y, Disember); // Serial.print ("z ="); Serial.println (ret.z, Disember); // } char membaca = 0;
gelung tidak sah () { Ecom (); // Semak status pecutan yang digitalWrite (ledPin2HIGH); buttonState = digitalRead (buttonPin); // Kedudukan suis Reading jika (buttonState == TINGGI) { lampblink (); // belok LED pada: myservo.attach (9); myservo2.attach (10); VAL1 = ystate; VAL1 = peta (val130 -300179); myservo2.write (VAL1); VAL2 = xstate; VAL2 = peta (VAL2 -30.300 179); myservo.write (VAL2); // Menetapkan kedudukan servo mengikut ranzhyruemыm nilai jika (ystate thresholdvalue) { Serial.println ("YA"); // DigitalWrite (ledNoise, TINGGI); play_4 (); // Lampoff (); lampblink (); servo1_no (); servo1_no (); servo1R (); tunda (1000); } lain { lampoff (); } // Semakan untuk gerakan int sensorValue = digitalRead (6); // Motion Detector jika (sensorValue == 1) { Serial.println ("Pindah"); // Movestate = 1; lampblink (); // Servo2 (); servo2_right (); servo1_right (); play_2 (); tunda (1000); servo2_return (); servo1_return (); servo1_left (); servo2_left (); play_2 (); tunda (1000); servo2_return (); servo1_return (); // Kelewatan (1000); } lain { // DigitalWrite (ledNoise, RENDAH); // Servo2 (); servo1R (); servo2R (); lampoff (); // Play_2 (); // Movestate = 0; } } }