
Peter Holmes
0
3629
346
Haberiniz olsun - Ev ofisiniz için yüksek teknolojili koruma veya “atölye” (Tamam, beni aldın, aslında bir zindan / oyun odası) Çocukların çözemeyeceğini mi? Seni koruduk. Orada olduğunuzu otomatik olarak algılayan ve olmadığınızda kilitleyen bir DIY akıllı kilit oluşturalım.
O nasıl çalışır? KİMSE BİLMİYOR! Veya daha spesifik olarak, Bluetooth.
Kavram
Akıllı telefonunuz sürekli olarak kendisini dış dünyaya açıklayan güçlü bir cihazdır; Bunu yapmanın bir yolu Bluetooth.
Keşif modunda, benzersiz bir kimlik numarası yayınlar - ancak özel olarak kendisinin keşfedilmesine izin vermese bile, bu adresin ping yapmaya çalışabileceğini bilen herhangi bir şey. Bir yanıt duyulursa, menzil içinde olup olmadığını gösterir..
Akıllı telefonunuzun kapsama alanı dışında olduğu zamanlarda sürekli aramaya devam etmek için Bluetooth adaptörlü bir Ahududu Pi ayarlayacağız ve röle devreye girip kapıyı kilitleyecektir..
İhtiyacın olacak
- Ahududu Pi - CPU yoğun bir iş olmadığından herhangi bir model çalışmalıdır, ancak daha eski bir model B kullanıyorum ve GPIO çıkışları modelinizde biraz farklı olabilir. Aşağıdaki pano modundaki bölüme bakınız. Ayrıca, kablolu bir Ethernet bağlantısı veya Wi-Fi yapılandırması gibi bazı temel özelliklere de ihtiyacınız olacak. Ahududu Pi'nizde Kablosuz Ağı Kurma Ahududu Pi'nizde Kablosuz Ağı Kurma Neredeyse her Raspberry Pi projesi bir ağ bağlantısı gerektirir ve önemli ölçüde esneklik kazanılabilir Ethernet portunu kablosuz bir USB dongle lehine yoksayarak. ; artı SD kart ve mikro USB güç kablosu.
- Bluetooth USB adaptörü. Adafruit, Bluetooth 4.0 BLE modülünün çalışıp çalışmadığını onayladı (Bluetooth 4.0 nedir? Bluetooth 4.0 Mobil Bağlantının Geleceğini Nasıl Şekillendiriyor? Bluetooth 4.0 Mobil Bağlantının Geleceğini Nasıl Şekillendiriyor? Bluetooth, cihazın teknik özellikleri sayfasında unutulmuş bir yıldız.) Sadece bu proje için yeni bir tane satın almadan önce etrafta yattığınız her şeyi test edin. Japonya’da satın aldığım eski bir standart Bluetooth mini adaptör buldum. Aktarım hızları veya bağlantı güvenilirliği umrunda değil, çünkü yaptığımız tek şey bir cihazın canlı ve iyi olup olmadığını görmek için hızlı bir el sıkışma göndermek..
- GPIO koparma kartı (“ayakkabı tamircisi”) ve aktarma kabloları. Doğrudan Pi'deki pinlerden çalışabilirsiniz, ancak her pinte etiketleriniz varsa çok daha kolaydır ve yine de sadece 6 $.
- Röle kurulu. Burada çok çeşitli seçeneklere sahipsiniz ve bir mikrodenetleyici ile kullanılmak üzere tasarlandıysa ve 5 amperde en az 12 volt sürebilirse, her şey işe yarayabilir. Yaklaşık 5 $ için buna benzer bir 4 kanallı genel bir tahta kullandım, ancak nasıl çalışacağınızı bildiğinizi varsayacağım.
- 12 / 24V elektromıknatıs kilidi olsa da, bir elektronik solenoid kilidi de çalışmalıdır. Satın aldığım bir 180kg tutma gücüne sahip ve yaklaşık 35 $ için montaj plakaları ve talimatları ile birlikte geliyor.
- 12 / 24V güç kaynağı. Mıknatıs kilidinin ayrı bir güç kaynağı olmalıdır - ne yaparsanız yapın, Pi için gücü kesmeye çalışmayın..
- Lock.py Python uygulaması, ancak ilerledikçe bunu yazacağız.
Bluetooth ile çalışmak
Bluetooth bu projenin merkezinde yer almaktadır, bu nedenle biraz Bluetooth desteği yükleyerek başlayabilir ve adaptörümüzü test edebilirsiniz. Bunu doğrudan Pi'den veya SSH'den uzaktan yapabilirsiniz (SSH içine Windows'u nasıl ayarlayacağınızı Pi nasıl ayarlayabilirsiniz Pi SSH ile Başsız Kullanım için Ahududu Pi'nizi Ayarlama SSH ile Başsız Kullanım için Ahududu Pi'nizi Kurma Ahududu Pi kabul edebilir Yerel bir ağa bağlanıldığında SSH komutları (Ethernet veya Wi-Fi ile), kolayca kurulmasını sağlar. SSH’nin faydaları günlük gösterimi üzmenin ötesine geçiyor…).
sudo apt-get yüklemek bluez python-bluez
Zaten yapmadıysanız, dongle'ınızı yerleştirin ve bildirdiği şeye bir göz atalım.
hcitool dev
Çıktıda listelenen bir şey varsa, gitmeye hazırsınız. Daha sonra yakındaki Bluetooth cihazlarını yoklamak için bir Python betiği kullanacağız ve benzersiz cihaz adresini alacağız. Bunu her cihaz için sadece bir kez yapmamız gerekiyor..
https://raw.githubusercontent.com/karulis/pybluez/master/examples/simple/inquiry.py python query.py
Eğer görürsen “0 cihaz bulundu”, uyumlu bir USB Bluetooth donanım kilidiniz yok veya akıllı telefonunuz keşfedilemez. Yine de umutsuzluğa kapılma: iPhone'umdaki Bluetooth ayarları sayfasını keşif moduna sokmak için açmam gerektiğini öğrendim, sonra bu oldu:
Harika, şimdi algılama işlemini yapan yazılımımızın ilk aşamasını oluşturalım. Adlı bir Python uygulaması oluşturun. detect.py, ve Nano ile aç..
nano tespit.py
Bu örnek kodda yapıştırın:
#! / usr / bin / python gerçek zamanlı olarak bluetooth içe aktarma süresini alırken: "Kontrol Ediliyor" + time.strftime ("% a,% d% b% Y% H:% M:% S", time.gmtime ()) result = bluetooth.lookup_name ('78: 7F: 70: 38: 51: 1B ', zaman aşımı = 5) eğer (sonuç! = Hiçbiri): "Kullanıcı hediyesi" başkasını yazdır: "aralık dışı kullanıcı" time.sleep 10)
ve aşağıdaki satırı Bluetooth cihaz adresinizle ayarlayın:
sonuç = bluetooth.lookup_name ('78: 7F: 70: 38: 51: 1B ', zaman aşımı = 5)
Basın CTRL-X ve Y kapatmak ve kaydetmek için. Aynı kodu çalıştırın ve böyle bir şey görürsünüz:
Daha önce Python'a hiç dokunmamış olsanız bile, kodun anlaşılması çok kolay olmalıdır: her 10 saniyede bir belirli bir Bluetooth cihazı taraıyor ve bulunup bulunmadığına bağlı olarak farklı bir mesaj yazdırıyor. Menzil içinde ve dışında hareket etmeyi simüle etmek için telefonunuzdaki Bluetooth'u değiştirin (muhtemelen yaklaşık 4m). Taramalar arasındaki süreyi kısaltabilir veya artırabilirsiniz, ancak 10 saniyenin, kapının kilidinin açılmasını beklemek zorunda kalması için makul bir süre olduğunu hissettim..
Eklemeliyim ki, bunu yapmanın güç tüketimini bilmiyorum, ancak bir cihaza daha fazla ping atmanın mutlaka daha fazla güç tüketeceğini varsayardım. Testte belirgin bir performans sorunu görmedim, ancak pil ömrü sizin için ciddi bir sorunsa, ofisinizde tarama döngüsünü etkinleştiren ve devre dışı bırakan bir anahtar kullanmayı düşünün, bu nedenle içeri girdiğinizde kilidi duraklatabilirsiniz sistemden çıktıktan sonra taramayı yeniden etkinleştirin..
Tebrikler, artık menzil içinde olduğunuzu bilen bir Python uygulamanız var, bu yüzden hareket etmeye başlayabiliriz..
GPIO Kurulu Modları
Devam etmeden önce, hangi tahta modunu kullanacağınızı bulmanız gerekir. Doğru ya da yanlış cevap yoktur, bu sadece hazır bilgi pin numarasını veya sanal GPIO pin numarasını belirtmenizi etkiler..
Varsayılan değer, hazır bilgi pin numarasını kullanmaktır.“tahta modu”), sol alt kısımdaki pim 1 ile başlayan (sağdaki USB bağlantı noktalarıyla Pi'ye bakıyorsanız). Pim 2 sadece bunun üstünde.
Ancak, bir GPIO kopması varsa (“ayakkabı tamircisi”) yönetim kurulu, sahip olduğunuz etiketleri, alternatif bir modda “BCM” (Broadcom SOC kanalı) ve genellikle numarayı ekleyen GPIO veya P ile yazılır. Kesinlikle bir GPIO kopmasına ihtiyacınız yok - bu sadece işleri kolaylaştırıyor. Ara kartınız yoksa ve bir tane satın almak istemiyorsanız, bu diyagramı kullanın:
RaspberryPi.org'dan ahududu Pi modeli A ve B pinout diyagramı
Orijinal B modelinin revizyon 1, revizyon 2 ve B + ve Pi2 modellerinin hepsinin farklı pinlere sahip olduğuna dikkat edin. Anakartınıza uygun bir diyagram için bu StackExchange sorusuna bakın..
Bu proje kodunda, sahip olduğum Adafruit breakout panosuna karşılık gelen BCM GPIO numaralandırma sistemini kullanıyorum. Değişmez pin modunu kullanmak istiyorsanız küçük değişiklikler yapılması gerekir..
Röle içinde tel
Koparma panosunu takın, 1 ve 2 numaralı pinlerden gelen telin (Pi'nizin köşesindeki olanlar) koparmada 3v3 ve 5V0'a bağlandığından emin olun. Bunu kontrol etmek için bir voltaj test cihazı çıkarmak isteyebilirsiniz..
Devam etmeden önce Raspberry Pi ile özel rölenizi başka birisinin kullanıp kullanmadığını kontrol edin (veya önceden çalıştığını bildiğiniz bir tanesini bulun). Bazılarının aktif hale getirilmesi için 5V gerekebilir - ancak RPi GPIO çıkış pinlerinde sadece 3.3V sağlayabilir. Şans eseri, kullanıyorum bir 3.3V ile mutlu, bu yüzden herhangi bir ek devreye ihtiyacım yoktu, sadece 5V0 - VCC, GND den GND ye, ve İlk röle girişi için GPIO pin 23.
GPIO'yla ilgili önceki dersim GPIO'ya Başlarken Ahududu Pi'de GPIO'ya Başlarken Ahududu Pi'de Başlarken Arduino havalı olsa da, ellerinizi bir Ahududu Pi'ye sokana kadar bekleyin - bunlar muhteşem. Tamamen işlevsel bir bilgisayar olmasının yanı sıra, aynı zamanda…… gerek duyduğunuzda 3.3V'ı tam 5V'ye ölçeklemek için bir transistör devresinin nasıl bağlanacağını gösterdiler (aslında, bu eğitim için aynı röle kartını kullandım, ancak Anlaşılan 5V'ye ihtiyacım yoktu..
Elektromıknatısa henüz gerek yok, röle patladığında sesli bir tık sesi duyabildiğiniz için.
Şimdi, GPIO portları ile etkileşime geçmek için bazı kodlar alalım..
Her şeyin limanlar üzerinde çalıştığını doğrulamak için Python dışında test yaparak başlayacağız. Bazı yararlı komut satırı araçları sağlayan wiringPi'yi yükleyin.
git klon git: //git.drogon.net/wiringPi cd wiringPi ./build
Kurulduktan sonra GPIO pin 23'ü bir çıkış olacak şekilde yapılandırın.
GPIO -G modu 23 çıkışı
Şimdi, onaylamak için tüm bağlantı noktalarını hızlıca tarayın
gpio -g okuyucusu
Buna benzer bir şeye sahip olacaksınız, ancak sizinki daha fazla GPIO iğnesi olduğundan B + veya Pi2 modelinde daha uzun olabilir:
Bu başlangıçta biraz kafa karıştırıcı olabilir, ancak masa ortadan ikiye bölünmüş ve sütun sırası her iki tarafta tersine çevrilmiştir. En solda ve en sağda BCM pin numarasıdır. 23'ü kullandığımızdan, şimdi listelenen modu OUT (Çıkış) olarak görmelisiniz. Bu, herhangi bir noktada tüm iğnelerinizde neler olup bittiğine dair iyi bir fikir edinmek için faydalı bir komuttur..
Pimi yüksek veya alçak yazmak için, sadece
gpio -g 23 yaz 1 gpio -g 23 yaz 0
Umarım, rölenin doğru bir şekilde kablolanmasını sağladıysanız, açıp kapatacağınızı duyarsınız. Aksi takdirde, kablo bağlantısını bulana kadar devam etmeyin. Unutmayın, röleyi etkinleştirmek için daha yüksek bir gerilime ihtiyacınız olabilir..
Röleyi ve GPIO'nun çalıştığını doğruladıktan sonra GPIO için Python modüllerini ekleyin.
sudo apt-get kurulum python-dev python-rpi.gpio
Şimdi, telefon algılandığında röleyi açmak veya kapatmak için Python uygulamamızı değiştirelim. Son kodu bu Gist'te bulabilirsiniz. Varolanı kopyala detect.py yeni bir lock.py, ve aşağıdaki içe aktarma ve kurulum komutlarını ekleyin:
RPI.GPIO'yu GPIO olarak al GPIO.setmode (GPIO.BCM) RELAY = 23 GPIO.setup (RELAY, GPIO.OUT)
IF ifadesinde, röleyi etkinleştirmek veya devre dışı bırakmak için bir komut ekleyin. Rölenizin düşük veya yüksek bir sinyal ile çalışabileceğini unutmayın, bu nedenle testten sonra buna göre ayarlayın.
GPIO.output (RÖLE, 1)
Bu yeni sürümü çalıştırmak için komutu ile sudo - GPIO'ya erişim kök ayrıcalıkları gerektirir.
Bağlamak
Rölenin yakınlık sensörünüzle ateş ettiğini onayladıktan sonra, elektromıknatıs kilidinizi ekleyin. Röle tarafında, 12V pozitifi COM (ortak) etiketli terminale, ardından elektromıknatıstan NO terminaline pozitif güç girişine getirin (normalde açık, yani bu normalde ortak terminale bağlı değildir ancak röleyi etkinleştirdiğinizde olacaktır.).
GND terminalindeki güç kaynağından ve elektromıknatıstan toprağa katılın.
Kilidi ile birlikte verilen montaj talimatlarına bakın; Kapının oldukça kalın olması gerekiyor ve kilidin açılmasını istediğiniz taraftan açılırsa daha kolay. Maden tam tersiydi, bu yüzden kapı kalınlığını arttırmak için L şeklinde montaj dirseğine ve ek bir tahtaya ihtiyacım var.
İyileştirmeler
Bu benim için diğer projelerle geliştirmem ve gerçekten sadece orada olmadığımda meraklı gözlerimi ofisimden uzak tutmak için bir konsept kanıtıydı - kusursuz bir güvenlik sistemi olarak tasarlanmamıştır. Bunun için, kesilme durumunda gücün akmasını sağlamak için yedek bir aküye ihtiyacınız olacaktır..
Tabii ki, eğer biri evinize girerse ve gücünüzü kesmekle zorlanıyorsa, muhtemelen sıradan bir hırsızdan ziyade sizi öldürmek üzere olan bir psikopat olma sorunu daha büyüktür. Ayrıca elektronik olana ek olarak fiziksel bir sürgü kilidi ve gerçekten büyük bir çubuk isteyebilirsiniz.
Elbette, Bluetooth kullanan bu yakınlık algılama tekniği sadece otomatik bir kapı kilidiyle sınırlı değildir - eve geldiğinizde garaj kapınızın açılmasını tetiklemek veya kapıya girmeden önce ev sinema sisteminizi açmak için de kullanabilirsiniz..
Sence hangi özelliği eklemeliyim? Bunu yapmakta herhangi bir problem yaşadın mı? Yorumlarda bana haber verin, size yardımcı olmak için elimden geleni yapacağım.!