Änderungen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche

FPV-Auto

4.768 Byte hinzugefügt, 09:06, 6. Aug. 2019
/* Chassis */Alte Datei Links durch Link zu Github Repository ersetzt.
== FPV Control Board ==
=== Blockschaltung ===[[Datei:Block diagram FPV Auto Shield.png|1000px]]
=== Features und Implementation:===
* Stromversorgung:
** 3.3V/0.15A mit Enable und Selbsthaltung für ATmega328 - optimiert auf geringen Ruhestrom (nRF24L01+ typ. 12mA)
* Optional: 1 Kanal Class-D Audio-Amp (oder Codec?) für 5V '''MAX98357A''' ist hier gut
* NRF24L01+ Mini-Modul
 
=== Blockschaltung ===
<pre>
 
Ladekontakt -> bq25892 Battery charger -> 1S LiIon Akku -> LDO 3.3V -> ATmega328 -> NRF24L01
-> Boost 5.1V -> Raspberry PI
-> Boost 6V -> DRV... -> Motor
 
 
</pre>
=== Pinbelegung ATmega328 ===
| 1 || PD1 (TxD) || RxD am Raspi
|-
| 2 || PD2 (INT0) || EN_3V3
|-
| 3 || PD3 (OC2B) || DRV8835 BENBL
|-
| 4 || PD4 || EN_5V1
|-
| 5 || PD5 (OC0B) ||DRV8835 BPHASE
|-
| 6 || PD6 (OC0A) ||DRV8835 APHASE
|-
| 7 || PD7 ||EN_5V5
|-
| 8 || PB0 ||/CHARGER_CE
|-
| 9 || PB1 (OC1A) || PWM/Servo out A
|12 || PB4 (MISO) ||
|-
|13 || PB5 (SCK) ||NRF_MOSI |-|A0|| PC0 || NRF_CE|-|A1|| PC1 || NRF_CS|-|A2|| PC2 || NRF_SCK|-|A3|| PC3 || NRF_MISO|-|A4|| PC4 || SDA|-|A5|| PC5 || SCL|-|A6|| ADC6 |||-|A7|| ADC7 || BUTTON_SENSE
|}
 
=== Software für FPV-Control Board Arduino ===
 
==== Package für Arduino ====
Die Idee ist, dass das Board direkt vom Raspberry Zero geupdatet werden kann. Dazu muss auf den Raspberry zunächst Arduino installiert werden - am besten indem zunächst der Default-Arduino via <pre>sudo apt install arduino</pre> installiert wird, und dann aber ersetzt wird, indem von arduino.cc die ARM-Version nach installiert wird.
<pre>
wget https://downloads.arduino.cc/arduino-1.8.9-linuxarm.tar.xz
tar -xvf arduino-1.8.9-linuxarm.tar.xz
sudo mv arduino-1.8.9 /opt
sudo /opt/arduino-1.8.9/install.sh
</pre>
In der neuen Arduino-IDE unter File->Preferences den Sketchbook-Speicherort auf das Arduino-Verzeichniss aus dem GIT-Repository gesetzt und die IDE neu gestartet. Damit sind sofort alle speziellen Libraries und das FPV-Auto in der Board-Auswahl verfügbar. Auf dem Raspberry muss "FPV-Auto on Raspberry" gewählt werden, um vom Raspberry das aufgesteckte Board umzuprogrammieren. Die Variante ohne "on Raspberry" ist für den Fall, dass man das Board vom PC aus programmieren möchte - hierzu muss man RX/TX/Reset und GND mit einem 3.3V USB-Seriell-Adapter anschliessen.
 
==== Kommandos von FPVAutoControl ====
Die Kommandos werden per Serieller Schnittstelle übertragen mit 38400,8N1. Komplexere Kommandos müssen mit einem Return terminiert werden, andere werden direkt ausgeführt um z.B. das Auto rudimentär mit den Tasten W-S-A-D zu steuern. Test per Minicom <code>minicom -b 38400 -D /dev/ttyS0</code>
 
Kommandos:
* m xx yy rr : Drive mit den Werten XX YY RR (alt, eher unsinn ohne Omniwheels)
* f ll rr : Aktiviere Motoren Links / Rechts (-255 ... 0 ... 255)
* N aa bb : Stelle Servo A/B (0..180 besser nur 0..160 bei SG90...)
* p!999 : Abschalten nach 60sek
* ph aa : Stelle Servo A
* pv aa : Stelle Servo B
 
==== Bootloader ====
Verwendet wurde der [https://github.com/MCUdude/MiniCore MiniCore] Bootloader, damit der ATmega328 auch unter 3.3V und 8MHz externen Quarz und mit Optiboot funktioniert. Zum Aufspielen des Bootloaders die Arduino-IDE mit der MiniCore-Erweiterung bestücken, dann kann darüber mit einem externen Programmer der Bootloader eingespielt werden. Genutzte Einstellungen dazu:
* Board: "ATmega328"
* Clock: "8 MHz external"
* BOD: "1.8v"
* Variant: "328 / 328A" (wir haben wohl keine P Version verbaut...)
 
 
Ist der Bootloader einmal aufgespielt, kann statt MiniCore zu installieren auch nur die Datei unter "arduino-1.8.x/hardware/arduino/avr/boards.txt" um folgendes bevorzugt am Anfang erweitert werden:
<pre>
##############################################################
fpva.name=FPV-Auto
fpva.upload.tool=avrdude
fpva.upload.protocol=arduino
fpva.upload.maximum_size=32256
fpva.upload.maximum_data_size=2048
fpva.upload.speed=38400
fpva.build.mcu=atmega328
fpva.build.f_cpu=8000000L
fpva.build.board=AVR_MINI
fpva.build.core=arduino
fpva.build.variant=eightanaloginputs
</pre>
 
Damit lässt sich das FPV-Auto Board einfach programmieren.
 
==== Avrdude mit GPIO-Reset ====
https://github.com/TOLDOTECHNIK/avrdude-gpio-autoreset
 
==== Audio Ausgabe aktivieren ====
Geht am Arduino vorbei, dieses Tutorial nutzen: http://www.lucadentella.it/en/2017/04/26/raspberry-pi-zero-audio-output-via-i2s/ und die asound.conf mit dem Kram von hier bestücken: https://learn.adafruit.com/adafruit-max98357-i2s-class-d-mono-amp/raspberry-pi-usage#detailed-install-5-16
 
<pre>sudo nano /boot/config.txt</pre>
<pre>
...
#dtparam=audio=on
dtoverlay=hifiberry-dac
dtoverlay=i2s-mmap
...
</pre>
 
<pre>sudo nano /etc/asound.conf</pre>
 
<pre>
pcm.speakerbonnet {
type hw card 0
}
 
pcm.dmixer {
type dmix
ipc_key 1024
ipc_perm 0666
slave {
pcm "speakerbonnet"
period_time 0
period_size 1024
buffer_size 8192
rate 44100
channels 2
}
}
 
ctl.dmixer {
type hw card 0
}
 
pcm.softvol {
type softvol
slave.pcm "dmixer"
control.name "PCM"
control.card 0
}
 
ctl.softvol {
type hw card 0
}
 
pcm.!default {
type plug
slave.pcm "softvol"
}
</pre>
 
pygame installieren
<pre>sudo apt install python3-pygame</pre>
 
sound downloaden
<pre>wget http://www.wavsource.com/snds_2018-06-03_5106726768923853/animals/chicken.wav</pre>
 
python3 script erstellen
<pre>
import pygame
import time
 
pygame.mixer.init(44100, -16, 1, 1024)
pygame.mixer.music.load("chicken.wav")
pygame.mixer.music.play()
 
time.sleep(3)
</pre>
 
==== Kamera aktivieren ====
https://github.com/jacksonliam/mjpg-streamer
=== Platinen ===
== Reifen ==
* https://www.youtube.com/watch?v=k6QX90taK5c
 
[[Datei:20180604 201225.jpg|320px]]
[[Datei:20180604 201232.jpg|320px]]
 
Ø = 5,5 cm<br>
U = π·d = 17,3 cm<br>
200 RPM = 57,6 cm/sec<br>
250 RPM = 72 cm/sec
 
Felge 8-2018 Zum eingießen in Silikon oder für gedruckte Reifen [[Datei:felge8-2018.zip]] (spitze Madenschraube M3 wird benötigt)<br>
Reifen zum drucken in weichem Material (TPU, Ninjaflex etc.) [https://drive.google.com/open?id=1lXRN7BjhyoFlRAwqvAEh77fFSULiji9e Reifen]<br>
Ø = 5,8 cm<br>
U = π·d = 18,2 cm<br>
50 RPM = 15,2 cm/sec<br>
200 RPM = 60,7 cm/sec<br>
250 RPM = 75,9 cm/sec<br>
Dateien sind hier zu finden https://github.com/bmarl/FPVCar/tree/master/3D-print-parts
== Akkus ==
== Chassis ==
Alle Teile für das aktuelle Chassis sind hier zu finden - https://github.com/bmarl/FPVCar/tree/master/3D-print-parts
 
 
Da es zwei unterschiedliche Ansätze zur Nutzung gibt
*Tumbler mit großer Bodenfreiheit und Option über Kopf zu fahren
[[Datei:20180624-fpvauto-fpvauto-stdconfig.jpg|320px]]
[[Datei:20180624-fpvauto-fpvauto-stdchassis.jpg|320px]]
 
[[Datei:Chassis11.zip]] Schalen<br>
[[Datei:X_Chassis_11.zip]] Chassis <br>
== Raspberry Pi Zero W ==
== Software ==
=== Protokoll für Commandos aus der Webgui ===
{
"modul":"MODULNAME",
"key": "value"
}
Beispiel
 
{
"modul":"base",
"forward": 10
}
=== Videostreaming ===
Hier könnten wir UV4L verwenden.<br>
Um den mjpeg Stream in eine Webseite einzubinden einfach folgendes Tag einfügen.
<img id="video" src="http://raspberrypi:8080/stream/video.mjpeg" width="640" height="480">
 
== Emotionen ==
Mit einem OLED Display kann man dem Gefährt Emotionen mit geben.
 
Hier ein Test mit einem 128x64 Pixel Display:<br>
[[Datei:Eyes neutral.png]]
[[Datei:Eyes skeptic.png]]
[[Datei:Eyes angry.png]]
[[Datei:Eyes sad down.png]]
 
Verwendet wird die Python Bibliothek [https://github.com/rm-hull/luma.oled Luma.OLED].<br>
Das Python-Skript liegt im Git Repo unter python/eyes.
97
Bearbeitungen