Cartoon: Raspberry Pi Based RC Toy

r0ark

Üye
17 May 2018
67
0
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.

vPyzWR.png

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:
[FONT="Courier New"] % 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
[/FONT]

Screenshots

Web Interface

g6bl35.png


PDG3L5.png

Android App

LDGPVo.png


1E7PQj.png

Tkinter App

7DQm0Y.png


r1yLlm.png
 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.