Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
rover [2018/07/06 20:35] – [Code-Ausschnitte:] student | rover [2023/07/03 10:16] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Rover ====== | ||
+ | |||
+ | |||
+ | ==== Beschreibung: | ||
+ | |||
+ | Ziel des Projektes ist es, dass der Rover mittels einer HTML Seite gesteuert wird. Der Rover besteht aus zwei Raupenantrieben, | ||
+ | Mit einer Kamera kann man während der Fahrt oder im Stillstand die Umgebung betrachten. Diese ist über Servos horizontal und vertikal in ihrer Position verstellbar. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | {{ : | ||
+ | ==== Aufbau: ==== | ||
+ | |||
+ | __ | ||
+ | Software:__ | ||
+ | |||
+ | Die Skripte wurden in Phyton und HTML geschrieben. Damit dieses Projekt realisierbar ist, ist es notwendig Pakete auf den Raspberry Pi zu installieren. Der Zugriff während der Programmier Phase erfolgt über Putty (SSH, Terminal) oder alternativ über VPN (grafische Oberfläche). Beide Möglichkeiten müssen in der Konfigurationsdatei des Raspberry Pis aktiviert werden. | ||
+ | |||
+ | |||
+ | __Eingesetzte Software__ | ||
+ | |||
+ | ⦁ Python | ||
+ | |||
+ | ⦁ Kamera (Motion) | ||
+ | |||
+ | ⦁ VNC (um extern mit einem PC eine Verbindung aufzubauen) | ||
+ | |||
+ | ⦁ Flask Server für Kommunikation (Bewegung des Rovers) | ||
+ | |||
+ | |||
+ | |||
+ | Als nächsten Schritt stellt man die Kamera Optionen richtig ein. Dazu öffnet man die config Datei der Kamera und stellt folgende Parameter ein. | ||
+ | |||
+ | |||
+ | ⦁ daemon = on | ||
+ | |||
+ | ⦁ framerate = 90 | ||
+ | |||
+ | ⦁ stream maxrate = 100 | ||
+ | |||
+ | ⦁ stream localhost off | ||
+ | |||
+ | ==== Bauteile: ==== | ||
+ | |||
+ | ⦁ Raspberry Pi | ||
+ | |||
+ | ⦁ Rover Kit mit Motoren | ||
+ | |||
+ | ⦁ Servo für die Kamera | ||
+ | |||
+ | ⦁ Raspberry Pi Kamera | ||
+ | |||
+ | ⦁ Brett um Hardware zu montieren | ||
+ | |||
+ | ⦁ Power Bank für Spannungsversorgung | ||
+ | |||
+ | ⦁ Power Bank | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | __Beschreibung des Codes:__ | ||
+ | |||
+ | Über die eingefügten Bilder auf der HTML Seite, die einen Link hinterlegt haben, sendet der Flask Server mit der Methode POST den Befehl an den Raspberry Pi. | ||
+ | Dieser schaltet darauf hin den entsprechenden Motor an oder aus. Das gleiche gilt für die Servos. Die Kamera läuft im Hintergrund und der Livestream kann mittels Browser betrachtet werden. | ||
+ | |||
+ | __Erweiterungsmöglichkeiten: | ||
+ | |||
+ | Man könnte einen Ultraschall Sensor montieren der dann die Entfernung zu einem Objekt misst. Der Rover könnte dann auf dieses Hinderniss reagieren und selbstständig stoppen. | ||
+ | |||
+ | |||
+ | |||
+ | ==== Code-Ausschnitte: | ||
+ | |||
+ | |||
+ | <file python HauptGui.py> | ||
+ | |||
+ | **Ansteuerung des Motors / Servos** | ||
+ | |||
+ | import RPi.GPIO as GPIO | ||
+ | from time import sleep | ||
+ | |||
+ | GPIO.setmode(GPIO.BOARD) # | ||
+ | #Alle GPIO PINS als Ausgang | ||
+ | GPIO.setup (31, GPIO.OUT) # | ||
+ | GPIO.setup (33, GPIO.OUT) | ||
+ | GPIO.setup (35, GPIO.OUT) # | ||
+ | GPIO.setup (37, GPIO.OUT) | ||
+ | |||
+ | |||
+ | |||
+ | def Servo1hoch(): | ||
+ | GPIO.setmode(GPIO.BOARD) # | ||
+ | GPIO.setup (22, GPIO.OUT) #Servo 1 als Ausgang | ||
+ | Servo1 = GPIO.PWM (22, 50) #GPIO 11 als PWM mit 50Hz | ||
+ | Servo1.start(2.5) | ||
+ | Servo1.ChangeDutyCycle(2.5) | ||
+ | sleep(1) | ||
+ | print(" | ||
+ | sleep(1) | ||
+ | Servo1.stop() | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | def forward(): | ||
+ | |||
+ | | ||
+ | GPIO.output(31, | ||
+ | GPIO.output(33, | ||
+ | GPIO.output(35, | ||
+ | GPIO.output(37, | ||
+ | sleep(1) | ||
+ | print(" | ||
+ | GPIO.output(31, | ||
+ | GPIO.output(33, | ||
+ | GPIO.output(35, | ||
+ | GPIO.output(37, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | **Aufsetzen des Flask Servers und Weiterleitung der Steuerbefehle ** | ||
+ | |||
+ | from flask import Flask, render_template, | ||
+ | import motors | ||
+ | import RPi.GPIO as GPIO | ||
+ | |||
+ | GPIO.setmode(GPIO.BOARD) #Einstellen auf die GPIO Pin Belegung des Boards | ||
+ | |||
+ | |||
+ | |||
+ | app = Flask(__name__) #Aufsetzen des Flask Servers | ||
+ | |||
+ | @app.route('/' | ||
+ | def index(): | ||
+ | |||
+ | return render_template(' | ||
+ | |||
+ | #Beim Betaetigen eines Buttons wird der Pin mit Post uebergeben und hier im Python Code der jeweiligen Motor Funktion uebergeben | ||
+ | |||
+ | @app.route('/< | ||
+ | |||
+ | def reroute(changepin): | ||
+ | |||
+ | changePin = int(changepin) #cast changepin to an int | ||
+ | |||
+ | if changePin == 1: | ||
+ | | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | **HTML Ausschnitt (Bei betätigung des Buttons sendet er den Pin 1** | ||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <meta name=" | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | table ,td, tr { | ||
+ | width: 30%; | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | |||
+ | |||
+ | <table style=" | ||
+ | < | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||