Selbst geblitzdingst...

…mit einem ATTINY 85

von Rainer Kembügler.​

Antikollisionslichter, neudeutsch ACL genannt, werden immer beliebter. Das nicht zuletzt deshalb, weil sie die Sichtbarkeit eines Modells für den Pilot und andere Luftraumteilnehmer erhöhen. Diese Blitzer sind sehr hell, was im Umgang eine gewisse Vorsicht erfordert.

acl_1.jpg

Kern des ACL ist eine leistungsstarke LED. Um die geht es hier aber nicht. Es gibt eine große Auswahl an fertigen Produkten oder für geübte Bastler auch Bauelemente, um eigene Projekte zu realisieren. Problem bei der Sache ist aber der Blitz. Der muss von einer vorgeschalteten Elektronik erzeugt werden. Ein weiteres Problem ist der Strom. Klassische Schaltungen haben vor der LED einen Vorwiderstand. Das ist ein probates Mittel, verheizt aber am Vorwiderstand Leistung, was nicht sein muss. Daher bevorzuge ich den Einsatz einer sogenannten Konstantstromquelle, auch KSQ genannt. Viele dieser KSQ lassen sich über ein Steuersignal „fernsteuern“. Und genau hier setzt die von mir beschriebene Lösung an.

Mein Ziel war es, eine Steuerung zu bauen, die von einem freien Servokanal versorgt wird und über das Servo-Signal gesteuert wird. Am Ausgang der Steuerung wird ein Schaltsignal bereitgehalten, das weiter zur KSQ geleitet wird, um die LED des Blitzers entsprechend mit Leistung zu versorgen.
Eine sehr kompakte und leistungsfähige Lösung hat SM-Modellbau mit dem LED-Stromregler im Programm. Damit kann man, je nach vorhandener LED-Hardware, zwischen verschiedenen Stromversionen wählen (300 mA, 500 mA, 750 mA, 1000 mA oder 1500 mA). Die max. zulässige Versorgungsspannung (üblicherweise der Antriebsakku) beträgt 28 V, was den Einsatz auf max. 6s Antriebe begrenzt.


Für 8s Antriebe kann ich die Meanwell LDD-Serie empfehlen, die bis max. 36 V Eingangsspannung spezifiziert ist (LDD-1000L)

Es gibt eine Vielzahl von Microcontrollern (µC], die diese Aufgabe erledigen können. Viele moderne µC haben aber lediglich einen Versorgungsspannungsbereich bis 6 V. Das ist für viele RC-Systeme, die Hochvoltservos bis 8,4 V einsetzen, aber nicht genug.

Daher bin ich letztlich beim sog. DigiStump gelandet. Das ist eine kleine µC Platine, die den ATTiny 85 nutzt und einen Spannungsregler an Bord hat, der mit Versorgungsspannungen bis 12 V zurechtkommt. Zudem ist die Platine so ausgeführt, dass man sie direkt in einen USB-A Anschluss am PC einstecken kann und somit kein extra Programmieradapter nötig ist.

Der ATTINY85 übernimmt die Aufgabe bei einer bestimmten Servo-Pulslänge ein bestimmtes Blitzmuster am definierten Ausgang bereitzustellen. Dazu muss der µC natürlich entsprechend mit einem Programm versorgt werden. Da gibt es sicher viele unterschiedliche Möglichkeiten. Ich habe mich für den Weg einer Schleife entschieden, die zuerst die am Servoausgang anliegende Pulslänge abfragt und dann über verschiedene Bedingungen die entsprechende Schleifenprozedur abarbeitet. Dabei nutze ich der Einfach halber die Arduino IDE-Umgebung, da sie recht weit verbreitet ist. Damit der DigiStump entsprechend programmiert werden kann, ist eine zusätzliche Board-Bibliothek erforderlich. Diese kann bei Github heruntergeladen werden.

Der für den Arduino Boardmanager nötige Link ist dort genannt.

Der Verdrahtungsplan sieht wie folgt aus:

DigiSpark.jpg

Vom Servoanschluss am Empfänger gehen die Plus- bzw. Minusleitungen zu den Spannungsversorgungspins am DigiStump. Das Servosignal wird bei meiner Lösung an den Ausgang P2 angeschlossen. Das Steuersignal für die KSQ liegt dann am Ausgang P0. Der P1 ist intern mit der roten LED auf der Platine verbunden und wird als Monitor genutzt, damit man die Blitzfunktion auch ohne angeschlossene KSQ sehen bzw. die Servoposition einstellen kann.

Der komplette Aufbau sieht in meinem Fall so aus:

acl_2.jpg

Die Verbindung zum Antriebsakku erfolgt über die rote BEC-Steckverbindung. Der Ausgang ist so beschaffen, dass man den Stecker direkt an den SM LED Stromregler anschließen kann.

Der Arduino Code:

// Code by Onki.
// Onkisoft :-)
// Einfacher ACL Steuersignal-Generator abhängig vom Servosignal (Pulslänge)
// Version 1.0 vom 21.01.26

int RXin = 2; //Pin an den das Servosignal angeschlossen wird
int AUXout = 0; //LED Monitor Ausgang auf dem Board
int AUX1out = 1; // ACL Steuer-Ausgang zur Konstantstromquelle
int Blitz = 50; //Blitzdauer in ms
int Pause = 50; //Blitzpause in ms
int Sequenz1 = 1500; //Länge der Pause nach der Blitz-Sequenz bei Trigger 1
int Sequenz2 = 850; //Länge der Pause nach der Blitz-Sequenz bei Trigger 2
int Trigger1 = 1400; //Pulslänge zum Trigger von Blitzsequenz 1
int Trigger2 = 1900; //Pulslänge zum Trigger von Blitzsequenz 2

unsigned long number;


void setup()
{
pinMode(RXin, INPUT); //Definition des Servo-Eingangssignals
pinMode(AUXout, OUTPUT); //Definition des MOnitorausgangs mit on-board LED
pinMode(AUX1out, OUTPUT); //Definition eines zusätzlichen Ausgangs
//Serial.begin(115200); //Festlegung der Baudrate der Seriell-Konsole
}

void loop()
{
number = pulseIn(RXin, HIGH); //Definition der Pulslängenmessung
//Serial.println(number); //ermittelte Pulslänge wird in der Seriellkonsole ausgegeben
//Blitzsequenz 2
if (number > Trigger2)
{
digitalWrite(AUXout, HIGH);
digitalWrite(AUX1out, HIGH);
delay (Blitz);
digitalWrite(AUXout, LOW);
digitalWrite(AUX1out, LOW);
delay (Pause);
digitalWrite(AUXout, HIGH);
digitalWrite(AUX1out, HIGH);
delay (Blitz);
digitalWrite(AUXout, LOW);
digitalWrite(AUX1out, LOW);
delay (Pause);
digitalWrite(AUXout, HIGH);
digitalWrite(AUX1out, HIGH);
delay (Blitz);
digitalWrite(AUXout, LOW);
digitalWrite(AUX1out, LOW);
delay (Sequenz2);
}
//Blitzsequenz 1
else if (number > Trigger1)
{ digitalWrite(AUXout, HIGH);
digitalWrite(AUX1out, HIGH);
delay (Blitz);
digitalWrite(AUXout, LOW);
digitalWrite(AUX1out, LOW);
delay (Pause);
digitalWrite(AUXout, HIGH);
digitalWrite(AUX1out, HIGH);
delay (Blitz);
digitalWrite(AUXout, LOW);
digitalWrite(AUX1out, LOW);
delay (Sequenz1);
}
else
{
digitalWrite(AUXout, LOW);
digitalWrite(AUX1out, LOW);
delay (300);
}

}

Zuerst werden die Variablen festgelegt. Darunter die Blitz- und Pausendauer. Für meine Zwecke haben sich 50 ms bewährt, dies kann aber jeder individuell gestalten. Man sollte die Verlustleistung der LEDs im Auge behalten und einen max. Leistungszyklus von etwa 10% beachten. Das bedeutet, die LED wird nur zu etwa 10% der Zeit eingeschaltet, da sie nicht für Dauerbetrieb ausgelegt sind. Nach der Festlegung der Variablen werden die Ein- und Ausgänge definiert.

In der Schleife wird zunächst die Pulslänge am Servoausgang abgefragt und in den folgenden Schleifen ausgewertet. Pulslängen unter 1400 µs bewirken nichts. Das ACL ist quasi abgeschaltet. Überschreitet die Pulslänge 1400 µs erfolgt ein Doppelblitz (50 ms Blitz, 50 ms Pause) gefolgt von einer Pause von 1,5s. Damit ergibt sich eine Sequenzlänge von etwa 1,7s.

Bei einer Pulslänge größer 1900 µs wird ein Dreifachblitz ausgegeben, dem eine 850 ms Pause folgt. Das ergibt eine Sequenzlänge von knapp 1,2 s. Diese Einstellung ergeben für einen 3-Stufenschalter am Sender, der die Funktion bedient in einer Stellung kein Blitz, in der Mittelstellung den Doppelblitz und in der entgegengesetzten Stellung den Dreifachblitz. Dies kann durch ändern der Zeiten natürlich flexibel angapasst werden.

Wenn soweit alles eingestellt ist, muss der Programmcode noch kompiliert und anschließend übertragen werden. Dabei gibt es beim DigiStump eine Besonderheit. Nach dem Kompilieren wird in der Statusleiste angezeigt, dass man den DigiStump einstecken soll. Beim Einstecken wird der sog. Bootloader gestartet (LED auf dem Board blinkt schnell) und so eine Übertragung des Codes ermöglicht. Dies ist nur innerhalb einer sehr kurze Zeit möglich, weshalb man auch erst nach der Aufforderung den DigiStump einstecken darf. Nach der Übertragung ist das Teil Einsatzbereit und kann beispielsweise an einem Servotester ausprobiert werden. Die OnBoard LED gibt an, wie der Ausgang zur KSQ geschaltet wird. Das Blinken nach dem Einschalten ist der Grund, weshalb Monitorausgang und Steuerausgang für die KSQ getrennt behandelt werden. Ansonsten würde beim Einschalten des Modells sowohl das ACL als auch die rote LED auf dem Board blinken, was zu Irritationen führen kann.

Wenn alles funktioniert, kann man den Aufbau einschrumpfen. Um jederzeit Anpassungen vornehmen zu können, empfiehlt es sich, den USB-Anschluss separat mit einem Schrumpfschlauch zu versehen, der zur Umprogrammierung vorübergehend abgezogen werden kann.

Damit hat man eine einfache und flexible Lösung für ein ACL.
 
Tolle Idee, warum bin ich da noch nicht darauf gekommen, Mist schon wieder ein interessantes Projekt :-)
Ich habe für andere Anwendungen die Digispark Schaltungen im Einsatz wo ja auch dem ATtiny85 basiert. Da habe ich noch ein paar herumliegen. Mit den Dingern kann man "böse" Sachen machen.
 
Danke für das Feedback.
Als Blitzer nutze ich bis dato die von unilight.
Sind aus meiner Sicht immer noch das Optimum.
Wenn ich allerdings wüsste, was da für LEDs genutzt werden, könnte ich die nötige Platine auch selber zusammenzimmern.
Mit anderen PowerLEDs hab ich das schon mal ansatzweise gemacht.

Ich will damit unilight nicht das Geschäft vermiesen aber als Elektroniker jucken da halt schon die Finger.
Ein Maurermeister kauft sich ja auch kein Fertighaus :-).
 
Das hängt von den LEDs selber ab bzw. der KSQ.
Die muss halt imstande sein, die LED zu bestromen.

Aber 2x40W sind schon sehr grenzwertig. Viel hilft nicht viel.
Die arme Stromversorgung.
 
Hallo Onki,
dein Blitzer-Selbstbau hat mich angeregt, mich mal wieder mit Arduino zu beschäftigen. Ich habe den Digispark verwendet und etwas Mühe den passenden Bordmanager zu finden. Als KSQ habe ich einen von SM verwendet. Deinen Schaltplan musste ich noch um eine Verbindung zwischen dem Akku-Minus und dem Empfängerausgang-Minus (bzw. GND) ergänzen.
Jetzt suche ich noch passende superhelle kleine LED's
Beste Grüße, Erhard
 
Das mit der separaten Massse greift aber nur wenn ein separater Versorgungsakku für die Beleuchtung genutzt wird, was ich persönlich als vollkommen unnötig ansehe.
Die Schaltung legt zugrunde, dass ein BEC-Regler genutzt wird. Dessen Masse ist intern verbunden mit dem Akku.
Für Opto-Regler ist die Schaltung unbrauchbar wenn kein separater Beleuchtungsakku genutzt wird, weil durch die Verbindung zum Akku die Trennung aufgehoben ist.
 
Hallo onki,
Dein Bericht hat mich sehr neugierig gemacht, habe mir gleich ein paar Digispark bestellt und mal ganz naiv losgelegt.
Programmieren war mal vor 25 Jahren ;-)

Habe folgendes installiert:
- arduino-1.8.19-Windows7
- micronucleus-2.0a4-win, davon gibt es allerdings auch die Version
DigistumpArduino-master-2.0a4 und wie ich die ganzen Beispiele verwenden kann weiß ich jetzt noch nicht?

Habe mit arduino-tool Deine "Arduino Code Blitzsequenz" kompiliert, exportiert und mit micronucleus --run Datei in den Digispark laden können, funktionieren tut aber nichts!!
Welches Board u. Programmer muß ich auswählen, was mache ich falsch??
Habe schon alle ohne Erfolg versucht.

1775688477551.png
 
Hallo BWFlieger, hat mich auch einige Stunden beschäftigt, den Digispark adressieren zu können. Man braucht die passenden Boardverwalter ... bei mir hat so funktioniert.
Digi-2.jpeg
Digi-3.jpeg


viel Erfolg,
Erhard
 
Wichtig ist noch den Digistump erst nach der Aufforderung in den USB-Port zu stecken.
Der Bootloader ist nur die ersten Momente nach dem hochfahren des µC aktiv (LED blinkt) und nur so kann der Code hochgeladen werden.
 
Hallo onki, Danke für die schnelle Antwort.

Wenn ich die HEX-Datei mit "micronucleus.exe(2.0a4-win)" programmiere,
werde ich aufgefordert den Digispark(DS) einzustecken, die Programmierung legt dann sofort los und bekomme direkt Meldung, da leuchtet die grüne Led, sonst tut sich nichts.

1775837808074.png


Leider gibt es die Adressen
"http://digistump.com/package_digistump_index.json" und
"http://digistump.com/wiki/digispark/tutorials/connecting" nicht mehr!!

Kennst Du eine Alternativadresse oder kannst Du die orginalen digistump-BoardmangerDateien irgendwie veröffentlichen/schicken, denn ich hab bis jetzt nur das hier gefunden?

Installiert u. eingestellt:
1775859126974.png
1775859245410.png


habe damit alle möglichen Varianten durchexerziert => geht nicht:
- grün bleibt an rot blinkt nicht, auch nicht nach 2 Minuten.
- USB-Anschluß mit diesem DS ständig an-, und abgeschaltet!
-> Daß seit dem ersten "umprogramieren" des DS!!

Hilfe, ich komme mir wie der Ochs vorm Berg vor.
 

Anhänge

  • 1775837292686.png
    1775837292686.png
    11 KB · Aufrufe: 0
  • 1775837367132.png
    1775837367132.png
    45,5 KB · Aufrufe: 0
Ich nutze aktuell die "Digistump AVR Board" Bibliothek Version 1.6.7.
Dort habe ich "Digistump Default 16,5MHz" als Board gewählt.
Ein Versuch gerade mit einem schachtenneuen Digistump war erfolgreich.
Einfach nach Aufforderung das Teil einstecken und es wird der Code übertragen.
als Programmer ist bei mir der Bootloader "Micronucleus" angezeigt.
 

News

Neueste Beiträge

Ansicht hell / dunkel umschalten
Oben Unten