Conectar un telefono fijo (rj11) a arduino

Hola. Antes de nada, decir que no tengo ni idea de arduino ni de electrónica. Un amigo ( que si sabe algo) y yo estamos tratando de hacer este proyecto: queremos conectar un teléfono fijo a arduino.La idea es que el teléfono fijo funcione como cerradura, y al marcar un código, se abra una puerta.

Es decir, en el teléfono marco 123456789, y la puerta se desbloquearía

He estado buscando un shield rj11 para arduino y no lo encuentro. Solo veo los shield de Ethernet

con lo que me surge otra duda. ¿existe algún tipo de adaptador de rj11 hembra con salida rj45 macho?

Gracias!!

He encontrado algo parecido a lo que tu necesitas, no es un conversor, sino que te saca cables del RJ11, te paso el link de SparkFun:

Conector RJ11 de SparkFun

La verdad es que lo que propones es un tema interesante, ya nos contaras como lo vas haciendo.

Un saludo, Alvaro

Hola.
Antes de responder adecuadamente quisiera que aclares los siguientes puntos...

¿El teléfono estará conectado también a una línea telefónica?

¿Solo requieres suministrar el código al arduino sin ningún tipo de llamada telefónica?

Saludos

Gracias!!!

Alvaro, ese conector se puede conectar directamente al arduino?

Visionario, No, no estará conectado a la línea telefónica y si, solo es suministrar el código al arduino, sin llamadas.

Otra alternativa es quitar la placa del teléfono, poner la del arduino y conectar los botones del teclado a arduino.

franoween:
Gracias!!!
Visionario, No, no estará conectado a la línea telefónica y si, solo es suministrar el código al arduino, sin llamadas.

Otra alternativa es quitar la placa del teléfono, poner la del arduino y conectar los botones del teclado a arduino.

Si lo que requieres es un teclado, puedes usarlo sin el teléfono, conectando adecuadamente la matriz.

También puedes adquirir un teclado matricial para el mismo efecto.

Saludos

Lo que tienes que hacer es identificar cada pin del RJ11 y conectar el que te da la señal.

Tendrás que identificar el tono que produce cada tecla al pulsarla, de esa manera al haber pulsado un conjunto de tonos determinado abrirás una puerta, activarás un led, etc...

Tengo entendido que en la línea de teléfono (en España) van 4 cables, 2 de ellos no se usan y los otros dos son lo que te dan teléfono. Un cable es 0V y el otro es señal.

Alvaro_Pelon:
Lo que tienes que hacer es identificar cada pin del RJ11 y conectar el que te da la señal.

Tendrás que identificar el tono que produce cada tecla al pulsarla, de esa manera al haber pulsado un conjunto de tonos determinado abrirás una puerta, activarás un led, etc…

Pero ¿cómo se pretende leer algo en el conector si el teléfono no está conectado a nada, no está energizado, no tiene voltaje que haga funcionar el circuito…? Lo siento chicos, por un lado el planteamiento no es el correcto, por otro lado el amigo lo que necesita es el teclado, no el teléfono así que el enfoque debe ir por allí.

Leer los tonos DTMF requieren que el equipo se alimente correctamente y el receptor (arduino) necesita un poco más que código tradicional.

La solución es un teclado matricial, que pudiera ser extraído del teléfono o adquirir uno para ese fin.

Saludos

Visionario eso que dices de modificar el teléfono no es para nada necesario. La línea de teléfono es como una de audio, no necesita alimentación. Al pulsar una tecla creas un tono de determinada frecuencia y duración. Conectas la linea de señal a un pin analogico y las variaciones de voltaje, se corresponden con variaciones de frecuencia en el tono

Con un pequeño código de Arduino identificas la duración y frecuencia de dicho tono y actúas con respecto a eso.

No hace falta modificar el teclado ni nada, solo necesitas conectar la linea de telefono al arduino y leer los tonos.

recordad que la linea de teléfono tiene, creo que descolgado, 48 voltios,

efect2000:
recordad que la linea de teléfono tiene, creo que descolgado, 48 voltios,

Y como 80voltios en los repiques, aunque no es el caso, no se de donde sacan que conectan el conector rj11 a un pin de arduino y listo! Magia, puedo leer dtmf Wow!

Hola, gracias por las respuestas! quiero q el teléfono siga pareciendo un teléfono (aunque no pueda hacer ni recibir llamadas). La idea es esa, introducir un código en el teléfono y q se abra la puerta. Gracias!!

Estimado franoween, debido a tu sinceridad "no tengo ni idea de arduino ni de electrónica" te será imposible hacer lo que pides. Necesitas:

-Alimentar el teléfono a través del rj11
-Extraer la señal de tonos para decodificarla con un integrado especializado como este
-Entregar su salida al Arduino y programarlo en función de lo recibido en binario.

Si usas esto todo la eletrónica desaparece e incluso la programación se simplifica mucho.

otra opcion sería, según el modelo y si es posible, aprovechar solo la salida matricial del teclado y entonces usarlo como un teclado normal.

Hola, muchas gracias por las respuestas! Al final opté por un teléfono antiguo (con disco, no con teclado)

y ya me reconoce los dígitos, los guardo en un long int y los comparo con el código de apertura.
el codigo lo saque de internet y lo modifique para que guarde, compare y y si el código introducido es igual al código, se abra la puerta.

ahora quiero saber como puedo hacer para que si el programa no recibe ningún numero tras 10 o mas segundos, los contadores se reseteen a 0. Los contadores son codInt(almacena los números introducidos) e i (cuenta la cantidad de números introducidos)

os dejo el código a ver si me podeis echar una mano, muchas gracias!!

int needToPrint = 0;
int count;
int in = 2;
int lastState = LOW;
int trueState = LOW;
long lastStateChangeTime = 0;
int cleared = 0;
long int codigo = 1234567890; //código que abre la puerta
long int codInt = 0; //código que se introduce por telefono
int i =0; //contador de números introducidos


// constants

int dialHasFinishedRotatingAfterMs = 100;
int debounceDelay = 10;

void setup()

{
Serial.begin(9600);
pinMode(in, INPUT);
pinMode(13, OUTPUT);


}

void loop()
{
 

int reading = digitalRead(in);

if ((millis() - lastStateChangeTime) > dialHasFinishedRotatingAfterMs) {
// the dial isn't being dialed, or has just finished being dialed.
if (needToPrint) {
// if it's only just finished being dialed, we need to send the number down the serial
// line and reset the count. We mod the count by 10 because '0' will send 10 pulses.
Serial.println(count % 10, DEC); 
if (count==10){

 count=0;
}
codInt= ( codInt*10 + count);
i++;

Serial.println (codInt);
Serial.println( i);
if (i==10){
 if (codigo==codInt){
 Serial.println ("codigo correcto, puerta abierta");
 
digitalWrite (13,HIGH);
delay(3000);
digitalWrite(13,LOW);
 codInt= 0;
 i=0;
 }
 else{
   Serial.println ("codigo incorrecto");
   codInt=0;
   i=0;
   }
 }
needToPrint = 0;
count = 0;
cleared = 0;
}
} 

if (reading != lastState) {
lastStateChangeTime = millis();
}
if ((millis() - lastStateChangeTime) > debounceDelay) {
// debounce - this happens once it's stablized
if (reading != trueState) {
// this means that the switch has either just gone from closed->open or vice versa.
trueState = reading;
if (trueState == HIGH) {
// increment the count of pulses if it's gone high.
count++; 
needToPrint = 1; // we'll need to print this number (once the dial has finished rotating)
} 
}
}



lastState = reading;

 
}

Y luego de tantas respuestas en ningún momento @franoween has leído que Los moderadores nos las pasamos pidiendo que los códigos se posteen usando tags no?
**Lee las normas del foro y luego edita este ultimo post usando tag de código </> (este es) arriba del emoticon :slight_smile: **

conversación de sordos me parece este hilo. Visionario que explica que el telefono debe estar alimentado para generar tonos DTMF y luego con un chip dtmf y arduino facilmente puedes leerlo.
Lo mismo que explica Visionario y Jopapa que usando un simple teclado 4x4 no necesitas complicarte con lo demás.
En fin… veremos como continúa.
Ademas arrancaste con un telefono DTMF y ahora pasas a uno viejo de Disco… vaya cambio!!

Ya está modificado. Gracias! la idea es introducir el código mediante un teléfono. Indistintamente de si es de teclado matricial o de disco. y la verdad, es mucho mas simple con un teléfono de disco que con otro de teclado. además no necesito shield de ningún tipo. de ahí el cambio :D.

¿Alguna sugerencia respecto al código?