Kablosuz ve Dokunmasız 220V Lamba Kontrol

220V lambalarınızı Wifi ile kablosuz olarak telefon yada pc den kontrol edebilirsiniz. Tabii ki duvarda bir lamba kontrol anahtarınız olacak. İçinde de ESP8266-01 olacak. Ayrıca mekanik anahtardan kurtulayım daha şık görünüm olsun diyorsunuz. 1. seçenek kapasitif anahtar olabilir. Anahtara sadece dokunursunuz. 2. seçenek ise cisim algılayan sensör koyup dokunmadan algılanması.

DİKKAT : Bu sensör Güneş ışığı olan yerlerde kullanıldığında problem yaratıyor. Bundan dolayı iyileştirilmiş devreyi kontrol etmenizi tavsiye ederim. Güneş size sorun olacaksa. Bu sayfayı ziyaret ediniz.  
Burada bir uyarı yapmak istiyorum. 220V izolasyonsuz devre ile denediğimde elimdeki kondansatörler ile 100ma civarı verebiliyordu. ESP-01 modül ilk anda daha fazla akım çektiğinden dolayı gerilim sorunu olmaktaydı. Daha fazla olabilir mi? Evet tabii ki daha fazla verebilecek şekilde ayarlanabilir. Fakat bu tip devreler hem büyük olacak hem de izolasyonsuz olduğundan tehlikeli olacaktır.

220V devre güvenilir bir devre olmadığından, SİZLERE TAVSİYEM PİYASADAKİ 5v LUK USB ŞARJ ALETLERİNİN İÇ KISMINI KULLANIP, 3.3V luk regüle entegresini takmanız ve kullanmanız. Daha güvenli olacağını düşünüyorum. Çünkü çıkışları izolasyonlu olacaktır.
( Çok ucuz olanlardan emin olamazsınız. izolasyon olmayabilir.) Ucuz ve en az 200ma civarı verebilecek bir adaptör olabilir.

ESP8266-01 modül, NODEMCU olarak kullanılmıştır. Bu uygulamada GPIO-0 daha önceki yazımda anlattığım TRIAC kontrol devresindeki MOC3021 opto diyak entegresini kontrol etmektedir.

Bu devrede, istersek ESP-01 in GPIO-0 çıkışını direkt kullanabiliriz. Kullandığım devrede transistör ile kontrol ediyorum. Sebep, GPIO-0 pini kontrol edilirken led ara sıra da olsa titreşim yapmaktaydı. Belki gerilim sorunu olabilir, fakat emin olmak için transistör kullandım. Bu şekilde kullanırken stabilize etmek için 10K pull down direnç ve küçük bir kondansatör konuldu.
IR modülün çalışma şekli ise, cisim yaklaştığında 0 yani LOW seviyesi olur. Normalde 1 seviyesindedir. Bizimde programımızda GPIO-2  ucu bu duruma göre düzenlendi. GPIO-2 ucu kesme olarak kullanılırken, 1 seviyesinden 0 seviyesine düşerken devreye girer ve buton basılmış gibi lambayı yakar. Aynı şekilde tekrar elimizi yaklaştırdığımızda, lambayı söndürür. Toggle dediğimiz çalışma sistemine göre çalışarak, Sensör her aktif olduğunda GPIO-0 ucu çıkış durumunu değiştirir. Lamba kontrol edilmiş olur. ( Burada dikkat etmemiz gereken bir durum var. Bu sensör normal ışık altında ve güneşli bir odada sorun yaratmazken, güneş ışığının sensör üzerine direkt geldiği yerlerde ise sorun yaratmaktadır. Bu sensörü kullanacaksanız buna dikkat edin)

Devremizin giriş bölümü için daha güvenilir olan izolasyonlu usb şarj aletlerini kullanabilirsiniz ya da izolasyonlu küçük devreler satın alabilirsiniz. Burada elde edilen 5V gerilim, LM1117 3.3V regüle entegresi kullanılarak 3.3V elde edilmiştir. Triyak devresi de daha önce anlatılan yazıda ki devrenin aynısıdır. Burada sadece lamba kullanılacağı için devrede snubber devresi iptal edilmiştir.

Şemamız bu şekildedir. Ayrıca Triyak bölümünü de yukarıdaki şema olarak düşünebilirsiniz. 

Buraya kadar devreden bahsettik. Şimdi ise ESP8266-01 içerisine koyacağımız programdan bahsedelim.
Modülü, Nodemcu olarak çalıştırmak için öncelikle nodemcu sisteminin kurulması gereklidir.
( ESP8266-01 modülleri ilk geldiklerinde AT komut setiyle kontrol edilebilecek durumda gelir. Bu tip bir sistemi arduino ile rahatlıkla kullanabilirsiniz. ) Nodemcuya çevirmek için içindeki sistemin değiştirilmesi gerekir.
Bu işlem kolay bir işlemdir. Buradaki yazımda bu işlemi nasıl yapabileceğiniz, ayrıntılı anlatılıyor.  

Nodemcu sistemini yükledikten sonra aşağıda görmüş olduğunuz programı isim.lua olarak bir txt dosyasına kayıt yapıp LUALOADER programıyla kolaylıkla modül’e yollayabilirsiniz. Burada çalışmalarınızı bilgisayar ile birlikte seri port üzerinden yaptıktan sonra ve çalıştığına emin olduktan sonra, modülün enerjisi kesilip geldiğinde, kendi başına çalışabilmesi için dosya ismini init.lua yapıp, yüklemeniz gerekir. Bu şekilde yaptığınızda artık enerji kesilip gelse bile ESP82266-01 modülü kendi başına çalışmaya başlayacaktır. ( Bu arada program hata yaptı düzeltmek istiyorsunuz diyelim. init.lua  dosyasının çalışmasını durdurmak zorundasınız. Bundan dolayı Nodemcu içerisindeki init.lua programını Lualoader programı ile silip aynı programı başka isimde kaydedip yeniden çalıştırabilirsiniz.)

Programa bakacak olursak en baştaki satırlarda softap yazan yer, wifi ismi ve şifresidir. Bu deneme olduğundan soft ap ile çalışabilirsiniz. Öncelikle TEST isimli wifi ağına belirtilen şifre ile bağlanıp, hem telefon hem de pc üzerinden google adres çubuğuna http://192.168.4.1 yazmanız yeterlidir. ESP01 modül size cevap verecek ve bir web sayfası açılacaktır. buradaki butonlara basarak lambayı kontrol edebilirsiniz.

ESP-01 modülün gönderdiği web sayfası:

ESP-01 içerisindeki LUA program. 

print ("basladi")
inInt = false

wifi.setmode(wifi.SOFTAP)
wifi.ap.config({ssid="test",pwd="12345678"})
gpio.mode(3, gpio.OUTPUT)
gpio.mode(4, gpio.INT)
inInt = false
gpio.trig(4, "down", btnINT)
gpio.write(3, gpio.LOW)
kont=0
function btnINT()
 --   if inInt then                   -- don't allow interrupt in interrupt
 --       print ("geri")
--		return
 --   else 
 --       inInt = true
 --   end
	print ("kesmede",kont)
    
	if (kont==0) then
    gpio.write(3, gpio.HIGH)
	kont=1
	
	else
    gpio.write(3, gpio.LOW)
	kont=0
	end
	tmr.delay(1000000)               -- 100ms debounce
	print (kont)
    inInt = false                   -- all done, allow interrupts again
    end -- btnINT

srv=net.createServer(net.TCP)

srv:listen(80,function(conn)
print ("server acildi")	
    conn:on("receive", function(client,request)
        
		local buf = ""
        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP")
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP")
        end
        local _GET = {}
        if (vars ~= nil)then
            for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
                _GET[k] = v
            end
        end
		
        buf = buf.."<h1> ESP8266-01 LIGHT CONTROL </h1> <form src=\"\"> <button type=\"submit\" button style=\"width:200px; height:100px;border: none; border-radius: 50%; font-size: 32px; margin: 30px 50px; color:white; background-color: GREEN;\" name=\"pin\" value=\"ON\" >LIGHT ON</button> </form>"
        local _on,_off = "",""
        if(_GET.pin == "ON")then
              _on = " selected=true"
              gpio.write(3, gpio.HIGH)
			  kont=1
        elseif(_GET.pin == "OFF")then
              _off = " selected=\"true\""
              gpio.write(3, gpio.LOW)
			  kont=0
        end
		
		
        buf = buf.."<form method=\"get\"> <button type=\"submit\" button style=\"width:200px; height:100px;border: none; border-radius: 50%; font-size: 32px; margin: 30px 50px; color:white;background-color: #f44336;\" name=\"pin\" value=\"OFF\" >LIGHT OFF</button> </form>"
        client:send(buf)
		
    end)
	
    conn:on("sent", function (c) c:close() end)
	

end)
gpio.mode(4, gpio.INT)
inInt = false
gpio.trig(4, "down", btnINT)

Ağ ismi ve şifre en üstten 5. satırdadır.
12-32 arası GPIO-2 IR modül için kesme fonksiyonu. Buton kontrolü için. ( Sensörden gelen bilgiyi alır) , sonrası ise kablosuz çalışmaya aittir. Bir web sayfası açar ve web sayfanızda bastığınız butonun cevabını alarak işlem yapar.
web sayfasının açıldığı 2 satır var.
52. satır ve 65. satır. Burada dikkat ederseniz işaretleri için arduinoda olduğu gibi bir yazılım söz konusu. Kendi web sitenizi yapıp buraya koymak isterseniz ve düzenleme yapmazsanız bu işaretler hata verdirir.
Neden 2 satır. Öncelikle örnek program bu şekilde yapılmış olduğundan diyebilirim. Ayrıca buffer size denilen bir sayı vardır. Bilgiyi alırken ve gönderirken bir önbellekte tutarak yollar. kesintisiz gitmesi için. Bu sayıyı aşarsanız, program ya hatalı çalışır ya da hata verir hiç çalışmaz. Büyük ihtimalle sebep de budur.
Bütün web sayfasının ” işaretlerini ayarlamak sorun olacaktı. Neyse ki birileri ” işaretinin yazılmasına çözüm bulmuş. Buradan dönüştürme sayfasına girebilirsiniz.

HTML kodumuzu görelim.
Bu kodu bir deneme.html diye sayfaya kayıt ederseniz ve google ya da başka internet sayfa göstericileriyle çağırırsanız, web sayfasını ve butonları görebilirsiniz. Bu html kodunu ESP ve arduinoda kullanabilmek için dönüşüm sayfasına gidip dönüştürmelisiniz. Çünkü ” işaretleri arduino daki gibi LUA programında da sorun yaratmaktadır.
HTML programı:

<h1> ESP8266-01 LIGHT CONTROL </h1>
<form src="">
<button type="submit" button style="width:200px; height:100px;border: none; border-radius: 50%; font-size: 32px;  margin: 30px 50px; color:white; background-color: GREEN;" name="pin" value="ON"  >LIGHT ON</button>
</form>
<form method="get">
<button type="submit" button style="width:200px; height:100px;border: none; border-radius: 50%; font-size: 32px;  margin: 30px 50px; color:white;background-color: #f44336;" name="pin" value="OFF"  >LIGHT OFF</button>
</form>

Yukarıdaki gibi bir web sayfası görmeniz gerekiyor.

7 Comments

  1. Hocam içerik için çok teşekkürler.Bir sorum olacaktı.Böyle devre şemalarında bazı elemanların niye seçildiği veya neden o konumda koyulduğunu anlayamıyorum.Mesela Base ile GND arasında neden paralel RC devresi var?Değerler nasıl seçiliyor?Devrede R2,R3,R13 neden var ve değerleri nasıl belirleniyor? Bir de Esp deki GPIO 0 pini 0 a çekildiğinde D1 -R2 düğüm noktasındaki gerilim 0V için mi optokuplör devesinde akım geçmez ve triyak devresi çalışmaz?Teşekkürler.

    1. Öncelikle şunu söyleyeyim esp01 modülünde GPIO-0 özel bir konumdadır. burasını GND ye bağladığınızda ve enerji verdiğinizde esp modülü yeniden programlanacak diye düşünür ve programlama moduna girer. bundan dolayı burada bazı tedbirler alınmak zorunda kalındı. şayet bu diyot ve diğer dirençler olmasa gpio-0 transistör beyz üzerinden şase oluyordu. bu da programlama moduna girmesine sebep oluyordu. bundan dolayı gpıo-0 hep 1 de olması için pullup 10K seçildi. D1 diyoduda GND ye ulaşmasını engelledi. GPIO -0 İçeriden komutla LOW yapıldığında transistörün beyz ucu LOW olacak çalışmayacak. fakat HIGH olduğunda diyot tıkama yönünde çalışacağı için transistörün beyz ucu iletime geçecek kadar gerilime sahip olacak. buradaki c2 ve r14 direnci ise beyz üzerindeki gerilimin stabilitesi içindir. olmasa olur mu olabilir ama küçük parazitler tetiklemeye çalıştırır ya da gerilim düşük olduğu an tetikleme isteseniz de olmayabilir.
      umarım anlatabilmişimdir.

      1. Şurada takıldım hocam GPIO 0 LOW iken Tranzistör base i VCC==>R3 ==> yolu ile tetiklenmez mi?

        1. zaten amaç o. oradaki diyot gpıo-0 low olduğunda devreyi çalıştırsın ama ilk açılışta GPIO-0 low duruma geçip programlama moduna girmesin. ilk anda esp enerji verildiğinde gpio-0 ucunu giriş olarak kontrol edip programlama moduna gireyimmi diye bakıyor. bu aşamada diyot LOW duruma düşmesini engelliyor. sonrasında gpio-0 Çıkış olarak değerlendirildiğinden 1 ve 0 çıkışlarına göre transistör ve opto çalışıyor.

  2. Merhaba, çalışmalarınızdan faydalanıyorum teşekkür ederim öncelikle.
    Bir sorum var yardımcı olur musunuz?
    bağımsız ve devresiz ır alıcı ve verici ile bir sinyali iletebilir miyim? Mesela 2 metre mesafede bir tarafta devresiz ır verici diğer tarafta bundan gelen sinyali yakalayıp devreye ileten devresiz ır alıcı kullanabilir miyim?

    1. Sorunuzu şöyle de cevaplayabilirim sadece IR transfer yapmayı düşünüyorsanız IR kulaklık devrelerine bakın. ses alıcı ve verici devrelerine bakın. programlamadan bu şekilde de veri gönderebilirsiniz.

  3. devresiz dediğinizde programlama olmadan diye algılıyorum. Zira Alıcı ledi çalıştırmak için bile devre lazım.
    Elbette alıcı gözün ucundaki uyarıyı alarak bir kumandadan bastığınızda bir sinyal elde edersiniz bunu da Bir kontrol olarak kullanabilirsiniz. Bir alıcı led ile yaparsanız kumandayı ve güneş ışığını hisseder ve yanlış tetikleme yapar. Sadece kumanda sinyalini alacak 36khz ve 38khz alıcı gözler var. bunu kullanırsanız basit olarak kumandayı algılarsınız güneş pek etkilemez. Fakat bu kumandanın her tuşunda aynı şekilde tetiklenir.
    Şayet her tuşta farklı bir çıkış versin diyorsanız kumanda kodunu çözmeniz gerekir. bu kez de arduino kullanmanız gerekir. Ya da alıcı göz entegreleri var. bunları kullanabilirsiniz. Sanırım PT serisi IR alıcı devreleri piyasada hala mevcuttur. Mesela bu entegre programlı değildir ve 4 kanal çıkışa sahiptir. Tabii ki uygun alıcı göz olursa. size 4 kanal verebiliyormuş. sanırım örnek devreleri bulabilirsiniz. https://pdf.direnc.net/upload/pt2272-datasheet.pdf
    Fakat iyice örnekleri inceleyin. Hangi tip kumandalara göre çalışır bunu belirleyin. Bazı kumandalar rc5 bazıları sony bazıları ise diğer protokoller kullanır. Bunlar ile ilgili yazım bu sitede mevcut.
    kolay gelsin.

Sinan için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak.