15
Kas
2021

Python GUI ve seri haberleşme ile Arduino ile led yakma

Bu yazıda Python tkinter kütüphanesi ile hazırlanan bir form üzerinden Arduino’nun 7 numaralı dijital pinine bağlı ledin yanıp sönmesi işlemi gerçekleştirilmektedir.

Malzemeler

  • 1 adet Arduino
  • 1 adet Led
  • 1 adet 220 ohm direnç

Bağlantı şeması

Devrede ledin anot bacağı 220 ohm dirence, direnç de Arduino’ nun 7 numaralı pinine bağlanmıştır. Ledin katot bacağı da doğrudan Arduino’nun GND pinlerinden bir tanesine bağlanmıştır.

Kaynak kod

Led’in yanması ve sönmesi ile ilgili komut Arduino’ya Python arayüzü üzerinden gerçeklen seri haberleşme ile verilmektedir. Bu nedenle Arduino kaynak kodunun setup() fonksiyonunda seri haberleşme Serial.begin(9600);komutu ile başlatılır. Arduino loop() fonksiyonu içerisinde ise seri haberleşmenin açık olduğu durumda bilgisayardan gelen veri dinlenir ve gelen veri 1 ise led pini HIGH, gelen veri 0 ise led pini LOW konumuna geçirilir. Aşağıda Arduino kartında çalışan kaynak kod verilmiştir.

int ledpin = 7;
void setup() {
 Serial.begin(9600);
 pinMode(ledpin,OUTPUT);
}

void loop() {
 if(Serial.available())
  {
  char data = Serial.read();
  if(data == '1')
     digitalWrite(ledpin,HIGH);
  else
   if(data == '0')  
     digitalWrite(ledpin,LOW); 
 }
}

Python’da Arduino ile haberleşmek için import serialkomut satırı ile serial kütüphanesi çağırılır. Seri bağlantıyı açmak için Arduino’nun bağlı olduğu port bilgisi ve Arduino Serial baud rate’e eşit baud rate değeri ile d = serial.Serial("COM3",9600,timeout=1) komut satırı kullanılır. Bu satırdaki COM3 port numarası değişiklik gösterebilir. Arduino kartınızın bağlı olduğu port numarasını öğrenmek için Arduino IDE’nin Araçlar->Port menüsüne bakabilirsiniz.

Python’da tkinter kütüphanesi ile aşağıdaki kod kümesi ile üzerinde iki adet buton (aç, kapat) nesnesi olan bir pencere oluşturulmuş ve bu butonlar ac() ve kapat() fonksiyonları ile Arduino seri portuna 1 ve 0 değerlerini göndermektedir.

Python için kaynak kod:

import serial
import tkinter as tk
from tkinter import *

def ac():
  d.write(b'1')
def kapat():
  d.write(b'0')
  
d = serial.Serial("/dev/cu.usbmodem14201",9600,timeout=1)

pencere=tk.Tk()
butonAc = Button(text="Aç", command = ac).place(x=10,y=10)
butonKapat = Button(text="Kapat", command = kapat).place(x=60,y=10)
pencere.mainloop()

Kaynak kod çalıştırıldığında aşağıdaki GUI oluşturulur ve Arduino 7 numaralı pinine bağlı led butonlar ile kontrol edilir.