- Çalışma Açıklaması:
- Bileşenler:
- Programlama:
- EasyEDA kullanarak Devre ve PCB Tasarımı:
- PCB Örneklerini Çevrimiçi Hesaplama ve Sipariş Etme:
Bu projede, sadece bir IR uzaktan kumanda kullanarak birkaç AC yükünü uzaktan kontrol etmek için bir PIC mikro denetleyici kullanacağız. Benzer bir proje IR uzaktan kumandalı Ev otomasyonu da Arduino ile zaten yapıldı, ancak burada EasyEDA'nın çevrimiçi PCB tasarımcısı ve simülatörünü kullanarak PCB üzerinde tasarladık ve sonraki bölümünde gösterildiği gibi PCB kartlarını sipariş etmek için PCB tasarım hizmetlerini kullandık. makale.
Bu projenin sonunda, Koltuğunuzun / Yatağınızın rahatlığından sıradan bir Uzaktan Kumandayı kullanarak herhangi bir AC yükünü açıp kapatabilirsiniz (AÇIK / KAPALI). Bu projeyi daha ilginç hale getirmek için, Triac'ın yardımıyla fanın hızını kontrol etme özelliği de etkinleştirdik. Tüm bunlar IR uzaktan kumandanızdaki basit tıklamalarla yapılabilir. Bu proje için TV / DVD / MP3 uzaktan kumandanızdan herhangi birini kullanabilirsiniz. Uzaktan kumandadan gelen farklı IR sinyalleri, mikrodenetleyici tarafından alınır ve daha sonra ilgili röleleri bir röle sürücü devresi aracılığıyla kontrol eder. Bu röleler, AC Yüklerini (Işıklar / Fan) bağlamak ve bağlantısını kesmek için kullanılır.
Çalışma Açıklaması:
Bu projenin çalışmasını anlamak oldukça basittir. IR Uzaktan Kumanda üzerindeki bir düğmeye basıldığında, 38Khz modülasyon frekansı kullanarak kodlanmış darbeler şeklinde bir kod dizisi gönderir. Bu darbeler TSOP1738 sensörü tarafından alınır ve ardından Kontrolör tarafından okunur. Kontrolör daha sonra alınan darbelerin dizisini bir onaltılık değere dönüştürür ve programımızdaki önceden tanımlanmış onaltılık değerlerle karşılaştırır.
Herhangi bir eşleşme meydana gelirse, denetleyici ilgili Röle / Triyak'ı tetikleyerek göreceli bir işlem gerçekleştirir ve ilgili sonuç ayrıca yerleşik LED'ler ile gösterilir. İşte bu projede aydınlatma yükü olarak 4 farklı renkte ampul (küçük ampul) kullandık ve gösteri amaçlı bir başka ampul (daha büyük ampul) fan olarak kabul edildi.
Röle2'yi değiştirmek için röle1, 2'yi değiştirmek için 1 tuşunu, röle3'ü değiştirmek için 3, röle4'ü değiştirmek için Vol + ve fan hızını artırmak için Vol + ve fan hızını düşürmek için Vol- seçtik.
Not: Burada fan yerine 100 watt ampul kullandık.
Farklı cihazlar için kullanılabilen birçok IR Uzaktan Kumandası türü vardır, ancak çoğu 38KHz Frekansı civarında çalışır. Bu projede, ev aletlerini IR TV uzaktan kumandası kullanarak kontrol ediyoruz ve IR sinyallerini tespit etmek için bir TSOP1738 IR Alıcısı kullanıyoruz. Bu TSOP1738 sensörü 38Khz Frekans sinyalini algılayabilir. IR uzaktan kumanda ve TSOP1738'in çalışması bu makalede ayrıntılı olarak ele alınmıştır: IR Verici ve Alıcı
PIC mikrodenetleyicimiz + 5V'de çalışır ve Röleler + 12V'de çalışır, bu nedenle 220V AC'yi düşürmek ve tam bir köprü doğrultucu kullanarak onu düzeltmek için bir transformatör kullanıyoruz. Bu düzeltilmiş DC voltajı daha sonra sırasıyla 7812 ve 7805 regülatör IC'leri kullanılarak + 12V ve + 5V olarak düzenlenir.
Röleyi tetiklemek için, PIC mikro denetleyiciden gelen sinyale göre röleleri AÇMAK / KAPATMAK için elektronik bir anahtar görevi görebilen BC547 gibi transistörlerden yararlanıyoruz. Ayrıca fanın hızını kontrol etmek için bir TRIAC kullanıyoruz. TRIAC, çıkış voltajını kontrol edebilen bir güç yarı iletkenidir; bu özellik, fanın hızını kontrol etmek için kullanılır.
PIC mikro denetleyicimizi kullanarak Triyak'ı kontrol etmek için bir Triyak Sürücüsü de kullandık. Bu sürücü, çıkış gücünün kontrol edilebilmesi için Triyak'a ateşleme açısı darbesi vermek için kullanılır. Burada 6 seviyeli hız kontrolü kullandık. Seviye 0 olduğunda, fan kapanacaktır. Seviye 1 olduğunda hız, tam hızın 1 / 5'i olacaktır. Seviye 2 olduğunda hız, tam hızın 2 / 5'i ve diğerleri için sırasıyla olacaktır. Mevcut hız seviyesi, yerleşik 7 segmentli ekran kullanılarak izlenebilir.
Projenin blok şeması aşağıda gösterilmiştir.
Bileşenler:
Bu projeyi inşa etmek için gerekli bileşenler aşağıda verilmiştir:
- PIC18f2520 Mikrodenetleyici -1
- TSOP1738 -1
- IR TV / DVD Uzaktan Kumanda -1
- Transistör BC547 -4
- Röleler 12 volt -4
- Tutuculu ampul -5
- Bağlantı telleri -
- EasyEda PCB -1
- 16x2 LCD
- Güç kaynağı 12v
- Terminal konnektörü 2 pimli `-8
- Terminal Konnektörü 3 pin -1
- Transformatör 12-0-12 -1 -
- Voltaj Regülatörü 7805-1
- Voltaj Regülatörü 7812-1
- Kapasitör 1000uf -1
- Kapasitör 10 uf -1
- Kapasitör 0.1 uf -1
- Kapasitör 0.01 uf 400V "-1
- 10.000 -5
- 1k -5
- 100ohm -7
- Ortak katot segmenti -1
- 1n4007 diyot -10
- BT136 triyak -1
- Erkek / dişi başlık -
- LED'ler -6
- Opto-bağlayıcı moc3021 -1
- Opto-coupler mtc2e veya 4n35 -1
- 20Mhz kristal -1
- 33pf kapasitör -2
- 5.1 v zener diyot -1
- 47 ohm 2 watt direnç -1
Tüm bu bileşenler yaygın olarak kullanılır ve kolayca satın alınabilir. Ancak, çevrimiçi olarak en iyi satın almayı arıyorsanız, size LCSC'yi tavsiye ederiz.
LCSC, her türlü proje için elektronik bileşenlerinizi satın alabileceğiniz harika bir çevrimiçi mağazadır. Yaklaşık 25.000 çeşit bileşene sahiptirler ve en iyisi, küçük projeler için küçük miktarlarda bile satmaları ve ayrıca Küresel Nakliye'ye sahip olmalarıdır.
IR Uzaktan Kumandayı Çözme:
Daha önce de belirtildiği gibi, projeniz için her türlü uzaktan kumandayı kullanabilirsiniz. Ancak o uzaktan kumandadan ne tür bir sinyal üretildiğini bilmeliyiz. Uzaktan kumandadaki her bir anahtar için, o anahtar için eşdeğer bir HEX değeri olacaktır. Bu HEX değerini kullanarak mikrodenetleyici tarafımızdaki her bir anahtarı ayırt edebiliriz. Bu nedenle, bir uzaktan kumanda kullanmaya karar vermeden önce, o uzaktan kumandada önceden ayarlanmış tuşların HEX değerini bilmeliyiz. Bu projede, bir NEC uzaktan kumanda kullandık. Bir NEC uzaktan kumandasındaki anahtarlar için HEX değerleri aşağıda verilmiştir.
HEX değerinin 7 karakter içerdiğini fark edebileceğiniz gibi, bunlardan sadece son ikisi farklıdır, bu nedenle her bir anahtar arasında ayrım yapmak için yalnızca son iki rakamı dikkate alabiliriz.
Devre şeması:
Proje için şematik aşağıda gösterilmiştir.
Yukarıdaki şema, bu projede kullanılan tüm bileşenlerin düzenlerini sağladıkları için esayEDA şematik editörü kullanılarak kolaylaştırılmıştır. Ayrıca bir kurulum gerektirmez ve hareket halindeyken çevrimiçi olarak kullanılabilir.
Bağlantı noktaları ve bileşen değerleri yukarıdaki şemada açıkça belirtilmiştir. Şematik dosyayı buradan da indirebilirsiniz.
Programlama:
Bu proje için program MPLABX kullanılarak yapılmıştır, kod da oldukça basit ve anlaşılması kolaydır. Kodun tamamı bu eğitimin sonunda verilecektir, programın birkaç önemli parçası aşağıda açıklanmıştır.
Kodun başında gerekli kütüphaneleri eklemeli, pinleri tanımlamalı ve değişkenleri bildirmeliyiz.
#Dahil etmek
Bundan sonra, "for" döngüsünü kullanarak basit bir gecikme fonksiyonu oluşturduk.
void delay (int time) {for (int i = 0; i
Bundan sonra, aşağıdaki işlevi kullanarak zamanlayıcıyı başlattık
geçersiz zamanlayıcı () // 10 -> 1us {T0PS0 = 0; T0PS1 = 0; T0PS2 = 0; PSA = 0; // Zamanlayıcı Saat Kaynağı Prescaler'dan alınmıştır T0CS = 0; // Ön ölçekleyici saati FCPU'dan (5MHz) alır T08BIT = 0; // 16 BIT MODU TMR0IE = 1; // TIMER0 Interrupt'ı etkinleştir PEIE = 1; // Çevresel Kesintiyi Etkinleştir GIE = 1; // INT'leri global olarak etkinleştir TMR0ON = 1; // Şimdi zamanlayıcıyı başlat! }
Şimdi ana fonksiyonda, seçilen pinlere yön verdik ve sıfır geçişi tespit etmek için zamanlayıcı ve harici interrupt int0'ı başlattık.
ADCON1 = 0b00001111; TRISB1 = 0; TRISB2 = 1; TRISB3 = 0; TRISB4 = 0; TRISB5 = 0; TRISC = 0x00; TRISA = 0x00; PORTA = 0xc0; TRISB6 = 0; RB6 = 1; röle1 = 0; röle2 = 0; röle3 = 0; röle4 = 0; rly1LED = 0; rly3LED = 0; rly2LED = 0; rly4LED = 0; fanLED = 0; i = 0; ir = 0; trik = 0; zamanlayıcı (); INTEDG0 = 0; // Düşen kenarda kesinti INT0IE = 1; // INT0 harici kesmeyi etkinleştirin (RB0) INT0IF = 0; // INT0 Harici Kesme İşareti bitini siler PEIE = 1; // Çevresel Kesintiyi Etkinleştir GIE = 1; // INT'leri global olarak etkinleştirin
Şimdi, burada IR sinyalini tespit etmek için herhangi bir kesme veya yakalama ve karşılaştırma modu kullanmıyoruz. Burada, tıpkı bir düğmeyi okuduğumuz gibi verileri okumak için dijital bir pin kullandık. Sinyal ne zaman yüksek veya düşük olursa, geri bildirim yöntemini koyar ve zamanlayıcıyı çalıştırırız. Pin durumunu bir başkasına değiştirdiğinde, zaman değerleri bir diziye kaydedilir.
IR uzaktan mantık 0'ı 562.5us ve mantık 1'i 2250us olarak gönderir. Zamanlayıcı 562.5us civarında okuduğunda, 0 olduğunu varsayıyoruz ve zamanlayıcı 2250us civarında okuduğunda, onu 1 olarak varsayıyoruz. Sonra onu hex'e dönüştürüyoruz.
Uzaktan kumandadan gelen sinyal 34 bit içerir. Dizideki tüm baytları saklıyoruz ve sonra kullanılacak son baytın kodunu çözüyoruz.
while (ir == 1); INT0IE = 0; while (ir == 0); TMR0 = 0; while (ir == 1); i ++; dat = TMR0; eğer (dat> 5000 && dat <12000) {} else {i = 0; INT0IE = 1; } eğer (i> = 33) {GIE = 0; gecikme (50); cmd = 0; for (j = 26; j <34; j ++) {if (dat> 1000 && dat <2000) cmd << = 1; aksi takdirde (dat> 3500 && dat <4500) {cmd- = 0x01; cmd << = 1; }} cmd >> = 1;
Yukarıdaki kod parçası, zamanlayıcıyı kullanarak IR sinyalini alır ve kodunu çözer ve karşılık gelen HEX değerini değişken cmd'de saklar. Şimdi bu HEX değerini (cmd değişkeni) önceden tanımlanmış HEX değerlerimizle karşılaştırabilir ve aşağıda gösterildiği gibi röleyi değiştirebiliriz.
eğer (cmd == 0xAF) {röle1 = ~ röle1; rly1LED = ~ rly1LED; } else if (cmd == 0x27) {röle2 = ~ röle2; rly2LED = ~ rly2LED; } else if (cmd == 0x07) {relay3 = ~ relay3; rly3LED = ~ rly3LED; } else if (cmd == 0xCF) {relay4 = ~ relay4; rly4LED = ~ rly4LED; } else if (cmd == 0x5f) {speed ++; eğer (hız> 5) {hız = 5; }} else if (cmd == 0x9f) {speed--; eğer (hız <= 0) {hız = 0; }}
Şimdi fanımızın şu anda hangi noktada çalıştığını bilmek için 7 segmentli bir ekran kullanmalıyız. Aşağıdaki satırlar, 7 segmentli ekranın pimlerine talimat vermek için kullanılır.
eğer (hız == 5) // kapalı 5x2 = 10ms tetikleyici // hız 0 {PORTA = 0xC0; // 0 göster RB6 = 1; fanLED = 0; } else if (hız == 4) // 8 ms tetik // hız 1 {PORTA = 0xfc; // 1 RB6 = 1 görüntüleniyor; fanLED = 1; } else if (hız == 3) // 6 ms tetik // hız 2 {PORTA = 0xE4; // 2 RB6 = 0 görüntüleniyor; fanLED = 1; } else if (speed == 2) // 4ms tetik // hız 3 {PORTA = 0xF0; // 3 RB6 = 0 görüntüleniyor; fanLED = 1; } else if (speed == 1) // 2ms tetikleyici // hız 4 {PORTA = 0xD9; // 4 RB6 = 0 görüntüleniyor; fanLED = 1; } else if (speed == 0) // 0ms tetikleyici // hız 5 tam güç {PORTA = 0xD2; // 5 RB6 = 0 görüntüleniyor; fanLED = 1; }
Aşağıdaki işlev harici kesinti ve zaman aşımı içindir. Bu fonksiyon, sıfır geçişi tespit etmekten ve Triyak'ı sürmekten sorumludur.
void interrupt isr () {if (INT0IF) {delay (hız); trik = 1; for (int t = 0; t <100; t ++); trik = 0; INT0IF = 0; } if (TMR0IF) // TMR0 Overflow olup olmadığını kontrol edin ISR {TMR0IF = 0; }}
Bu IR uzaktan kumandalı ev otomasyonu için son PCB aşağıda gösterildiği gibidir:
EasyEDA kullanarak Devre ve PCB Tasarımı:
Bu Uzaktan kumandalı ev otomasyonunu tasarlamak için, sorunsuz bir şekilde devre ve PCB oluşturmak için ücretsiz bir çevrimiçi EDA aracı olan EasyEDA'yı kullandık. Daha önce EasyEDA'dan birkaç PCB sipariş etmiştik ve devrelerin çizilmesinden PCB siparişlerine kadar tüm süreci diğer PCB üreticilerine kıyasla daha rahat ve verimli bulduğumuz için hizmetlerini kullanmaya devam ettik. EasyEDA, devre çizimi, simülasyon, PCB tasarımını ücretsiz olarak sunar ve ayrıca yüksek kaliteli ancak düşük fiyatlı Özelleştirilmiş PCB hizmeti sunar. Şemalar, PCB düzenleri, Devreleri Simüle Etmek vb.İçin Easy EDA'nın nasıl kullanılacağına ilişkin tam eğitim için buraya bakın.
EasyEDA her geçen gün gelişiyor; birçok yeni özellik eklediler ve genel kullanıcı deneyimini geliştirdiler, bu da EasyEDA'yı devre tasarlamak için daha kolay ve kullanılabilir hale getiriyor. Yakında, çevrimdışı kullanım için bilgisayarınıza indirilip yüklenebilen Masaüstü sürümünü başlatacaklar.
EasyEDA'da, devre ve PCB tasarımlarınızı herkese açık hale getirebilirsiniz, böylece diğer kullanıcılar bunları kopyalayabilir veya düzenleyebilir ve buradan faydalanabilir, ayrıca bu Uzaktan kumandalı Ev otomasyonu için tüm Devre ve PCB düzenlerimizi halka açık hale getirdik .
Aşağıda, EasyEDA'dan PCB düzeninin Üst katmanının Anlık Görüntüsü verilmiştir, 'Katmanlar' Penceresinden katmanı seçerek PCB'nin herhangi bir Katmanını (Üst, Alt, Üst ipek, alt ipek vb.) Görüntüleyebilirsiniz.
PCB Örneklerini Çevrimiçi Hesaplama ve Sipariş Etme:
PCB tasarımını tamamladıktan sonra, sizi PCB sipariş sayfasına götürecek olan Fabrikasyon çıktısının simgesine tıklayabilirsiniz. Burada PCB'nizi Gerber Viewer'da görüntüleyebilir veya PCB'nizin Gerber dosyalarını indirebilir ve bunları herhangi bir üreticiye gönderebilirsiniz, ayrıca doğrudan EasyEDA'da sipariş etmek çok daha kolay (ve daha ucuz). Burada sipariş etmek istediğiniz PCB sayısını, kaç tane bakır katmana ihtiyacınız olduğunu, PCB kalınlığını, bakır ağırlığını ve hatta PCB rengini seçebilirsiniz. Tüm seçenekleri seçtikten sonra, "Sepete Kaydet" e tıklayın ve siparişinizi tamamlayın, ardından PCB'lerinizi birkaç gün içinde alacaksınız.
Bu PCB'yi doğrudan sipariş edebilir veya bu bağlantıyı kullanarak Gerber dosyasını indirebilirsiniz.
PCB siparişi verdikten birkaç gün sonra PCB'leri aldık. Aldığımız panolar aşağıda gösterilmektedir.
PCB'leri aldıktan sonra gerekli tüm bileşenleri PCB üzerine monte ettim ve nihayet IR Uzaktan Kumandalı Ev Otomasyonumuzu hazırladık, bu devreyi makalenin sonundaki tanıtım videosunda çalışarak kontrol edin.