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
// ........................................................
}