Looking to hire someone who can help me with an art project

Hello! I am making an interactive art project. I have tried to do the coding myself, but it is over my head. Basically, this is my goal.- I have an old rotery phone. Someone can put 75 cents in a coin slot, then they can pick up the phone and dial a number between 1 and 100. There will be a recording associated with each number someone dials in. Is this hard? I have the Arduino,.coin slot, phone. Some sensors. But I am having a hard time figuring it out. Anyone want to either make the program for me or teach me? Happy to pay!

Depends on the size of the audio samples. You can get away with an arduino + sd-card.

This is not difficult, per se, but it does require care. Not a great beginner project, but doable with some patience.

The audio playback part is pretty straightforward, although I prefer to use Raspberry Pi's for audio related projects because the cost ends up being pretty similar and it's easier to do audio on the Pi.

There are two aspects to the project that can be tricky:

  1. If you are using the handset unmodified, injecting audio can be difficult because of the way the phone uses a single pair of lines for both receive and transmit. It is much easier to disconnect the transmitter/microphone and work with the receiver only.

  2. Interfacing to the rotary dial. A rotary phone will produce around 10 pulses/second, IIRC, so it's easy to count the pulses. The tricky bit is knowing when the user is done. Did they dial a 2 or are they pausing because they are going to dial 25? So we need to decide what's the response time. i.e., don't try to interpret the number until there have been no pulses for at least 1 second, or something like that.

The physical connection shouldn't be too difficult: a rotary phone dials by interrupting the current loop between the telephone company Central Office and the phone itself (party trick: you can dial a phone by rapidly hitting the hookswitch the right number of times at the right speed), so if you feed 5V into the TP/RP input terminals, you can detect the contact closures with an Arduino easily enough . And then there's debouncing those inputs. Again, not a problem, but something to be concerned with.

Let me ask this:
Have you interfaced to the phone itself? i.e., can you at this point get the contact closures from the dial mechanism and feed them into the Arduino? If so, it becomes a lot easier for someone who doesn't have a rotary dial phone on hand to test with.

Here is a sketch I wrote some time ago to detect the number dialled by an old dial telephone, which you can play with. I've also got a similar sketch for handling a tone dial telephone which, without additional hardware, can interpret DTMF numbers. These were intended as components of a telephone exchange project which is still in state 'pending with low priority'.

/*
 * Detect telephone Dial Pulses 
 * Handle contact bounce
 * 
 * Connect phone pin 2 and ground to demonstrate
 * 
 * Author: 6V6GT 
 */




uint8_t inPin = 2 ;
uint8_t pulseCount = 0 ;
bool readClean = LOW ;
bool readCleanLast = LOW ;
uint32_t readChangeAtMs = 0 ;

uint32_t pulseTimerMs = 0 ;
enum class DialState { pendingDigit, inDigit, gotDigit } ;
DialState dialState ;



void setup() {
  Serial.begin(115200) ;
  Serial.println( F( "telPulseReader V0_01" ) ) ;
  pinMode( inPin, INPUT_PULLUP ) ;
  dialState = DialState::pendingDigit ;

  // readChangeAtMs = millis() ; // !!
  delay (1000 ) ;
  Serial.print( F( "initial read=" ) ) ;
  Serial.println( digitalRead( inPin ) ) ;
}

void loop() {
  

  if ( dialState == DialState::inDigit ) {
    if ( millis() - pulseTimerMs > 200 ) {
      // we have a digit
      Serial.println( pulseCount ) ;
      pulseCount = 0 ;
      dialState = DialState::pendingDigit ;
    }
  }

  // filter read for stable changes ( > X mS )
  static bool lastRead = LOW ;
  bool currentRead = digitalRead( inPin ) ;
  if ( lastRead != currentRead ) {
    readChangeAtMs = millis() ;
    lastRead = currentRead ;
  }
  if ( readClean != currentRead ) {
    // change to readClean accepted only if the new value is mature
    if ( millis() - readChangeAtMs > 25 ) readClean = currentRead ;
  }
  if ( readCleanLast != readClean ) {
    if ( readClean == HIGH ) {
      // change to Space
      pulseTimerMs = millis() ;
      if ( dialState == DialState::pendingDigit ) {
        dialState = DialState::inDigit ;
        pulseCount = 1 ;
      }
      else if ( dialState == DialState::inDigit ) {
        pulseCount++ ;
      }
      else {
        // error
      }
    }
    readCleanLast = readClean ;
  }

}
1 Like

I'm an Arduino newbie but this sounds like fun. Do you know the hardware you need to complete this? I'm not very knowledgeable in that area, but I've done a lot of software and I'm sure I can deal with that aspect.

PM me if interested

I’ve made a dozen “phone” props and puzzles like this for escape rooms, but I haven’t used a pay phone yet...

A project like this would require dismantling the phone to get to the handset, switch-hook, dial mechanism, and coin reader. What’s your mechanical aptitude?

Maybe it would be simpler to ship it to whoever does this for you.

Pat.