İçindekiler:
- Adım 1: Parçaları Toplayın
- 2. Adım: Sarf Malzemeleri
- 3. Adım: Kasayı Boyutlandırın
- Adım 4: DC-DC Dönüştürücü Kablosu
- Adım 5: Gücü Cihazlara Bağlayın
- Adım 6: Kablo Röle Modülü Girişleri
- Adım 7: IMP Güç Jumper'ı
- Adım 8: Kablo Kapısı Durum Girişleri
- 9. Adım: Bir Kasayı Yazdırın veya Satın Alın
- Adım 10: Kasanızı Süsleyin
- Adım 11: Teller için Delik Delme
- Adım 12: Bağlantı Kablolarını Hazırlayın ve Kurun
- Adım 13: Bağlantı Kablolarını Yönlendirin
- Adım 14: Bileşenleri Monte Edin
- Adım 15: Bağlantı Kablolarını Kapatın
- Adım 16: Vakayı Kapatın
- Adım 17: Gate Operator'a yükleyin
- Adım 18: Yardımcı Röle Modunu Ayarlayın
- Adım 19: IMP Aracısı ve Cihaz Kodu
- Adım 20: Web Hizmeti PHP Kodu
Video: WebApp Kontrollü Kapı Operatörü Eklentisi (IoT): 20 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
Birçok insanın gelip gitmesi gereken kapılı bir alana sahip bir müşterim var. Dışarıda bir tuş takımı kullanmak istemediler ve sadece sınırlı sayıda anahtarlık vericileri vardı. Ek anahtarlıklar için uygun fiyatlı bir kaynak bulmak zordu. Bu Liftmaster geçit operatörünü özel donanım, web API ve web uygulaması arayüzü ile IoT uyumlu olacak şekilde yükseltmenin harika bir fırsat olacağını düşündüm. Bu, yalnızca toplu erişim sorununu çözmekle kalmadı, aynı zamanda ek işlevsellik de açtı!
Yukarıdaki son fotoğrafta neredeyse bir yıldır kilitli poşette çalıştırdığım test ünitesi var. Yükseltme zamanının geldiğini düşündüm!
Bu, burada listelenen tüm kod, donanım bilgileri ve tasarımlarla tam olarak işleyen bir çözümdür.
Tüm proje dosyaları da GitHub'da barındırılmaktadır: github.com/ThingEngineer/IoT-Gate-Operator-Addon
CodeIgniter WebApp arabiriminin bir örneği burada barındırılmaktadır: project.ajillion.com/gate Bu örnek bir canlı kapıya bağlı değildir, ancak kapılar üzerinde çalışan tam arabirim ve koddur (eksi bazı güvenlik özellikleri).
--
Daha da fazla entegrasyon için Electric Imp için IFTTT kitaplığını kullanabilirsiniz.
Adım 1: Parçaları Toplayın
- En az 4 GPIO'ya sahip bir Elektrikli IMP'ye ihtiyacınız olacak, IMP001'i bir Nisan ayı panosuyla kullanıyorum.
- Kaynak voltajını 5V'a düşürmek için bir regülatör. DC-DC Buck Converter Step Down Modülü kullanıyorum. Amazon'dan eBoot'un MP1584EN sürümü.
- IMP'lerin çıkışıyla çalışacak ikili (veya daha fazla) röle modülü veya benzer anahtarlama cihazı. Bunu Amazon'dan JBtek 4 Kanal DC 5V Röle Modülü kullanıyorum.
- 4 telli vidalı terminal. Bunu Amazon'dan 5 Adet 2 Satır 12P Tel Konnektör Vidalı Terminal Bariyer Bloğu 300V 20A kullanıyorum.
2. Adım: Sarf Malzemeleri
Ayrıca şunlara da ihtiyacınız olacak:
- Bir 3D yazıcıya veya küçük bir proje kutusuna erişim
- Kasa kapağı için yaklaşık 4 mm x 6 mm 4 küçük vida
- Bağlantı teli
- Tel kesiciler
- Tel striptizci
- Küçük tornavidalar
- Havya
- Sıcak tutkal veya silikon
- Zip bağları
3. Adım: Kasayı Boyutlandırın
Hangi boyutta kasaya ihtiyacınız olacağını belirlemek için parçalarınızı düzenleyin. Resimdeki gibi bir düzen ile yaklaşık 140 mm genişliğinde, 70 mm derinliğinde ve 30 mm yüksekliğinde bir kasaya ihtiyacım olacak.
Adım 4: DC-DC Dönüştürücü Kablosu
DC-DC dönüştürücü kartının içindeki ve dışındaki güç bağlantıları için 3 çift kırmızı ve siyah bağlantı kablosunu kesin.
- Giriş: 100mm
- IMP'ye çıktı: 90mm
- Röle Modülüne Çıkış: 130mm
Bunları gösterildiği gibi panonuza lehimleyin.
Adım 5: Gücü Cihazlara Bağlayın
- DC-DC dönüştürücünün girişini vidalı terminal bloğundaki iki noktaya bağlayın.
- Kısa 5V çıkış kablolarını IMP'ye lehimleyin.
- Daha uzun 5V çıkış kablolarını röle modülüne lehimleyin.
Adım 6: Kablo Röle Modülü Girişleri
- Röle modülü giriş bağlantıları için 4 x 90 mm kablo kesin. Kodlama yaparken daha sonra kolay referans olması için 4 ayrı renk kullandım.
- Kabloları 1-4 röle modülü girişlerine ve ardından sırasıyla ilk 4 IMP GPIO noktasına (Pin1, 2, 5 ve 7) lehimleyin.
Adım 7: IMP Güç Jumper'ı
IMP'nizi başlangıçta programlarken ve test ederken USB gücünü kullanmanız gerekebilir. Bitirdiğinizde, güç atlama kablosunu BAT tarafına getirdiğinizden emin olun.
Adım 8: Kablo Kapısı Durum Girişleri
- Durum durumu girişleri için 2 x 80 mm kablo kesin.
- Kabloları kalan 2 vidalı terminale bağlayın.
- Sırasıyla IMP GPIO noktalarının (Pin8 ve 9) yanındaki lehim telleri.
9. Adım: Bir Kasayı Yazdırın veya Satın Alın
Bu vaka için. STL veya. F3D'mi GitHub veya Thingiverse'den indirebilirsiniz.
Bir 3D yazıcıya erişiminiz yoksa küçük bir genel proje durumu işe yarayacaktır.
Adım 10: Kasanızı Süsleyin
Çünkü!
Benimkinin üzerine girintili bir metin koydum ve siyah bir kalemle renklendirdim. Maceracı hissediyorsanız, daha da kaygan hale getirmek için akrilik boya, tırnak cilası veya başka bir şey kullanabilirsiniz.
Adım 11: Teller için Delik Delme
Tüm tellerin bir araya geleceği yere yakın kenarda 10-15 mm'lik küçük bir delik açın.
Plastikte temiz, pürüzsüz bir delik için Unibit kullandım.
Adım 12: Bağlantı Kablolarını Hazırlayın ve Kurun
Cihazımızı kapı operatör panosuna takmak için 9 x 5-600 mm kablo kesin.
- 24V güç girişi için 2
- 3 kapı durumu için (2 giriş ve ortak bir zemin)
- 2 açık kapı sinyali için
- 2 yakın kapı sinyali için
Bir matkap kullanarak yukarıda listelenen grupların her birini birbirine çevirin. Bu, her şeyi kolaylaştıracak ve daha iyi görünecek.
Kabloların her birini gösterildiği gibi ilgili terminallere soyun ve bağlayın.
Adım 13: Bağlantı Kablolarını Yönlendirin
Bağlantı kablolarını gösterildiği gibi delikten geçirin.
Adım 14: Bileşenleri Monte Edin
Bileşenleri küçük bir sıcak tutkal veya silikon damlası ile yerleştirin ve monte edin. Bir parçayı çıkarmanız gerekirse çok fazla kullanmayın, sabitlemek için yeterli miktarda kullanın.
Başlangıçta panoları yerinde tutmak için kasayı klipsler/sekmeler ile basmak istedim ama bunu kurmam gerekiyordu ve zamanım yoktu. Kasanıza pano klipleri eklemek hoş bir dokunuş olur.
Adım 15: Bağlantı Kablolarını Kapatın
Bağlantı kablolarını sıcak tutkal veya silikonla kapatın.
Adım 16: Vakayı Kapatın
Bu 3D baskılı kasanın listesinde küçük ~ 4 mm vidalar kullandım. Kir veya nem konusunda endişeleriniz varsa, kapatmadan önce kapak ekleminin etrafına bir silikon damlası veya sıcak tutkal yerleştirin.
Adım 17: Gate Operator'a yükleyin
Ana kartta:
- Röle çıkışı 1'e bağlı iki kabloyu Açık Kapı terminaline asın. (fotoğraflarda kırmızı/kahverengi)
- Röle çıkışı 2'ye bağlı iki kabloyu Kapıyı Kapat terminaline bağlayın. (fotoğraflarda sarı/mavi)
- DC-DC dönüştürücü girişine bağlı iki kabloyu 24V aksesuar güç vidalı terminallerine bağlayın (fotoğraflarda kırmızı/siyah)
Genişletme kartında
- Küçük bir tel parçasıyla birlikte röle ortak vidalı terminallerini köprüleyin
- Ortak topraklamayı röle ortak vidalı terminallerinden birine bağlayın (fotoğraflarda yeşil)
- 2 kapı durum girişini (IMP Pin8 & 9) rölenin normal açık (NO) vidalı terminallerine bağlayın (fotoğraflarda gri/sarı)
Kabloları yönlendirin, düzgün görünmeleri için sıkıştırın ve kasanızı monte etmek veya yerleştirmek için bir yer bulun.
GitHub deposunda barındırılan ek, tam çözünürlüklü fotoğraflar vardır.
Adım 18: Yardımcı Röle Modunu Ayarlayın
Yardımcı röle anahtarlarını fotoğrafta gösterildiği gibi ayarlayın.
Bu, IMP'ye kapının kapalı mı, açılır mı, açık mı yoksa kapanıyor mu olduğunu belirlemek için ihtiyaç duyduğu sinyalleri verecektir.
Adım 19: IMP Aracısı ve Cihaz Kodu
Elektrikli İmp Ajan Kodu:
- Electric Imp IDE'de yeni bir Model oluşturun:
- URL'yi sunucunuzu işaret edecek şekilde değiştirin
// HTTP işleyici işlevi
function httpHandler(req, resp) { try { local d = http.jsondecode(req.body); //sunucu.log(d.c); if (d.c == "btn") { //server.log(d.val); device.send("btn", d.val); cevap.send(200, "Tamam"); } } catch(ex) { // Bir hata varsa, onu yanıt olarak geri gönderin server.log("error:" + ex); resp.send(500, "Dahili Sunucu Hatası: " + ör); } } // HTTP işleyicisini kaydedin http.onrequest(httpHandler); // GateStateChange işleyici işlevi işlev gateStateChangeHandler(data) { // Web hizmetinin URL'si yerel url = "https://projects.ajillion.com/save_gate_state"; // Content-Type başlığını json local headers olarak ayarlayın = { "Content-Type": "application/json" }; // Alınan verileri kodlayın ve yerel gövdeyi günlüğe kaydedin = http.jsonencode(data); server.log(gövde); // Verileri web hizmetinize gönderin http.post(url, headers, body).sendsync(); } // gateStateChange işleyicisini kaydedin device.on("gateStateChange", gateStateChangeHandler);
Elektrikli İmp Ajan Kodu:
- Modelinize bir İmp cihazı atayın
- Donanım pinlerinin bağlı olarak Aliased olduğunu doğrulayın
// Kitaplığı Debouce
#require "Button.class.nut:1.2.0" // gateOpen GPIO pini (aktif düşük) gateOpen için takma ad <- Hardware.pin2; // GateClose kontrolü için diğer ad GPIO pini (aktif düşük) gateClose <- Hardware.pin7; // 'gateOpen'ı dijital 1 (yüksek) başlangıç değerine sahip bir dijital çıkış olacak şekilde yapılandırın gateOpen.configure(DIGITAL_OUT, 1); // 'gateClose'u dijital 1 (yüksek) başlangıç değerine sahip bir dijital çıkış olacak şekilde yapılandırın gateClose.configure(DIGITAL_OUT, 1); // Geçidin hareket ettiğini gösteren GPIO pininin diğer adı (N. O.) gateMovingState <- Button(hardware.pin8, DIGITAL_IN_PULLUP); // Geçidin tamamen açık olduğunu gösteren GPIO pininin diğer adı (N. O.) gateOpenState <- Button(hardware.pin9, DIGITAL_IN_PULLUP); // Geçit durumunu tutmak için global değişken (Open = 1 / Closed = 0) local lastGateOpenState = 0; // Kilitleme Zamanlayıcı nesnesi yerel latchTimer = null agent.on("btn", function(data) { switch (data.cmd) { case "open": gateOpen.write(0); if (latchTimer) imp.cancelwakeup(latchTimer)); latchTimer = imp.wakeup(1, releaseOpen); server.log("Aç komutu alındı"); ara durum "latch30m": gateOpen.write(0); if (latchTimer) imp.cancelwakeup(latchTimer); latchTimer = imp.wakeup(1800, releaseOpen); server.log("Latch30m komutu alındı"); ara durum "latch8h": gateOpen.write(0); if (latchTimer) imp.cancelwakeup(latchTimer); latchTimer = imp.wakeup(28800, releaseOpen); server.log("Latch8h komutu alındı"); "kapat" durumu ara: if (latchTimer) imp.cancelwakeup(latchTimer); gateOpen.write(1); gateClose.write(0); latchTimer = imp.wakeup(1, releaseClose); server.log("Şimdi kapat komutu alındı"); varsayılanı kes: server.log("Düğme komutu tanınmadı"); } }); function yayınAçık() { if (latchTimer) imp.cancelwakeup(latchTimer); gateOpen.write(1); //server.log("Zamanlayıcı serbest bırakıldı gateOpen switch kontağı"); } function releaseClose() { if (latchTimer) imp.cancelwakeup(latchTimer); gateClose.write(1); //server.log("Zamanlayıcı serbest bırakıldı geçidi Kapat anahtar kontağı"); } gateMovingState.onPress(function() { // Röle aktif, kapı hareket ediyor //server.log("Kapı açılıyor"); local data = { "gatestate": 1, "timer": Hardware.millis() }; agent.send("gateStateChange", data); }).onRelease(function() { // Röle serbest bırakıldı, kapı hareketsiz //server.log("Kapı kapalı"); local data = { "gatestate": 0, "timer": Hardware.millis() }; agent.send("gateStateChange", data); }); gateOpenState.onPress(function() { // Röle aktif, kapı tamamen açık //server.log("Kapı açık"); local data = { "gatestate": 2, "timer": Hardware.millis() }; agent.send("gateStateChange", data); }).onRelease(function() { // Röle serbest bırakıldı, kapı tam olarak açık değil //server.log("Kapı kapanıyor"); yerel veri = { "gatestate": 3, "timer": Hardware.millis() }; agent.send("gateStateChange", data); });
Adım 20: Web Hizmeti PHP Kodu
Bu kodu eski bir projeye eklediğim için CodeIgniter çerçevesi için yazdım. Kontrolör ve görünüm kodu, seçtiğiniz çerçeveye kolayca uyarlanabilir.
İşleri basit tutmak için JSON verilerini veri depolama için düz bir dosyaya kaydettim. Günlüğe kaydetmeye veya daha karmaşık verilerle ilgili işlevlere ihtiyacınız varsa, bir veritabanı kullanın.
Bu projede yazdığım ve kullandığım ajax kitaplığı GitHub deposundan indirilebilir: ThingEngineer/Codeigniter-jQuery-Ajax
PHP Denetleyici Kodu:
- uygulama/kontrolörler/projeler.php
- Veri yolunun PHP betiğiniz tarafından erişilebilir olduğundan emin olun, hem konum hem de okuma/yazma ayrıcalıkları.
load->helper(dizi('dosya', 'tarih'));
$veri = json_decode(read_file('../app/logs/gatestate.data'), DOĞRU); switch ($data['gatestate']) { case 0: $view_data['gatestate'] = 'Kapalı'; kırmak; durum 1: $view_data['gatestate'] = 'Açılıyor…'; kırmak; durum 2: $view_data['gatestate'] = 'Aç'; kırmak; durum 3: $view_data['gatestate'] = 'Kapanıyor…'; kırmak; } $last_opened = json_decode(read_file('../app/logs/projects/gateopened.data'), DOĞRU); $view_data['last_opened'] = timespan($last_opened['last_opened'], time()). ' evvel'; //Görünümü Yükle $t['data'] = $view_data; $this->load->view('gate_view', $t); } function save_gate_state() { $this->load->helper('file'); $veri = file_get_contents('php://input'); write_file('../app/logs/projects/gatestate.data', $veri); $veri = json_decode($veri, DOĞRU); if ($veri['gatestate'] == 1) { $last_opened = array('last_opened' => time()); write_file('../app/logs/projects/gateopened.data', json_encode($last_opened)); } } function get_gate_state() { $this->load->helper(array('file', 'date')); $this->load->library('ajax'); $veri = json_decode(read_file('../app/logs/projects/gatestate.data'), DOĞRU); $last_opened = json_decode(read_file('../app/logs/projects/gateopened.data'), DOĞRU); $data['last_opened'] = timespan($last_opened['last_opened'], time()). ' evvel'; $this->ajax->output_ajax($veri, 'json', YANLIŞ); // json verisi gönder, ajax isteğini zorlama } } /* Dosyanın sonu project.php */ /* Konum:./application/controllers/projects.php */
PHP Görünüm Kodu:
Ön uç için Bootstrap kullandım çünkü hızlı, kolay ve duyarlı. Buradan indirebilirsiniz: https://getbootstrap.com (jQuery dahildir)
- app/controllers/gate_view.php
- AJAN KODUNUZU Electric Imp temsilci kodunuzla değiştirin
IoT Gate Operatör Eklentisi IoT Gate Operatör Eklentisi
- Ev
- yönetici
Kapı Mandalını Aç 30 dakika Açık Mandal 8 Saat Açık Şimdi Kapat Kapı Durumu: Son açılan $(document).ready(function(){ resetStatus(); }) function sendJSON(JSONout){ var url = 'https:// agent.electricimp.com/SİZİN-AJAN-KODU'; $.post(url, JSONout); } $("#open_gate").click(function() { var JSONout = '{"c":"btn", "val":{"cmd":"open"}}'; sendJSON(JSONout); $ ("#status").text("Açılıyor…"); }); $("#latch30m_gate").click(function() { var JSONout = '{"c":"btn", "val":{"cmd":"latch30m"}}'; sendJSON(JSONout); $("#status").text("Açılıyor…"); }); $("#latch8h_gate").click(function() { var JSONout = '{"c":"btn", "val":{"cmd":"latch8h"}}'; sendJSON(JSONout); $("#status").text("Açılıyor…"); }); $("#close_gate").click(function() { var JSONout = '{"c":"btn", "val":{"cmd":"close"}}'; sendJSON(JSONout); $("#status").text("Kapanıyor…"); }); function resetStatus() { // Target url var target = 'https://projects.ajillion.com/get_gate_state'; // request var data = { aracı: 'app' }; // Ajax gönderi isteği gönder $.ajax({ url: target, dataType: 'json', type: 'POST', data: data, Success: function(data, textStatus, XMLHttpRequest) { switch(data.gatestate) { case 0: $("#status").text('Kapalı'); ara; durum 1: $("#status").text('Açılıyor…'); ara; durum 2: $("#status").text('Open'); break; durum 3: $("#status").text('Kapanıyor…'); break; varsayılan: $("#status").text('Hata'); } $ ("#last_opened").text(data.last_opened); }, hata: function(XMLHttpRequest, textStatus, errorThown) { // Hata mesajı $("#status").text('Sunucu Hatası'); } }); setTimeout(resetStatus, 3000); }
Önerilen:
IFTTT ile Kablolu Kapı Zilinizi Akıllı Bir Kapı Ziline Dönüştürün: 8 Adım
IFTTT ile Kablolu Kapı Zilinizi Akıllı Bir Kapı Ziline Dönüştürün: WiFi Kapı Zili, mevcut kablolu kapı zilinizi akıllı bir kapı ziline dönüştürür. https://www.fireflyelectronix.com/product/wifidoor
Thrustmaster Warthog Joystick Eklentisi: 5 Adım (Resimlerle)
Thrustmaster Warthog Joystick Addon: merhaba lütfen bana karşı nazik olun.. bu benim ilk talimatım. "warthog" üzerinde birkaç düğmeye ve eksene daha ihtiyacım vardı. joystick, elit tehlikeli oynamak için. bir "yarık" ile joystick ve klavye arasında geçiş yapmak hiç eğlenceli değil; senin o
Basınca Duyarlı Çorap Eklentisi: 18 Adım (Resimlerle)
Basınca Duyarlı Çorap Ataşmanı: Özel ortez seçimi söz konusu olduğunda, ayaklarınızın ihtiyaçları için hangi tür ekin en iyi olduğuna karar vermenize yardımcı olabilecek pek çok güvenilir test seçeneği yoktur. Ve var olan seçenekler neredeyse her zaman özel olarak imb'yi test eder
CiPod: Koklear İmplantlar için Kulaklık Eklentisi: 11 Adım (Resimlerle)
CiPod: Koklear İmplantlar için Kulaklık Eklentisi: Koklear implant mikrofonları kulağın üstüne oturduğundan ve kullanıcı kulak kanalından duymadığından, kullanıcılar geleneksel olarak kulakiçi kulaklık kullanamazlar. Bunlar, kulakiçi kulaklıkları bilateral MED-EL Sonnet koklear implant p
Cep Operatörü Lasercut Kılıf: 3 Adım (Resimlerle)
Cep Operatörü Lasercut Vakası: Teenage Engineering tarafından piyasaya sürülecek olan yeni Cep Operatörleri PO-33 ve PO-35'in heyecanı ile basit "vakamı" paylaşma zamanının geldiğine karar verdim; PO-20'm için yaptığım. Gerçekten çok basit. Aslında o kadar basit ki, basın tarafından yerinde tutuluyor