NLT, Techniek

Analoge RC-auto omzetten naar Digital Controlled met camera

Analoge RC-auto omzetten naar Digital Controlled met camera

Wij gaan van een normale RC-auto, een DC-auto maken met behulp van een Raspberry Pi. Wij voegen hier ook nog een camera aan toe.

Benodigdheden:

  • Raspberry Pi 2,3 of 4. Wij gebruiken de Pi 3 model B+.
  • MicroSD kaartje van minimaal 8GB.
  • Analoge RC-auto.
  • L298N Dual H Bridge Motor Driver.
  • Pi Camera.
  • Powerbank.
  • Jump wires.
  • RCCONTROL.py

Als je dit allemaal hebt kunnen we van start gaan.

Stap 1 Kap

Koppel de batterij los. Haal vervolgens de kap van de RC-auto los. Dit gaat meestal met clipjes. 

Stap 2 Moederbord

Je ziet hoogstwaarschijnlijk nu een klein moederbord. Haal alle kabels los en verwijder dit moederbord.

Stap 3 Installeren Rasberry

Je gaat nu de Pi installeren, mocht er nog geen Raspbian op staan ga dan naar stap 4. Staat Raspbian hier al wel op? Ga door naar stap 6.

Stap 4 Installeren van Raspbian op de Pi

Ga naar: https://www.raspberrypi.org/downloads/noobs/ en download de ZIP van NOOBS. Plug vervolgens de MicroSD-kaart in de computer en formatteer deze.

Het bestand NOOBS zal ondertussen gedownload zijn, extract deze bestanden naar de kaart. Kom je hier niet uit? Gebruik dan een tool genaamd: Etcher.

Stap 5 Installeren van Raspbian

Als stap 4 gelukt is, plug je het MicroSD kaartje in de Pi. Zet de Pi aan en volg het installatie proces. Kies voor Raspbian.

Dit proces kan even duren. Wanneer het bureaublad te zien is ben je klaar. Sluit je Pi aan op het schoolnetwerk.

Stap 6 Git Clone

Open een terminal en voer het volgende commando uit: sudo git clone https://github.com/jacksonliam/mjpg-streamer . Werkt dit niet? Voer dan het commando: sudo apt-get install git. Volg vervolgens de stappen op de deze site voor het installeren van mjpg-streamer.

Download vervolgens ook ons script op de Pi; RCCONTROL.py.

import curses
import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)

GPIO.setmode(GPIO.BOARD)

motor1a = 7
motor1b = 11
motor1e = 22

motor2a = 13
motor2b = 16
motor2e = 15

GPIO.setup(motor1a,GPIO.OUT)
GPIO.setup(motor1b,GPIO.OUT)
GPIO.setup(motor1e,GPIO.OUT)
GPIO.setup(motor2a,GPIO.OUT)
GPIO.setup(motor2b,GPIO.OUT)
GPIO.setup(motor2e,GPIO.OUT)

screen = curses.initscr()
curses.noecho()  
curses.cbreak()
curses.halfdelay(3)
screen.keypad(True)

try:
        while True:   
            char = screen.getch()
            if char == ord('q'):
                break
            elif char == curses.KEY_UP:
                GPIO.output(motor1a,GPIO.LOW)
                GPIO.output(motor1b,GPIO.HIGH)
                GPIO.output(motor1e,GPIO.HIGH)
                time.sleep(0.05)
                GPIO.output(motor1a,GPIO.LOW)
                GPIO.output(motor1b,GPIO.LOW)
                GPIO.output(motor1e,GPIO.LOW)
            elif char == curses.KEY_DOWN:
                GPIO.output(motor1a,GPIO.HIGH)
                GPIO.output(motor1b,GPIO.LOW)
                GPIO.output(motor1e,GPIO.HIGH)
                time.sleep(0.05)
                GPIO.output(motor1a,GPIO.LOW)
                GPIO.output(motor1b,GPIO.LOW)
                GPIO.output(motor1e,GPIO.LOW)
            elif char == curses.KEY_RIGHT:
                GPIO.output(motor2a,GPIO.LOW)
                GPIO.output(motor2b,GPIO.HIGH)
                GPIO.output(motor2e,GPIO.HIGH)
                #time.sleep(0.09)
                #GPIO.output(motor2a,GPIO.LOW)
                #GPIO.output(motor2b,GPIO.LOW)
                #GPIO.output(motor2e,GPIO.LOW)
            elif char == curses.KEY_LEFT:
                GPIO.output(motor2a,GPIO.HIGH)
                GPIO.output(motor2b,GPIO.LOW)
                GPIO.output(motor2e,GPIO.HIGH)
                time.sleep(0.09)
                #GPIO.output(motor2a,GPIO.LOW)
                #GPIO.output(motor2b,GPIO.LOW)
                #GPIO.output(motor2e,GPIO.LOW)
            elif char == 10:
                GPIO.output(motor1a,GPIO.LOW)
                GPIO.output(motor1b,GPIO.LOW)
                GPIO.output(motor1e,GPIO.LOW)
                GPIO.output(motor2a,GPIO.LOW)
                GPIO.output(motor2b,GPIO.LOW)
                GPIO.output(motor2e,GPIO.LOW)
            elif char == 0:
                GPIO.output(motor1a,GPIO.LOW)
                GPIO.output(motor1b,GPIO.LOW)
                GPIO.output(motor1e,GPIO.LOW)
                GPIO.output(motor2a,GPIO.LOW)
                GPIO.output(motor2b,GPIO.LOW)
                GPIO.output(motor2e,GPIO.LOW)             
finally:
    curses.nocbreak(); screen.keypad(0); curses.echo()
    curses.endwin()
    GPIO.cleanup()

TIP: voer het commando: ‘ifconfig’ uit en noteer jouw lokale IP4 (achter inet addr). Het ziet er ongeveer zo uit: 192.168.xxx.xxx

Stap 7 Bevestigen

Maak de camera van de Pi vast aan de Pi zelf. Bevestig vervolgens de Pi aan de auto zelf, doe hetzelfde met de L298N Dual Motor Driver.

Maak de jumpwires op de volgende manier vast; zie afbeelding.

LET OP! Er gaan dus 2 draden in de GND (ground) van de H-brug.

Stap 8 Testen

Open een terminal en voer het volgende commando uit: cd /Desktop && python RCCONTROL.py

Gebruik de WASD toetsen om te rijden, je kunt het script afsluiten met ‘q’. Gaan de voorste wielen naar links wanneer je rechts hebt ingedrukt? Verwissel dan de draden van de voorste motor in de bridge.

Om de camera te laten functioneren voer je het volgende commando uit: mjpg_streamer -i ‘input_uvc.so -d /dev/video0 -r 1280×720 -f 30 -n’ -o ‘output_http.so -w mjpg-streamer-experimental/www -p 8080’

Ga vervolgens in een webbrowser naar het volgende adres: https://jouwip:8080/?action=stream

Waarin jouw IP het IP is wat je eerder hebt genoteerd.

En voilà, dat is hoe je je auto omzet naar een DC-auto.

Leave a Reply