Tekil Mesaj gösterimi
r0ark
r0ark - ait Kullanıcı Resmi (Avatar)
E-Mail onayı yapılmamış üye
Üyelik tarihi:
05/2018
Mesajlar:
67
Konular:
13
Teşekkür (Etti):
Teşekkür (Aldı):
Ticaret:
(0) %
08-08-2018 11:07
#1
Cartoon: Raspberry Pi Based RC Toy
Bir süredir Cartoon adını verdiğim bir proje üzerinde uğraşıyorum. Bu proje, Raspberry Pi üzerine kurulmuş bir RC araba projesidir. Internette Raspberry Pi ya da farklı geliştirme kartları kullanarak RC araba yapanlar bulunmakta. Elimde bir Raspberry Pi olduğundan ben de bir tane yapmak istedim.

İnternette örnek projeler ararken bulduklarım içersinden beni en çok rahatsız eden şey, kullandıkları yazılımın bir başkasına ait olması ya da ciddi anlamda basit projeler olmalarıydı. Bu yüzden oturup kendi yazılımımı yazmak istedim.

GitHub: https://github.com/r0ark/cartoon

Hardware kısmında olanlar:
  • Raspberry Pi 3
  • Li-Po batarya
  • L298N motor sürücü kartı
  • Kamera (Webcam, her ne kadar kötü olsa da ucuz bir tane kullanıyorum)

Yazılımı yazarken en çok iletişim ve live stream kısımlarında sorun yaşadım. Bir çok kere denedikten sonra Flask ile bir web uygulaması yazmaya karar verdim, bu sayede bir web tarayıcısı olan her cihazdan kontrol edilebilir oldu araba. Web arayüzünün yanında, Android (Kivy) ve PC platformu (Tkinter) için birer uygulama yazdım.

Camera

En başta webcam üzerinden görüntü almak için PyGame kullandım ama projede ileride image processing ile bir şeyler yapabileceğimi düşününce OpenCV kullanmaya karar verdim. Kameradan yayın yaparken hızı arttırabilmek için fotoğrafın boyutunu ciddi oranda düşürmeyi başardım.


Bunun yanında, kamera sınıfı tanımlandıktan sonra size, quality ve diğer parametrelerini değiştirmek bir post requeste bakıyor.

Kod:
    def update_vals(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)
Kod:
@app.route('/camera', methods=['POST'])
def camera_control():
    if is_logged(session):
        cam.update_vals(**requests.json.get('data', {}))
        return 'OK.', 200

    return render_template('index.html')
Bu fonksiyona aşağıda "Camera" bölümünde bulunan parametreleri değiştirip verebilirsiniz (src hariç):

Kod:
[Server]
username = r0ark
password = 827ccb0eea8a706c4c34a16891f84e7b

[Car]
IN1 = 13
IN2 = 11
IN3 = 15
IN4 = 32
power_control = 33

[Camera]
w = 320
h = 240
src = 0
quality = 50
take_grayscale = False"
Ana Uygulama

Projedeki en temel sınıf, burada bulunan "Motor" sınıfıdır.

Kod:
(...)
class Motor:
    def __init__(self, pin1, pin2, speed=0):
(...)
Bu sınıf, görevi arabayı kontrol etmek olan Car sınıfı tarafından aldığı parametreler ile örneklenir ve arabayı şase yapısına göre kontrol edilebilmesini sağlar. (bkz: Car(...) .forward, .back, .turn_left, .turn_right)

Kod:
(...)
import motor

class Car:
    def __init__(self, IN1, IN2, IN3, IN4, power_control, speed=100):
(...)
        self.motor1 = motor.Motor(IN1, IN2, speed)
        self.motor2 = motor.Motor(IN3, IN4, speed)
(...)
Proje dizini:

Kod:
 % tree cartoon 
cartoon
├── apps
│** ├── android
│** │** ├── buildozer.spec
│** │** └── main.py
│** ├── raspberry
│** │** ├── templates
│** │** │** ├── controller.html
│** │** │** └── index.html
│** │** └── webserver.py
│** └── tkinter
│**     └── tkinter_app.py
├── cartoon
│** ├── android.py
│** ├── basecar.py
│** ├── camera.py
│** ├── __init__.py
│** └── motor.py
├── LICENSE
└── README.md

6 directories, 13 files
Screenshots

Web Interface




Android App




Tkinter App



Konu r0ark tarafından (09-08-2018 20:56 Saat 20:56 ) değiştirilmiştir.