[Arduino] Programmschnipsel, kleine Routinen, Einfachelektronik
Verfasst: 31 Jan 2019, 18:15
Hallo Leute!
In anderen Threads haben wir ja mal diskutiert, für den Arduino eine Sammlung mit Lösungen für die Modellbahn zusammenzustellen (wahrscheinlich ist das auch für andere Microcontroller anpassbar).
Ich mache jetzt einfach mal den Anfang mit einem Miniprogramm, das für ein "TV-Flimmern" (auch als Schweißlichtflackern) verwendet werden kann. Das Programm habe ich getestet, so wie es hier "drinhängt"; aber eigentlich ist es ein Teil eines größeren Projekts für eine "belebte Burg" (also die Burg ist angenommenermaßen um 1970 rum noch vom verarmten Landadel bewohnt) mit mehreren Zimmerbeleuchtungen, einer flackernden Kerze (die Routine stelle ich auch noch hier ein ,ist aber fast gleich) und eben dem TV-Flimmern.
Diese kleinen Programmschnipsel sollte man gut kombinieren können. So sollten sich dann verschiedene eigene Projekte damit zusammenstellen lassen.
Ich habe auch versucht, mal probehalber die zugehörige Beschaltung mit darzustellen -- was meint Ihr dazu? Ist das sinnvoll?
Zur Erklärung des Widerstand:
R = Symbol für Widerstand (Resistor)
1K0 = 1 kOhm
andere Beispiele:
R470 = 470 Ohm
R5K2 = 5,2 kOhm (kiloOhm)
R1M7 =1,7 MOhm (MegaOhm)
Die Polung der LED sollte wohl klar sein...
Jedenfalls sollte durch die Kommentare im Programm die Routine erklärt sein.
Viele Grüße
Michael
In anderen Threads haben wir ja mal diskutiert, für den Arduino eine Sammlung mit Lösungen für die Modellbahn zusammenzustellen (wahrscheinlich ist das auch für andere Microcontroller anpassbar).
Ich mache jetzt einfach mal den Anfang mit einem Miniprogramm, das für ein "TV-Flimmern" (auch als Schweißlichtflackern) verwendet werden kann. Das Programm habe ich getestet, so wie es hier "drinhängt"; aber eigentlich ist es ein Teil eines größeren Projekts für eine "belebte Burg" (also die Burg ist angenommenermaßen um 1970 rum noch vom verarmten Landadel bewohnt) mit mehreren Zimmerbeleuchtungen, einer flackernden Kerze (die Routine stelle ich auch noch hier ein ,ist aber fast gleich) und eben dem TV-Flimmern.
Diese kleinen Programmschnipsel sollte man gut kombinieren können. So sollten sich dann verschiedene eigene Projekte damit zusammenstellen lassen.
Code: Alles auswählen
/* Simulation "TV-Flimmerkiste"
auch als "Schweißlicht" einsetzbar
*/
/* Verschaltung der LED (max.20mA) mit Widerstand (1kOhm),
Versorgung über USB-Anschluss
.
___________________ .
| | .
|TX1 | O O O | VIN| .
| | | | .
|RX0 | O O O | GND| .
| |_______| | .
|RST RST| .
| | .
o------------------------|GND 5V| .
| | | .
| |D2 A7| .
| | | .
| |D3 A6| .
| | | .
| |D4 A5| .
| | ARDUINO | .
| |D5 A4| .
| | | .
| |D6 N-A-N-O A3| .
| | | .
| |D7 A2| .
| | | .
| |D8 A1| .
| | | .
| |D9 A0| .
| | | .
o---|<LED-------R1K0-----|D10 REF| .
| ___ | .
|D11 | | 3V3| .
| |USB| | .
|D12 | | D13| .
|___________________| .
.
*/
// Zuerst ein paar Definitionen
// PWM Pin für das "analoge" Flimmern:
byte pwmFlimmerPin=10;
// Zeitintervall für das Flimmern (ändert sich im Programm per Zufall):
unsigned long flimmerZeit =0;
// wie lange ist eine Helligkeitsphase für das Flimmern
// (ändert sich im Programm per Zufall):
unsigned long flimmerDauer;
// die Helligkeit beim Flimmern (ändert sich im Programm per Zufall):
int flimmerHelligkeit=0;
// Flag für "Flimmern aktiv?"
boolean flimmerFlag=FALSE;
// Die Grundeinstellungen vornehmen
void setup() {
// Zufallszahlengenerator initialisieren mit Analog-Only-Pin,
// das ist wirklich "Zufall", welcher Wert da eingelesen wird
randomSeed(analogRead(A7));
// Leuchtstelle initialisieren
pinMode(pwmFlimmerPin, OUTPUT);
}
// Die LED (=TV) flimmern lassen
void flimmernPwmPin() {
// sobald die Zeit da ist: Flimmern an
if (flimmerFlag)
{
// Zeitspanne mit Helligkeitsstufe abgelaufen?
if (millis()>flimmerDauer)
{
// neue Flimmerhelligkeit als Zufallswert
flimmerHelligkeit=random(256);
// neue Flimmerdauer als Zufallswert
flimmerDauer=millis()+random(200);
}
}
else
{
// Flimmern aus, wenn kein Flimmern gewünscht
flimmerHelligkeit=0;
}
analogWrite(pwmFlimmerPin, flimmerHelligkeit);
}
// Hauptschleife, endlos
void loop() {
// wann soll das TV flimmern?
if (millis()>flimmerZeit)
{
// das Flag "umdrehen"
flimmerFlag = !flimmerFlag
// min. 10, max. 60 sec Flimmern (anpassbar)
flimmerZeit = millis()+1000*(random(50)+10);
}
// flimmern lassen
flimmernPwmPin();
}
Zur Erklärung des Widerstand:
R = Symbol für Widerstand (Resistor)
1K0 = 1 kOhm
andere Beispiele:
R470 = 470 Ohm
R5K2 = 5,2 kOhm (kiloOhm)
R1M7 =1,7 MOhm (MegaOhm)
Die Polung der LED sollte wohl klar sein...
Jedenfalls sollte durch die Kommentare im Programm die Routine erklärt sein.
Viele Grüße

Michael