Hier finden Sie die Software zu speziellen Themen


Märklin Kran mit Arduino gesteuert Teil 3

#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek einbinden
LiquidCrystal_I2C lcd(0x3F, 20, 4);
void setup()
{
pinMode(1, OUTPUT);//hoch
pinMode(2,OUTPUT);//runter
pinMode(3,OUTPUT); //rechts
pinMode(4,OUTPUT); //links
pinMode(5,OUTPUT); // Magnet
}
void loop()
{
digitalWrite(1, HIGH); //hoch
digitalWrite(2, HIGH); //runter
digitalWrite(3, HIGH); //rechts
digitalWrite(4, HIGH); //links
digitalWrite(5,HIGH); // Magnet
lcd.init(); //Im Setup wird der LCD gestartet
lcd.backlight(); //Hintergrundbeleuchtung
 lcd.setCursor(0, 0);//Hier wird die Position des ersten Zeichens festgelegt. In diesem Fall bedeutet (0,0) das erste Zeichen in der ersten Zeile.
lcd.print("  Maerklin 7051");
lcd.setCursor(0, 1);
lcd.print("  mit ARDUINO");
delay(2000);
delay(4000);//...4 Sekunden warten
digitalWrite(1, LOW); //Und wieder ausschalten
lcd.clear();
lcd.setCursor(3, 1);
lcd.print(" HOCH");
delay(4000); //...und eine Sekunde warten.
digitalWrite(1, HIGH);
//...................................
delay(2000);
//.............................................
digitalWrite(3, LOW); //rechts
lcd.clear();
lcd.setCursor(3, 1);
lcd.print(" RECHTS");
delay(4000);//...eine Sekunde warten
digitalWrite(3, HIGH); //Und wieder ausschalten
//..........................................
delay(2000);
//.............................................
digitalWrite(2, LOW); //Und wieder ausschalten
lcd.clear();
lcd.setCursor(3, 1);
lcd.print(" RUNTER");
delay(4000); //...und eine Sekunde warten.
digitalWrite(2, HIGH);
//.........................................
delay(2000);
//..........................................
digitalWrite(4, LOW); //links
lcd.clear();
lcd.setCursor(3, 1);
lcd.print(" LINKS");
delay(4000);//...eine Sekunde warten
digitalWrite(4, HIGH); //Und wieder ausschalten
//..............................................
delay(2000);
//..........................................
digitalWrite(5, LOW); //links
lcd.clear();
lcd.setCursor(3, 1);
lcd.print(" MAGNET");
delay(4000);//...eine Sekunde warten
digitalWrite(5, HIGH); //Und wieder ausschalten
//..............................................
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(" Wiederholung ");
lcd.setCursor(0, 1);
lcd.print("   in 5 SEC. ");
delay(5000);

}

Geschwindigkeitsmessung mit Arduino

// Modell - Bahn - Agenda
// Präsentiert
// Geschwindigkeit messen mit dem Arduino Nano
// Arduino 3.0 ATmeg 168
// ............................................
// Masstab = 1:87 fest im Programm hinterlegt
// Abstand der Lichtschranken zueinander  = 30 mm fest imm Programm hinterlegt
// Empfindlichkeit der Lichtschranken ca. 30 mm
// 2 IR HV 201 Lichtschranken  an DIGITAL PORT D6 und D7
// 4 blaue LED mit je 330 Ohm Vorwiderstand DIGITAL PORT 9 ==> 12
// I2C LCD 16/2 an I2C SDA = A4 +++ SCL = A5 ANALOG PORT
// Lochrasterplatine, Drähte, Lötkolben, Lötzinn, div. Kleinteile
// ..........................................
// geschrieben am 01.07.2021
// Hardware am 02.07.2021 erstellt
// ........................................
#define SENSOR_L 7 // DIGITAL PORT
#define SENSOR_R 6 // DIGITAL PORT
#include <LiquidCrystal_I2C.h>
#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek einbinden
LiquidCrystal_I2C lcd(0x27, 16, 2); //Hier wird festgelegt um was für einen Display es sich handelt.  
int LEDBereit = 12; //DIGITAL LED Bereit an D12
int LEDStart  = 11; //DIGITAL
int LEDStop = 10; //DIGITAL
int LEDEnde = 9; //DIGITAL
// .......................................
//Abstand Sensoren Links nach Rechts in mm
const double distance = 30.0;
//Spurweite 1/xx in dem Fall 1:87
int scale = 87;
// .....................................
//Name der Variable für Zeit und Geschwindigkeitsmessung
int deltatime, starttime, Geschwindigkeit;
// .....................................
void setup()
{
lcd.init(); //Im Setup wird das LCD gestartet
lcd.backlight(); // Hintergrundbeleuchtung einschalten
//Sensor Eingang // LED Ausgänge
pinMode(SENSOR_L, INPUT_PULLUP);
pinMode(SENSOR_R, INPUT_PULLUP);
pinMode(LEDBereit, OUTPUT);  
pinMode(LEDStop, OUTPUT);             
pinMode(LEDStart, OUTPUT);
pinMode(LEDEnde, OUTPUT);
// ......................................
}
void loop()
{
// Hier startet die Schleife
lcd.setCursor(4, 0);// erste Zahl die Stelle, zweite Zahl die Zeile
lcd.print("M - B - A");
lcd.setCursor(2, 1);
lcd.print("Ehrenkirchen");
delay (3000);
lcd.clear();
digitalWrite(LEDBereit, HIGH);
// .........................................
lcd.setCursor(0, 0);
lcd.print("+++  Bereit  +++");
lcd.setCursor(2,1 );
lcd.print("Masstab 1:");lcd.print(scale);
//Warten auf Signal von Lichtschranke1
while (digitalRead (SENSOR_L) == true) {
}
lcd.clear();
digitalWrite(LEDBereit, LOW);
digitalWrite(LEDStart, HIGH);
lcd.setCursor(1, 0);
lcd.print("Start ===>");
starttime = millis();   //Lichtschranke 1 wurde betätigt, Startzeit = aktuelle Systemzeit
while (digitalRead(SENSOR_R) == true) {   //warten auf Signal von Lichtschranke2
}
lcd.setCursor(5, 1);
digitalWrite(LEDStop, HIGH);
lcd.print("<===Stop");
deltatime = (millis() - starttime);   //Deltazeit = zeit, die für die Strecke benötigt wurde
// ..............................................
delay (2000); //Zwei Sekunden warten.
lcd.clear(); //Display löschen.
// Anzeige Ergebnis
//...............................................
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Geschwindigkeit=");
// Formel zu Berechnung
// .............................................
Geschwindigkeit = ((distance/deltatime)*3.6)*scale;
// ............................................
digitalWrite(LEDStart, LOW);
digitalWrite(LEDStop, LOW);
lcd.setCursor(3,1);
lcd.print(Geschwindigkeit);
lcd.setCursor(7,1);
lcd.print("Km/h");
digitalWrite(LEDEnde, HIGH);
// ..........................................
delay (10000); //zehn Sekunden warten.
lcd.clear(); //Display löschen ++ LED Ende aus.
digitalWrite(LEDEnde, LOW);
}


Bahnhofsanzeige mit OLED 

/*

Project:  SSD1306 OLED Display  

Author:   Thomas Edlinger for www.edistechlab.com

Date:     Created 06.06.2020

Version:  V1.0

 

- Used Aduino IDE V1.8.13

Required libraries (sketch -> include library -> manage libraries)

 - Adafruit SSD1306 V2.2.1

 - Adafruit GFX Library V1.8.3

Required Board (Tools -> Board -> Boards Manager...)

 - Board: esp8266 by ESP8266 Community V2.7.4 

 - Board: ESP32 by Espressif Systems V1.0.2

Wirering for the Display:

SSD1306     ESP8266/MCU       ESP32         Arduino UNO     Arduino Mega

VCC         3.3V              3.3V          3.3V            3.3V

GND         GND               GND           GND             GND

SCL         D1 / GPIO 5       GPIO 22       GPIO 9          GPIO 5     

SDA         D2 / GPIO 4       GPIO 21       GPIO 10         GPIO 53    

*/

 

#include <Adafruit_SSD1306.h>

#include <Adafruit_GFX.h>

#include <DS3232RTC.h>      // https://github.com/JChristensen/DS3232RTC

#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)

#define SCREEN_WIDTH 128 // OLED display Breite, in pixels

#define SCREEN_HEIGHT 64 // OLED display Höhe, in pixels

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

 

 

void setup() {

  Serial.begin(115200);

 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // I2C address = 0x3C

 setSyncProvider(RTC.get);   // the function to get the time from the RTC

}

 

void loop() {

 //delay(3000);

  display.clearDisplay();

  //delay(3000);

  display.setTextSize(1);

  display.setTextColor(WHITE);

  display.setCursor(15, 0);

  display.print("Ehrenkirchen Hbf");

  display.drawLine(0,10,127,10, WHITE);

   //..................................

   // UHRZEIT

  //.................................. 

  display.setCursor(5, 16);

  display.print("Sie haben Anschluss:");

  display.setCursor(0, 27);

  display.print("Freiburg  Hbf Gleis 1");

  display.setCursor(0, 37);

  display.print("Berlin    Hbf Gleis 2");

  display.setCursor(0, 47);

  display.print("Bonn      Hbf Gleis 3");

  display.setCursor(0, 57);

  display.print("Dresden   Hbf Gleis 4");

  display.display(); 

  delay (15000);  

  //.............................................

  // Steuerung

  //.............................................

  display.clearDisplay();

 

 display.setTextSize(1); // Draw 2X-scale text

  display.setTextColor(SSD1306_WHITE);

  display.setCursor(10, 0);

  display.println(F("Achtung am Gleis 1 "));

  display.display();      // Show initial text

  delay(100);

  display.startscrollleft(0x00, 0x07);// ???????????? Keine Ahnung was das macht

  delay(15000);

  display.stopscroll();

  delay(100);

  //................................................................

  //display.clearDisplay();

  display.setTextSize(1); // Draw 2X-scale text

  display.setTextColor(SSD1306_WHITE);

  display.setCursor(0, 30);

  display.println(F("Ein Zug faehrt ein "));

  display.display();      // Show initial text

  delay(100);

  display.startscrollleft(0x00, 0x07);// ??????????? Keine Ahnung was es macht

  delay(15000);

  display.stopscroll();

  display.clearDisplay();

  // ............................................

  // Steuerung

  // ...........................................

  delay(5000);

  display.clearDisplay();

  display.setCursor(15, 0);

  display.print("Ehrenkirchen Hbf");

  display.drawLine(0,10,127,10, WHITE);

  display.setCursor(5, 16);

  display.print("sie haben Anschluss:");

  display.setCursor(0, 40);

  display.print("Alle Zuege");

  display.display();

  delay(15000);

  display.clearDisplay();

  //delay(1000);

  display.setTextSize(1);

  display.setTextColor(WHITE);

  display.setCursor(0, 5);

  display.print("Abfahrt am Gleis 1");

  display.setCursor(0, 20);

  display.print("11:11 Uhr  nach:");

  display.setCursor(0, 40);

  display.print("Freiburg Hbf");

  display.display();

  delay (10000);

  //..................................

  // Steuerung

  // .................................

  delay(5000);

  display.clearDisplay();

  display.setCursor(40, 0);

  display.print("Vorsicht ");

  display.setCursor(20, 20);

  display.print("bei der Abfahrt");

  display.setCursor(0, 35);

  display.print("Gute Reise wuenscht:");

  display.setCursor(0, 45);

  display.print(" Modell Bahn Agenda");

  display.display();

  delay(10000);

  // ........................................................

  // .Steuerung.

  // ........................................................

  display.clearDisplay();

  delay(2000);

  display.setTextSize(1); // Draw 2X-scale text

  display.setTextColor(SSD1306_WHITE);

  display.setCursor(0, 35);

  display.print("Modell Bahn Agenda");

  display.setCursor(0, 0);

  display.println(F(" M - B - A       "));

  display.display();      // Show initial text

  delay(100);

  display.startscrollleft(0x00, 0x07);// ??????????? Keine Ahnung was es macht

  delay(45000);

  display.stopscroll();

  display.clearDisplay();

  // ........................................................

  // .Steuerung 

  // ........................................................   

}