
Edmund Richardson
0
1530
134
Hareketi algıladıktan sonra, yüksek sesli alarm sesleri ve yanıp sönen ışıklar ile izinsiz giriş yapan kişiyi korkutun. Bu eğlenceli mi? Tabii ki öyle. Yeni başlayanlar için uygun, bugünün Arduino projesinin hedefi budur. Tamamen sıfırdan yazacağız ve test ettikten sonra yazacağız, böylece yaptığım şeyi yüklemek yerine, nasıl yapıldığına dair bir fikir edinebilirsiniz..
Feragatname: Bu aslında evinizi korumaz. O belki o zaman odanıza gizlice girdiğinde kız kardeşine kötü bir şok ver.
İhtiyacın olacak:
- Bir Arduino
- Ultrasonik “ping” sensör, HC-SR04 kullanıyorum Bir PIR daha iyi olurdu, ama bunlar pahalı. Bir ping sensörü bir kapıya gizlice yerleştirilebilir ve hala aynı temel işe hizmet eder ve sadece 5 dolar
- Bir piezo zili
- LED şerit lamba, bu projede kullandığımız kablolarla aynı. Bir Medya Merkezi için Kendi Dinamik Ortam Aydınlatmasını Yaratın Bir Medya Merkezi için Kendi Dinamik Ortam Aydınlatmasını Oluşturun PC'nizde veya medya merkezinde çok fazla film izlerseniz, I ' aydınlatma ikilemiyle karşılaştığınızdan eminim; tüm ışıkları tamamen kapatıyor musunuz? Onları tamamen patlatıyor musunuz? Veya… .
Bu projeyi kablolarken, her seferinde her şeyi kaldırmayın - yalnızca son blok üzerine inşa etmeye devam edin. Zamanla “Alarm Sistemini Kodlamak” bölümünde, aşağıdaki gibi bir şey bakarak, tüm bit ve parçaları kablolu olması gerekir:
Yanıp sönen ışıklar
Bu projenin kablo bağlantı şemasını kullanın Bir Medya Merkezi için Kendi Dinamik Ortam Işığını Oluşturun Bir Medya Merkezi için Kendi Dinamik Ortam Işığını Oluşturun PC'nizde veya medya merkezinizde çok fazla film izlerseniz, yüz yüze geldiğinizden eminim. aydınlatma ikilemi; tüm ışıkları tamamen kapatıyor musunuz? Onları tamamen patlatıyor musunuz? Veya… LED şeridinizi takmak için; PWM çıkışına ihtiyaç duyduğumuz için pinleri değiştirmeyin. Kablolarınızı hızlı bir şekilde test etmek için bu kodu kullanın. Her şey yolunda giderse, şunlara sahip olmalısınız:
Mesafe sensörü
SR04 modülünde 4 pin bulacaksınız. VCC ve GND sırasıyla + 5V rayına ve toprağa gitmek; TETİK pim 6'ya bir sonar sinyali göndermek için kullanılan pim; EKO Sinyali geri okumak için kullanılır (ve bu nedenle mesafeyi hesaplar) - bunu 7.
İşleri inanılmaz derecede basit hale getirmek için, kullanabileceğimiz bir kitaplık var NewPing. Arduino'nuza indirin ve yerleştirin Kütüphane klasöre devam etmeden önce IDE'yi yeniden başlatın. Bu kodu kullanarak test edin; seri monitörü açın ve hızın 115200 baud olarak ayarlandığından emin olun. Şansınız varsa, mesafe ölçümlerinin size oldukça yüksek bir hızda geri gönderildiğini görmelisiniz. 1 veya 2 santimetre sapma bulabilirsiniz, ancak bu iyi. Değişen okumaları gözlemlemek için elinizi sensörün önünde çalıştırmayı deneyin..
Kod basitçe anlamak için oldukça basit olmalıdır. Maksimum mesafe dahil başlangıçta birkaç ilgili pim bildirimi vardır - bu, sahip olduğunuz sensöre göre değişebilir, ancak 1 metreden daha kısa bir okuma alabildiğiniz sürece, iyi olmalısınız..
Bu test uygulamasının döngüsünde, Ping () Bir sonar pingini gönderme işlevi, değerin geri dönüşünün ne kadar sürdüğü milisaniye cinsinden bir değere döndürülür. Bunu anlamamız için, NewPing kütüphanelerini US_ROUNDTRIP_CM, Bu, tek bir santimetre gitmek için kaç mikrosaniyenin gerektiğini tanımlar. Sensörün aşırı yüklenmesini önlemek için pingler arasında 50 ms gecikme de var.
Piezo Alarmı
Piezo kristal sensör basit ve ucuz bir zildir ve farklı tonlar yapmak için PWM pin 3'ü kullanabiliriz. Bir kabloyu pim 3'e, biri toprak rayına bağlayın - hangisi olduğu önemli değil.
Test etmek için bu kodu kullanın.
Oldukça iğrenç ve yüksek sesli alarmı öldürmenin tek yolu fişleri çekmektir. Kod açıklamak için biraz karmaşık, ancak ayırt edici bir ses üretmek için sinüs dalgaları kullanarak içerir. Farklı tonlarda çalmak için sayıları ayarlayın.
Alarm Sistemini Kodlamak
Şimdi bu bulmacanın tüm parçalarına sahip olduk, hadi onları bir araya getirelim.
Devam et ve yeni bir taslak hazırla Alarm. Şimdiye kadar test örneklerimizdeki tüm değişkenleri ve pin tanımlarını birleştirerek başlayın..
#include // Hangi PWM özellikli pinlerin kullanılacağını seçin. #define RED_PIN 10 #define GREEN_PIN 11 #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Arduino pimi ultrasonik sensör üzerindeki pimi tetiklemeye bağlandı. #define ECHO_PIN 7 // Arduino pimi ultrasonik sensördeki eko pimine bağlı. #define MAX_DISTANCE 100 // Ping yapmak istediğimiz maksimum mesafe (santimetre cinsinden). #define ALARM 3 şamandıra sinVal; int toneVal;
Bir temel yazarak başlayın kurmak() işlevi - şimdilik sadece ışıkları açıklayacağız. Ana döngü başlamadan önce gerekirse bize yoldan çıkmamız için biraz zaman tanımaya başlamadan önce 5 saniyelik bir gecikme ekledim..
void setup () // RGB şeridi için pinModes ayarla pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, ÇIKIŞ); pinMode (GREEN_PIN, ÇIKIŞ); // ışıkları sıfırla analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); gecikmesi (5000);
Işıklara hızlı bir şekilde tek bir RGB değeri yazmamızı sağlayan bir yardımcı fonksiyon kullanalım..
// bir komutta bir renk göndermemizi sağlayan yardımcı fonksiyon geçersiz renk (imzasız char kırmızı, imzasız char yeşil, imzasız char mavi) // renk üretme işlevi analogWrite (RED_PIN, kırmızı); analogWrite (BLUE_PIN, mavi); analogWrite (GREEN_PIN, yeşil);
Son olarak, şu andaki döngümüz kırmızı ve sarı arasında basit bir renk flaşından oluşacaktır (veya alarmınızın ne olmasını istiyorsanız - sadece RGB değerlerini değiştirin).
boşluk döngüsü () renk (255,0,0); // kırmızı gecikme (100); Renk (255,255,0); // sarı gecikme (100);
Doğru yolda olduğunuzdan emin olmak için bunu yükleyin ve test edin.
Şimdi mesafe sensörünü bu ışıkları sadece 50 cm (bir kapı çerçevesinin genişliğinden az bir miktar) içeri girdiğinde tetiklemek için entegre edelim. Doğru pinleri zaten tanımladık ve kütüphaneyi içe aktardık. kurmak() fonksiyonu başlatmak için aşağıdaki satırı ekleyin:
NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing pin ayarları ve maksimum mesafe.
Bunun altında, tetiklenen alarmın durumunu varsayılan olarak false olarak ayarlayarak saklamak için bir değişken ekleyin..
boole tetiklenir = yanlış;
Bir satır ekle kurmak() fonksiyonu seri ve hata ayıklamadaki çıktıları izleyebiliriz.
Serial.begin (115200); // Ping sonuçlarını görmek için seri monitörü 115200 baud'da açın.
Şimdi, geçerli döngüyü yeniden adlandıralım. Alarm () - alarm tetiklenmişse buna ne denir.
boşluk alarmı () renk (255,0,0); // kırmızı gecikme (100); Renk (255,255,0); // sarı gecikme (100);
Şimdi yeni bir tane oluştur döngü () Yeni bir ping aldığımız, sonuçları okuyan ve sayaç aralığında bir şey tespit edildiğinde alarmı tetikleyen fonksiyon.
void loop () if (triggered == true) alarm (); else delay (50); // Ping'ler arasında 50ms bekleyin (yaklaşık 20 ping / sn). 29ms pingler arasındaki en kısa gecikme olmalıdır. işaretsiz int uS = sonar.ping (); // Ping gönder, mikrosaniye cinsinden ping zamanı al (uS). işaretsiz int uzaklık = uS / US_ROUNDTRIP_CM; Serial.println (mesafe); (Mesafe ise < 100) triggered = true;
Kodu kısaca açıklayayım:
- Alarmın tetiklenip tetiklenmediğini kontrol etmeye başlayın ve öyleyse alarm işlevini kapatın (şu anda sadece ışıkların yanıp sönmesi).
- Henüz tetiklenmediyse, sensörden akım okumasını alın.
- Sensör okuyorsa <100 cm, something has padded the beam (adjust this value if it's triggering too early for you, obviously).
Sinir bozucu piezo buzzerini eklemeden önce, şimdi bir deneme çalıştırması yapın.
Çalışma? Harika. Şimdi şu zili geri ekleyelim. Eklemek pinMode -e kurmak() rutin.
pinMode (ALARM, ÇIKIŞ);
Ardından piezo zil döngüsünü alarm () işlevine ekleyin:
(int x = 0; x için<180; x++) // convert degrees to radians then obtain sin value sinVal = (sin(x*(3.1412/180))); // generate a frequency from the sin value toneVal = 2000+(int(sinVal*1000)); tone(ALARM, toneVal);
Bu noktada derlemeye çalışırsanız, bir hatayla karşılaşacaksınız - Bunu kasten bıraktım, böylece bazı genel sorunları görebilirsiniz. Bu durumda, hem NewPing hem de standart ton kütüphanesi aynı kesintileri kullanır - temelde çelişkilidir ve düzeltmek için yapabileceğiniz pek bir şey yoktur. Ah hayatım.
Endişelenecek bir şey yok. Bu yaygın bir sorundur ve birinin zaten bir çözümü vardır - bu NewTone'u indirin ve Arduino Kütüphaneleri klasörünüze ekleyin. Bunu eklemek için programınızın başlangıcını ayarlayın:
#Dahil etmek
Ve çizgiyi ayarlayın:
ton (ALARM, toneVal);
için
NewTone (ALARM, toneVal);
yerine.
Bu kadar. Bir sonraki dokunulmaz hırsız için alarmınızı yatak odanızın kapısına kurun.
Ya da, alarmdan tamamen etkilenmemiş görünen salak bir köpek.
Kodda sorun mu yaşıyorsunuz? İşte tam bir uygulama var. Rastgele hatalar alıyorsanız, bunları aşağıya yapıştırmayı deneyin; yardımcı olup olamayacağımı göreceğim.
Resim kredisi: Flickr ile Yangın Alarmı