Muziek met de Arduinofoon

Een eenvoudiger alternatief voor de wonderfoon 

Afbeelding3dav

De Arduinofoon is een oude PTT telefoon die is omgebouwd tot mini-jukebox met behulp van een Arduino Uno microcontroller en een MP3 speler. Als je de hoorn van de haak neemt hoor je de kiestoon en als je daarna een nummer kiest tussen de 0 en de 9 hoor je vervolgens een muziekje. De Arduinofoon is afgeleid van de oorspronkelijke Wonderfoon van Leo Willems uit Nijmegen, gebouwd met een Raspberry Pi computer. Zie http://www.wonderfoon.nl

Zelf een Arduinofoon bouwen?
Dat kan, er rust geen octrooi of copyright op het ontwerp.

Klik hier voor de Arduinofoon montagehandleiding met dubbele bel

Klik hier voor de Arduinofoon montagehandleiding met enkele bel

Klik hier voor de Arduinofoon gebruiksaanwijzing

Er zijn inmiddels ook andere varianten met andere elektronica gemaakt, zie:

telefoon
de wonderfoon van Omring Ivo Schooneman

telefoon
de ardufoon van PD1RH

telefoon 
de wonderfoon van Niek

telefoon
de X65 telefoon van Gerard van der Wijk

Ook een heel mooie andere uitvoering van een muziekspeler voor hetzelfde doel, nu ingebouwd in een boek met herkenbare plaatjes, waarbij lichtcellen via gaatjes in de paginas detecteren welke muziek er gespeeld moet worden :

build_instructions_-_32_mY9Va4VZXY
Notable Board Books van Mike Rigsby

Dit is de Arduino programmacode die gebruikt is voor versie 1.4a:
(Die kan met knippen en plakken in de Arduino IDE geplaatst worden).
Ga naar http://www.arduino.cc voor de uitleg over het installeren en gebruiken van de nodige software en het programmeren van de Arduino. Vergeleken met het programmeren van een Raspberry PI is het allemaal een stuk eenvoudiger…

/*
De Arduinofoon.
Een MP3 speler ingebouwd in een ouderwetse PTT kiesschijftelefoon type T65.
Elk gedraaid nummer laat een MP3 melodie horen.
Bij opnemen van de hoorn klinkt de kiestoon.
Afgeleid van de wonderfoon met Raspberry PI3 maar nu met een Arduino UNO R3.
Zie bijbehorend aansluitschema met technische gegevens Arduinofoon 1.5.
Softwareversie 1.4a.
Alex Pikkert Mei 2019.

MP3 speler aansluitingen:
pin 2 next
pin 4 previous
pin 5 repeat
pin 6 pause
pin 12 5 Volt power MP3 speler ON/OFF via schakeltransistor. 
*/

#include <EEPROM.h>
int dialHasFinishedRotatingAfterMs = 100;
int debounceDelay = 10;
int needToSend = 0;
int count;           // dit is de variable waar de kiesschijf keuze ( 1 tot 0 wordt 1 tot 10) in vastgelegd wordt.
int lastState = LOW;
int trueState = LOW;
long lastStateChangeTime = 0;
int reading = 0;
int address = 3;     // het EEPROM adres waar het songnummer opgeslagen wordt.
int lastSong;        // opgeslagen songnummer in EEPROM.
int i;               // teller hoeveel keer de MP3 speler vooruit of achteruit gezet moet worden.
int j;               // teller welke actuele song gedraaid is met de kiesschijf.
int dialtoneOut = 7; // de uitgang met een 425 Herz kiestoon. Let op: pin 3 en 11 NIET gebruiken. (Zie "tone" uitleg op de Arduino reference site).
int hookContact = 8; // contact gesloten (LOW) als de hoorn van de haak genomen is.
int dialEnabled = 9; // contact gesloten (LOW) als de kiesschijf actief is.
int dialPulses = 10; // contact gesloten LOW) en alleen open als er een puls gegenereerd wordt.
int mp3Power = 12;   // als deze poort HIGH is dan is de MP3 speler aan.

//******************************************************************************************
void setup()
{
pinMode(dialPulses, INPUT_PULLUP);   // ingang voor het pulscontact van de kiesschijf.
pinMode(dialEnabled, INPUT_PULLUP);  // ingang voor het contact van de kieschijf als die geactiveerd is.
pinMode(hookContact, INPUT_PULLUP);  // ingang voor het contact van de telefoonhoorn opgenomen/neergelegd. 

// PULLUP is nodig om instabiele ingang te voorkomen bij geopend en dus zwevend contact.
// als een contact open is wordt de ingang hooggehouden (HIGH) door de interne pullup weerstand van de Arduino.

pinMode(mp3Power,OUTPUT);            // deze poort is 0 of 5 volt om de MP3 speler uit- of in te schakelen.

if (digitalRead(hookContact) == LOW) // als de hoorn opgenomen is doe het volgende:
{
mp3PowerON();                        // zet de MP3 speler aan.
delay(2500);                         //wacht even tot de MP3 speler gestart is.
pause();                             // zet de MP3 speler op pauze.
tone(dialtoneOut,425);               // zet de kiestoon aan.
}

}
//******************************************************************************************
void loop()
{
// als de kiesschijf actief is, detecteer het nummer en zet de kiestoon uit.
// als de kiesschijf in rust is, selecteer de song door de MP3 speler vooruit of achteruit te zetten.
// als de hoorn op de haak gelegd wordt ga dan in de wachtlus en zet indien nodig de kiestoon uit.

if (digitalRead(dialEnabled) == LOW){numberDialed();noTone(dialtoneOut);}
else{selectSong();}
if (digitalRead(hookContact) == HIGH){mp3Wait();}
}

//subroutines ******************************************************************************************

// zet de MP3 speler vooruit of achteruit afhankelijk van het verschil tussen vorige en de actuele song. 
void selectSong()
{
switch (count) {
 case 1:j=1;Song();break;
 case 2:j=2;Song();break; 
 case 3:j=3;Song();break;
 case 4:j=4;Song();break; 
 case 5:j=5;Song();break;
 case 6:j=6;Song();break;  
 case 7:j=7;Song();break;
 case 8:j=8;Song();break; 
 case 9:j=9;Song();break;
 case 10:j=10;Song();break;  
 
 default:
    // als de waarde nergens past, voer dan de default instructie uit.
    // de default instructie is optioneel.
    break;
}
}

// ga naar de actuele song.
void Song()
{
 lastSong = EEPROM.read(address);                   // opgeslagen songnummer van de vorige song.
 if(lastSong == j){next();prev();}                  // als zelfde nummer gekozen is ga dan toch afspelen.
 EEPROM.update(address, j);                         // sla de actuele song op in het geheugen.
 if(lastSong <j){for (i=lastSong;i<j;i++){next();}} // ga het verschil tussen de vorige en actuele song verder.
 if(lastSong >j){for (i=j;i<lastSong;i++){prev();}} // ga het verschil tussen de vorige en actuele song terug. 
 delay(400);repeat(); delay(5000);                  // wacht even en geef dan een repeat commando zodat steeds dezelfde song gespeeld wordt.

}

// besturing van de MP3 speler.
void next()
 {pinMode(2,OUTPUT); delay(200);pinMode(2,INPUT);delay(400);count=0;}

void prev()
 {pinMode(4,OUTPUT); delay(200);pinMode(4,INPUT);delay(400);count=0;}

void repeat()
 {pinMode(5,OUTPUT); delay(200);pinMode(5,INPUT);delay(400);count=0;}

void pause()
 {pinMode(6,OUTPUT); delay(200);pinMode(6,INPUT);delay(400);count=0;}

// zet de MP3 speler uit.
void mp3PowerOFF()
 {digitalWrite(mp3Power,LOW);}

// zet de MP3 speler aan.
void mp3PowerON()
 {digitalWrite(mp3Power,HIGH);}

// wachtlus als de hoorn op de haak gelegd wordt. kiestoon gaat uit en als hoorn opgenomen wordt dan volgt een soft reset.
void mp3Wait()
 {noTone(dialtoneOut);mp3PowerOFF();
  while(digitalRead(hookContact)==HIGH){} ; 
  asm volatile ("  jmp 0");                
 }
 
// detectie van het gekozen nummer, vastgelegd in de variabele count.
void numberDialed()
{
reading = digitalRead(dialPulses);
if ((millis() - lastStateChangeTime) > dialHasFinishedRotatingAfterMs)
{if (needToSend==1) {needToSend = 0;count = 0;}
}

if (reading != lastState) {lastStateChangeTime = millis();}
if ((millis() - lastStateChangeTime) > debounceDelay)
{if (reading != trueState) 
{trueState = reading;if (trueState == HIGH) {count++;needToSend = 1;}
}
}
lastState = reading;
}


 

Hier kun je het interview van Radio Hengelo beluisteren:

De Arduinofoon werkt vrijwel hetzelfde als de Wonderfoon van Leo Willems, echter de kosten zijn door het toepassen van de andere onderdelen aanmerkelijk lager. Het inbouwen, aansluiten en programmeren van de Arduinofoon is ook eenvoudiger dan bij een Wonderfoon.

De muziekcollectie, samengesteld uit 78 toeren platen uit de jaren ’50, samen met een apparaat dat ook uit het verleden komt, blijkt een mooi middel om ouderen met dementie te activeren, rust te geven en ook soms te emotioneren. Alledaagse dingen worden steeds moeilijker voor deze ouderen, maar hoe ver ze in het ziekteproces ook zijn, hoe de kiesschijf van een ouderwets telefoontoestel werkt, dat weten ze vaak nog wel. Liedjes van vroeger roepen vaak herinnerin­gen op. Voor iemand die aan het dementeren is, kan dat heel waardevol zijn. Het omgebouwde telefoontoestel is een T65 kiesschijftelefoon, nog volop te vinden in tweedehands winkels en op Marktplaats.

MUZIEK AFSPELEN:

  1. NEEM DE HOORN VAN DE HAAK.
  2. WACHT OP DE KIESTOON.
  3. DRAAI ÉÉN NUMMER.
  4. WACHT TOT MUZIEK SPEELT. (DUURT EVEN)
  5. NA 5 SECONDEN KAN EEN NIEUW NUMMER GEKOZEN WORDEN.
  6. KLAAR? HOORN OP DE HAAK.
  7. STEKER ALLEEN VERWIJDEREN ALS DE HOORN OP DE HAAK LIGT.