Рет қаралды 513
Open Cv Python Arduino Led (Parmaklarımıza göre led yakma)
Open Cv görüntü işleme kullanılarak arduinodaki ledleri yakmayı denedim. Kullandığım programları ve kütüphaneleri göstermeye çalıştım. Python kullanmıyorsanız terminal bazı eksik kütüphane uyarısı verebilir, gerekli kütüphaneyi yüklerseniz çalışacaktır.
Yüklenecek programlar:
Download VScode
Download python 3.9.6 (64-bit)
Download arduino ide 1.8.19
Kütüphaneler:
pip install pyFirmata
pip install opencv-python
pip install HandTrackingModule
pip install HandDetector-cc
Programların son versiyonları uyumluluk problemi çıkarabilir. Bilginiz olsun. Controller deki port ile arduinoyu bağladığınız port aynı olmasına dikkat edin. Değilse controller deki kodda bağladığınız portu yazın. Arduinodaki ledleri 8,9,10,11,12 ye bağladım. Arduinoya videodaki gösterdiğim örnek kodu seçerek yükleyin. Open cv kodları aşağıda yer almaktadır.
main kodları:
import cv2
import controller as cnt
from cvzone.HandTrackingModule import HandDetector
detector=HandDetector(detectionCon=0.8,maxHands=1)
video=cv2.VideoCapture(0)
while True:
ret,frame=video.read()
frame=cv2.flip(frame,1)
hands,img=detector.findHands(frame)
if hands:
lmList=hands[0]
fingerUp=detector.fingersUp(lmList)
print(fingerUp)
cnt.led(fingerUp)
if fingerUp==[0,0,0,0,0]:
cv2.putText(frame,'Finger count:0',(20,460),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),1,cv2.LINE_AA)
elif fingerUp==[0,1,0,0,0]:
cv2.putText(frame,'Finger count:1',(20,460),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),1,cv2.LINE_AA)
elif fingerUp==[0,1,1,0,0]:
cv2.putText(frame,'Finger count:2',(20,460),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),1,cv2.LINE_AA)
elif fingerUp==[0,1,1,1,0]:
cv2.putText(frame,'Finger count:3',(20,460),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),1,cv2.LINE_AA)
elif fingerUp==[0,1,1,1,1]:
cv2.putText(frame,'Finger count:4',(20,460),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),1,cv2.LINE_AA)
elif fingerUp==[1,1,1,1,1]:
cv2.putText(frame,'Finger count:5',(20,460),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),1,cv2.LINE_AA)
cv2.imshow("frame",frame)
k=cv2.waitKey(1)
if k==ord("k"):
break
video.release()
cv2.destroyAllWindows()
controller kodları:
import pyfirmata
comport='COM5'
board=pyfirmata.Arduino(comport)
led_1=board.get_pin('d:8:o')
led_2=board.get_pin('d:9:o')
led_3=board.get_pin('d:10:o')
led_4=board.get_pin('d:11:o')
led_5=board.get_pin('d:12:o')
def led(fingerUp):
if fingerUp==[0,0,0,0,0]:
led_1.write(0)
led_2.write(0)
led_3.write(0)
led_4.write(0)
led_5.write(0)
elif fingerUp==[0,1,0,0,0]:
led_1.write(1)
led_2.write(0)
led_3.write(0)
led_4.write(0)
led_5.write(0)
elif fingerUp==[0,1,1,0,0]:
led_1.write(1)
led_2.write(1)
led_3.write(0)
led_4.write(0)
led_5.write(0)
elif fingerUp==[0,1,1,1,0]:
led_1.write(1)
led_2.write(1)
led_3.write(1)
led_4.write(0)
led_5.write(0)
elif fingerUp==[0,1,1,1,1]:
led_1.write(1)
led_2.write(1)
led_3.write(1)
led_4.write(1)
led_5.write(0)
elif fingerUp==[1,1,1,1,1]:
led_1.write(1)
led_2.write(1)
led_3.write(1)
led_4.write(1)
led_5.write(1)