Der nächste Prototyp wird auf einer Streifen-Lochraster-Platine gebaut und mit MOSFET in einer anderen Baugröße (D-Pak). Die TO220 Gehäuse sind schon mächtig groß und nix für kleinere Flieger... Ich werde auch darüber hier kurz berichten, allerdings mußte ich die MOSFET bestellen, dauert wieder eine Woche...
Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Einklappen
X
-
Kyrill
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Der nächste Prototyp wird auf einer Streifen-Lochraster-Platine gebaut und mit MOSFET in einer anderen Baugröße (D-Pak). Die TO220 Gehäuse sind schon mächtig groß und nix für kleinere Flieger... Ich werde auch darüber hier kurz berichten, allerdings mußte ich die MOSFET bestellen, dauert wieder eine Woche...
- Top
-
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Hallo Peter,
das hört sich doch alles gut an !
Wir können ja mal beizeiten beratschlagen, ob sich daraus eine Platine machen lässt. Ich habe im Moment zwar nicht üppig Zeit, aber Lust hätte ich schon dazu.Grü�e
Bernd
- Top
Kommentar
-
Kyrill
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Hallo Bernd!
Eine Leistungsplatine ausgelegt auf 3S Betrieb ohne großen Schnickschnack aber dichter gepackt wäre nicht schlecht. Ich habe jetzt vor nochmal eine Platine mit allen 10 Ausgängen zu basteln mit MOSFET im D-Pack Gehäuse. Die wird aber auch nicht wirklich kleiner als die erste. Vielleicht ein wenig leichter aber nicht kleiner.
Noch zwei Ideen, da bräuchte ich deine Meinung, bei der ersten weil ich nicht weiß ob das Programm Knob die anderen Funktionen deiner Software stören würde:
Meinst du in der leeren "Loop" Schleife kann man das Programm "Knob" einbringen, so dass man direkt an den Licht Arduino einen Poti anschließen kann zwischen - A1 + ? An einen anderen Eingang als Schalter eine Steckbrücke bei Bedarf, dann bräuchte man nur einen kleinen Poti mit auf die Platine bauen und könnte direkt ohne die Fernsteuerung oder einen Servotester die Platine in Betrieb nehmen und alles nach Herzenslust austesten.
Ein weiteres Lichtpattern was ein MG-Feuer nachbildet und zwischen Flightmode und Landingmode zusätzlich eingeblendet wird. Ich steuer die Sache per Fernsteuerung über einen Poti und könnte so eine 4. Schaltposition dazwischen schieben. Will man nur Landelicht schiebt man über die Stellung MG hinweg auf Landing wo dieses Pattern wieder ausgeschaltet ist. Wäre doch ein nettes Gimmik für Warbirds.Zuletzt geändert von Gast; 15.01.2015, 14:30.
- Top
Kommentar
-
Kyrill
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Bernd ich brauche nochmal deine Hilfe.
Ich habe jetzt den Spannungsteiler angeschlossen, der funktioniert auch, allerdings wird nicht auf ein Pattern umgeschaltet, sondern die cpu geht gleich schlafen und alles erlischt. Das wäre bei einem Nachtflug aber nicht sinnvoll. Ich habe versucht ein Pattern LowBatt einzufügen bei dem dann verschiedene Lichtquellen ab oder dunkler geschaltet werden. Allerdings springt die Software auch hier gleich in den Tiefschlafmodus. Was mache ich falsch, wie bekomme ich die Sache so eingestellt, dass die CPU angeschaltet bleibt?
Der code siht jetzt so aus:
#include <UniPWMControl.h>
#include <UniPWMMacros.h>
//#define ONBOARD_LED 13 //ersetzt durch TESTDIODE
// Pins for LEDs
#define LANDING_LIGHT 6 // landinglights
#define POSLIGHTS 3 // green/red constantly on
#define TAIL_ACL 5 // white single flash
#define BEACON_LIGHTS 8 // red blink (Beacon)
#define WING_ACL 10 // White double flash, alternating with tail acl
//#define BOT_POSLIGHT 11 // white ultra slow blink
//#define REAR_LIGHT 12 // slow blink, no driver, use external resistor
#define LANDING_SERVO 9 // use pin 9 for analog servo
#define RECEIVER_INP 2 // receiver input signal
#define TESTDIODE 13 // Testdiode 13
// constant lights: on, off, dimmmed (max 255)
SEQUENCE( constOn ) = { HOLD( 200 ) };
SEQUENCE( constOff ) = { HOLD( 0 ) };
SEQUENCE( dimmedOn ) = { HOLD( 50 ) };
// single flash 200ms, dark 1200ms
SEQUENCE( singleFlash ) = { PAUSE(10), CONST(250,3), PAUSE(80) };
// double flash 2x200ms, pause 800ms
SEQUENCE( doubleFlash ) = { PAUSE(10), CONST(250,3), PAUSE(10), CONST(250,3), PAUSE(80) };
// fader
SEQUENCE( fader ) = { PAUSE(20), RAMP(0,200,150), RAMP(200,0,150 ) };
// beacon - 2 ramps up - hold - 2 ramps down
SEQUENCE( beacon ) = { RAMP(0,45,20), RAMP(45,250,20), CONST(250,20), RAMP(250,45,20), RAMP(45,0,20), PAUSE(20) };
// beamer
SEQUENCE( beamOn ) = { CONST(0,40), RAMP(0,250,20 ), HOLD(250) };
SEQUENCE( beamOff ) = { RAMP(250,0,20), HOLD(0) };
// beamer retract servo
#define RETRACT_POS 10 // 238
#define ASCEND_POS 255 // 198
SEQUENCE( retract ) = { RAMP( ASCEND_POS, RETRACT_POS, 100 ), HOLD( RETRACT_POS ) };
SEQUENCE( ascend ) = { RAMP( RETRACT_POS, ASCEND_POS, 100 ), HOLD( ASCEND_POS ) };
SEQUENCE( retracted) = { HOLD( RETRACT_POS ) };
UniPWMControl ctrl;
void setup()
{
enum { PATTERN_STARTUP, PATTERN_FLIGHT, PATTERN_LOW, PATTERN_OFF, PATTERN_LANDING }; // Name new pattern here...
Serial.begin(9600);
// high level object
ctrl.Init( 10 ); // max 10 output channels
ctrl.SetLowBatt( 595, PATTERN_LOW ); // Vorwarnung 635 ~12,55 Volt, switch off value ~ 561 (3.7V bzw 11,1V gesamt) über Spannungsteiler + 8,2K Abgriff 2,7 K Masse an Pin A0
ctrl.SetLowBatt( 561, PATTERN_OFF ); // Ausschalten
ctrl.SetInpChannelPin( RECEIVER_INP, UniPWMInpChannel::INP_NORMAL );
// retract servo at startup
ctrl.AddSequence( PATTERN_STARTUP, LANDING_SERVO, ARRAY( retracted ), UniPWMChannel::ANALOG_SERVO ); // servo
// flight
ctrl.AddSequence( PATTERN_FLIGHT, TESTDIODE, ARRAY( singleFlash ) );
ctrl.AddSequence( PATTERN_FLIGHT, BEACON_LIGHTS, ARRAY( beacon ) );
ctrl.AddSequence( PATTERN_FLIGHT, WING_ACL, ARRAY( doubleFlash ) );
ctrl.AddSequence( PATTERN_FLIGHT, TAIL_ACL, ARRAY( singleFlash ) );
ctrl.AddSequence( PATTERN_FLIGHT, POSLIGHTS, ARRAY( constOn ) );
ctrl.AddSequence( PATTERN_FLIGHT, LANDING_LIGHT, ARRAY( beamOff ) );
ctrl.AddSequence( PATTERN_FLIGHT, LANDING_SERVO, ARRAY( retract ), UniPWMChannel::ANALOG_SERVO );
// off swiched Off or low batt
ctrl.AddSequence( PATTERN_OFF, TESTDIODE, ARRAY( beacon ) );
ctrl.AddSequence( PATTERN_OFF, BEACON_LIGHTS, ARRAY( constOff ) );
ctrl.AddSequence( PATTERN_OFF, WING_ACL, ARRAY( constOff ) );
ctrl.AddSequence( PATTERN_OFF, TAIL_ACL, ARRAY( singleFlash ) );
ctrl.AddSequence( PATTERN_OFF, POSLIGHTS, ARRAY( constOff ) );
ctrl.AddSequence( PATTERN_OFF, LANDING_LIGHT, ARRAY( beamOff ) );
ctrl.AddSequence( PATTERN_OFF, LANDING_SERVO, ARRAY( retract ), UniPWMChannel::ANALOG_SERVO );
// lowBatt attention for low energy
ctrl.AddSequence( PATTERN_LOW, TESTDIODE, ARRAY( fader ) );
ctrl.AddSequence( PATTERN_LOW, BEACON_LIGHTS, ARRAY( constOff ) );
ctrl.AddSequence( PATTERN_LOW, WING_ACL, ARRAY( doubleFlash ) );
ctrl.AddSequence( PATTERN_LOW, TAIL_ACL, ARRAY( singleFlash ) );
ctrl.AddSequence( PATTERN_LOW, POSLIGHTS, ARRAY( dimmedOn ) );
ctrl.AddSequence( PATTERN_LOW, LANDING_LIGHT, ARRAY( beamOff ) );
ctrl.AddSequence( PATTERN_LOW, LANDING_SERVO, ARRAY( retract ), UniPWMChannel::ANALOG_SERVO );
// landing
ctrl.AddSequence( PATTERN_LANDING, TESTDIODE, ARRAY( dimmedOn ) );
ctrl.AddSequence( PATTERN_LANDING, BEACON_LIGHTS, ARRAY( beacon ) );
ctrl.AddSequence( PATTERN_LANDING, WING_ACL, ARRAY( doubleFlash ) );
ctrl.AddSequence( PATTERN_LANDING, TAIL_ACL, ARRAY( singleFlash ) );
ctrl.AddSequence( PATTERN_LANDING, POSLIGHTS, ARRAY( constOn ) );
ctrl.AddSequence( PATTERN_LANDING, LANDING_LIGHT, ARRAY( beamOn ) );
ctrl.AddSequence( PATTERN_LANDING, LANDING_SERVO, ARRAY( ascend ), UniPWMChannel::ANALOG_SERVO );
// assign 3 switch positions to corresponding patterns
ctrl.AddInputSwitchPos( 1, 36, PATTERN_LANDING );
ctrl.AddInputSwitchPos( 40, 46, PATTERN_FLIGHT );
ctrl.AddInputSwitchPos( 50, 99, PATTERN_OFF );
// initalize patterns "flight" and "retracted servo"
ctrl.ActivatePattern( PATTERN_FLIGHT );
ctrl.ActivatePattern( PATTERN_STARTUP );
}
void loop()
{
ctrl.DoLoop();
delay( 500 );
}
- Top
Kommentar
-
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Hallo Peter,
ich habe das Programm mal angepasst, so dass es Deine beiden letzten Probleme lösen sollte. Ich habe es allerdings nicht getestet. Den Inhalt der Funktion DoLoop() habe ich nach loop() geholt und modifiziert. Die beiden geänderten Zeilen sind die mit den "langen Pfeilen".
Da wo analogRead(0x01) steht, wird statt des Empfängerwerts ein Potiwert gelesen. Wenn Du wieder über den Empfänger arbeiten willst, musst Du die Zeile drüber wieder aktiv machen und die Zeile mit analogRead mit den beiden //-Zeichen wegkommentieren.
Ich denke mal drüber nach, wie man das alles etwas eleganter hinbekommt, aber das sollte Dir erst mal helfen.
[FONT="Courier New"][SIZE="2"]
void loop()
{
// ctrl.DoLoop(); AUSKOMMENTIEREN !!!
static uint16_t receiverInpVal = 0;
static int battVal = 0;
static int curPattern = 0;
// battery low handling
battVal = analogRead( 0x0 ); // battery value from A0
Serial.print( "batt: " );
Serial.println( battVal );
if( battVal < m_lowBattVal )
{
ActivatePattern( PATTERN_LOW ); // <------------ HIER SCHALTEN WIR AUF DAS LOW PATTERN
delay( 500);
return;
// Sleep();
}
// get receiver input
// receiverInpVal = m_pInpChannel ? m_pInpChannel->GetValue() : 0; // input value from receiver
receiverInpVal =analogRead( 0x1 ); // <------------ HIER WIRD DER WERT VOM POTI GELESEN von A1
if( receiverInpVal != 0 )
{
Serial.print( "in " );
Serial.println( receiverInpVal );
}
// evaluate switch position from receiver input
curPattern = GetPatternFromInputVal( receiverInpVal );
if( m_activePatternNo != curPattern )
{
ActivatePattern( curPattern );
}
delay( 500 );
}[/SIZE][/FONT]Zuletzt geändert von sepp62; 15.01.2015, 20:40.Grü�e
Bernd
- Top
Kommentar
-
Kyrill
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
funktioniert so nicht wirft jede Menge Fehler aus. Wegen nicht deklarierter Variable:
Ich habe ja die Setlowbatt Zeile verdoppelt und dort ein neues PATTERN_LOW erzeugt. Das bei einem bestimmten Wert angesprungen werden soll, allerdings darf die CPU nicht abschalten dabei. Kann ich das in einer Library eventuell ändern? Es wird genau einmal das Pattern durchlaufen, danach wirds dunkel... bei erstmaligem Unterschreiten des eingestellten Wertes.Zuletzt geändert von Gast; 15.01.2015, 20:52.
- Top
Kommentar
-
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Peter, der Code, den ich hier geposted habe, hat ein paar Macken. Natürlich findet der Compiler die Member-Variablen aus dem "ctrl"-Objekt nicht.
Wenn Du ein wenig wartest, lade ich Dir eine neue Version der Library hoch, die funktionieren sollte. Allerdings kann ich in der knappen Zeit nichts testen.
Du kannst es auch in der Lib ändern, aber dann kannst Du nicht mehr so einfach Updates einspielen. Gib mir 15 Minuten.Grü�e
Bernd
- Top
Kommentar
-
Kyrill
- Top
Kommentar
-
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Anbei befindet sich eine Betaversion (1.03). Du musst den Inhalt des Archiv in Deinem UniPWM-Ordner unter "Arduino/libraries" ersetzen (alten Stand vorsichtshalber sichern).
Das hat sich geändert:
1. Die Unterspannung schaltet die CPU grundsätzlich nicht mehr ab.
2. Du kannst der DoLoop()-Funtion optional einen Zahlenwert mitgeben, der als Empfängerwert interpretiert wird.
3. Den Eingangspin für die Spannungsmessung kannst Du nun optional setzen. Wenn nichts angegeben wird, verwendet die Lib den Pin A0. Betrifft die Funktion SetLowBatt(...).
Das Sample3 ist teilweise angepasst, die ßnderungen sind aber so übersichtlich, dass Du das direkt in Deinen Code übernehmen kannst.
Das mit dem Empfängerwert geht so:
DoLoop( analogRead( A1) );
liest den Empfängerwert vom Eingang A1. Dort kannst Du ein Poti anschließen.
DoLoop();
holt den Wert dann wieder vom Empfänger.
DoLoop( 30 );
gaukelt der Lib einen Wert von 30 am Empfänger vor.
Ich hoffe, ich habe keine Fehler drin. Ich habe leider gerade keine Testumgebung zur Hand, daher habe ich das jetzt "blind" implementiert.Angehängte DateienGrü�e
Bernd
- Top
Kommentar
-
Kyrill
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Ich teste es morgen abend mal durch... Danke für deine sofortige Hilfe.
- Top
Kommentar
-
Kyrill
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Ist es mit deinen ßnderungen denn jetzt möglich 2 unterschiedliche Werte für setlowbat zu definieren?
Also einen für die Vorwarnung z.B. 11,5 V und einen für den shutoff bei 11,1 Volt? Da möchte ich dann nur noch die Strobes anlassen wegen dem geringsten Verbrauch.
Damit müßte die Lageerkennung und eine Landung noch möglich sein. Das war ja gestern das Hauptproblem, weil der Arduino einschlief und abschaltete bevor der 2. Wert erreicht war.
- Top
Kommentar
-
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Das müsste man hinbekommen, wenn man die loop() so anpasst:
loop()
{
// battery cutoff
int battVal = analogRead( 0x0 );
if( battVal < 300 ) // Wert auf die "cutoff"-Spannung anpassen
{
ctrl.ActivatePattern( PATTTERN_OFF); // <--- kann man wohl auch weglassen
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();
}
DoLoop();
Delay( 500 );
}
Der Code schaltet den Arduino vollständig ab. Dann brauchst Du auch keine Vorkehrungen (z.B. "Hysterese"), wenn der Spannungswert aufgrund von Lastschwankungen um die Abschaltschwelle "pendelt".
In der Dunkelheit ist halt die Frage, ob Du das Licht vollständig abschalten solltest. Ein paar mAh weniger im Akku sind vielleicht nicht so schädlich, wie ein unbeleuchteter Flieger. Und die Landewarnung bekommst Du ja über das schwächere Licht.
Bei "Fehlmessungen" der Abschaltspannung (wie immer das passieren kann), ist der Flieger dann auch dunkel.Grü�e
Bernd
- Top
Kommentar
-
Kyrill
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Ich möchte den Strom keinesfalls total abschalten, das würde das Modell gefährden, ich möchte bei ca 11,5 Volt eine deutliche Rückmeldung durch das Modell indem die Beleuchtung deutlich sichtbar reduziert wird auf "Pattern_low" und bei einer 2. Schwelle bei ca 11,1 Volt die Beleuchtung nur noch mit den ACL-Blitzern machen "Pattern_off".
Die ACL fressen dann ganz wenig Strom und es reicht noch zur sicheren und sichtbaren Landung.
Deshalb die Frage ob ich nacheinander durch auslesen zweier unterschiedlich definierter Warnwerte auch 2 Pattern nacheinander ansprechen kann. Je nach ausgelesenem Wert am PIN A0.
Das letzte wäre dann die Minimalversion im Stromverbrauch, der etwas Höhere Wert wäre die Vorwarnung mit reduzierter Helligkeit an den Positionslichtern und an den Landescheinwerfern.
Den Arduino Abzuschalten ist nicht nötig, da er dann ja nichts mehr messen und regeln kann. Ein pendeln zwischen den Werten ist unerheblich solange es nicht ganz dunkel wird dabei :-)
Wenn der Arduino noch in der Vorwarnstufe steckt müsste man trotzdem das Pattern_Off bei Bedarf (Landung erfolgt) über den RC-Eingang schalten können ohne das die Batterieüberwachung den Arduino immer wieder aufgrund der Automatik in das Pattern der Vorwarnung zieht, weil ich befürchte, dass die Batteriewarnung im Augenblick Vorrang zu dem eingelesenen Wert hat am RC Eingang. Das müsste von der Wertigkeit her irgendwie geregelt werden. Wunsch: RC Signal in Richtung Pattern_Off geht in Richtung Pattern_flight nicht mehr. Das wäre das Optimum denke ich.Zuletzt geändert von Gast; 16.01.2015, 13:40.
- Top
Kommentar
-
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
OK, verstanden. Dann probier' es mal damit:
loop()
{
// battery cutoff
int battVal = analogRead( 0x0 );
if( battVal < 300 ) // Wert auf die "cutoff"-Spannung anpassen
ctrl.ActivatePattern( PATTTERN_OFF);
else
DoLoop();
Delay( 500 );
}
Der Prozessor wird dann nicht mehr angehalten. Die "300" musst Du af Deine 11,1 Volt anpassen.
Die Batteriewarnung hat aber tatsächlich Prioritätr. Damit musst Du erst mal leben ;-)Grü�e
Bernd
- Top
Kommentar
-
Kyrill
AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)
Erstmal komme ich damit klar. Hauptsache der Prozessor bleibt an. Danke. Werde heute abend testen.
- Top
Kommentar

Kommentar