Refresh loader

Infotelefon

Home > Arduino > Infotelefon

Infotelefon

Hier das Projekt, Infotelefon. Wer ein altes Telefon, also genau genommen Wählscheibentelefon zu Hause hat, für den könnte dieses Projekt interesant sein. Als Infotelefon oder Begrüßungstelefon was auch immer. Da ich schon einige Projekte mit Telefonen hinter mir habe, kam mir die Idee eine Schaltung zu bauen wo man ein altes Wählscheibentelefon anschließen kann. Welche das Telefon klingeln lässt sobald sich eine Person dem Telefon nähert. Und wenn die Person weiter geht soll das Wählscheibentelefon wieder stumm sein. Nimmt man aber den Hörer ab so soll eine Audiodatei zu hören sein. Das kann natürlich alles mögliche sein. Da ich das Projekt für das Radio und Telefonmuseum in Rheda- Wiedenbrück entworfen habe, habe ich als Audiodatei eine kurze Geschichte zum Telefon aufgespielt.

Realisieren werde ich das ganze mit einen Arduino. Damit habe ich schon einige Projekte realisiert und ein Arduino lässt im nachhinein immer noch einige Erweiterungen zu. Hinzu kommt ein DFPlayer welcher die Audiodatein von einer SD lesen kann. Der wird über den Arduino gesteuert und liefert dann die Audioausgabe ans Telefon. Damit das Telefon klingeln kann benötigt man ca. 60 bis 90 Volt Klingelspannung (Impuls- oder Wechselspannung keine Gleichspannung!) Diese erreicht man zum Beispiel mit einen Trafo welcher Impulse von einem Mosfet Modul bekommt und diese kleine Impulsspannung hoch transformiert. Das Mosfet Modul wird auch durch den Arduino gesteuert. Um zwischen Klingelspannung und Audiospannung hin und her zuschalten wird ein 5 Volt Relais eingesetzt. Rate mal wer dieses Relais steuert? Na klar der Arduino. Nun fehlt noch eine kleine Schaltung zur Erkennung ob der Hörer abgehoben wird oder aufgelegt. Das habe ich mit einen Optokoppler geschaltet. Dieser trennt das nochmal galvanisch vom Arduino. Und man kann auch für spätere Erweiterungen die Wählscheibe auswerten. Ich hab es ja gesagt mit so einen Arduino geht einiges. Da kommen mir schon die nächsten Ideen;-)

Damit auch Aussenstehende was hören können wurde noch ein Lautsprecher mit integriert. Ich habe da mal eine Grafik zusammengestellt mit den Verbindungen. Soll auch nur für die Verständlichkeit sein. Darum habe ich hier auch kein Schaltplan für den studierten Techniker eingefügt. Es sollte ja jeder nachbauen können. Normalerweise stelle ich nur die Projekte von mir ein aber viele haben halt noch Spass daran ein altes Telefon als Begrüßungstelefon, Hobbyraum oder just for fun zu nutzen.

Hier oben ist zu sehen wie alles miteinander verbunden ist. Der PC817C ist ein standart Optokoppler. Am Relais kann man gut erkennen das die Klingelspannung vom Trafo im NC (Normal Clost) nicht mit dem Arduino in Kontakt kommen kann. Das kann den Arduino schnell mal zerstören! Da also bitte drauf achten. Den Quellcode (Arduino Sketch) kommt am Ende des Beitrags.

Ok wir machen dann mit dem Projekt weiter. Als erstes habe ich eine Versuchsschaltung auf dem Steckboard aufgebaut. Hier kann man auch schnell mal was umbauen zum Testen.

Nach dem der Testaufbau dann mit entsprechenden Programm so gearbeitet hat wie ich mir das vorgestellt habe. Was bestimmt nicht sofort hingehauen hat. (Aber einfach kann ja jeder.) Nun habe ich alles auf einer Platine gebracht. Also löten löten und löten, ach ja und aufpassen beim löten. Zur Hilfe habe ich dann einen selbstgestrickten oder eher gekritzelten Schaltplan genommen. Den will aber keiner sehen 😉 Er entspricht aber den, welcher oben zu sehen ist.

So nun musste das ganze noch irgend wo hineingebaut werden. Schaut ja sonst blöde aus. Damit das ganze auch ohne Netzteil betrieben werden kann, habe ich noch einen DC-DC Konverter mit eingebaut. Und ein Batteriepack mit 12-15Volt. Der DC-DC Konverter regelt dann eine Spannung von 5 Volt. Zusätzlich zur Spannungsüberprüfung ist noch ein Voltmeter und ein AN / AUS Schalter hinzugekommen. Die TAE Telefonbuchse habe ich mit ins Gehäuse untergebracht. Aussen an der Holzbox sah das nicht gut aus. Die Box ist so groß dass man ein Telefon ohne Probleme obendrauf stellen kann. Der Ultraschallsensor ist durch zwei gebohrte Löcher an der Front der Box eingebaut.

Fertig 😉 Schaut doch gut aus, damit das Kabel vom Telefon nicht gequetscht wird ist bei der Öffnung eine kleine Kerbe drin. Na gut nun wird es Zeit das man alles auch mal sehen kann, darum habe ich hierzu auch ein Video gemacht. Und wie schon gesagt im Radio und Telefonmuseum bei Rheda Wiedenbrück kann man sich das Infotelefon dann auch live ansehen und hören 😉

Hier klicken, um den Inhalt von YouTube anzuzeigen.
Erfahre mehr in der Datenschutzerklärung von YouTube.

Für die welche dann doch mal genauer sehen möchten was passiert kommt jetzt der Arduino Code. Für alle anderen, bis zum nächsten Projekt. AWDH, AWDS & 73

Infotelefon

#include <SoftwareSerial.h>

#include <DFRobotDFPlayerMini.h>

// Pins

const int mosfetPin = 6;

const int relayPin  = 7;

const int hookPin   = 2;

// Ultraschall

const int trigPin = 8;

const int echoPin = 9;

// DFPlayer

SoftwareSerial mp3Serial(10, 11);

DFRobotDFPlayerMini player;

// Status

bool offHook = false;

bool isPlaying = false;

bool presenceDetected = false;

unsigned long cooldownStart = 0;

long distance = 0;

void setup() {

  pinMode(mosfetPin, OUTPUT);

  pinMode(relayPin, OUTPUT);

  pinMode(hookPin, INPUT);

  pinMode(trigPin, OUTPUT);

  pinMode(echoPin, INPUT);

  digitalWrite(mosfetPin, LOW);

  digitalWrite(relayPin, LOW);

  mp3Serial.begin(9600);

  if (player.begin(mp3Serial)) {

    player.volume(20);

  }

}

void loop() {

  // ☎️ Hörer abgehoben → Sensor deaktiviert

  if (offHook) {

    if (digitalRead(hookPin) == HIGH) {

      // Hörer aufgelegt → Cooldown starten

      cooldownStart = millis();

      offHook = false;

      isPlaying = false;

    }

    return;

  }

  // ⏳ Cooldown 20 Sekunden

  if (millis() – cooldownStart < 20000) {

    return;

  }

  // 📡 Abstand messen

  distance = measureDistance();

  // ❌ ungültige Werte ignorieren

  if (distance < 5 || distance > 200) {

    return;

  }

  // 🔁 Hysterese (50 / 70 cm)

  if (!presenceDetected && distance < 50) {

    presenceDetected = true;   // Einschalten

  }

  if (presenceDetected && distance > 70) {

    presenceDetected = false;  // Ausschalten

  }

  // ❌ Niemand da → alles aus

  if (!presenceDetected) {

    digitalWrite(mosfetPin, LOW);

    digitalWrite(relayPin, LOW);

    return;

  }

  // ☎️ Hörer abgehoben?

  if (digitalRead(hookPin) == LOW) {

    offHookDetected();

    return;

  }

  // 🔔 Klingeln

  ringCycle();

}

// 📡 Abstand messen (robust)

long measureDistance() {

  digitalWrite(trigPin, LOW);

  delayMicroseconds(5);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH, 30000);

  if (duration == 0) return 999;

  long dist = duration * 0.034 / 2;

  return dist;

}

// 🔔 Klingeln (1 Zyklus)

void ringCycle() {

  digitalWrite(relayPin, HIGH);

  // 1 Sekunde klingeln (~25 Hz)

  for (int i = 0; i < 25; i++) {

    digitalWrite(mosfetPin, HIGH);

    delay(20);

    digitalWrite(mosfetPin, LOW);

    delay(20);

  }

  digitalWrite(mosfetPin, LOW);

  digitalWrite(relayPin, LOW);

  // Pause (3 Sekunden)

  for (int i = 0; i < 30; i++) {

    // Wenn Person weg → abbrechen

    if (measureDistance() > 70) return;

    // Hörer abgehoben?

    if (digitalRead(hookPin) == LOW) {

      offHookDetected();

      return;

    }

    delay(100);

  }

}

// ☎️ Hörer abgehoben

void offHookDetected() {

  offHook = true;

  digitalWrite(mosfetPin, LOW);

  digitalWrite(relayPin, LOW);

  delay(300);

  if (!isPlaying) {

    player.play(1); // 0001.mp3

    isPlaying = true;

  }

}

Kopieren anpassen was auch immer ist erlaubt nur bitte die Herkunft immer mit angeben!

Infotelefon
Ring Ring Ring

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert