IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot


 Toplam 200 ruble basit bir iş için iyi bir temel satın almak. Proje, yabancı meslektaşları Adruino Sanat ile tamamlandı. Uygulanması için robotik, elektronik temel ilkelerini bilmek ve biraz programlama anlamak gerekir.
 Video klip yazar söyler ve bir sonuç almak gerektiğini göstermektedir.
 Oyuncak Kit - lambalar ek olarak Grove bir dizi gerekir. Sipariş online fiyat 79,9 $ ile alışveriş yapabilirsiniz.
 Ana fikir - hareket algılama ile nesnenin statik veya dinamik devletin tanımı. Cevap olumlu ise, o zaman tahrik birini çalıştırın ve önceden kaydedilmiş mesajı oynatma. Aksi takdirde, 2. servo ve farklı bir ses kaydı aktif.
 Girdi çeşit geçiyor belirlenmesi. Böylece, biz ikili kod 0 veya 1 sonucu almak.
 Kaydedici harici bir sinyal ile kaydedilen sesi sadece 4 oynatabilirsiniz. (Her 15 sn.) Kaydetmek için, bu «rekor» düğme «oyun» açmak için gereklidir. Geçmelisiniz düğmesine tekrar kaydettikten sonra. Bu kod ile yapılabilir (fonksiyon çalma ()). Servo kablosu 3 "artı", "eksi" ve dijital veriler. İlk 2 anahtarının durumu hakkında ve kod aldığı bilgileri servo (max 7) ve 3 dijital çıkışına bağlanır, yiyecek sağlamak.
 İlk lamba çözümlü. Biz elektrik bileşenleri ihtiyacımız, ama çok temel çalışması gerekmez. Ayrıca bazı sahne ve destekleyici unsurları gerekir.
 Bizim tasarım bağlamak için tüp içinde bir delik açın.
 prototip robot hazır!

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

 Adım 1: Kızdırma
 LED lamba IKEA OLEBY Kullanma (Gıda güneş enerjili).
 anahtar, sadece bir sayısal cihaza çalışır ve bu nedenle, mevcut ağ bağlıdır. Biz podsoedynym Öde Seeeduino geçerseniz, dijital çıkış DÜŞÜK ayarlayabilirsiniz, ve sonra geçerli olacak. YÜKSEK koyarak, bu görüntülenir.
 Hatta lamba içinde ve biz LED korumak için bir direnç takın.
 Metal tabanı ışık elemanı ayarlayın.

IKEA ile Yükseltildi lamba robot

 Adım 2: İlke
 Biz lamba takılı servo dedektörü kontrolü, üçlü eksen ivmeölçer, kaydedici ve 4 farklı sesler oynarlar.
 aşağıdaki gibi lambanın temel ilkedir:

 Bu gürültü (ses) çıkıyor
 Lamba dahil
 Skor rekor №3
 El Lambası hareketini sağlayan (sol-sağ sol)
 Servo 90 ° kalır
 Tamamlanan işlem

 Sonra gürültü varsa:

 Lamba dahil
 Lamba hareket Servo sol
 Skor rekor №2
 Pozisyon geri 90 ° Lamp
 Tamamlanan işlem

 Metal kol belli bir (yüksek) konum ulaşırsa, o zaman kayıt №4 oynuyor.

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

IKEA ile Yükseltildi lamba robot

 Adım 3: İyileştirme
 Tasarım çalışmaları düzenli bir döngü IF kullanarak kod yürütülmesine kontrol etmek, bir geçiş ücreti Seeeduino gömme gibi bazı iyileştirmeler yapabilirsiniz. Anahtar açıksa - mod kılavuzu - değilse mod otomatik başlar.
 Lamba ses yanıt Auto modu standart kodu.
 Manuel mod eksenleri X ve Y konumunu değiştirerek, bir üçlü eksen ivme ile uzaktan yönetim olanağı sağlar
 Bunu ayrı bir servo ekleyerek, 360 ° bir dönüş ışıkları yapabilirsiniz. Ben Wi-Fi / Ethernet yoluyla bağlamak için kurulmuş Can.
 Adım 4: Kod
 Yazar kodu (MrLdnr) aşağıda bulabilirsiniz.
 [Spoiler]
 #include
 #define buttonPin = 4; // Konum anahtarı
 int buttonState = 0; // Pozisyon düğmeleri okumak için Değişken
 // Servo Kurulumu
 Servo myservo2;
 Servo myservo; // Servo kontrolü için oluşturur
 int pos = 0; // Değişken servo konumunu saklamak için
 int POS2 = 0; // Değişken servo konumunu saklamak için
 int val1;
 int val2;
 // LED AYAR
 #define ledPin2 = 5; // Ana ışık
 #define ledPin = 12; // Boru ışık
 int countlamp2 = 0;
 // Gürültü Ayarı
 #define thresholdvalue = 300; // ses yanıtı
 // 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
 sınıf Hızlanma
 {
 Kamu:
 karakter x;
 y ateşinde;
 Char z;
};

 Char indeksi;
 Char kontrol;
 Char devlet;
 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); // Örnekleri / İkinci Aktif Modu ve Otomatik Uyku
 Wire.endTransmission ();
 Wire.beginTransmission (MMA766ddr);
 Wire.send (MMA7660_MODE);
 Wire.send (0x01); // aktif mod
 Wire.endTransmission ();
}

 void setup ()
 {
 mma7660_init (); // I2c otobüs (adres seçici master cihaz) Katıl
 Serial.begin (9600);
 // Hareket Sensörü
 pinMode (6 GİRİŞ); // dış sinyal için 2 ayak kullanılır
 // Lamba ışığı ve taban ışık
 pinMode (ledPin, ÇIKIŞ);
 pinMode (ledPin2 ÇIKIŞI);
 // Servolar
 // SES
 DDRD | = 0x0C; // D2 ve D3 modunda yazma;
 PORTD & = 0xF3; // D2 ve D3 düşüğe ayarlayın;
 // Analog 0 Gürültü sensörü
 // ANAHTARI
 pinMode (buttonPin, GİRİŞ);
}
 void rec_2_begin ()
 {
 PORTD = (PORTD | 0b00000100) 0b11110111;
}
 void rec_2_stop ()
 {
 PORTD & = 0xF3;
}
 void play_2 ()
 {
 PORTD = (PORTD | 0b00000100) 0b11110111;
 gecikme (audiodelay);
 PORTD & = 0xF3;
}
 ////////////////////////////////////////////////// ////////////////////
 ////////////////////////////////////////////////// /////
 // Işlev segment_3 kontrol etmek için
 void rec_3_begin ()
 {
 PORTD = (PORTD | 0b00001000) 0b11111011;
}
 void rec_3_stop ()
 {
 PORTD & = 0xF3;
}
 void play_3 ()
 {
 PORTD = (PORTD | 0b00001000) 0b11111011;
 gecikme (audiodelay);
 PORTD & = 0xF3;
}
 ////////////////////////////////////////////////// ///
 ////////////////////////////////////////////////
 // Fonksiyon segment_4 kontrol etmek;
 void rec_4_begin ()
 {
 PORTD = PORTD | 0b00001100;
}
 void rec_4_stop ()
 {
 PORTD & = 0xF3;
}
 void play_4 ()
 {
 PORTD = PORTD | 0b00001100;
 gecikme (audiodelay);
 PORTD & = 0xF3;
}
 //////////////////////

 void check_move ()
 {
 int sensorValue = digitalRead (6);
 Eğer (sensorValue == 1)
 {
 // DigitalWrite (ledPin, YÜKSEK);
 //Serial.println(sensorValue, Aralık); // output monitöre konum sinyali.
 // Servo1 ();
}
 başka
 {
 // DigitalWrite (ledPin, DÜŞÜK);
 //Serial.println(sensorValue, Aralık); // output monitöre konum sinyali.
 // Servo2 ();
}
}
 void servo1_right ()
 {
 myservo.attach (9);
 için (pos = 90; pos = 90; POS- = 1) // 0 180 derece arasında gider
 {
 myservo.write (poz); // Değişken 'pos' aracılığıyla servo konumunu söyler
 Gecikme (10); Servo konumunu alır kadar // 15 ms bekler
} * /
}
 void servo1_left ()
 {
 myservo.attach (9);
 (, pos & gt; 1; pos = 90 pos - = 1) için // 0 180 derece arasında gider
 {// 1 derece Artım
 myservo.write (poz); // Değişken 'pos' aracılığıyla servo konumunu söyler
 Gecikme (10); Servo bir pozisyon almaz ise //, 15 ms için bekler
} / *
 play_2 ();
 Gecikme (1000);
 için (pos = 1; pos90) {
 için (, pos & gt; 90; pos = posact pos - = 1) 90 derece döndürür //
 {// 1 derece Artım
 myservo.write (poz); // Değişken 'pos' aracılığıyla servo konumunu söyler
 Gecikme (10); Servo bir pozisyon almaz ise //, 15 ms için bekler
}
}
 else {
 // 0 180 derece arasında gider - (;, pos 60 = 1 pos pos = posact) için
 {// 1 derece Artım
 myservo2.write (poz); // Değişken 'pos' aracılığıyla servo konumunu söyler
 Gecikme (10); Servo bir pozisyon almaz ise //, 15 ms için bekler
} / *
 play_2 ();
 Gecikme (1000);
 için (pos = 1; pos90) {
 için (, pos & gt; 90; pos = posact pos - = 1) 90 derece konumunu döndürür //
 {// 1 derece Artım
 myservo2.write (poz); // Değişken 'pos' aracılığıyla servo konumunu söyler
 Gecikme (10); Servo bir pozisyon almaz ise //, 15 ms için bekler
}
}
 else {
 poz (pos = posact için<=90 ;="" pos="" +="1)" goes="" from="" 0="" degrees="" to="" 180="">
 {// 1 derece Artım
 myservo2.write (poz); // Değişken 'pos' aracılığıyla servo konumunu söyler
 Gecikme (10); Servo bir pozisyon almaz ise //, 15 ms için bekler
}
}
}


 void servo1_no ()
 {
 myservo.attach (9);
 için (pos = 90; pos = 90; POS- = 1) // 180 0 dereceye gider
 {
 myservo.write (poz); // Değişken 'pos' aracılığıyla servo konumunu söyler
 Gecikme (10); Servo bir pozisyon almaz ise //, 15 ms için bekler
}
}
 void servo2 ()
 {
 myservo2.attach (10);
 Pos2 (POS2 = 110< 140;="" pos2="" +="1)" ="" 0="" ="" 180="">
 {//
 myservo2.write (POS2); // Değişken 'pos' aracılığıyla servo konumunu söyler
 gecikme (15); Servo bir pozisyon almaz ise //, 15 ms için bekler
}
}

 ) (servo1R geçersiz
 {
 myservo.write (90);
 myservo.detach ();
}
 ) (servo2R geçersiz
 {
 myservo2.write (90);
 myservo2.detach ();
}
 void lampblink ()
 {
 // Orta sensorValue = digitalRead (6);
 // Eğer (sensorValue = 1) {
 digitalWrite (ledPin, YÜKSEK);
 // Gecikmesi (1);
 // DigitalWrite (ledPin, DÜŞÜK);
 // Gecikmesi (1);
 //}
 // Else
 // DigitalWrite (ledPin, DÜŞÜK);
}
 void lamptest ()
 {
 (0 = int i; i<100;>
 {
 digitalWrite (12 YÜKSEK);
 gecikme (50);
 digitalWrite (12 DÜŞÜK);
 gecikme (50);
}
}
 void lampoff ()
 {
 // Gecikme (2000);
 digitalWrite (ledPin, DÜŞÜK);
}
 // Akseleometr
 ) (ECOM geçersiz
 {
 unsigned char val [3];
 int sayısı = 0;
 val [0] = val [1] = val [2] 64 =;
 Wire.requestFrom (0x4c, 3); // Köle modunda 0x4c cihazdan 3 bayt İstedi
 ise (Wire.available ())
 {
 (63 sayı) // yeniden yüklenip
 {
 val [sayım] = Wire.receive ();
}
 ++ saymak;
}
 // 7 bit 8 bit sinyali dönüştürür
 İvme 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, Aralık); //
 Serial.print ("y =");
 Serial.println (ret.y, Aralık); //
 Serial.print ("z =");
 Serial.println (ret.z, Aralık); //
}
 karakter okuma = 0;

 void loop ()
 {
 ECom (); // Ivme durumunu kontrol
 digitalWrite (ledPin2HIGH);
 buttonState = digitalRead (buttonPin); // Okuma konum anahtarı
 if (buttonState == YÜKSEK)
 {
 lampblink (); LED dönün //:
 myservo.attach (9);
 myservo2.attach (10);
 val1 = ystate;
 val1 = harita (val130 -300.179);
 myservo2.write (val1);
 val2 = xstate;
 val2 = harita (val2 -30.300 179);
 myservo.write (val2); // Değer ranzhyruemыm göre servo konumunu belirler
 if (ystate thresholdvalue)
 {
 Serial.println ("EVET");
 // DigitalWrite (ledNoise, YÜKSEK);
 play_4 ();
 // Lampoff ();
 lampblink ();
 servo1_no ();
 servo1_no ();
 servo1R ();
 Gecikme (1000);
}
 başka
 {
 lampoff ();
}
 // Hareket denetleniyor
 int sensorValue = digitalRead (6); // Hareket Dedektörü
 Eğer (sensorValue == 1)
 {
 Serial.println ("Taşı");
 // Movestate = 1 'dir;
 lampblink ();
 // Servo2 ();
 servo2_right ();
 servo1_right ();
 play_2 ();
 Gecikme (1000);
 servo2_return ();
 servo1_return ();
 servo1_left ();
 servo2_left ();
 play_2 ();
 Gecikme (1000);
 servo2_return ();
 servo1_return ();
 // Gecikmesi (1000);
}
 başka
 {
 // DigitalWrite (ledNoise, DÜŞÜK);
 // Servo2 ();
 servo1R ();
 servo2R ();
 lampoff ();
 // Play_2 ();
 // Movestate = 0;
}
}
}