Änderungen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche

FPV-Auto

7.051 Byte hinzugefügt, 15:39, 16. Dez. 2019
Wir wollen ein fernsteuerbares Auto bauen mit folgenden Features:
* Einfach nachzubauen
* Steuerung per FPV über WLAN
* Selbstgedrucktes Chassis aus dem 3D-Drucker
* Selbstgegossene Silikon-Reifen mit selbstgedruckten Gießformen für beste Bodenhaftung
== 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)
** 2 Motorkanäle für bis zu 9V Vin, 0.8A Motorstrom würde reichen
** DRV8835 (Sleep wenn VM aus) oder DRV8833 (Sleep 15uA, int. 3.3V Regler) (welcher ist besser?)
Der DRV8835 ist mit nur 2 PWM-Kanälen einfacher anzusteuern da er by design einen Pin für die Richtung hat und einen für den PWM pro H-Brücke. Der DRV8833 ist für 4 PWMs ausgelegt. Er kann zwar auch nur mit 2 angesprochen werden, aber das ist komplizierter anzusteuern.
* Pegelwandler:
** 4x 3.3V -> 5V für 4 Servokanäle (Problem: 328 bringt per PWM nur 2 Servokanäle, besser gleich '''PCA9685''')
** 2x 3.3V -> 5V für Neopixel
* Optional: 1 Kanal Class-D Audio-Amp (oder Codec?) für 5V'''MAX98357A''' ist hier gut
* NRF24L01+ Mini-Modul
=== Blockschaltung Pinbelegung FPV-Auto Board ===<pre> AOUT2 AOUT1 | SERVO1 +5V5 GND | VO- BOUT2 BOUT1 | SERVO2 +5V5 GND | VO+=======PCB===========PCB==========PCB========  [MOTOR_RIGHT] | [SERVO1 +5V5 GND] | |Spk| [MOTOR_LEFT ] | [SERVO2 +5V5 GND] | |Spk|=======PCB===========PCB==========PCB========</pre>  === Pinbelegung ATmega328 ==={| class="wikitable"|'''Arduino-Pin''' || '''Port''' || '''Funktion''' |-| 0 || PD0 (RxD) || TxD am Raspi |-| 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|-|10 || PB2 (OC1B) || PWM/Servo out B|-|11 || PB3 (MOSI/OC2A) || DRV8835 AENBL|-|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.xztar -xvf arduino-1.8.9-linuxarm.tar.xzsudo mv arduino-1.8.9 /optsudo /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=avrdudefpva.upload.protocol=arduinofpva.upload.maximum_size=32256fpva.upload.maximum_data_size=2048fpva.upload.speed=38400fpva.build.mcu=atmega328fpva.build.f_cpu=8000000Lfpva.build.board=AVR_MINIfpva.build.core=arduinofpva.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=ondtoverlay=hifiberry-dacdtoverlay=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 pygameimport 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 ===[[Datei:FPV-Auto PCB Top.png|300px]][[Datei:FPV-Auto PCB Bot.png|300px]]
== Motoren ==
== 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-tumblrconfig.jpg|320px]]
[[Datei:20180624-fpvauto-fpvauto-tumblrchassis.jpg|320px]]
 
Für die Standard Version werden zwei 12mm Schalen verwendet, das Chassis bietet dann zwei 18650 Zellen Platz, der RasPi Stack steh hier senkrecht.
[[Datei:20180624-fpvauto-fpvauto-stdchassis.jpg|320px]]
[[Datei:Chassis11.zip]] Schalen<br>[[Datei:X_Chassis_11.zip]] Chassis <br>Platine verlötet
[[Datei:Fpvcar platine verloetet.jpg|320px]]
[[Datei:Chasis verloetet.jpg|320px]]
[[Datei:Batterie Halter.jpg|320px]]
 
[[Datei:Fpvcar mit 9dof i2c.jpg|320px]]
 
== Raspberry Pi Zero W ==
 
=== Samba Freigabe ===
Einrichten wie hier beschrieben [[Raspberry_Pi_Grundlagen#Samba]]
 
=== Git ===
Git installieren
sudo apt-get install git
Das Repository https://github.com/hackffm/FPVCar.git clonen
git clone https://github.com/hackffm/FPVCar.git
== Software ==
=== Protokoll für Commandos aus der Webgui ===
{
"component":"COMPONENTNAME",
"key": "value"
}
 
Beispiel
{
"component":"base",
"forward": 10
}
=== Videostreaming ===
Hier könnten wir UV4L verwenden.<br>
Anschließend den Service neu starten mit: sudo service uv4l_raspicam restart
Um den mjpeg Stream in eine Webseite einzubinden einfachfolgendes Tag einfügen. <img id="video" src="http://raspberrypi:8080/stream/video.mjpeg" width="640" height="480">einfügen== 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. == ToDo ==1. Vollbild Control<br>2. Consolenausgaben des Pythonservers der über eine Serviceunit gestartet ist ins syslog bekommen.<br>3. Serviceunit ohne Passwortabfrage starten/stoppen können.
279
Bearbeitungen