Dienstag, 7. Dezember 2021

Arduino als einfaches Messgerät


Eigentlich hatte ich einen anderen Text bereits fertig, aber der passte nicht mehr zu dem folgenden Inhalt.
Diesmal geht’s darum einen Arduino als Messgerät einzusetzen und den PC als Anzeigegerät. Natürlich mit dem Ziel eine größere Anwendung zu schreiben, mit welcher man die Messungen aufzeichnen kann.

 

Benötigt

  • Arduino
  • Breadboard
  • 2x 10kOhm Widerstände
  • 3x Jumper Kabel
  • Eine Anwendung, mit der man die Messungen loggen kann

 

Anforderung

Mit einem Arduino soll eine Spannung an einem Step-Down Modul gemessen werden, welches ich in meinem Crawler verwende. Da die Spannung auch höher als 5V sein kann, muss ein Spannungsteiler eingesetzt werden, der die zu erwartenden Spannung abdeckt. Um aktiv das Spannungsgeschehen zu beobachten, soll das Messergebnis auf dem PC wieder gegeben werden.

 

Arduino als Messgerät

Für ein einfaches Messgerät werden grundsätzlich zwei Widerstände benötigt. Zwar kann man auch direkt messen, aber das schränkt den Messbereich stark ein. In meinem Fall könnte die Spannung bei 7,4V hoch gehen und vielleicht auch drüber. Zudem soll mit den Widerständen auch der Strom begrenzt werden, dass zudem den Arduino vom Durchbrennen schützen soll.

 

Bevor eine Messung stattfindet, wird ein kleines Arduino Programm benötigt, mit dem wir auf dem Serial Monitor einen Wert ausgeben können.

 

 #define PIN_Input A0  
 void setup() {  
  Serial.begin(115200);  
  pinMode(PIN_Input, INPUT);  
 }  
 void loop() {  
  int16_t rawMeasurement = analogRead(PIN_Input);  
  byte ba[3];  
  ba[0] = (byte)((rawMeasurement >> 8) & 0xff);  
  ba[1] = (byte)(rawMeasurement & 0xff);  
  ba[2] = (byte)CountBits(rawMeasurement);  
  Serial.write(ba, 3);  
  delay(20);  
 }  
 int8_t CountBits(int16_t rawMeasurement) {  
  int8_t result = 0;  
  for(int i = 0; i < 16; i++) {  
   result += (int8_t)bitRead(rawMeasurement, i);  
  }  
  return result;  
 } 

 

Simple Consolen Anwendung

Der simple Aufbau ist zunächst ein Vorläufer zu meiner eigentlichen kleinen Anwendung. Die Auswahl des seriellen Port hätte man auch weg lassen können, aber auf den Komfort wollte ich dann doch nicht verzichten.

 

class Program  
 {  
   private static int _rawValue;  
   private static int _divisorValue = 511;  
   private static float _voltage;  
   static void Main(string[] args)  
   {  
     Console.WriteLine("Connect Serial with");  
     string[] ports = SerialPort.GetPortNames();  
     if(!ports.Any()) {  
       Console.WriteLine("No Arduino connected!");  
       return;  
     }  
     for (int index = 0; index < ports.Length; index++) {  
       Console.WriteLine($"Index:{index}, Port: {ports[index]}");  
     }  
     string selectindex = Console.ReadLine();  
     if (!int.TryParse(selectindex, out int indexResult)) {  
       Console.WriteLine("You can only typ the index number!");  
       return;  
     }  
     if(indexResult >= ports.Length) {  
       Console.WriteLine("You can only typ the index number!");  
       return;  
     }  
     var sp = new SerialPort(ports[indexResult], 115200);  
     sp.DataReceived += Sp_DataReceived;  
     sp.Open();  
     while (true) {  
       Console.Clear();  
       Console.WriteLine($"{_rawValue} / {_divisorValue} * 5.0 = {_voltage:N2} V");  
       Thread.Sleep(1000);  
     }  
   }  
   private static void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e)  
   {  
     var sp = (SerialPort)sender;  
     byte[] buffer = new byte[3];  
     if (sp.Read(buffer, 0, 3) != 0) {  
       int result = (buffer[0] << 8) | buffer[1];  
       var b = new BitArray(new int[] { result });  
       bool[] bits = new bool[b.Count];  
       b.CopyTo(bits, 0);  
       if (bits.Sum(s => s ? 1 : 0) != buffer[2])  
       {  
         return;  
       }  
       _rawValue = result;  
       _voltage = result / (float)_divisorValue * 5.0f;  
     }  
   }  
 } 

 

Divisor festlegen

Man bekommt zunächst einen Rohwert, der zunächst nichts aussagt. Würde man direkt die 5V Pin vom Arduino abgreifen und am Eingangspin A0 anschließen, bekäme man einen Wert von 1024. Dieser Wert muss durch 1024 geteilt und dann mit 5,0 Volt multipliziert werden.

 

Spannung = Rohmesswert / Divisor * 5,0

5,0V = 1024 / 1024 * 5,0V

 

Durch den Spannungsteiler verschiebt sich der eigentliche Rohwert, der die 5 Volt darstellt. Statt durch 1024 zu teilen, fällt dieser Wert in meinem Beispiel auf 511.


2,5V = 511 / 1024 * 5,0V



Das bedeutet, der Divisor muss in meinem Fall auf den aktuellen Rohwert angepasst werden, denn die 5V sind jetzt bei einem Rohwert von 511.

 

5,0V = 511 / 511 * 5,0V

 

Zum testen kann nun vom 3,3V Pin die Spannung zum Messen verwendet werden. Hier sollte nun ein Rohwert bei ca. 345 ankommen. Folgendes Ergebnis ergab sich bei meinem Test:

 

3,39V = 346 / 511 * 5,0V


 

Kleiner Anfang

Natürlich sind die Ergebnisse nicht sehr genau, aber für eine einfache Lösung reicht die grobe Messung aus und ist besser als gar kein Messgerät.

Der Spannungsteiler, mit den zwei 10k Ohm Widerständen, kann eine Spannung von maximal 10V angelegt werden.

 

Warnung

Natürlich sollte man immer berücksichtigen, dass die Leistungsgrenzen nicht überschritten werden. Die zu verwendenden Widerständen sollten möglich hochohmig sein, so dass am Arduino Pin kein hoher Strom eingeht.

 

Zielmessung

Kommen wir zum Testaufbau, mit dem wir eine Messung an einem anderem Stromkreis vornehmen können. Wichtig ist, dass der Ground von der anderen Spannungsquelle mit am GND des Arduinos angeschlossen wird.


 

Was kommt als nächstes?

Eine Sache habe ich hier zunächst ausgelassen, und zwar das Aufzeichnen der Messungen. Eigentlich kann ein Mehrwert mit der Funktion gewonnen werden. Andernfalls hätte man auch ein kleines Display für den Arduino einsetzen können und auf das Spannungsergebnis ausgeben würde.

 

In der Solution befinden sich die Consolen Anwendung SimpleVoltageMeasurement und bereits mein neues Projekt VoltageMeasurementLogger, dass das Aufzeichnen der Daten ermöglicht.

GitHub - VoltageMeasurementLogger

Montag, 18. Oktober 2021

Günstiges Radar Modul für Bewegungen


Wieder mal was kleines feines und auch günstiges gefunden im Bereich Sensorik. Das Radar Modul RCWL-0516 kann Bewegungen von Personen wahrnehmen. Genau genommen von jedem Lebewesen und nicht durch bewegte Gegenständen wie Staubsaugerroboter.

Benötigt

  • Arduino
  • RCWL-0516 (Preislich 6 Stück ab 4€)
  • Eine Person die sich  bewegt

 

Anforderung

Herausfinden in welchem Winkel und Entfernungen der Sensor funktioniert.

 

Technische Daten

Im Datenblatt steht mehr, da mir die anderen Details für das Grundlegende zunächst keinen Nutzen bringen.

 

Betriebsspannung: 4V bis 28V und mindestens 3mA

Erkennungsreichweite: ca. 5m bis 9m

Frequenz: 3.2GHz

Ausgang (OUT): geschaltet ca. 2 Sekunden lang

 

PINs:

3V3 => 3,3V Versorgungsspannung (Output)

GND => Ground

OUT => Signal Ausgang Hi-Pegel wenn eine Bewegung wahrgenommen wurde

VIN => Eingang Spannung von 4V bis 28V

CDS => Externer  Lichtabhängiger Widerstand (Ausschalten der Radar Funktion)

 

Optional:

C-  Verlängert den Geschalteten Zustand am Ausgang (OUT)Hierfür wird ein Kondensator benötigt.

R-GN Erkennungsreichweite. Mit einem 1M Ohm Widerstand kann die Reichweite von 7 Meter auf 5 Meter reduziert werden.

CDS Platz für die Installation eines Lichtabhängigen Lichtwiderstandes, um bei Licht die Radar Wahrnehmung auszuschalten.

R-CDS Einstellung für die Empfindlichkeit mit dem Lichtabhängigen Widerstandes. Dient als Spannungsteiler und je kleiner der Widerstand gewählt ist, um so heller muß die Umgebung sein für das Ausschalten der Radar Funktion




Test Programm

Der Code, um den Sensor auszulesen ist sehr simpel. Das Signal, welches über den OUT Ausgegeben wird, ist entweder 0V oder 3,3V. Damit reicht einen PIN für digitales Signal Lesen aus. Analog Signal einlesen bringt uns da keinen Mehrwert, denn hier kann nur ein LOW- oder HIGH-Pegel ausgegeben werden.

 int mRadarInput = 2;  
 void setup() {  
  Serial.begin(115200);  
  pinMode(mRadarInput, INPUT);  
 }  
 void loop() {  
  bool movmentDetect = digitalRead(mRadarInput);  
  Serial.print("Movement: ");  
  Serial.println(movmentDetect, BIN);  
  delay(100);  
 }  

Anschließen

Für den Beispielaufbau werden nur drei Leitungen zum Verbinden des Sensor verwendet. Der Anschluß auf dem 3.3V steht, ist ein OUTPUT und kann verwendet werden, andere Controller zu versorgen. Der CDS Anschluß kann wiederum für ein Lichtsensor verwendet werden, um das Feststellen von Bewegungen abzustellen.

 

 

Entfernung und Winkel

Die Reichweite ist gut für das Feststellen von Bewegungen innerhalb eines Zimmers. Der Sensor kann Bewegungen rund um dem Modul war nehmen, aber Ideal ist wiederum die Seite mit dem Aufgelöteten Chip. Die Wahrnehmung auf Bewegungen wirkt unterschiedlich, aber gut brauchbar.

Typische Gegenstände wie Kunststoff oder Holz schränkt die Funktion nicht ein. Metall hingegen wirkt Abschirmend auf das Radar.

 

Timing

Wenn ich mich bei der Übersetzung vertan habe, dann kann das Timing von 2 Sekunden nur verlängert werden, aber nicht verkürzt.

 

Anwendungsbeispiele

In den meisten Fällen würde man dieses Radar Modul zum Einschalten von Lampen verwenden. Natürlich könnte man da auch Alarmanlagen dafür einsetzen, setzt jedoch einen Raum voraus, in dem keiner sein sollte.

 


Sourcen

Datasheet PDF

 

Dienstag, 28. September 2021

Error Text ausgeben bei einer Stored Procedure in C# Anwendung


Vielleicht ist das, worauf ich diesmal eingehe selbstverständlich, aber ich habe zu dem Thema ein wenig gesucht und mal wieder nichts gefunden. Wenn ich in meiner Anwendung eine Stored Procedure ausführe, dann würde bei einem Fehler keine Rückmeldung von der Ausgeführten Prozedur kommen und der Eindruck entsteht, dass die gespeicherte Prozedur normal durchgelaufen ist. Nun kann man auch einen Output Wert einrichten und erwarten, das ein entsprechender Wert herauskomm. Käme nun ein Standard Wert heraus, könnte daraus geschlossen werden, dass etwas in der Prozedur nicht gemacht macht wurde. Ohne Detail Information, kann man alles vermute. Fehler im Script, keine Ausreichende Berechtigung vergeben oder Datensatz hat einen Fehler. Was auch immer. Schöner wäre einen Fehlertext zu erhalten.

 

Benötigt

  • MS SQL Datenbank
  • Visual Studio 2019

 

Ziel

Das Beispiel soll ein Wert zurück geben, wenn die Stored Procedure ohne Fehler ausgeführt wurde. Bei einem Ausnahmefehler soll wiederum der Fehler Text Ausgeben werden in der Anwendung.

 

Beispiel Prozedur anlegen

Die Folgende Prozedur kann in ihrer Ausführung normal durchlaufen und den erwarteten Ausgangs Wert in 'myGetStatusMessage' ausgeben. Wird der Parameter 'showMeErrorMessage' auf 1 gesetzt, dann wird eine Ausnahme geworfen.

 USE [example-data]   
 GO  
 SET Ansi_Nulls ON  
 GO  
 CREATE PROCEDURE [dbo].[myStoredProcedure]    
   @showMeErrorMessage AS BIT,   
   @myGetStatusMessage AS NVARCHAR(20) OUTPUT,     
   @myStoredProcedureErrorMessage NVARCHAR(100) OUTPUT   
 AS  
 Begin Try  
   IF @showMeErrorMessage = 1  
   Begin  
     THROW 123, 'Eine Ausnahme wurde geworfen', 1;   
   end  
   SELECT @myGetStatusMessage = 'Alles in Ordnung!'   
 end try  
 begin catch  
   SELECT @myStoredProcedureErrorMessage = ERROR_MESSAGE();  
 end catch  

 

Beispiel C# Anwendung

Nun zu einer Consolen Anwendung, die den Aufruf einer gespeicherten Prozedure ausführen kann und auch unter Ziel Bedingungen den Fehlertext ausgeben kann, dass durch den Catch Block der Prozedur ausgefüllt wurde.

 

 using System;  
 using System.Data.SqlClient;  
 Console.WriteLine("Ein Beispiel wie man eine Error Meldung aus einer Store Procedure ausgegeben werden kann");  
 Console.WriteLine("Store Procedure wird ausgeführt ohne Ausnahmefehler!");  
 RunStoreProcedure(false);  
 Console.WriteLine("\r\nStore Procedure wird ausgeführt mit Ausnahmefehler!");  
 RunStoreProcedure(true);  
 Console.WriteLine("\r\nPress enter to close application");  
 Console.ReadLine();  
 static void RunStoreProcedure(bool throwError)  
 {  
   var connection = new SqlConnection(  
     @"server=127.0.0.1,1433;User Id=CustomUser;Password=passwort;Database=example-data;");  
   connection.Open();  
   var query = "DECLARE @StatusOutput AS NVARCHAR(20), @ErrorOutput AS NVARCHAR(100);" +  
         $"EXEC [dbo].[myStoreProcedure] {(throwError ? 1 : 0)}, " +  
         "@StatusOutput OUTPUT, " +  
         "@ErrorOutput OUTPUT; " +  
         "SELECT @StatusOutput AS Status, @ErrorOutput AS Error";  
   var command = new SqlCommand(  
     query,   
     connection);  
   var reader = command.ExecuteReader();  
   while (reader.Read())  
   {  
     Console.Write("Ergebnis: ");  
     for (var iColumn = 0; iColumn < reader.GetColumnSchema().Count; iColumn++)  
     {  
       Console.Write($"{reader.GetValue(iColumn)}, ");  
     }  
     Console.WriteLine("");  
   }  
   connection.Close();  
 } 

 

That's it

Der Umfang ist übersichtlich und kann in den meisten Fällen für eine Anwendung in der Form eine Store Procedure ausführen. Was nicht so einfach ist, wenn eine Tabelle zurück gegeben wird und dort die Möglichkeit statt der Ergebnis Tabelle, wiederum einen Fehlertext auszugeben.

 

GitHub - ExampleStoreProcedureErrorOutput

Sonntag, 12. September 2021

Sensor Daten über Smart Port versenden mit dem Arduino


Der Empfänger, den ich für meinen FPV RC Crawler verwende, hat einen Smartport an dem z.B. Sensoren angeschlossen werden können. Die Anzahl der verfügbaren Sensoren von Frsky ist übersichtlich, aber speziell für meinen Bedarf war keiner dabei. Wie gut, dass hier bereits eine Lösung mit dem Arduino vorhanden ist und ich dazu auf den Arduino Webseite den Eintrag "S.Port sensor library for FrSky" gefunden habe.

Verwendet

  • Arduino Mini
  • Temperatur Sensor
  • Diode
  • FrSky Empfänger mit Smartport
  • Fernsteuerung mit OpenTX

 

Ziel

Die erfasste Temperatur des Sensors soll auf der Fernsteuerung umgerechnet und auf dem Display angezeigt werden.

 

Funktioniert das wirklich?

Wie bei jeder neuen Sache, prüfe ich mit wenig Aufwand, ob das Zielvorhaben erreichbar ist. Praktisch ein PoC. Im Grunde formuliere ich meine Blogeinträge anfangs als "Proof of Concept", bevor daraus ein Beispiel wird und das gilt auch wieder für diesen Eintrag. Nur diesmal beschreibe ich das Testen mit.

In den Sourcen zur Bibliothek für den SmartPort, sind, wie auch bei den anderen Beispiele Codes vorhanden. Für mich ist der ein feststehender Wert zu wenig und deshalb ändere ich den zu sendenden Wert in der Loop Methode.

 #include <SPort.h>  
 SPortHub hub(0x12, 3);  
 CustomSPortSensor sensor(getSensorData);   
 int mSendingValue = 0;  
 int mCurrentMillis;  
 void setup() {  
  hub.registerSensor(sensor);  
  hub.begin();                
 }  
 void loop() {  
  hub.handle();   
  int current = millis();  
  if(current - mCurrentMillis < 100) {  
    return;  
  }  
  mCurrentMillis = current;  
  mSendingValue++;    
 }  
 sportData getSensorData(CustomSPortSensor* sensor) {  
  sportData data;   
  data.applicationId = 0x5900;        
  data.value = mSendingValue;  
  return data;  
 }  

Ist der Code auf dem Arduino geschrieben, muss eine Verkabelung zum Smartport hergestellt werden. Hierfür soll die Diode verwendet werden, aber vielleicht sollte ich die Beschreibung nochmal durchgehen, wofür die Diode gut ist. (Später habe ich die Diode doch nicht verwendet)

 

 

Sensor einbinden

Die Fernsteuerung mit dem OpenTX Betriebssystem kann nun eingeschaltet werden. Im Menü TELEMETRY (Abschnitt 11 auf der Xlite pro) für Sensoren, kann nun die Suche gestartet werden. Wenn der Arduino mit dem Code als Sensor funktioniert, sollte schon nach wenigen Sekunden der Sensor in OpenTX  gefunden werden.

 


 

Display Wiedergabe

Für den Bildschirm können mehrere Seiten eingerichtet werden, auf denen die Sensor Ergebnisse ausgegeben werden. Dazu muss über das Menü DISPLAY (Abschnitt 12 auf der Xlite pro) der Screen auf "Nums" eingestellt werden und dann muss darunter ein Feld mit "---" auf den neuen Sensor eingestellt werden.

 


Ist die Fernsteuerung auf den Hauptbildschirm geschaltet, muss man in meinem Fall den Stick für eine Sekunde nach unten ziehen, damit das eingerichtete DISPLAY gezeigt wird.

 

 

Echten Sensor anschließen

Das war schon alles, um sich an den SmartPort ran zuhängen. Natürlich macht der Anschluss nur Sinn mit einem echten Sensor.

Für dieses Beispiel verwende ich einen Temperatur Sensor, der über die I²C Schnittstelle angesprochen wird. An der Stelle hätte ich auch einen interessanteren Sensor nehmen können, dennoch soll das Beispiel schlicht bleiben. Und der Code für den Temperatur Sensor lässt sich in wenigen Zeilen eingeben.

 #include <SPort.h>  
 #include <Wire.h>  
 SPortHub hub(0x12, 3);  
 CustomSPortSensor sensor(getSensorData);  
 #define TMP102_ADD 0x48  
 void setup() {  
  Wire.begin();  
  hub.registerSensor(sensor);  
  hub.begin();                
 }  
 void loop() {  
  hub.handle();  
 }  
 sportData getSensorData(CustomSPortSensor* sensor) {  
  sportData data;   
  data.applicationId = 0x5900;  
  int raw = getTemperatureValue();  
  float result = raw * 0.0625;  
  data.value = raw;  
  return data;  
 }  
 int getTemperatureValue() {  
  Wire.beginTransmission(TMP102_ADD);  
  Wire.write(0x00);  
  delay(100);  
  Wire.endTransmission();  
  Wire.requestFrom(TMP102_ADD, 2);  
  while(Wire.available() < 2) { }  
  return ((Wire.read() << 8) | Wire.read()) >> 4;  
 } 


Wert-Ausgabe nur Ganzzahl

Nun haben wir einen Rohwert, der einem so nichts sagt. Eigentlich könnte der Wert am Arduino umgerechnet werden, aber ich hatte aus den Source Code gelesen, dass nur Ganzzahlen übermittelt werden.

 

LUA Script

Die Antwort für das Umrechnen der Ganzzahlen in einen Wert mit Nachkommastellen ist die Unterstützung von Lua Script auf OpenTX. Statt den Rohwert auf dem Display auszugeben, kann dieser durch einen Script umgerechnet werden und dann auf dem Display als lesbaren Wert ausgegeben werden.

Aber kommen wir zunächst zu dem Teil, was eigentlich ein LUA Script haben muss. Im Wesentlichen hilft hier die Dokumentation Telemetry Scripts.

 

Vorraussetzung

  • Das Lua Script muss auf der SD Karte in das Unterverzeichnis "SCRIPTS\TELEMETRY\".
  • Das Script muss die Namenserweiterung ".lua" haben.
  • Der Name des Lua Script darf nicht länger als sechs Zeichen lang sein, ansonsten wird das Script in der DISPLAY Einrichtung nicht angezeigt. Die Namenserweiterung ".lua" wird an der Stelle nicht mit gezählt.

Im Grunde sollte das Script mindestens die 'local function run' enthalten. Die "Init" Funktion ist optional und eigentlich sollte das auch ohne eine Background-Funktion funktionieren. Wichtig ist, dass die Methode am Ende einen Return-Wert ausgibt.

 local function run_func(event)  
      lcd.clear()  
      local receivedValue = getValue('TEMP')  
      local toDecValue = receivedValue * 0.0625;  
      lcd.drawText(10, 10, "Temperature", MIDSIZE)  
      lcd.drawText(10, 25, string.format("%.2f", toDecValue), MIDSIZE)  
      return 0  
 end  
 return { run=run_func }   


Einbinden des Scripts

Nun kann das Script auf die SD Karte und in die Fernsteuerung mit OpenTX gesteckt werden. Nach dem Einschalten kann über das Menü DISPLAY (auf der Xlite Pro befindet sich dieses in Abschnitt 12), auf Screen 1 von Nums gewechselt werden. Rechts von der Script Einstellung, kann man nun das Script myVal.lua auswählen.


 

Anschließen geht’s zurück auf den Hauptscreen. Mit dem 1 bis 2 Sek nach unten gezogenen Stick kann man vom Hauptdisplay auf den gescripteten Bildschirm (Display) wechseln. Fertig!

 

 

Schlusswort

Irgendwie habe ich im Internet keine Beschreibung gefunden, die in wenigen Schritten aufzeigt, was zu tun ist, um einen Wert auf dem Display anzuzeigen. Am Ende ist der Aufbau sehr übersichtlich, aber die kleinen Details, die man wissen muss, halten einen auf.

Natürlich werde ich an den Sensor mehr als nur ein Temperatur Sensor anschließen, schließlich kann man die Lage noch ermitteln und Abstände messen.

Was ich vermisse, ist ein Designer für die Bildschirm Ausgabe. Entweder habe ich den nicht gefunden oder für diesen Zweck gibt’s einfach keinen. Dabei wäre ein Designer nicht schwierig, aber es wäre zeitaufwendig diesen zu entwickeln (womit ich mir praktisch die Frage selbst beantworte).

 

Eintrag zu meinem Repository:

GitHub - ExampleFrskySensor

 

Sourcen

Sonntag, 5. September 2021

Nummernschildrahmen für den Crawler


Die nächsten Schritte sind oft Verbesserungen, aber ein Nummernschild war vor zwei Monate noch nicht fertig. Und wenn man sich auch das Heck vom Crawler ansieht, dann kommt einem schnell der Eindruck, dass zumindest das noch fehlt.


Verwendet:

  • 3D Programm wie 123D Design
  • Dienstleister oder eigenen 3d Drucker
  • Tamiya Schwarz Matt TS-6
  • Sehr dünne Kabel
  • Osram SMD LEDs, SMD 3430, PCLCC4, kalt weiß, 560mcd

 

Ziel

Für ein Bestehenden auf klebbaren Nummernschild, soll ein Rahmen entworfen werden, in dem SMD LEDs  verbaut werden können. Die Ansteuerung der LEDs erfolgt wiederum über den bereits bestehenden PWM Moduls. Die Größe des Rahmens orientiert sich an der Größe des Angefertigten Nummernschild.

 

Rahmen Modulieren

Im Grunde muss zunächst eine Fläche Gebildet werden, das größer ist als das Nummernschild selbst. Dann soll das Nummernschild in einer Vertiefung liegen, bzw. soll rund um ein Rand angelegt werden. Der Fragliche Teil ist die Beleuchtung, die von oben kommen soll. Dennoch sollte der Rahmen weiterhin sehr flach bleiben.

Normale LEDs sind ab 3mm bereits zu groß. Deshalb sah ich mich in der SMD Abteilung um. Gut das ich hierfür bereits welche auf Lager hatte, um diese in der Hand direkt zu vermessen und einzuschätzen wie die Beleuchtung an den Nummernschildrahmen angebracht werden kann.

Knifflig war der Kabelschach einzuzeichnen und zwar so, dass diese auch von einem 3D Drucker gedruckt werden kann (die ich am Ende doch nicht brauchte).


 

Hier habe ich mich zunächst mit dem 3D Builder aus Windows eine Vorprüfung starten können, welches mir dann entsprechende Meldungen zurück gab, wo die Stellen zu dünn sind. Diese Funktion war für mich Hilfreich, weil ich anfangs meine Einschätzung etwas zu dünn gewählt hatte.

Damit der Rahmen keine Klobigen Beleuchtungsansätze hat, änderte ich das Design an den Stellen und Rundete die Ecken etwas ab. Somit sah der Entwurf des Nummernschildrahmen wieder Natürlicher aus.



 

Jemand hat bestimmt einen 3D Drucker

Natürlich fragte ich ebenfalls  in der Copter Gruppe, ob mein Entwurf für einen 3D Druck geeignet ist und bekam hierzu auch die Bestätigung. Zudem bekam ich kurzerhand einen Ausdruck von meinem Nummernschild Entwurf.

 

Alternative einen Dienstleister

Wollte ich ausprobieren, kommt ein andermal.

 

Entscheidung der SMD LEDs

Die aktuell verwendeten Osram SMD LEDs hatte ich auf Lager. Daher gibt's zu der Entscheidung, außer der Baugröße keine Nennenswerte Eigenschaften, warum ich mich dafür entschieden habe.

Eine Besonderheit könnte jedoch sein, dass diese sehr hell sind. In meinem Fall muss ich jedoch die Helligkeit drosseln.

 

SMD LEDs

Ist sicherlich nicht für jeden etwas, in der Größenordnung zu Löten. Wichtig hierbei ist, eine Halterung zu haben, die auch dritte Hand genannt wird. Ohne wird das nichts.

Die zwei SMD LEDs werden Parallel geschaltet, womit ein größerer Strom auf einen Wiederstand berechnet wird. Im Datenblatt konnte ich entnehmen, dass die einzelne SMD LED  4,35V Spannung und 30mA Strom benötig. Allerdings müssen diese nicht bei voller Leistung leuchten.

Bei einer Spannungsversorgung von 5V, ist der berechnete Vorwiderstand 16 Ohm groß. Alternative verwende ich hier aus der E12 Reihe, einen Kohlebeschichteten Widerstand mit 100 Ohm. Der Widerstand selbst wird nicht im Nummernschildrahmen verbaut und wird daher aus Platzgründen im Verlegten Kabel untergebracht.

 

 

Die Steuerung der LEDs wird von dem PCA9685 Modul übernommen. Über den Arduino kann ich nachträglich die Helligkeit runter regeln.

 

Wie Verbinden?

Das lustige ist, wenn man die Falsch herum anschließt, dann leuchtet die SMD LED rot, statt weiß.

 

Verlöten

Die Kontakte müssen mit ein wenig Lötzinn angereichert werden, damit sich die Leitungen leichter anlöten lassen. Ich verwendete für die Verkabelung sehr dünne Kabel, damit der Rahmen nicht zu weit hervorgehoben werden muss von der Karosserie.

 

Lochbohren

Der Teil der mir immer etwas Sorgen bereitet sind Löcher in die Schöne Karosserie zu bohren. Zum Glück reicht hier nur eins.



 

Fertig

Das Nummernschild mit Rahmen empfinde ich als eines der Highlights zum Crawler. Das Nummernschild selbst als Aufkleber bestellte ich über Ebay, welches ich über den Händler RC-Decals gefunden habe. Neben den normalen Schildern, erhielt ich auf Anfrage auch Nummernschilder mit meinem Internetnamen „Codexzier“.


Download zu meine 3D Entwurf des Nummernschild:

Nummernschildrahmen in den Formaten *.sat, *.stl, *.wrl und *.x3d



Sonntag, 15. August 2021

Bau des FPV Crawler

In den letzten drei Monaten habe ich an meinem RC Crawler immer wieder weitergebastelt, so, wie gerade Zeit war. Das ist schon eine lange Bauzeit. Andere hätten vielleicht nur zwei bis drei Wochen benötigt.

Für den Bau kamen viele Anforderungen, zu denen ich mich erstmal einlesen musste. Was für ein Chassis, welche Karosserie, welche Farben, welche Farbkombination, Aufkleber, Zubehör, wie stark muss der Motor sein, Fahrtenregler für Crawler, Steuerelektronik für Licht und noch mehr.

Da der Bau doch viele verschiedene Bereiche anspricht, kam meine Freundin auf die Idee, dass ganze zusammen zu tragen und daraus ein Blogeintrag anzufertigen. Kommentar aus dem Off: <3 Beste Frau der Welt *zwinker

Hier breche ich nun meine eigenen Vorgaben für die bisherigen Blog Einträgen, die bisher nicht länger als zwei bis drei Seiten lang waren. Dennoch versuche ich mich mit den einzelnen Themen kurz zu halten und schreibe nur über die wesentlichen Informationen, die mich zu meinem Ziel gebracht haben.

 

Ein Chassi das mir gefällt

Eine Zeitlang wollte ich den 1:16 Crawler aufrüsten, aber am Ende wäre dieser für jede Herausforderung zu klein. Zumindest, wenn man in einem RC Modellhaus unterwegs ist, so ist das Gelände oft für 1:10 gebaut. Doch auch normal gewachsener Rasen im Garten, hält einen 1:16 Crawler schnell auf. Sicherlich kann man auch dort den richtigen Motor und Getriebe erweitern, damit auch der kleine Crawler die schwierigen Wege schafft.

Seit letzten Jahr fiel mein Blick auf ein Chassis mit CNC gefrästen Teilen und einem Carbon Rahmen. Leider gab's dazu keinen Namen zum Hersteller, was mich zunächst skeptisch sein ließ. Aber auch eine nennenswerte Bezeichnung fehlte. Danach suchen ging trotzdem, wenn die richtigen technischen Detailnamen wie RC, Crawler, CNC und Carbon verwendete. Auf YouTube konnte ich mir verschiedene Reviews ansehen, um mich von der Qualität und Aufbau zu überzeugen.

 

Kräftiger Servo

In meinen Bestand hatte ich bereits zwei passende Servos. Mit 142 Ncm Drehmoment, doppelt Kugelgelagert, Metall-Getriebe und mit digitale Ansteuerung kann der Crawler präzise gelenkt werden. Die Geschwindigkeit mit 60° in 0,17 Sekunden reichen ebenfalls aus. Natürlich gibt's bessere und, falls der Bedarf besteht, kann ich diese Komponente noch austauschen. Die Praxis wird zeigen, ob die Leistung ausreicht.

Die Angabe für das Drehmoment ist unterschiedlich. Einige geben diese in Kilo an und das klingt auch vertrauter. Wer wie ich damit aufgewachsen ist, die Angabe in Ncm zu lesen, hat erstmal keinen Bezug dazu, wieviel Kraft das nun wirklich ist. Ein Newton sind gerundet 102g (oder 1/9,81 kg). Wenn wir einen Servo mit der Drehmoment Angabe von 25Kg haben, dann sieht die Umrechnung folgendermaßen aus:

254,8 Ncm = 25 * 1/9,81 kg * 100

Wenn man einmal die Rechnung gesehen hat, könnte man auch über den Daumen die 25Kg mal 10 rechnen und die Einheit Ncm ranhängen. In der Größenordnung sind die 4,8 Ncm  fast nichts und wäre nur bei Mini-Servos relevant.

Dann kommt noch was. Kann man mit dem Servo theoretisch 25Kg heben? Ja, solange der Arm bei 1 cm Länge ist. Wäre der Servo-Arm bei 10cm, dann könnten nur noch 2,5Kg gehoben werden. Und das kann entscheiden sein, weil RC Autos immer einen Arm verwenden, der länger als ein Zentimeter ist. Bei meinem vorigen RC Straßenfahrzeug ist ein Servo mit einer Stärke von 35Ncm verbaut. Dieser wäre im Crawler bereits bei einem Arm von zwei Zentimeter überfordert und könnte in ungünstiger Lage die Lenkung nicht mehr bewegen.



Kräftiger Motor

Zum Testen nahm ich aus meinem alten RC Modell, dem Camaro, den Motor heraus und setzte diesen in das Chassis ein. Denn hier kam typischerweise ein 500ter Motor Größe hinein. Eine kleine Ritzel sollte mehr Drehmoment auf die Achsen bringen, aber ich rechnete nicht mit dem hohen Stromabnahme. Das führte zu einem Ende des Tamiya Standard Fahrtenregler.

Wie bei vielen Dingen suchte ich Rat im Internet und las mich durch die Foren. Die Konstante, die ich dann fand, ist die Empfehlung für Crawler einen Motor mit vielen Turns zu verwenden. Daher bestellte ich einen passenden mit 50 Turns und 8300 U/min. Wer das mit den Turns nicht kennt:
Die Turns sind die Wicklungen, die Pro Anker am Rotor des Motors gewickelt sind. Je nach Querschnitt und Anzahl Wicklung kann man zwischen Drehmoment und Drehzahl bestimmen. Bei einigen hochwertigen RC Modell Motoren kann nachträglich die Drehzahl und das Drehmoment geändert werden, durch das Verstellen des Winkels der Bürstenköpfen zum Kollektor.

Die Betriebsspannung für den Motor liegt bei 7,2V bis 7,4V. Mehr Spannung geht auch. Der Einsatz mit einem 3S und 11,1V würde ebenfalls funktionieren, aber dies verkürzt die Lebensdauer des Motors, wenn keine zusätzlich Kühlung montiert wurde. Genau genommen schmilzt der Isolierlack auf dem Kupfer und verursacht einen Kurzschluss. Kurz gesagt, die Nennleistung Leistung ist weg.

Mein damaliger Fachlehrer für Elektrotechnik sagte: Ein Motor kann mit höheren Spannungen arbeiten, wenn ausreichend Kühlung vorhanden ist. Spätestens die Fliehkraft, bringt jeden Motor zum Ende.



Fahrtenregler

So wie ich den Motor aus dem Camaro zum Test nahm, nahm ich, wie bereits beschrieben, auch den Fahrtenregler. Ich kann da nur abraten. Wenn der Fahrtenregler nicht mehr durchsteuert, weil dieser überhitzt ist, dann sollte man nicht warten bis dieser abgekühlt ist. Sondern die Teile wieder herausnehmen und geduldig auf die richtigen Teile warten.

Der neue Fahrtenregler QuickRun WP1080 von Hobbywing stellte meine vorigen verwendeten Regler in den Schatten. Allein, dass ich eine Programmierkarte zum Einstellen des Fahrtenregler verwenden konnte, brachte mich zum Staunen. Früher kannte ich nur Features wie die Bremsfunktion und Anfahrt mit antirutsch Funktion. Jetzt mache ich Bekanntschaft weiterer Funktionen, wie z.B. mit der elektronische Handbremse, auf Akkutyp einstellen, festlegen der maximale Energie für Vor- und Rückwärts, Fahrmodus, Bremskraft und mehr.

Eine Testfahrt mit dem richtigen Motor und dem Fahrtenregler zeigte mir, wie präzise auf unwegsamen Wegen gefahren werden kann. Damit meine ich Folgendes: Ich gebe ganz wenig Gas (ja ich weiß, es ist Strom!!) und das RC Fahrzeug bewegt sich ganz langsam und konstant über ein Hindernis.
Bei meinen zwei kleinen RC Crawler dachte ich immer, ich hätte die nicht gut geschmiert und würden deshalb über Hindernisse so vor sich hin ruckeln.

 

Lipo Akku

Hier hätte mein 6 Zellen NiMh Accu mit 5000mAh gereicht, aber der war schon sehr verbraucht. Fürs Erste ging mein intakter 2S Lipo mit 2400mAh. Entsprechen stellte ich den Fahrtenregler für diesen Akkutyp ein.

Nachdem Fertigstellen des Hauptteil des Baus, entschied ich mich doch einen neuen 2S Lipo Akku mit 7000mAh zu kaufen. Die Wahl hing allerdings von der maximalen einsetzbaren Größe ab, die im Chassis transportiert werden konnte.

Der neue Akku hat sich gelohnt. Die Fahrzeit liegt nun bei fast einer Stunde. Ganz genau konnte ich allerdings die Betriebszeit nicht bestimmen, weil ich beim Spazieren oft anhalte und die Gegend fotografiere.


Karosserie im Design der 1980iger

Naja, eigentlich hatte ich nach einem Pickup mit einem neueren Design gesucht, jedoch viel mir bei der Suche die Jeep Cherokee Karosserie immer wieder auf. Und jetzt erscheint mir der Fahrzeugtyp überall auch auf den Straßen. Das muss die suggestive Wahrnehmung sein.

Die neue ABS Karosserie ist nicht die Erste, die ich lackiert habe und daher lag die Anforderung nahe, dass ich mein Können und Erfahrungen steigere. Ok, ich bin kein Lackierer und meine Erfahrungen sind weiterhin ausbaufähig. Ich recherchierte in Foren, um herauszufinden, welche Schritte ich für ein gelungenes Ergebnis zu unternehmen hatte. Und obwohl ich mich gut vorinformierte hatte, zu nach beispielhaften Lösungen, traten beim Lackieren offene Fragen auf. 


Wahl der Karossiere

Eine Karosserie aus Lexan kam nicht in Frage, denn ich will etwas Schönes, das man auch prima ins Wohnzimmerregal stellen kann. Auf Pinterest und Instagram verglich ich verschiedene ausgebaute Karosserien. Schließlich fiel die Wahl der Karosserie auf den Jeep Cherokee von Injora.

 (Neben der unlackierten Karosserie ist ein Crawler im Maßstab 1:16)


Was wird zum Lackieren benötigt

Bei den Farbsprühdosen blieb die Wahl bei Tamiya. Die Farbwahl wiederum war schon etwas schwieriger. Denn diesmal sollten zwei Hauptfarben und weitere Aktzentfarben auf der Karosserie aufgetragen werden. Lange habe ich mich farblich von Cyberpunk 2077 inspirieren lassen und hätte am liebsten den Thorton Colby CX410 in Grün genommen.

Mit Hilfe von Adobe Color Picker (geht sicherlich auch mit anderen Farbmischer-Tools) suchte ich eine Farbkombination, die mit meiner Lieblingsfarbe Grün funktionieren. Überraschend sah ich, dass auch Lila dazu passt, welche ich später als Akzent einsetzte.

Ich kaufte wie immer von jeder Farbe eine Sprühdose und stellte erst beim Lackieren fest, dass die Menge nicht ausreichte. Am Ende habe ich zweimal nachbestellt. Zum Glück waren bei Conrad Electronic alle Tamiya Farben im Angebot. Eine Sprühdose kostete zu dieser Zeit 8,99€, statt 9,99€.

Farbe

Bezeichnung

Menge

Grundierung Weiß

Tamiya Surface Primer 180ml

1

Gun Metall

Tamiya Gun Metall TS-38 100ml

2

Grün (Candy-Lime)

Tamiya Grün (Candy-Line) TS-52 Spraydose

4

Klarlack

Tamiya Klar TS-13 100ml

3

Schwarz Glänzend

Tamiya Schwarz Glänzend TS-14 100ml

2

British Grün

Tamiya British Grün TS-9 100ml

1

Matt Schwarz

Tamiya Matt Schwarz TS-6 100ml

2

Für die Hauptfarbe Grün 'Candy-Lime' habe ich knapp drei Sprühdosen verbraucht. Die Sekundärfarbe 'Gun Metall' wurden komplett zwei Sprühdosen verbraucht. Für Klarlack (TS 13) hätte man auch mehr als drei nehmen können. Allerdings reichten auch die vorhanden drei Dosen für die vier Schichten aus.

 

Farben testen

Am Anfang war ich mir bei den Farben nicht sicher, wie diese aufgesprüht miteinander wirken. Hilfreich war hier für mich die nicht genutzte ABS Karosserie im Maßstab 1:16, welches aus Kabine und Motorhaube besteht. Zunächst kam die Grundierung, die ich jedoch aus Testzwecke nicht perfekt aufsprühte. Die verschiedenen Farben habe ich jeweils nur mit einer Schicht aufgesprüht. Das Abkleben mit dem richtigen Abklebeband ermöglichte mir harte Kanten zu den Farben abzubilden. Die von mir ernannte Testkarosserie eignete sich prima zum Ausprobieren der Sprühwerkzeuge. Natürlich ist der Verbrauch auf diese Weise höher, aber verbessert das eigene Gefühl und Umgang mit Sprühdosen.




Wann und wie wird lackiert

Idealerweise würde ein Raum zum Lackieren gut. Leider stand mir kein Raum zur Verfügung und deshalb fand das Lackieren im Freien statt. Das bedeutet, dass das Lackieren nur unter guten Wetterbedingungen stattfinden konnte. Schon ein wenig Wind führt dazu, dass sich beim Sprühen ein zu großer Teil das Lacks in der Luft verteilte. Bei meinem Verbrauch hätte man sicherlich eine halbe Sprühdose einsparen können.

Für das nächste Mal, würde ich eine extra Lackierbox bauen mit Entlüftung. Denn im Freien konnte ich nicht konstant durcharbeiten und nach vier Wochen verspürte ich die Ungeduld. Dies zeigte sich in Form von Fehlern, die in den letzten Schritten zu sehen sind.

 

Trocknen

Bei sonnigen Tagen trocknet der Lack sehr schnell. Schon nach 15 Minuten war die Farbe trocken und ließ sich auch nicht mehr verschmieren. An bewölkten Tagen braucht dies jedoch schon eine halbe Stunde. Was man nicht vergessen darf, ist die Karosserieteile gut zu schützen. Im meinem Umfeld hat ein Vogel Kot meine Karosserie getroffen. Zum Glück war das keine Stelle, die von außen zu sehen ist.

Am Ende, nach dem mehrere Schichten Klarlack fertig aufgesprüht wurden, ließ ich den Lack einen Tag durchtrocknen.

 

Lagern von Karosserie und Sprühfarben

Vielleicht habe ich mir das eingebildet, aber am Anfang hatte ich vorrübergehend die Sachen im Wohnzimmer abgestellt. Da ich auch im Wohnzimmer mein Homeoffice Platz aufgebaut habe, bekam ich des öfteren Kopfschmerzen. Das passt zu den Warnhinweisen auf den Sprühdosen. Nach dem Lackieren der Karosserie verdampft noch Hilfsmittel von der Sprühfarbe. Das ist mir früher nie aufgefallen, da ich zuvor die lackierten Teile in der Garage zum Trocknen stehen ließ. Zum Schutz vor Schmutz und Staub, habe ich die Teile in einem großen Karton in der Abseite abgedeckt und gelagert.

 

Zusammensetzen

Für die Karosserie liegen ausreichend Schrauben bei. Man muss jedoch darauf achten, dass man die Schrauben auch wie vorgesehen verwendet. Die Reihenfolge beim Zusammensetzten der Teile, wurde in der Anleitung nur teilweise bildlich erklärt. Ist allerdings nicht so schwer, als dass man sich einige Reihenfolgen nicht selbst erschließen kann. Umso umständlicher war die Größe der Teile beim Zusammenschrauben.


Löcher bohren

Auf dem Dach sollte nun der Dachgepäckträger montiert werden. Hierfür mussten Löcher ins Dach gebohrt werden, damit die Montage funktionierte. Damit die Löcher nicht verreißen, habe ich die Stellen mit einem spitzen Gegenstand vorgekörnt. Anschließend habe ich eine Bohrspitze mit einem kleinen Durchmesser begonnen und die Löcher millimeterweise mit einer größeren Bohrspitze aufgebohrt bis die Zielgröße erreicht war. In meinem Fall mussten für den Dachgepäckträger 3mm und für die Licht- und FPV-Leitungen 6mm Löcher gebohrt werden. Damit die 6mm Löcher nicht so konturlos werden, verwendete ich die Halterungen für 5mm LEDs (Auf dem Foto kaum zu erkennen).


Weitere Details

Das Nummernschild habe ich mir über den Ebay Händler RC-Decals bestellt und freute mich über die Möglichkeit, dies mit meinem Internet Nickname bedrucken zu lassen. Allerdings wollte ich den Aufkleber nicht direkt auf die Karosserie kleben, denn dass erschien mir doch zu flach. Deshalb entschied ich einen Rahmen für das Nummernschild zu entwerfen, an dem auch LEDs angebracht werden können.

Geplant waren weitere Aufkleber. Nun sind da meine Erfahrungen eigene herzustellen gleich null und die Aufkleber, die ich bisher gefunden habe, gefielen mir nicht. Zudem wollte ich keine Werbetafel fahren. Sieht man sich die Fahrzeuge in Cyberpunk an, sind einige Beschriftungen zu erkennen. Beschriftungen an Klappen, an Erweiterungen, an Anschlüssen und andere Markierungen. Das wollte ich, aber dann habe ich diese Idee verworfen.

 

Gepäck

Auf dem Dachgepäckträger waren mir zu wenig Gepäck. Die Holzkiste, die ich bei einem Set bekam, fand ich nicht sonderlich passend (ist aber noch drauf) und auch eine Tonne wollte ich nicht. Ich habe mir als Alternative eine SD Karten Schutzhülle in schwarz lackiert und zusätzlich eine Funktion gegeben. Die eingelassene Solarplatte versorgt einen Mikrokontroller, der wiederum 5 LEDs zum Blinken bringt.

Einen weiteren passenden Kunststoffbehälter habe ich in Matt schwarz lackiert. Dieser bekam die Aufgabe die FPV Funktion zu beherbergen. Hier kommt ein Lipo Akku hinein, der die Kameras und den FPV Sender versorgt. Der FPV Sender passt ebenfalls hinein und durch eine Bohrung in das Kunststoffgehäuse, konnte die 5GHz Antenne angebracht werden.




Die Flutlichtscheinwerfer auf dem Dach und an der Frontstoßstange hatten zuvor nur sehr helle und weiße LEDs. Diese habe ich durch die RGB LEDs WS2812b ersetzt und sie werden durch einen Arduino angesteuert.



 

Elektronik und Steuerung

Neben dem Empfänger, Fahrtenregler und Servo zum Lenken, kamen noch die LEDs und in meinem Fall die FPV Kameras hinzu. Eine FPV Kamera ist nicht das Highlight, doch das eine zweite als Rückfahrkamera dient schon. Zumindest habe ich bis heute noch keinen anderen Eintrag im Internet gefunden.

Für die LEDs hätte ich ein fertiges System verwenden können, aber keins der System sagte mir wirklich zu. Denn hier sollte jede LED einzeln steuerbar sein und das funktioniert prima mit einem Arduino.

 

Arduino für die Signalverarbeitung

Klingt etwas hoch gestochen, wenn man von Signalverarbeitung schreibt. Kurz gesagt bedeutet das, dass die Signale vom Receiver eingelesen und entsprechend für die Zielausgabe übersetzt werden. Für dieses Projekt werden hauptsächlich die LEDs angesteuert.

Insgesamt stehen vier PWM Signale zum Einlesen bereit. Eigentlich fehlt aber noch ein fünftes. Das Fünfte soll die Fahrgeschwindigkeit prüfen, um das Bremslicht zu kontrollieren. Das ist mir jedoch erst viel später eingefallen.

Das Signal zum Lenken lässt sich ohne Störung auslesen, womit dann der erste Eingang zum Arduino verbunden wurde und damit die Blink LEDs stuerte. Die drei weiteren Kanäle wurden ebenfalls zum Schalten der LEDs und RGB LEDs eingesetzt. So kann ich dann an der Fernsteuerung das Fahrlicht einschalten und die Flutlichter ihre Animation starten. 

 

LEDs durch LED Treiber ansteuern

Die Helligkeit könnte eigentlich durch die verwendeten Widerstände festgelegt werden. Ich will jedoch die LEDs mit einem LED Treiber einzeln einstellbar haben. Das ermöglicht auch Effekte zu erzeugen wie sanftes Aufleuchten oder die Blinker für das Lenken einzustellen.

Hierzu passte für den Einsatz der PCA9685 mit 16 PWM Ausgängen. Das ist auch die Menge an Ausgängen, die für den Crawler tatsächlich benötigt werden.

  • 2x Front Stoßstangen Licht
  • 2x Front Scheinwerfer
  • 2x Front Standlicht
  • 2x Front Blinker
  • 2x Heck Lichter
  • 2x Heck Blinker
  • 2x Heck Stoßstangen Licht (aktuell noch nicht montiert)
  • 2x Nummernschild

Wenn jedoch mehr PWM Ausgänge benötigt werden, kann ein weiteres Modul verbaut werden, dank I²C Bus.


RGB WS2812b für Flutlicht

Die LEDs in den Flutlichter haben dieselbe Breite wie die Streifen von den WS2812b. Daher ist ein Austausch simpel. Die Anzahl der RGBs ist natürlich abhängig von der Breite des Scheinwerfergehäuse. In den Dachscheinwerfer passen 20 und für die Stoßstange können 11 eingesetzt werden.

Aus mir nicht ersichtlichen Gründen ist mir zweimal bei beiden Streifen die erste RGB LED ausgefallen. Zuviel Spannung ist ausgeschlossen, weil hier in der ganzen Schaltung 5V verwendet werden. Zu dem Thema habe ich einen Eintrag gefunden, aber keine Antwort, was wirklich das Problem verursacht. Das erste Mal, dass zweimal derselbe Defekt auftaucht. Hier ist der Aufbau nicht anders als bei meinem Quadrocopter und auch hier verwendet ich für die RGB LEDs einen extra Step Down Stromversorgung. Wenn ich den Fehler gefunden habe, dann schreibe ich einen Blogpost dazu.

 

Piezo Summer als Hupe

Nach einer Stunde und verschiedenen Tönen und Melodien, klingelten meine Ohren. Ehrlich gesagt tat das in meinen Ohren weh, weshalb ich mich entschied die Hupe erstmal auszulassen.

Alternative habe ich noch einen MP3 Modul, dass mit einfachen Lautsprechern funktioniert. Aber als Hupe eher ungeeignet. Also werde ich da noch etwas forschen müssen.

  

Gimbel für Fahrkamera

Bereits mein kleiner 1:16 Crawler hat einen Servo, mit dem nach links und recht die Kamera schwenken kann. Um da noch einen draufzusetzen, kann jetzt mein neuer Crawler auch hoch und runter kippen. Hierfür verwende ich (noch) ein bestehendes Gimbal System, das aber kein passende Steckhalterung für die Kamera hat. Deshalb habe ich die Kamera provisorisch mit Heizkleber angebracht.


So ganz stimmt mich das noch nicht zufrieden. Im Grunde verwendet der Aufbau viel Raum und mir fehlt die Möglichkeit, nachträglich die Kamera in der Höhe zu verstellen.

Von der Fernsteuerung konnte ich die Bewegungsgrenze einstellen, so dass die Kamera im Gehäuse nicht mehr sinnlos aneckt. Das geht bei OpenTX im Bereich des Mixer, wo auch das Steuersignal umgekehrt werden kann, wenn z.B. ein Servo sich in die umgekehrte Richtung bewegen sollte.

In der Entwicklung habe ich ein eigen entworfenes Gimbal. Muss allerdings noch gedruckt werden. Und dann muss sich noch zeigen, ob meine Lösung auch wirklich funktioniert.

 


Fehler finden und Ausbessern

Nach den ersten zwei Spazierfahrten traten erste Fehler auf. Die Verkabelung war in Ordnung, aber die Kräfte, die auf den Leitungen auftraten waren stärker. Alle betroffenen Stellen habe ich neu verlötet und zusätzlich mit Heizkleber verstärkt.


Der zweite Mangel sind die Magneten, die die Karosserie festhalten. Denn die sind eigentlich für das Anheften von Lexan Karosserien gedacht. Für ABS Karosserien reichen vier in der kleinen Größe nicht aus.

Bei zu ruckartigen Bewegungen kam es dazu, dass die Magnetverankerung nicht hielt und somit sich die Karosserie sich ablöste. (Verbesserung ist in Arbeit.)

Die Rückfahrkamera war im Gegensatz zur Frontkamerahalterung nicht festgeschraubt und ist aktuell noch aus LEGO Teilen aufgeklebt. Nicht ideal und auch etwas schwer. Allerdings nur ein Provisorium.

Natürlich wird dies durch ein Eigenentwurf ersetzt und muss noch gedruckt werden. Hier bin ich jedoch noch nicht sicher, ob ich das noch überarbeiten kann. Das Beste daran ist, dass dort auch die Kamera nach links und rechts geschwenkt werden kann.

 

Schlusswort

Das Ergebnis kann sich sehen lassen. Auch wenn ein paar Macken am Lack sind oder das Kabel-Management nicht perfekt ausgelegt ist. In Summe habe ich einiges geschafft und ein Teil meiner Erfahrungen erweitern können. Besser wäre jemanden zu kennen, der sich genau mit der Materie beschäftigt.

Foren wären toll, wenn man nicht am Ende so viel Informationen selektieren müsste, welche Lösungen für einen selbst geeignet sind. Am Ende bin ich mit dem eigenständigen Erschließen auf eine ähnliche Zeitspanne gekommen. Als Zeitmaß sehe ich die damalige Forenhilfen, bei denen ich am Ende keine Antwort bekam und ich die Lösung selbst gefunden oder entwickelt habe. Ok, ganz ohne Foren lesen bin ich nicht ausgekommen. Empfehlung für den Fahrtenregler war in den Foren sehr eindeutig.

Die Firmware für die Beleuchtung braucht noch etwas feintuning. Hier sollen die LEDs dimmen beim Ein- und Ausschalten und mit dem vierten Kanal der Modus und Helligkeit eingestellt werden. Aber das habe ich noch in Arbeit...




Ameisen Simulation und andere Dinge

Wer lange sich schon mit C# beschäftig, hat sicherlich schon mal was von AntMe gelesen oder gehört. Diese Idee hatte ich aufgegriffen und mi...