Schlagwort-Archive: CX20

XciteRC Rocket 400 Quadrocopter (aka Cheerson CX20): 720p 5MP drehbare Kamera fernbedienbar machen und Foto Modus nachrüsten

Ich bin günstig an einen einen XciteRC Rocket 400 Quadrocopter (aka Cheerson CX20) gekommen. Mit im Paket war eine „720p 5MP tiltable Camera“. Diese Kamera nimmt während des Flugs Videos auf. Die Kamera kann während des Flugs mit der Fernbedienung über den Aux1 Drehknopf nach oben und unten geneigt werden.

Drei Punkte haben mich genervt:

  1. Vor dem Start muss man das Video durch einen 2-Sekunden Druck auf eine Taste auf der Kamera starten.
  2. Nach der Landnung muss man das Video wieder durch Tastendruck stoppen bevor man die Batterie abklemmt.
  3. Die Kamera macht bei einem kurzen Tastendruck ganz ansehnliche 5MP Bilder – aber was bringt mit das am Quadrokopter?

Die Fernbedienung hat noch einen unbenutzten Aux2 Drehknopf und der Quadrokopter auch einen unbenutzten Servo Ausgang.

Bastelziel:
– Video mittels Aux2 auch während des Fluges an (Aux2 rechts)
– Mit Aux2 Fotoserien während des Fluges machen (Aux2 links).
– Video/Fotomodus stoppen (Aux2 Mitte)

Analyse der verbauten Kamera & Elektronik:
Mit Googles Hilfe war die Kamera relativ schnell identifiziert. Es handelt sich um eine 5MP Foto / 1MP Video Kameraboard mit der Bezeichnung „2501“. Die Kamera ist bei den typischen China Stores unter 10€ gelistet. Die Kamera selbst ist eine OV5640 (das hat auch nochmal ein Potential – vielleicht für ein späteres Projekt). Das 2501 Board selbst ist nicht wirklich ideal. Die JPEG Kompression im Video Modus ist zu stark und funktioniert nicht ideal; insbesondere ist die Datenrate für die resultierende Bildqualität zu hoch. Das Board kann statt 720p@60Hz auch 1080p@30Hz aufnehmen. Leider scheint die entsprechende Umschaltung durch eine angepasste Firmware in der Fabrik zu erfolgen. Schade.
Offenbar hat sich XciteRC/Cheerson eine besondere Firmware für die Kamera machen lassen. Im China-Datenblatt des Kameramoduls ist von einem 4-Draht Interface die Rede (5V, GND, Video on low (3.3V!), Photo on low (3.3V!)). Diese Ansteuerung versteht unsere Version nicht. Statt dessen erzeugt ein kurzer Pulse (>100ms) auf Pin3 ein Foto. Ein längerer Druck (ca. 2 Sekunden) startet ein Video.
Wichtig ist noch, dass der/die Datenpins einen Schaltvorgang durch Ziehen auf Masse erzeugen und im High-Zustand auf 3.3V liegen. Das Datenblatt weist explizit darauf hin, dass die Moduspins nur 3.3V kompatibel sind.
Weiterhin sind im Datenblatt Blinkmuster für die LEDs auf der Platine definiert.

Diese LEDs sind bei der Quadrokopter Kamera auch nach außen gelegt. Die Anschlussbelegung sieht so aus:

Notwendiges Material
Arduino Mini Pro (ATmega 168 langt, 328 geht auch) – ca. 1.20€
1 Jumperkabel weiblich – 1 Cent (40 Stück gibt es für 50ct)
Widerstände (1/8 Watt) 2.2kOhm und 1kOhm – einige Cent (100 Stück gibt es für 60ct)
(Preise Stand 05/17 auf aliexpress/ebay)

Sonstiges:
Doppelseitiges Klebeband / Heisskleber
Elektroniklötkolben + Lötzinn
kleiner Kreuzschraubenzieher

Modifikation des Kamerakabels:
Die Kamera hat zwei Anschlusskabel. Eines für den Servo der die Neigung steuert. Das zweite Kabel versorgt die Kamera mit Strom. An dem entsprechenden Stecker fehlt das dritte Kabel für das Servo Signal. Der Stecker hat einen leeren Platz. Man kann ein weibliches Jumperkabel nehmen, die Plastikummantelung auf einer Seite ausklipsen und den Metallstecker in den leeren Platz einklipsen. Die andere Seite wird einfach abgekniffen und später am Arduino angelötet.

Umbau der Kamera:
Die Kamera baut man für die Aktion am besten vom Quadrokopter ab. Auf der Unterseite befinden sich vier kleine Kreuzschrauben. Diese lösen und die Gehäuseschale inklusive Rückseite & Vorderseite (Linse) herausheben. Das sieht dann so aus:

Die Platine kann man entnehmen. Die Unterseite hat die Anschlüsse, an die wir heran wollen.

Die Kontakte sind mit einer silikonartigen Masse verklebt. Diese Masse muss man vorsichtig entfernen.Die Kabel für den kleinen Schalter habe ich komplett entfernt. Die Kamera wird in Zukunft über die Fernbedienung bedient.
Das folgende Verkabelungsschema muss jetzt realisiert werden:

Der Arduino Mini Pro wird parallel zur Kamera an +5V und GND angelötet: +5V VCC & GND GND. Bei den LED Kabeln am LED Modul bitte beachten, dass das schwarze Kabel nicht GND/Masse ist. Das positive Potentiale für die externen LEDs sind am schwarzen & am roten Kabel. Das schwarze Kabel kommt an den Anschluss D2 (meistens steht 2 dran). Das rote Kabel mit D3 verbinden. Die LED Anschlüsse haben ein Potential von ca. 2.9V wenn sie leuchten. Das langt, um bei mit 5V betriebenen Arduino eine Eins (High) zu signalisieren.
Zwischen D4 und GND kommen die beiden Widerstände wie im folgenden Bild gezeigt. Dabei kommt der 2.2kOhm Widerstand an GND und der 1kOhm Widerstand an. Zwischen den Widerständen wird ein Kabel angelötet. Dieses wird mit dem Tasteranschluss auf dem Kameraboard verbunden. Durch den die Widerstände wird ein Spannungsteiler realisiert, der am Mittelangriff ca. 3.3V erzeugt. Dieses Potential ist für den Kameraeingang geeignet.
Schließlich wird noch das Servokabel an D12 angeschlossen.

Der Mini Pro wird dann mit dickem doppelseitigem Klebeband auf dem Kameramodul fixiert.

Der Spannungsteiler & die Anschlüsse werden dann noch mit etwas Heißkleber vergossen. In der unteren Gehäuseschale muss noch der mittlere Plastikpin vorsichtig gekürzt werden. Dieser Pin hält die Platine. Da wir den Aufbau erhöht haben, muss er Pin verkürzt werden. Der Pin soll am Ende aber die Platine noch fixieren, also nicht zuviel abknipsen.

Das Arduino Programm:
Der Code für den Arduino ist simpel aufgebaut – ganz ohne Interrupts, Timer etc. Für diese Problemstellung ist das ausreichend. Am Anfang wartet der Code erst mal 20 Sekunden, bevor irgendetwas passiert. In diesem Zeitraum startet der Quadrokopter und die Fernbedienung wird gepairt. Eventuell muss man die Aux Regler auch noch richtig einstellen.
Danach wird per pulseIn die Länge des Servopulses gemessen und der Ausschlag berechnet. Ausgewertet wird so:

  • Ausschlag kleiner als 25% (linker Anschlag): Foto Modus
  • Ausschlag zwischen 25 und 75%: Kamera schläft
  • Ausschlag größer als 75% (rechter Anschlag): Video Modus

Im Foto Modus wird ein ein Foto gemacht. Danach wartet der Arduino bis die FotoLED aus geht. Danach wird noch eine Sekunde gewartet und wieder ein Foto gemacht. Die Fotoserie wird fortgesetzt, solange der Fotomodus aktiv ist. Der Video Modus wird gestartet, in dem der Kamerapin auf Masse gezogen wird, bis die VideoLED das erste Mal aus geht (diese blinkt im Videomodus). Dadurch wird das Video robust gestartet. Das Video läuft, bis der Modus durch Aux2 beendet wird.

Es findet im Code keine Prüfung statt, ob eine SD Karte eingelegt ist. Es ist letztlich auch egal, da die Kamera dann schon mit beiden LEDs blinkt.
Hier gibt es den Code: XciteRC_HD_Cam_Remote_Control
Der Code wird über einen Programmieradapter eingespielt. Fertig. Wer genau hinschaut, kann erkennen, dass ich bei dem Programmierer-Anschluss die 5V Verbindung weggeknipst habe. Wenn man den Arduino am PC hat und parallel den Quadrokopter mit Batterie betreibt, sollte man die +5V Potentiale trennen. Wer einfach nur den Arduino programmieren will, braucht das nicht. Das Kamerakabel für den Servoanschuss sollte dann aber vom Quadrocopter abgezogen sein.

Wenn alles umgebaut und programmiert ist, sieht die Kamera so aus:

Der Anschluss am Quadrokopter erfolgt als Servo 2:

Hier sind noch zwei Bilder zum Vergleich. Die Bilder aus dem Videomodus habe ich mittels VLC (Frame speichern) erzeugt.
Klick auf die Bilder öffnet sie größer.

Foto:

Video:

Viel Erfolg beim Nachbau. Auf ähnliche Art und Weise sollten sich auch andere Kameras über die Fernsteuerung ansprechbar machen lassen.

P.S.: Falls jemand Aux1 & 2 tauschen möchte: Einfach die beiden Servoanschlüsse am Quadrocopter auch vertauschen (nicht die Polung! -> S1 <->S2).