Archiv der Kategorie: Allgemein

Arduino Servo Steuerung für Weichen

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/.sites/674/site7434035/web/wp/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Nach einem Abstecher nach 1:35 wieder zurück zur Eisenbahn!

Nach langem tüfteln, einigen fehlerhaften Prototypen und anderen Stolpersteinen ist meine Servosteuerung endlich fertig!

Im Prinzip ein sehr einfaches Shield:

WP_20151101_11_18_14_Pro WP_20151101_11_17_45_Pro

  • 4x  Anschlüsse für Servos
  • 1x 8 Pin Leiste für die Schalter (gegen GND)
  • 1x 8 Pin Leiste  für die Rückmelde-LEDs (mit Widerstand)
  • 1x Stromversorgung

Die Led’s laufen über einen ULN2003 um den Arduino nicht zu überlasten, bzw. eventuell statt den LED’s Relais anzuhängen.

Geschaltet wird mit Drucktastern die bei jedem Tastendruck den Zustand von LED und Servo umschalten. Start- und Endwinkel sind für jedes Servo zu definieren, Stellgeschwindigkeit kann auch verändert werden.

WP_20151101_11_16_55_Pro

Beim Code wird es jedem Programmierer die Zehennägelaufrollen, aber es funktioniert soweit. Leider hab ichs nicht geschafft die 4 Schalter in einer Schleife abzufragen, jetzt gehts halt nacheinander.

Ein bisschen hier abgeschaut ein bisschen dort,

Rudys Model Railway war ein Quell der Inspiration, ebenso die Tutorials auf der Arduino Homepage.

 

const int weiche_anzahl = 4;
int servspeed = 20; // higher = slower
int debounce = 50;
 
typedef struct
{
int ledPin;
int buttonPin;
boolean currentState = LOW;//stroage for current button state
boolean lastState = LOW;//storage for last button state
boolean ledState = HIGH;//storage for the current state of the LED (off/on)
int servpos = 90;
int maxwinkel;
int minwinkel;
}WeicheStruct;
 
WeicheStruct weiche[weiche_anzahl];
 
Servo servo[weiche_anzahl];
 
void setup(){
servo[0].attach(0);
servo[1].attach(1);
servo[2].attach(2);
servo[3].attach(3);
 
weiche[0].ledPin = 4;
weiche[0].buttonPin = 8;
weiche[0].maxwinkel = 105;
weiche[0].minwinkel = 75;
 
weiche[1].ledPin = 5;
weiche[1].buttonPin = 9;
weiche[1].maxwinkel = 105;
weiche[1].minwinkel = 75;
 
weiche[2].ledPin = 6;
weiche[2].buttonPin = 10;
weiche[2].maxwinkel = 105;
weiche[2].minwinkel = 75;
 
weiche[3].ledPin = 7;
weiche[3].buttonPin = 11;
weiche[3].maxwinkel = 105;
weiche[3].minwinkel = 75;
 
for (int i=0; i<weiche_anzahl; i++) { pinMode(weiche[i].buttonPin, INPUT_PULLUP);//this time we will set the pin as INPUT pinMode(weiche[i].ledPin, OUTPUT); } } void loop(){ weiche[0].currentState = digitalRead( weiche[0].buttonPin); if ( weiche[0].currentState == HIGH && weiche[0].lastState == LOW){//if button has just been pressed delay(10);//crude form of button debouncing //toggle the state of the LED if ( weiche[0].ledState == HIGH){ digitalWrite(weiche[0].ledPin, LOW); // weiche.write(minwinkel); weiche[0].servpos = (weiche[0].maxwinkel); for (weiche[0].servpos = weiche[0].maxwinkel; weiche[0].servpos >= weiche[0].minwinkel; weiche[0].servpos -=1)
{servo[0].write(weiche[0].servpos);
delay(servspeed);}
weiche[0].ledState = LOW;
} else {
digitalWrite(weiche[0].ledPin, HIGH);
//weiche.write(maxwinkel);
weiche[0].servpos = weiche[0].minwinkel;
for (weiche[0].servpos=weiche[0].minwinkel; weiche[0].servpos <=weiche[0].maxwinkel; weiche[0].servpos +=1) {servo[0].write(weiche[0].servpos); delay(servspeed);} weiche[0].ledState = HIGH; } } weiche[0].lastState = weiche[0].currentState; weiche[1].currentState = digitalRead( weiche[1].buttonPin); if ( weiche[1].currentState == HIGH && weiche[1].lastState == LOW){//if button has just been pressed delay(10);//crude form of button debouncing //toggle the state of the LED if ( weiche[1].ledState == HIGH){ digitalWrite(weiche[1].ledPin, LOW); // weiche.write(minwinkel); weiche[1].servpos = (weiche[1].maxwinkel); for (weiche[1].servpos = weiche[1].maxwinkel; weiche[1].servpos >= weiche[1].minwinkel; weiche[1].servpos -=1)
{servo[1].write(weiche[1].servpos);
delay(servspeed);}
weiche[1].ledState = LOW;
} else {
digitalWrite(weiche[1].ledPin, HIGH);
//weiche.write(maxwinkel);
weiche[1].servpos = weiche[1].minwinkel;
for (weiche[1].servpos=weiche[1].minwinkel; weiche[1].servpos <=weiche[1].maxwinkel; weiche[1].servpos +=1) {servo[1].write(weiche[1].servpos); delay(servspeed);} weiche[1].ledState = HIGH; } } weiche[1].lastState = weiche[1].currentState; weiche[2].currentState = digitalRead( weiche[2].buttonPin); if ( weiche[2].currentState == HIGH && weiche[2].lastState == LOW){//if button has just been pressed delay(10);//crude form of button debouncing //toggle the state of the LED if ( weiche[2].ledState == HIGH){ digitalWrite(weiche[2].ledPin, LOW); // weiche.write(minwinkel); weiche[2].servpos = (weiche[2].maxwinkel); for (weiche[2].servpos = weiche[2].maxwinkel; weiche[2].servpos >= weiche[2].minwinkel; weiche[2].servpos -=1)
{servo[2].write(weiche[2].servpos);
delay(servspeed);}
weiche[2].ledState = LOW;
} else {
digitalWrite(weiche[2].ledPin, HIGH);
//weiche.write(maxwinkel);
weiche[2].servpos = weiche[2].minwinkel;
for (weiche[2].servpos=weiche[2].minwinkel; weiche[2].servpos <=weiche[2].maxwinkel; weiche[2].servpos +=1) {servo[2].write(weiche[2].servpos); delay(servspeed);} weiche[2].ledState = HIGH; } } weiche[2].lastState = weiche[2].currentState; weiche[3].currentState = digitalRead( weiche[3].buttonPin); if ( weiche[3].currentState == HIGH && weiche[3].lastState == LOW){//if button has just been pressed delay(10);//crude form of button debouncing //toggle the state of the LED if ( weiche[3].ledState == HIGH){ digitalWrite(weiche[3].ledPin, LOW); // weiche.write(minwinkel); weiche[3].servpos = (weiche[3].maxwinkel); for (weiche[3].servpos = weiche[3].maxwinkel; weiche[3].servpos >= weiche[3].minwinkel; weiche[3].servpos -=1)
{servo[3].write(weiche[3].servpos);
delay(servspeed);}
weiche[3].ledState = LOW;
} else {
digitalWrite(weiche[3].ledPin, HIGH);
//weiche.write(maxwinkel);
weiche[3].servpos = weiche[3].minwinkel;
for (weiche[3].servpos=weiche[3].minwinkel; weiche[3].servpos <=weiche[3].maxwinkel; weiche[3].servpos +=1)
{servo[3].write(weiche[3].servpos);
delay(servspeed);}
weiche[3].ledState = HIGH;
}
}
weiche[3].lastState = weiche[3].currentState;
}

 

Dragon Figurenbausätze 1:35

Nachdem ich bei Ebay über ein paar Bausätze von dragon gestolpert bin wollte ich mich wieder einmal an ein paar Figuren versuchen.

Den ersten Bausatz „US Army Airborne (Operation Varsity) hab ich schon einmal angefangen:

WP_20151016_20_35_12_Pro WP_20151016_18_56_39_Pro - Kopie

WP_20151016_22_03_58_Pro

Nach einem Abend und einem Vormittag lackieren, bemalen, kleben… usw. sieht der  Trupp derzeit so aus:

IMG_4579 IMG_4578 IMG_4577

Das bemalen ging mit Airbrush und Tamiya Acrylfarben relativ gut im Vergleich zu vor 20 Jahren mit den Revell Töpfchen 🙂

Schwierigkeiten hatte ich mit der Platzierung der Arme und Waffen, letzendlich hab ich die Arme mit einem winzigen Kügelchen Patafix am Rumpf fixiert, dann die Waffen in die Hände geklebt und zum Schluss die Arme von aussen festgeklebt und noch einmal überstrichen.

Revell HE162A „Salamander“ 1:32

Diesmal bin ich der Modelleisenbahn ein bisschen Fremdgegangen und hab mich seit langem wieder an einen grösseren Flieger gewagt.

Aus dem Abverkauf gabs vor ~2 Jahren sehr günstig von Revell die HE162A, letzte Woche entschied ich das das Modell abgelegen genug ist und begann zu bauen.

WP_20151015_06_31_45_Pro WP_20151015_06_35_59_Pro

so sah es nach ein paar Abenden bauen und lackieren aus!

Danach gings ans Finish:

WP_20151016_07_50_06_Pro WP_20151016_07_50_58_Pro

WP_20151016_07_51_46_Pro

Decals das erste mal mit Decal-Soft aufgebracht und ein bisschen mit Ölfarben gespielt!

IMG_4582 IMG_4581 IMG_4580

Gleisprobe 2

Leider geht es viel zu langsam voran..

Die Fortschritte der letzten Wochen:

  • Mittlerweile sind alle Gleise für den Bahnhof verklebt und zu 75% farblich nachbehandelt (Schwellen und Gleisprofil)
  • Teilweise gibts schon Sand und Schotter
  • Eine Weiche hat Motor und Gestänge bekommen
  • Die Gleiswendel hat Strom und ein Tunnelportal aus XPS bekommen

Und das wars dann auch schon wieder.

WP_20150921_13_47_09_Pro WP_20150921_13_47_23_Pro

WP_20150921_13_47_30_Pro WP_20150921_13_47_40_Pro

Selbstbau Vitrine

 

 

Keine grossen Fortschritte in der letzten Zeit aber wenigstens eine kleine Bastelei als Wandschmuck:

WP_20150808_19_55_29_Pro

Nachdem ich ein paar Glasböden geschenkt bekommen hab und vom Modulkastenbau noch so in der Holzverarbeitung war hab ich mir meine erste einfache Vitrine gebaut.

WP_20150808_19_55_11_Pro WP_20150808_19_55_02_Pro