İnternet. Bilgisayar. Yardım. Tavsiye. Tamirat

Arduino için ev yapımı sensörler. Arduino'ya dayalı akıllı ev: adım adım montaj talimatları. Bazı Arduino donanımlarının özellikleri

Bu projenin temelinin Arduino olduğunu hatırlayalım. Bir dizi önemli işlevi yerine getirir: IR sensöründen verileri okur, sinyalleri işler, hareketlere yanıt verir ve USB, bilgisayara bir mesaj gönderme ihtiyacı konusunda bilgi verir. Bu yazıda iki soruyu ele alacağız:

  1. PIR sensörünü Arduino'ya bağlama;
  2. Sensör ile otomatik e-posta gönderimi arasındaki ilişki nasıl yapılandırılır .
Proje için gerekli:
  • Arduino UNO (Aliexpress'ten seçim yapabilirsiniz).
  • PIR sensörü.
  • Bradboard.
  • Bir sürü tel.

Montaj için listelenen tüm elemanlar fotoğraflarda görülebilir:

Öncelikle internet bağlantısı olan bir PC'ye ihtiyacınız var. Raspberry Pi'yi kullandık.

PIR sensörünü Arduino kitine bağlayın:

Bu aşamayı gerçekleştirmek için sensörden gelen kabloları alıp platforma bağlamanız gerekiyor. Daha sonra size diyagram içeren bir fotoğraf sağlanacaktır:

Bir eskizle çalışma

Hareket meydana geldiğinde, Arduino'nun USB Seri aracılığıyla bir e-posta göndermesi gerekir. Elbette her harekette e-posta gönderirseniz posta kutunuz dolacaktır. Bu nedenle, iki sinyal arasında kısa bir süre olması durumunda aşağıdaki metni içeren bir e-postanın gönderilmesini sağlayacak şekilde sorunu düzelttik:

Int pirPin = 7; int minSecsBetweenEmails = 60; // 1 dakika uzunluğunda lastSend = -minSecsBetweenEmails * 1000; void setup() ( pinMode(pirPin, INPUT); Serial.begin(9600); ) void loop() ( long now = millis(); if (digitalRead(pirPin) == HIGH) ( if (now > (lastSend + minSecsBetweenEmails * 1000)) ( Serial.println("HAREKET"); lastSend = şimdi; ) else ( Serial.println("Çok yakında"); ) ) gecikme(500);

« MinSecsBetweenE-postalar" – bu değişken kullanıcıya uygun olacak diğer değerlere değiştirilebilir. Örneğin, bir dakikaya eşit bir aralık ayarlayabilirsiniz; bu, bir sonraki e-postanın yalnızca 60 saniye sonra gönderileceği anlamına gelir.

"Son Gönderim" son mesajın gönderildiği zamanı izlemenize yardımcı olacaktır. Bu değişken, belirtilen milisaniyeye eşit olan negatif bir sayı ile başlatılır. "E-postalar Arasındaki MinSec" . Sonuç olarak, taslağı Arduino'da çalıştırdıktan sonra PIR sensörünün hemen başlayacağına dair bir garanti alıyoruz.

Milisaniyeleri nasıl hesaplayabiliriz ve bunların sayısını sensörün en son tetiklendiği zamanla nasıl karşılaştırabiliriz? Hepsi Millis adı verilen yerleşik bir özellik sayesinde. Hareketin algılanması ancak sensörün son etkinleştirilmesinin üzerinden çok az zaman geçmesi durumunda, metni içeren bir mektup gönderilecektir. "Çok erken".

Bu fonksiyonun öncelikle test edilmesi gerekmektedir. Bunun için açılır Seri Monitör. Sonra neye benzediğine bakalım:

Düzgün çalıştığından emin olduktan sonra Python'da platformdan gelen sinyalleri işlemek için kullanılan bir program yazabilirsiniz.

PySerial ve Python nasıl kurulur:

Linux işletim sisteminde Python otomatik olarak kurulur. Windows'ta bu özellik bulunmadığından programı kendiniz yüklemeniz gerekir. PySerial bir kütüphane görevi görür, Arduino ile iletişim kurmaya yardımcı olur.

Python'u yükleme:

Python 3, özellikle Windows kullanıyorsanız, PySerial ile çalışırken sıklıkla zorluklara neden olur. Bunu önlemek için üçüncü versiyon yerine indirebilirsiniz. Python 2 .

Programın kurulumunu tamamladıktan sonra Başlat menüsünde özel bir grup bulabilirsiniz. Kütüphane kurulum sürecine geçtiğimizde komut satırını kullanarak Python ile işbirliği yapmamız gerekecek. Bu nedenle istenen dizini hemen PATH'e eklemek daha iyidir. Aşağıda destekleyici bir fotoğraf görebilirsiniz:

Bir katalog eklemek için ihtiyacımız var: kontrol panelini açın, içindeki "Sistem Özellikleri" bölümünü bulun. Daha sonra “Ortam Değişkenleri” isimli tuşa basıyoruz, önümüze bir pencere açılacak. Alt kısmında seçmeniz gereken bir “Yol” bulunmalıdır. Şimdi “Düzenle”ye tıklayın – “Değişken değer”e tıklayarak işlemi değiştirin ve tamamlayın. Aldığınız metni silemezsiniz; şu yazıyı eklemelisiniz: “;C:\Python27”. Metinde belirtilen her klasörün arkasına “;” koymayı unutmayın. Şimdi “Path” girişinin doğru girilip girilmediğini kontrol ediyoruz. Bunu yapmak için komut satırına “python” kelimesini girin. Herhangi bir hata oluşmazsa ekranda aşağıdaki resim görünecektir:

PySerial'ı yükleyin:

Kullanılan işletim sisteminden bağımsız olarak PySerial 2.6 için .tar.gz kurulum paketini indirin. Bu site bunu yapmanıza yardımcı olabilir - //pypi.python.org/pypi/pyserial . Pyserial-2.6.tar.gz isimli bir dosya alıyoruz. Windows kullanıyorsanız, dosyaları seçilen klasöre açmanız gerekecektir. Bu standart bir ZIP dosyası değil, ek adımlar uygulamanız gerekecek - 7-zip'i indirin (bunu burada yapabilirsiniz - //www.7-zip.org/ ). Linux sistemi için bir terminal oturumu kullanmanız, içinde “CD” komutunu vermeniz ve pyserial-2.6.tar.gz'yi indirdiğiniz klasörün adını belirtmeniz gerekir. Paketi açmak için şunu girmeniz gerekir:

$ tar -xzf pyserial-2.6.tar.gz

Bundan sonra şu komutu çalıştırmanız gerekecek:

Sudo python setup.py kurulumu

Python

Python ile çalışmak için ayrı bir program oluşturmanız gerekecektir. Kodu aynı adı taşıyan bir dosyaya kopyalamanız gerekir – “movement.py”. Linux'ta "nano" düzenleyiciyi kullanabilirsiniz, ancak Windows sisteminde dosyayı Python "IDLE" düzenleyiciyi kullanarak oluşturmanız gerekir. Başlat menüsünde bulunur.

İçe aktarma zamanı içe aktarma seri içe aktarma smtplib TO = " [e-posta korumalı]"GMAIL_USER=" [e-posta korumalı]" GMAIL_PASS = "şifrenizi buraya koyun" SUBJECT = "İzinsiz giriş!!" TEXT = "PIR sensörünüz hareket algıladı" ser = seri.Serial("COM4", 9600) def send_email(): print("E-posta Gönderiliyor") smtpserver = smtplib. SMTP("smtp.gmail.com",587) smtpserver.ehlo() smtpserver.starttls() smtpserver.ehlo smtpserver.login(GMAIL_USER, GMAIL_PASS) başlık = "Kime:" + TO + "\n" + "Gönderen: " + GMAIL_USER başlık = başlık + "\n" + "Konu:" + SUBJECT + "\n" başlığı yazdır msg = başlık + "\n" + TEXT + " \n\n" smtpserver.sendmail(GMAIL_USER, TO, msg) smtpserver.close() while True: message = ser.readline() print(message) if message == "M" : send_email() time.sleep(0.5)

Bu, aşağıdaki resimde gösterilmektedir:

Değişikliklerden sonra program komut satırı kullanılarak başlatılabilir:

Python motion.py

Böylece kurulum tamamlanmıştır.

Olasılıklar burada bitmiyor; sıcaklık veya diğer bilgilerle ilgili raporlar içeren mesajlar almanızı sağlayan uzantılar da var.

Ekli dosyalar :

Ev yapımı sıcaklık ve nem sensörü DHT11 ve DHT22 - Arduino'ya bağlantı Biyometrik kilit - kontrol panosu montajı ve mikro denetleyici programlama

Uzun zamandır banyodan sonra banyoyu kurutma işlemini otomatikleştirmek istiyordum. Nem konusuyla ilgili pek çok inceleme aldım. Onunla mücadele yöntemlerinden birini (tabiri caizse) hayata sokmaya karar verdim. Bu arada kışın çamaşırlarımızı banyoda kurutuyoruz. Egzoz fanını açmak yeterlidir. Ancak fanı izlemek her zaman uygun değildir. Ben de bu konuda otomasyon kurmaya karar verdim. İlk uygulama deneyimi başarısız oldu. Bir inceleme vardı. Ama pes etmedim...

Yeni bir daireye taşındığımda, neredeyse anında davlumbazın içine çek valfli bir fan taktım. Banyodan sonra banyoyu kurutmak için vantilatör gereklidir. Komşulardan gelen yabancı kokuların daireye girmesini önlemek için (fan sessizken) çek valf gereklidir. Olur. Tüm havalandırma kanalları bireyseldir, ancak görünüşe göre döşenirken çimentodan tasarruf edilmişlerdir. Koku muhtemelen çatlaklardan geçiyordur.
Hayranlar için farklı seçeneklerim var. Fotoğraftaki gibi basit olanlar var, bazıları zamanlayıcılı (zaman aralığı ayarı).


Bu güne kadar alıştığım şey tam olarak buydu.
Bu özel durumda (zamanlayıcılı bir fanı olmayan), her şey yazılım düzeyinde yapılabilir.
Bir apartman dairesinde "karınca yuvası" yaşadığım için çamaşırları kurutabileceğim tek yer balkondur. Banyoda hava kararabilir. Kurutma düşük nem veya hava sirkülasyonu gerektirir. Her iki koşulu da yerine getirmek en iyi seçenektir. Bir fanın bu sorunu çözmesi gerekirdi. İlk başta tam da bunu yaptım. Önemli olan onu kapatmayı unutmamaktır. Fan çalışırken pencerenin hafifçe açılması gerekir. Bana okuldaki yüzme havuzu ve iki boru sorununu hatırlatman gerekmiyor mu? Havanın davlumbazın içine kaçabilmesi için bir yerden daireye girmesi gerekir. Pencereleri plastik değil ahşap olanlar sorun yaşamayacaktır. Yeterince çatlak var. Ancak plastik olanlarla daire teraryuma dönüşüyor.
İşte o zaman süreci otomatikleştirmeyi düşünmeye başladım. İşte tam da bu yüzden sensörleri sipariş ettim.
Fikrimi hayata geçirme konusundaki üzücü deneyimimi zaten paylaşmıştım. Bu modül. PRENSİPTE çalışamaz. Ancak boşta kalmayacak. Ve bunun faydası olacak.


(Besleme voltajı: 5V. Maksimum yük: 10A 250V AC ve 10A 30V DC). Röle bloğu olarak kullanıyorum. Bu normal bir hayran için yeterlidir.
Ayrıca modülün şemasını da çizdim. Bağlantı sorunu yaşanmayacaktır.


Kırmızı LED, besleme voltajının varlığını gösterir. Yeşil – röle aktivasyonu. İşe yaramaz sensörü (nem sensörü, artık orada değil) 10 kOhm'luk bir dirençle değiştirdim. Ayrıca daha fazla direnç ekledi. “Akıllı” bloğa gidecek. Her ikisi de kırmızıyla vurgulanmıştır. Bütün bunlar olası yanlış anlamaları ortadan kaldırmalıdır. Sonuçta, röle ünitesine 5V'luk bir voltajla ve "akıllı" üniteye 3,3V'luk bir voltajla güç veriliyor. Röle bloğu düşük seviye tarafından kontrol edilir. Yüksek bir seviye röleyi (fan) kapatır. Ürün yazılımı bunu dikkate alır.
Devre LM393'e dayalı bir karşılaştırıcıya dayanmaktadır. Düzeltme direncinin asıl amacı nem rölesinin çalışma eşiğini ayarlamaktı. Biraz bükmeniz gerekebilir.
Basit röle blokları kullanılabilir. Onlar satılık. Son başarısız denemeden sonra kalanları kullanacağım.
AM2302 (DHT22) sensörlerinin hangi biçimde geldiğini görmenin zamanı geldi. Üçünü birden sipariş ettim. Bunun sadece banyoyla sınırlı olmayacağını düşünüyorum. Kafamda bir sürü fikir var. Bunları hayata geçirmek için gerekli zamanı ve isteği nereden bulabilirim?


Sensörler antistatik torbalarda kapatıldı. Her şey zihindedir. Lehimleme düzgün. Görünümle ilgili hiçbir şikayetim yok. Tahta bile yıkandı.


Mağaza sayfasında şöyle yazıyor:

AM2302 Humicap dijital sıcaklık ve nem modülü, kalibre edilmiş sıcaklık ve nem kombine sensörü içeren bir dijital çıkış sinyalidir. Ürünlerin yüksek güvenilirliğe ve mükemmel uzun vadeli stabiliteye sahip olmasını sağlamak için özel bir dijital modül yakalama teknolojisi ile sıcaklık ve nem sensörü teknolojisini kullanır. Sensör, kapasitif bir nem algılama elemanı ve yüksek hassasiyetli sıcaklık ölçüm cihazları içerir ve yüksek performanslı 8 bitlik bir mikro denetleyiciye bağlıdır. Bu nedenle ürün mükemmel kaliteye, hızlı tepkiye, parazit önleme özelliğine, yüksek maliyete ve diğer avantajlara sahiptir. Ultra küçük boyut, düşük güç tüketimi, 20 metreye kadar sinyal iletim mesafesi. Her türlü uygulama ve hatta en zorlu uygulamalar için en iyi seçimdir.
Şartname:
Boyut: 40 x 23 mm
Ağırlık: 4g
Gerilim: 5V
Bağlantı noktası: dijital iki yönlü tek veri yolu
Sıcaklık aralığı: -40-80 °C ± 0,5 °C
Nem: %20-90 bağıl nem ± %2 bağıl nem
Platform: Arduino, SCM
Paket içeriği:
3 x Sensör Modülü
Tahtada minimum parça var. Sensörler ayrılamaz, bu yüzden onları kırmadım.
İşe başlamanın zamanı geldi. Kullanacağım şeylerin bir kısmını zaten gösterdim. Ayrıca 5V güç kaynağına ihtiyacım var. Bunu eski (artık ihtiyaç duyulmayan) bir telefon şarj cihazından yapacağım.

Bu şarj cihazının bir USB konektörü yoktur. Aslında çok eski (daha yenilerini kullanmanızı öneririm, 5V çıkışı var). Bu nedenle çıkış 7V'tur. KREN5 dengeleyicinin MC'sini lehimlemek zorunda kaldım. Bu konuda karmaşık bir şey yok. Havyaya aşina olan herkes bilir. Ve arkadaş olmayanlar konuyu boşuna okuyor.


Çok korkmayın, geçici bir tane yaptım. Mekanizmada hata ayıkladıktan sonra her şey düzgün görünecek. Belki şarj cihazını da değiştiririm. Her şey bitiş çizgisine vardığım sonuca bağlı. “Kapsamlı testlerden” sonra yerel olarak (kalıcı olarak) kuracağım. Yazılımın kış/yaz sürümünü kullanmanız gerekebilir. Kış/yaz aylarında havanın sıcaklık ve nem özellikleri farklıdır.
Ayrıca önceki incelemedeki WIFI modülüne de ihtiyacım var.


WIFI modülünü programlamak için bir dönüştürücü kablosu (USB'den RS232 TTL UART'a) faydalı olacaktır.


Fikrimin blok şeması basit görünüyor.


Ama elbette nüanslar var.
Geriye kalan tek şey bir fan kontrol programı oluşturmaktır.
Birkaç koşul vardır:
1. Nem %68'in üzerine çıktığında fan açılır.
2. Çalışma süresi (zamanlayıcı) 5 dakika.
3. Sıcaklık ve nem verilerinin WIFI üzerinden aktarılması (her ihtimale karşı).
4. WIFI modu göstergesi.
1 numaralı koşula odaklanırsak en basit Arduino yeterli olacaktır. Ancak yalnızca bir Arduino kartım var ve üç adet WIFI modülü var :)
Şahsen benim için en zor kısım bir program hazırlamaktır ki bu biraz (en hafif deyimiyle) benim konumum değil. Ancak hayat akıyor ve giderek artan insan kitlelerini kendi akışı boyunca taşıyor. DHT22 nem sensörü ve WIFI modülü örneğini kullanarak Arduino'nun geniş alanlarını keşfedeceğim. Ama eğer ben başardıysam, sen de başarabilirsin.
Öncelikle benim gibi aptallar için biraz bilgi vereyim.
Arduino IDE programında kullanacağım kartlar için yeterli ayar yok. Örneğin ESP8266'nın eklenmesi gerekiyor.

Örnek olarak ESP8266'yı kullanarak bileşenler ekleme.

Öncelikle Arduino IDE'yi bilgisayarıma indirip kurdum. Daha sonra programı başlatıyorum.
Dosya → Ayarlar → Bağlantıyı eklentiye ekleyin. bağlantılar → Tamam'a tıklayın. Bağlantı:



İnternet bağlantısı gereklidir. Mutlaka!
Daha sonra yönetim kurulu başkanının yanına gidiyorum.
Araçlar→Pano:…→Pano Yöneticisi.


Modülümü buldum. En son sürümü seçiyorum. Kuruluma tıklıyorum.


İndirilen Arduino IDE programında da sensör kütüphaneleri bulunmuyor. Örneğin DHT22 kütüphanesinin de eklenmesi gerekiyor.

DHT22 sensörü örneğini kullanarak kütüphaneyi bağlama.

Öncelikle internetten DHT.zip gibi bir arşiv indiriyorum. Onu bulmak sorun değil.
Daha sonra Arduino IDE programını başlatıyorum.
Taslak → Kitaplığı dahil et → Zip kitaplığı ekle.


Bunun gibi bir sekme belirir.


Depolama yerini belirtiyorum… Aç.
Kütüphane bağlı.


Yapmamız gereken çok az şey kaldı :)
Nem sensörünün bağlantı şeması farklı olabilir. Benimki, karta önceden monte edilmiş üç pimli ve dirençli bir modül olarak geldi.

Ve son olarak taslağı dolduruyoruz.

Krokiyi doldurma.

Bitmiş taslağı açıyorum. Benim durumumda “WiFi-DHT22_AleksPoroshin68.ino.


Arduino IDE otomatik olarak başlar.
Daha sonra programlayıcıyı bağlıyorum, araçlara gidiyorum ve Com portunu bağlıyorum. Bağlandığınız kişi vurgulanır. Aktif hale getireceğim. Netbook'umda bunlardan üç tane var: com6, com8 ve com10.


Ürün yazılımını inceliyorum. Erişim adını ve şifresini değiştirebilirsiniz.

İndirmek için düğmeye basıyorum.


Kroki derlendi. Yeterince uzun.


Şu anda, monte edilmiş modül devresinde sıfırlama tuşuna basmanız gerekir.

Bu durumda GPIO 00 sıfırdır.
İşte taslağın kendisi:
#katmak #katmak #katmak #katmak #include "DHT.h" #define DHTPIN 4 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); float dhtTemp = NAN; float dhtNem = NAN; int ledPin = 12; //GPIO 12 /* Bunları istediğiniz kimlik bilgilerine ayarlayın. */ const char *ssid = "AleksPoroshin"; const char *şifre = "12345678"; ESP8266WebSunucusu sunucusu(80); /* Sadece küçük bir test mesajı. Görmek için bu erişim noktasına bağlı bir web tarayıcısında * http://192.168.4.1 adresine gidin. */ void tanıtıcıRoot() ( String s = "\r\n ESP201";s += " ";s += " "; //s += "Durum - Eylemler - Yapılandırma"; s += "

ESP 201 modülü

"; s += " "; if (isnan(dhtTemp)) s += " Sıcaklık: Okuma hatası"; else ( s += " Sıcaklık: "; s += dhtTemp; s += " C"; ) if ( isnan(dhtHumidity)) s += "Nem: Okuma Hatası"; else ( s += "Nem: "; s += dhtNem; s += " %"; ) if(digitalRead(ledPin) == YÜKSEK) s + = "Başlık: Kapalı."; else s += "Başlık: Açık.";"; server.send(200, "text/html", s); ) void setup() ( gecikme(1000); Serial.begin(115200); Serial.println(); Serial.print("Erişim noktası yapılandırılıyor. .."); /* AP'nin açık olmasını istiyorsanız şifre parametresini kaldırabilirsiniz. */ WiFi.softAP(ssid, şifre); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP adresi) : "); Serial.println(myIP); server.on("/", handRoot); server.begin(); Serial.println("HTTP sunucusu başlatıldı"); dht.begin(); Serial.println(" DHT22 başlatma başarısı"); pinMode(ledPin, OUTPUT); ) void loop() ( getDHT(); server.handleClient(); ) void getDHT() ( dhtTemp = dht.readTemperature(); dhtHumidity = dht.readHumidity() +5 if(dhtNem< 68) { digitalWrite(ledPin, HIGH); Serial.println("ledPin HIGH"); } else { digitalWrite(ledPin, LOW); Serial.println("ledPin LOW"); } }
Çok fazla azarlamayın. Daha yeni öğreniyorum.
Krokiyi yükledikten sonra programlamayı onaylamak için GPIO'yu +3,3V'ye bağlıyorum. Sonra kapatıyorum. Ürün yazılımı yüklendi.


Devreyi breadboard üzerine kuruyorum. Her şeyi kontrol ediyorum. İşler. Ancak her şey istediğimiz kadar iyi değil. İhtiyacım olan aralıkta Çin sensörleri okumaları %5-6 oranında eksik tahmin ediyor.


Alman ağaç kesiciye daha çok güveniyorum. Ve fiyatı onlarca kat daha yüksek. Ve en önemlisi doğrulamayı geçti.
Programda değişiklik yaptım (5 adet eklendi). Bunun yanlış olduğuna katılıyorum. Ama %40-70 aralığında doğru gösteriyor. Özelliği kaldırıp kütüphaneyi düzeltmek daha doğru olur. Buna hazır değilim :). Diğer sensörler de yalan söyledi. Her ne kadar herkes yaklaşık olarak aynı şeyi gösterse de.

WIFI modülüme bağlanırsanız internet sayfası şöyle görünür:


Şifreler ve görünümler çizimde belirtilmiştir.
Anahtarlama %68 nemde gerçekleşir. Herşey temiz.


Ancak bir uyarı var. Ve göz ardı edilemez. %68 nem sınırında fan açılıp kapanarak döngü yapabilir. Bu sorunu çözmek için bir zamanlayıcıya ihtiyacınız var. Zamanlayıcılı bir fanım var. Onlar. Sorun değil. Düzenli bir fanı olanlar bu sorunu yazılım düzeyinde çözmek zorunda kalacaklar.
Bir sonraki görevim tüm bunları devre tahtası üzerinde değil şemaya göre bir araya getirmek ve bir ay içinde test etmek. Çalışma sırasında tüm değişiklikler yapılabilir. Ne yapacağımı ve nereye ekleyeceğimi, her şeyi yazdım.
Sensörün montajı hakkında birkaç kelime. Havalandırma kanalına yapıştırılmasını tavsiye etmiyorum. Nedeni basit. En temiz ve en bakımlı dairede bile, fan açıldığında oraya (veteriner giderine) akan toz vardır. Ancak bir yıl önce fanı çıkarıp iyice temizledim.


Sensörlerin hasar görmesi nedeniyle sık sık değişmemesi için onlara daha uygun bir yer bulmanızı tavsiye ederim. Ayrıca tozdan korumak için dokunmamış bir bez veya benzeri bir şeyle sarabilirsiniz. Ve mutlu olacaksın.
Nem kontrol “katsayılarını” kendiniz ayarlamak istiyorsanız, en azından biraz bilgi sahibi olmanız gerektiğini söylemeyi tamamen unuttum. Eğer evinizde bu gibi cihazlar yoksa...


Onlar olmadan bu konuda herhangi bir şey yapmanız çok zor olacaktır.
Bu kadar.
İncelememdeki bilgilerin nasıl doğru şekilde kullanılacağına herkes kendisi karar verir. Bir şey net değilse, sorular sorun. Umarım en azından birine yardımcı olmuştur. Belki birisi bana yardım etmek ister. Çok minnettar olacağım.
Herkese iyi şanslar!
İşlevsellik kontrolü:


Devam edecek…

Ürün mağaza tarafından yorum yazılması için sağlandı. İnceleme Site Kuralları'nın 18. maddesine uygun olarak yayınlandı.

+51 almayı planlıyorum Favorilere ekle İncelemeyi beğendim +26 +65

“Akıllı Ev” olarak bilinen entegre ev hizmet yönetim sistemleri giderek daha popüler hale geliyor. Bu sistemlerin yaygın olarak uygulanması yeterli nedenler nedeniyle engellenmektedir. bileşenlerin yüksek maliyeti elemanlar ve montaj işleri. Arduino tabanlı akıllı ev, en azından biraz elektronik bilgisine sahip olan herkesin oldukça erişebileceği bir çözümdür.

Arduino Nedir?

Arduino, üretim yaptıkları markadır donanım ve yazılım otomasyon ve telekontrol sistemlerinin bağımsız inşası için.

Özünde, bu geniş yeteneklere sahip modüler bir kurucudur. Arduino donanımı, üzerinde çeşitli sensörlerin, aktüatörlerin ve genişletme kartlarının düzenlendiği çok çeşitli baskılı devre kartlarından oluşur. Sistemin çekirdeği programlanabilir mikrokontrolörlü kartlar Arduino Pro Mini'den Arduino Mega'ya kadar değişen karmaşıklık seviyelerinde. Genişletme kartları çok sayıda harici cihazı kullanmanıza olanak tanır.

Küçük bir baskılı devre kartı, bir mikrodenetleyici, bazı ayrı elemanlar, kuvars ve dikey pimler de dahil olmak üzere çeşitli konektör türlerini içerir ve bunun yardımıyla raflı yapılar genişletme kartlarının eklenmesiyle birleştirilir. Atmega ailesi çipleri mikrodenetleyici olarak kullanılmaktadır. Denetleyici türü, giriş ve çıkış sayısına bağlı olarak kartın işlevselliğini belirler.

Bu kadar yaygın bir modülarduino Unomikrodenetleyici ileAtmega328 aşağıdaki özelliklere sahiptir:

  • Dijital girişler/çıkışlar – 14
  • Bunlardan 6'sı PWM'dir
  • Analog girişler – 6
  • Bellek – 32 KB
  • Güç kaynağı – 7-12 V
  • Fiyat – 950 ruble

Dijital kişiler belirli bir işlevi gerçekleştirmek üzere programlanabilir. Bir girdi veya çıktı olabilir. Bu girişler/çıkışlar, çalışması için yalnızca iki seviye gerektiren cihazlarla çalışabilir. Bu, besleme voltajına yakın bir mantıksal seviye veya seviye ve sıfıra karşılık gelen mantıksal bir düşük seviyedir. Dijital girişlere iki seviyeli sensörler bağlanabilir. Bunlar arasında bir mıknatıs-reed anahtar çifti bulunur. Bu sensör kapı ve pencerelerin açılmasına tepki verir. Birçok güvenlik ve yangın alarm sensörü bu prensiple çalışır.

Dijital çıkışlar, çeşitli ev aletlerinin bağlı olduğu elektrik prizlerini açıp kapatan elektromanyetik rölelerin çalışmasını kontrol edebilir. Arduino'dan akıllı olan, hazır bir endüstriyel kitten çok daha ucuza mal olacak.

Analog girişler, analogdan dijitale dönüştürücüler aracılığıyla sıcaklık sensörlerinin, ışık sensörlerinin ve diğer bazı cihazların durumu hakkındaki bilgileri kontrol cihazına iletir. Sistemin merkezi ünitesi, sensör okumalarını hafızada saklanan komutlarla karşılaştırarak, güçte yumuşak bir değişiklik gerektiren cihazları kontrol edebilir. Darbe genişliği modülatörüne bağlanan altı çıkış, yük gücünün düzgün şekilde kontrol edilmesini sağlar. Örneğin bir lambanın parlaklığını ayarlayın, bir ısıtıcının sıcaklığını ayarlayın veya bir elektrik motorunun hızını kontrol edin.

En güçlü ve çok işlevli tahta bu hattın biri Arduino Mega'dır. Baskılı devre kartına monte edilmiştir denetleyiciAT mega 2560 , ayrık elemanlar, güç bağlantısı için USB bağlantı noktası. Kartta I/O fonksiyonlarını gerçekleştirmek üzere programlanabilen 54 evrensel pin bulunmaktadır. Bunlardan 14'ü darbe genişliği modülasyonunu kullanarak analog cihazları kontrol edebilir. 16 analog giriş, herhangi bir analog cihazı bağlamak için tasarlanmıştır.

Denetleyici panosu arduino Mega maliyeti yaklaşık 1.500 ruble. Programlamanın en kolay yolu, USB bağlantı noktası aracılığıyla kişisel bir bilgisayar kullanmaktır.

Arduino için çevre birimleri modülleri

Denetleyici kartı sistemin çekirdeğidir ancak ona herhangi bir cihaz bağlayamazsınız. Çıkışlar küçük bir yük kapasitesine ve sınırlı akıma sahiptir. Ev aletleri için bir kontrol sistemi düzenlemek için harici güç modüllerine, iletişim cihazlarına ve diğer cihazlara ihtiyacınız olacaktır. Arduino kontrolörleri için tasarlanmış çok sayıda çevresel modül bulunduğundan bu bir sorun değildir.

İşte bunlardan sadece birkaçı:

  • Gaz analizörü – MQ-2
  • Işık sensörü – 2CH-Light-2
  • Harici sıcaklık sensörü – DS18B20-PL
  • Oda sıcaklığı ve nem sensörü – DHT-11
  • Motor Sürücüleri – L298N, L9110
  • Röle modülleri – 1ch5V, 4ch5V
  • Uzaktan kumanda modülü IC2262/2272

Odadaki gaz sızıntılarını tespit eden sensör, ev gazının bileşenleri olan propan ve bütana tepki verir. Modülde hassasiyet ayarı ve analog/dijital çıkışlar bulunmaktadır. Bir ışık sensörü, otomatik bir ışık kontrol sisteminin parçası olabilir. Bireysel hassasiyet ayarına sahip iki bağımsız kanaldan oluşur. Dış sıcaklık sensörü -55 ila +125 derece arasındaki sıcaklıklarda çalışacak şekilde tasarlanmıştır. Oda sıcaklığı ve nem sensörü tasarlanmıştır. Sıcaklık aralığı 0 ila +55 0 C ve nem oranı %20 ila 90 arasındadır.

Arduino modüllerinin besleme voltajı 7 ila 12 volt arasında değiştiğinden, güvenlik veya yangın alarmı düzenlemek için aynı çalışma seviyesine sahip herhangi bir standart sensör kullanılabilir.

Motor Sürücüleri tek fazlı, iki fazlı, dört fazlı ve step motorları kontrol etmenizi sağlar. Bu tür cihazların yardımıyla panjur veya perdeleri açıp kapatabilirsiniz. Sürücülere bağlı servo sürücüler, ısıtma radyatörlerindeki soğutma sıvısı akışını düzenlemenizi sağlar. Röle anahtarları Akıllı Ev sisteminin vazgeçilmezidir. +5 voltluk mantıksal ünite potansiyeli tarafından kontrol edilen röleler, AC devrelerinde 10 ampere kadar yüklerin 250 volta kadar gerilimlerde anahtarlanmasına olanak tanır.

Elektrik prizlerini, elektrikli pompaları ve diğer sistemleri açıp kapatmak için kullanılabilirler.

Uzaktan kumanda modülü bir uzaktan kumanda ve bir alıcı cihazdan oluşur. Uzaktan kumanda dört düğmeyle donatılmıştır ve komutları 100 metreye kadar mesafeden alıcı üniteye iletir. Tüm çevresel modüller aynı besleme voltajına sahiptir ve tüm Arduino mikrokontrolörleriyle uyumludur.

Akıllı Ev sisteminin organizasyonu

Belirli beceriler, devre şemaları bilgisi ve elektroniğin temelleri olmadan, "Akıllı Ev" sistemini tam olarak üstlenmemek daha iyidir.

Programlama Arduino serisinin mikrodenetleyicileri C/C++ dilinde gerçekleştirilir.

Başlangıç ​​olarak, bir LED'i açıp kapatabilen veya bir mikroelektrik motorun çalışmasını kontrol edebilen basit programlar yazabilirsiniz. Bu tür programların birçok örneği vardır. If, while, Then ve diğerleri gibi basit operatörleri kullanırlar. Okul çocuklarının bile program yazmasına izin veriyorlar. İlk programlar doğru şekilde yürütüldüğünde, düzgün ışık kontrolü için PWM çıkışlarını kullanacak daha karmaşık cihazları birleştirmeyi deneyebilirsiniz.

Arduino'yu kendi ellerinizle kullanarak "Akıllı Ev" yapmak için, her oda için sensör ve aktüatör sayısını gösterecek teknik bir proje hazırlamanız gerekir. Birkaç basit fonksiyonun uygulanacağı bir odayla başlayabilirsiniz. Bazıları harici sensörlerden gelen sinyallere, bazıları ise zamanlayıcı sinyallerine göre gerçekleştirilecek. Bir kişi sabah işe gitmek için kalktığında, Arduino denetleyicisi bir zamanlayıcı sinyaline göre elektrikli su ısıtıcısını veya kahve makinesini açacaktır. Harici sensör tarafından algılanan dışarısı karanlıksa odadaki lamba yavaş yavaş yanacaktır. Hem uyku hem de uyanma için konforlu bir oda sıcaklığı da ayarlanabilir.

Az sayıda fonksiyon için bir Arduino Uno mikrodenetleyicisi ve bir dizi çevresel modül uygundur.

Ev aletlerini kontrol etmek için elektrik prizlerini açıp kapatacak röle anahtarlarına ihtiyacınız olacaktır. Işığı kontrol etmek için bir hareket dedektörüne ihtiyacınız olacak. Mutfakta akıllı sistem kurulu ise davlumbazın, evsel gaz kaçak sensörünün ve su sızıntı sensörünün otomatik olarak devreye girmesinin sağlanması gerekmektedir. Yangın alarm elemanı olarak odaya bir duman dedektörü takılmalıdır.

Çözüm

Arduino denetleyicisi, bir akıllı ev projesini nispeten küçük bir miktar içinde tamamlamanıza olanak tanır. Üç odalı bir daireyi donatmanın tüm maliyetlerini hesaplarsanız, miktarın 30-40 bin rubleyi aşması pek mümkün değildir. İşlev sayısını azaltırsanız bütçe daha da mütevazı olacaktır.

İyi günler, bugün oda termometresi ile saat yapma talimatlarını paylaşacağım( DIY Arduino saati). Saat, Arduino UNO'da çalışır; WG12864B grafik ekranı, zamanı ve sıcaklığı görüntülemek için kullanılır. Sıcaklık sensörü olarak - ds18b20. Diğer çoğu saatin aksine, RTS (Gerçek Zamanlı Saat) kullanmayacağım, ancak bu ek modül olmadan yapmaya çalışacağım.

Arduino devreleri basitlikleri ile öne çıkıyor ve herkes Arduino öğrenmeye başlayabilir. Kütüphaneleri ve flash Arduino'yu nasıl bağlayacağınızı yazımızdan okuyabilirsiniz.

Başlayalım.

Bu saati oluşturmak için ihtiyacımız olacak:

Arduino UNO (Veya herhangi bir Arduino uyumlu kart)
- Grafik ekranı WG12864B
- Sıcaklık sensörü ds18b20
- Direnç 4,7 Kom 0,25 W
- Direnç 100 ohm 0,25 W
- 4 adet AA pil için pil bölmesi
- Eşleşen kutu
- İnce dosya
- Oje (siyah veya gövde rengi)
- Biraz ince plastik veya karton
- Elektrik bandı
- Kabloların bağlanması
- Devre kartı
- Düğmeler
- Havya
- Lehim, reçine
- Çift taraflı bant

Grafik ekranının hazırlanması.
İlk bakışta ekranı bağlamak pek çok sorun ve zorluğu beraberinde getiriyor. Ancak önce türlerini anlarsanız, çok daha kolay ve net hale gelecektir. Ks0107/ks0108 kumanda üzerinde birçok çeşit ve türde ekran bulunmaktadır. Tüm ekranlar genellikle 4 türe ayrılır:
Seçenek A: HDM64GS12L-4, Crystalfontz CFAG12864B, Sparkfun LCD-00710CM, NKC Electronics LCD-0022, WinStar WG12864B-TML-T
Seçenek B: HDM64GS12L-5, Lumex LCM-S12864GSF, Futurlec BLUE128X64LCD, AZ Displays AGM1264F, Displaytech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway LM12864LDW, Digitron SG12864J4, 4F, TM1286 4L-2, 12864J-1
Seçenek C: Shenzhen Jinghua Displays Co Ltd. JM12864
Seçenek D: Wintek-Cascades WD-G1906G, Wintek - GEN/WD-G1906G/KS0108B, Wintek/WD-G1906G/S6B0108A, TECDIS/Y19061/HD61202, Varitronix/MGLS19264/HD61202

Liste tam değil, birçoğu var. En yaygın ve bence kullanışlı olanı WG12864B3 V2.0'dır. Ekran Arduino'ya seri veya paralel port üzerinden bağlanabilir. Arduino UNO ile kullanırken, seri port üzerinden bir bağlantı seçmek daha iyidir - o zaman paralel port üzerinden bağlanırken en az 13 hat yerine mikro denetleyicinin yalnızca 3 çıkışına ihtiyacımız olacaktır. Her şey oldukça basit bir şekilde bağlanır. Bir nüans daha var: Satışta yerleşik potansiyometreli (kontratı ayarlamak için) ve onsuz iki ekran seçeneği bulabilirsiniz. Ben seçtim ve yerleşik olanla aynısını yapmanızı tavsiye ediyorum.


Bu, parça sayısını ve lehimleme süresini azaltır. Ayrıca arka ışık için 100 Ohm'luk bir akım sınırlama direnci takmaya değer. 5 volt'u doğrudan bağladığınızda arka ışığın yanması riski vardır.
WG12864B – Arduino UNO
1 (GND) - GND
2 (VCC) - +5V
4 (RS) – 10
5 (K/Y) – 11
6 (E) – 13
15 (PSB) – GND
19 (BLA) – bir direnç aracılığıyla - +5V
20 (BLK) – TOPRAK

En uygun yol, her şeyi ekranın arkasına monte etmek ve Arduino UNO'ya bağlanan 5 kabloyu çıkarmaktır. Nihai sonuç şöyle görünmelidir:


Hala paralel bağlantı seçenler için bir bağlantı tablosu sunacağım.

Ve B seçeneğinin ekranlarının şeması:



Bir iletişim hattına birden fazla sensör bağlanabilir. Saatlerimiz için bir tanesi yeterli. Kabloyu ds18b20'nin "DQ" pininden Arduino UNO'nun "pin 5"ine bağlarız.

Düğmelerle tahtanın hazırlanması.
Saatin saatini ve tarihini ayarlamak için üç düğme kullanacağız. Kolaylık sağlamak için devre kartındaki üç düğmeyi lehimliyoruz ve kabloları çıkarıyoruz.


Aşağıdaki gibi bağlanıyoruz: Her üç düğmenin ortak kablosunu Arduino'nun “GND”sine bağlıyoruz. Zaman ayarlama moduna girip saat ve tarihe göre geçiş yapmak için kullanılan ilk buton “Pin 2”ye bağlıdır. Değeri artıran ikinci buton “Pin 3”e, değeri azaltan üçüncü buton ise “Pin 4”e.

Hepsini bir araya koy.
Kısa devreleri önlemek için ekranın yalıtılması gerekir. Elektrik bandıyla bir daireye sarıyoruz ve arkasına çift taraflı bantla boyutuna göre kesilmiş bir yalıtım malzemesi şeridi yapıştırıyoruz. Kalın karton veya ince plastik yapacaktır. Kağıt için tabletin plastiğini kullandım. Sonuç şudur:


Ekranın önüne, kenar boyunca, tercihen siyah olmak üzere çift taraflı köpük bant yapıştırıyoruz.


Ekranı Arduino'ya bağlayın:


Pil bölmesindeki artıyı Arduino'nun “VIN”ine, eksiyi “GND”ye bağlarız. Arduino'nun arkasına yerleştiriyoruz. Kasaya takmadan önce sıcaklık sensörünü ve kartı düğmelerle bağlamayı unutmayın.


Krokiyi hazırlamak ve doldurmak.
Sıcaklık sensörü OneWire kitaplığını gerektirir.

Ekrana çıktı U8glib kütüphanesi aracılığıyla gerçekleştirilir:

Bir çizimi düzenlemek ve doldurmak için bu iki kitaplığı yüklemeniz gerekir. Bunu yapmanın iki yolu var. Bu arşivleri açmanız ve açılan dosyaları Arduino IDE kurulum klasöründe bulunan “kitaplıklar” klasörüne yerleştirmeniz yeterlidir. Veya ikinci seçenek, kütüphaneleri doğrudan programlama ortamına kurmaktır. İndirilen arşivleri açmadan Arduino IDE'de Sketch - Connect Library menüsünü seçin. Açılır listenin en üstünde “Add.Zip kitaplığı” seçeneğini seçin. Görüntülenen iletişim kutusunda eklemek istediğiniz kitaplığı seçin. Çizim menüsünü tekrar açın – Kütüphaneyi Bağlayın. Açılır listenin en altında yeni kütüphaneyi görmelisiniz. Artık kütüphane programlarda kullanılabilir. Tüm bunlardan sonra Arduino IDE'yi yeniden başlatmayı unutmayın.

Sıcaklık sensörü One Wire protokolünü kullanarak çalışır ve her cihaz için benzersiz bir adrese (64 bit kod) sahiptir. Her seferinde bu kodu aramak pratik değildir. Bu nedenle, önce sensörü Arduino'ya bağlamanız, Dosya - Örnekler - Dallas Sıcaklığı - OneWireSearch menüsünde bulunan çizimi yüklemeniz gerekir. Ardından Araçlar - Bağlantı Noktası Monitörü'nü başlatın. Arduino sensörümüzü bulmalı, adresini ve mevcut sıcaklık değerlerini yazmalıdır. Sensörümüzün adresini kopyalıyoruz veya basitçe yazıyoruz. Arduino_WG12864B_Term taslağını açın, şu satırı arayın:

Byte addr=(0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97);//sensörümün adresi

Benim sensörümün adresini değiştirerek süslü parantezlerin arasına sensörünüzün adresini yazıyoruz.

Stoklamak:

//u8g.setPrintPos(44, 64); u8g.print(sn); // Hareketin doğruluğunu kontrol etmek için saniye çıktısı

“Veri” yazısının yanındaki saniyeleri görüntülemeye yarar. Zamanın geçişini doğru bir şekilde ayarlamak için bu gereklidir.
Saat hızlı veya geriyse satırdaki değeri değiştirmelisiniz:

If (micros() - prevmicros >494000) ( // 500000 olduğunu düzeltmek için başka bir şeyle değiştirin

Saatin oldukça doğru çalıştığı sayıyı ampirik olarak belirledim. Saatiniz hızlıysa bu sayıyı artırın, geriyse azaltın. Hareketin doğruluğunu belirlemek için saniyeleri görüntülemeniz gerekir. Sayının hassas kalibrasyonundan sonra saniyeler yorumlanabilir ve böylece ekrandan kaldırılabilir.

Makaleyi beğendin mi? Arkadaşlarınla ​​paylaş!
Bu makale yardımcı oldu mu?
Evet
HAYIR
Geri bildiriminiz için teşekkürler!
Bir şeyler ters gitti ve oyunuz sayılmadı.
Teşekkür ederim. Mesajınız gönderildi
Metinde bir hata mı buldunuz?
Seçin, tıklayın Ctrl + Enter ve her şeyi düzelteceğiz!