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?
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.
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.
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.
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 **
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.