Autor Tema: Comunicar por Línea Telefónica FIJA a dos Arduinos  (Leído 573 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado humberto 02

  • PIC12
  • **
  • Mensajes: 93
Comunicar por Línea Telefónica FIJA a dos Arduinos
« en: 09 de Julio de 2019, 16:32:48 »
Buenas Tardes mi viejo

Disculpame que te moleste. Luego de una intensa semana de estudiar este tema. Recuerdo haber escrito en algún post anterior: “No tengo idea porque me ha atrapado la comunicación con Arduino”. Hice los más elementales: Bluetooth, nF24L01, Control Remoto 433MHz e Internet. Pero siento que este es el que más me atrapa:

COMUNICAR DOS ARDUINOS POR MEDIO DE UNA LINEA TELEFÓNICA “FIJA”.

Tuve que aprender la diferencia entre Analógico y Digital, PWN. Gracias a ello comprendí porque las personas marcan la diferencia entre escuchar un tema musical en un “tocadiscos” y un “CDRom”. Finalmente de todo lo visto y leído; termine una Protoboard “muy básica y simple” que me permite discar un número por TONOS DTMF y por PULSOS.

Aquí les dejo el video que muestra mis precarios avances:

Datos Obtenidos:
Medí con el Tester: Que en estado de reposo (Colgado)  tengo 49,8 VAC y en estado activo (Descolgado) 7,9VAC

Ahora el paso más difícil para mí. Conectarlo a la línea y ahí “Siento que estoy haciendo AGUA”.

Llamar a otro Arduino con PULSOS:
Yo haría Primero hacer un Puente rectificador y conectarlo directamente a lo que sería el positivo de la línea telefónica. En este caso el Relay me garantizaría que no pongo en riesgo Puertos del Arduino.

Llamar a otro Arduino por Tonos DTMF:
Pensé en poner Primero un Zenner o Diodo 4007 para evitar que mayor intensidad llegué a los puertos del Arduino; luego un puente rectificador y a distinto del caso anterior este lo conecto al POSITIVO y al NEGATIVO de la línea.
También pensé en usar un NpN como amplificador de señal sonora para darle más fuerza?

En tu opinión ¿estoy bien encaminado?

Aclaraciones Finales:
Para que uno de los dos Arduinos sepa que lo llama el otro. El Arduino Receptor responderá luego del 5to. Ring, Descuelga y así inicia las comunicaciones con el Arduino Emisor y corte la comunicación; para esto He leído y cuento con la electrónica que nos ofrece www.pablin.com.ar

Con respecto al módulo 8770 de Arduino no me sirve porque debo apoyarme en un celular y mi intensión (como dije antes) solo quiero hacerlo por línea fija.

Agradezco de antemano cualquier comentario que me permita lograr este último desafío. Cordial Saludo desde Gualeguaychú E. Ríos

Desconectado humberto 02

  • PIC12
  • **
  • Mensajes: 93
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #1 en: 09 de Julio de 2019, 16:46:38 »
Este es el Código por si les sirve. Con respecto al esquemático lo subo una vez que logre terminar todo el proyecto.
Código: [Seleccionar]
// * Marcador de telefono Arduino X PULSOS * "ConRelay"
// Utiliza el metodo por pulsos para marcar un numero de telefono.

int offtimer = 60; // Cuanto mayor sea el numero, mas lento sera el tiempo.
int ontimer = 30;
String NroTel = "15695419"; // el numero de telefono para marcar
int numero = NroTel.length();
int pinOut=2;     // El pin de salida para el pulso del Rele Pin 12
int estado = LOW; // Colgado o Descolgado para discar por Pulsos

/* CodDTMF3 (generador de tono dual) para un marcador de telefono
 *
 * PREPARAR:
 * - Conecte los pines 12 y 13 al terminal de altavoz +, cada uno a traves de su propia resistencia de 240 Ohm.
 * - Conecte un condensador de 4.7 uF entre los terminales + y - del altavoz
 * - Conecte el altavoz GND a Arduino GND
 * - Conecte un interruptor momentáneo al Pin 8, y el otro lado del interruptor a GND
*/

const byte tono1Pin = 10; // pin para tono 1 ~ 10
const byte tono2Pin = 11; // pin para tono 2 ~ 11

int variaFrec = 10; // Lo agregue ir variando la Frecuencia (Originalmente este valor es de 10)

int DTMF[13][2]={
  {941,1336}, // frecuencia para tecla tono 0
  {697,1209}, // frecuencia para tecla tono 1
  {697,1336}, // frecuencia para tecla tono 2
  {697,1477}, // frecuencia para tecla tono 3
  {770,1209}, // frecuencia para tecla tono 4
  {770,1336}, // frecuencia para tecla tono 5
  {770,1477}, // frecuencia para tecla tono 6
  {852,1209}, // frecuencia para tecla tono 7
  {852,1336}, // frecuencia para tecla tono 8
  {852,1477}, // frecuencia para tecla tono 9
  {941,1209}, // frecuencia para tecla tono *
  {941,1477}, // frecuencia para tecla tono #
  {0,0} // pausa
};

void setup() {
     Serial.begin(9600);
     Serial.println("Digitar [P o *] Discar por PULSO o COLGAR  [T] Discar por TONO");
     
     pinMode(pinOut, OUTPUT); // define pin como salida. [D2]
     digitalWrite(pinOut, LOW);

     pinMode(5, INPUT); // Tecla Pulso
     digitalWrite(5, LOW);
     pinMode(6, INPUT); // Descolgar / Colgar
     digitalWrite(6, LOW);
     pinMode(7, INPUT); // Tecla Tonos
     digitalWrite(7, LOW);
     
     pinMode(tono1Pin,OUTPUT); // Output Tono 1 [D10]
     pinMode(tono2Pin,OUTPUT); // Output Tono 2 [D11]
}

void loop() {

     if (digitalRead(5) == HIGH){
        Serial.print("Discado <Por PULSO>: ");
        digitalWrite(pinOut, HIGH);
        delay (1000);
        // Leo los numeros del telefono a marcar
    //     int numero = NroTel.length();
     for (int i=0; i<numero; i++){
          char x = NroTel.charAt(i);
          int digito = String(x).toInt();
          // Disco el numero del telefono
          Serial.print(x);
          for (int y = 0; y < digito; y++) {
               digitalWrite(pinOut, LOW);   // apaga el rele OFF
               delay(offtimer);             // espera un rato
               digitalWrite(pinOut, HIGH);  // enciende el rele ON
               delay(ontimer);              // espera un rato
          }
          delay(500); // Demora entre cada Pulso marcado
     }
     Serial.println(" ");
     // Mantiene el Rele encendido para que el telefono espere que suene en el otro extremo.
     digitalWrite(pinOut, HIGH);
     }
     
     if (digitalRead(6) == HIGH){
        estado = digitalRead(pinOut);
        digitalWrite(pinOut,!estado);
     }
     
     if (digitalRead(7) == HIGH){
     byte duracion = 100; // 100 ms de duracion del tono
     Serial.println("Discado <Por TONO>: ");
     Serial.print("Numero: ");
//     int numero = NroTel.length();
     for(int i = 0; i < numero; i++) {
         char x = NroTel.charAt(i);
         int digito = String(x).toInt();
         // Disco el numero del telefono
         Serial.print(digito);
         byte digit = digito;
         boolean tono1state=false;
         boolean tono2state=false;
         // Calcular el retraso (en microsegundos) para el tono 1 (la mitad del periodo de un ciclo).
         // 10 es un factor de fudge para aumentar la frecuencia debido a una temporizacion lenta.
         int tono1delay=(500000/DTMF[digit][0])-variaFrec;
         int tono2delay=(500000/DTMF[digit][1])-variaFrec;
         unsigned long tono1timer=micros();
         unsigned long tono2timer=micros();
         unsigned long timer=millis(); // para la duracion del tiempo de un solo tono

         if(digit==12) { delay(1000); } // un segundo retraso si el digito es 12

         while(millis() - timer < duracion) {

              int x1 = micros()-tono1timer;
              if( x1 > tono1delay ) {
                 tono1timer=micros(); // reset restablecer el temporizador del timer
                 tono1state=!tono1state; //  alternar estado del tono 1
                 digitalWrite(tono1Pin, tono1state);
              }

              int x2 = micros()-tono2timer;         
//              if(micros()-tono2timer>tono2delay) {
              if(x2>tono2delay) {
                 tono2timer=micros(); // reset restablecer el Temporizador
                 tono2state=!tono2state; // alternar estado del tono2estado
                 digitalWrite(tono2Pin, tono2state);
              }
         }
         digitalWrite(tono1Pin,LOW);
         digitalWrite(tono2Pin,LOW);
         delay(100); // 100ms pausa entre los tonos
     }
     Serial.println(" ");
     }
}

Conectado Robert76

  • PIC16
  • ***
  • Mensajes: 241
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #2 en: 09 de Julio de 2019, 20:47:49 »
Hola, la pregunta sería si ambos equipos a conectarse estarán en la misma línea de abonado o pueden estar de forma remota?
Porque si es el primer caso, se puede trabajar sin descolgar linea, trayendo cómo ventaja el "no ocuparla" por si algún interlocutor quiera llamar.
Ahora si la conexión es remota, es decir descolgar, marcar y llamar.
Lo correcto sería utilizar un transformador de línea. Tiene la ventaja de aislar y además poder trabajar con tensión segura del lado secundario.
« Última modificación: 09 de Julio de 2019, 20:54:45 por Robert76 »

Desconectado humberto 02

  • PIC12
  • **
  • Mensajes: 93
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #3 en: 09 de Julio de 2019, 23:16:34 »
Hola mi viejo; mil gracias por estar ahí

Si este proyecto es el segundo caso a tu pregunta.

El Arduino 1 descuelga llama a un Número y le pasa los datos de un Termómetro.
El Arduino 2 espera 5 Ring; atiende, pasa los datos del Termómetro y cuelga.
El Arduino 1 Toma la Temperatura y cuelga.

La Acción de Colgar y Descolgar lo saco de los circuitos propuestos en www.pablin.com

Mis dudas en este caso son las conexiones de los cables de la línea como decía en el post disparador.
En el caso de los tonos DTMF debo compartir 5V del Arduino con 9v de la línea y debo impedir que los 9v me pasen al puerto del Arduino y me lo queme.
En el caso de los pulsos no sé que hacer con el (-)Gnd de la línea ya que el Rele solo opera con el (+) de los 9v

Aprovecho para mandarte un abrazo desde la distancia.


Conectado Robert76

  • PIC16
  • ***
  • Mensajes: 241
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #4 en: 10 de Julio de 2019, 08:51:01 »
Ey Amigo! el gusto es mío.
Mirá te adjunto una simple solución y segura, que una vez implementé.
El funcionamiento es el siguiente.
Cuándo el transistor NO conduce, la línea permanece descolgada. Ahora bien, al inyectar una tensión por la base, controlada desde Arduino, el transistor se satura, cortocircuitando al puente rectificador, entonces el transformador quedará conectado "literalmente" entre los hilos de la línea telefónica. De esa manera ahora la línea está descolgada.
La idea de implementar un puente rectificador ahí es para independizarte de la polaridad de la línea TEL.
Si quieres detectar el tono de línea, o bien inyectar los tonos DTMF o de datos, lo haces desde el secundario, de esa forma se aisla totalmente cualquier tensión.
El transformador que usé, lo encontré en una tarjeta modem de PC, tiene aprox. entre 300 y 600 ohms y una relación 1:1.
Para enviar datos, tendrás que crear una especie de modem, es decir, cómo la línea telefónica permite un ancho de banda audible de creo aprox. 4Khz. entonces puedes utilizar por ejem. 2Khz para enviar o recibir un 0, y 3Khz para un 1.
Por último, el diodo zener sólo funciona cómo protección para eliminar cualquier pico que pueda producirse durante la conexión/desconexión de la línea.
El condensador de acoplamiento, quizás debas calcularlo, aunque entre 100nF y 1uF debería funcionar.
Sino quieres compartir las masas entre equipo y transistor Q1, prueba con algún fototransistor.
Recuerda que dicho transistor tiene que soportar las tensiones que se producen durante una llamada, así que debes buscar algo que tenga cómo parámetro una Vce > 200V.
« Última modificación: 10 de Julio de 2019, 09:01:06 por Robert76 »

Desconectado humberto 02

  • PIC12
  • **
  • Mensajes: 93
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #5 en: 10 de Julio de 2019, 09:59:48 »
1k de gracias Robert76 por acompañarme con tus comentarios y soluciones (una vez más).

Comienzo a estudiar tu circuito y veo que me falta para ir a buscar... Ahora… sin abandonar el origen de este post te cuento.

En mi vida tuve la oportunidad de estudiar lo que Uds. conocen como “Topógrafo” y A. de Sistemas. En mi juventud teníamos inter conectados nuestros computadores por medio de un “MoDem” y era (para mí) hermoso escuchar como dos computadoras charlaban entre sí por medio de lo que NO SABÍA en ese momento, eran los Tonos DTMF. Este recuerdo creo que fue el disparador de la pregunta. ¿Podré comunicar dos Arduino por medio de una línea telefónica?.

Ahora bien luego de una intensa búsqueda y aprendizaje sobre el tema me han surgido nuevas preguntas.
He leído por aquí y por allá (y esta es la segunda vez que lo leo) que para lograr comunicar dos MicroControladores necesitaríamos “construir” un modem.

Mi pregunta concretamente es. ¿No hay un modem de línea telefónica FIJA que lo permita? o ¿yo no supe encontrarlo?

Todo lo encontrado ha sido por medio de comunicación “CELULAR”. Módulo SIM900; o el Modulo Decodificador de Tonos de Audio DTMF Mt8870 para Arduino.

Sinceramente no comprendo. Cordial Saludo!

Conectado Robert76

  • PIC16
  • ***
  • Mensajes: 241
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #6 en: 10 de Julio de 2019, 10:39:43 »
Para ser honesto, hace tiempo que no escucho sobre modems,  pero implementar uno para tu requerimiento no es tan complejo, sólo necesitas crear dos tonos para cada equipo y dos detectores de dichos tonos para cada equipo.
El hecho de querer conectar dos Arduinos entre sí NO requieren de un modem.
El tema está en que tú los vas a conectar separados por una línea telefónica, siendo así se requiere de una interface, por ello la necesidad de un modem.
Éxitos con el proyecto!
« Última modificación: 10 de Julio de 2019, 10:47:02 por Robert76 »

Conectado Eduardo2

  • PIC16
  • ***
  • Mensajes: 205
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #7 en: 10 de Julio de 2019, 11:55:54 »
...
Mi pregunta concretamente es. ¿No hay un modem de línea telefónica FIJA que lo permita? o ¿yo no supe encontrarlo?

El modem de tus recuerdos no se encuentra fácil porque porque se ha dejado de usar, pero igual algo hay (googleá modem 56k externo)


Los modems comerciales los podés usar sin necesidad de conectarte a la línea telefónica, podés usar un cableado propio (largo, si no pa' que quiero el modem) polarizado con 12..24V mas una resistencia limitadora de corriente, no hace falta que la línea tenga tono.
La marcación y comunicación la hacés vía los comandos AT.

Si en la aplicación basta una velocidad de 300...1200 bauds podés usar una modulación pedorra tipo Kansas City y ahorrás espacio y $.

Eso si, son indispensables las protecciones por sobretensión.
Si bien la tensión nominal de la línea son 48Vcc  y el tono de llamada ráfagas de 75Vac @ 20Hz,  los picos de tensión atmosféricos son mucho mayores, de cientos a miles de volts respecto de tierra.



Desconectado humberto 02

  • PIC12
  • **
  • Mensajes: 93
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #8 en: 10 de Julio de 2019, 14:22:17 »
Hola Eduardo2!! Tanto tiempo. Gracias por sumarte a esta nueva “inquietud” personal.

Dios mío, yo los leo y mis 58 años y 2 stent disparan mis emociones. Lo que aprendo y logro; con cada uno de sus comentarios y ayudas me hacen disparar ansias por preguntar y aprender más.

El modem de tus recuerdos no se encuentra fácil porque porque se ha dejado de usar

¿Se ha dejado de usar? Te pido disculpas por tanta ignorancia de mi parte; pero entonces…

Uds. Lo que están en la cocina real de la Electrónica ¿Cómo hacen?... ¿No tienen la necesidad de comunicar dos micros? De un punto a otro; entendiendo por punto a otro; por ejemplo monitorear una placa de una fábrica desde la distancia.

Pregunto esto porque; volviendo a mis recuerdos. En los ’80. IBM desarrollo la AS400 era una computadora de alto rendimiento (para la época). Al punto que ella misma (la AS400) se auto asistía. Si ella encontraba una falla; lo comunicaba a IBM y desde allá enviaban al Soporte Técnico. Es más; recuerdo que el Consultor que nos explicaba las bondades del equipo, nos decía: Golpearan su puerta y le dirán su Equipo solicito revisión.

Estos "recuerdos" no me hacen comprender porque Uds. deberían fabricarlo en sus talleres en lugar de ir a San MLibre y encargarlo. Repito perdón por mi ignorancia.


Desconectado humberto 02

  • PIC12
  • **
  • Mensajes: 93
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #9 en: 10 de Julio de 2019, 14:34:40 »
Hola Robert76

Hice el Circuito de acuerdo a lo que me enseñaste y le agregué lo que yo había hecho en la protoboard. Te agradecería (cuando te sobre un rato y seas tan amable) echarle una mirada.

Por otro lado me ha surgido una duda que esta expresada con la Flecha. ¿Ese puente o unión esta bien, debo sacarlo o da lo mismo?

Te agradezco un montón.



Uff acabo de ver un error  :oops:
El terminal del rele superior. Me parece que no va al Gnd del Trafo sino al Positivo. Estoy errado?
« Última modificación: 10 de Julio de 2019, 14:38:38 por humberto 02 »

Conectado Robert76

  • PIC16
  • ***
  • Mensajes: 241
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #10 en: 10 de Julio de 2019, 16:30:18 »
Amigo, te diría que descartes la opción de pulsos. Quizás la empresa de telefonía no lo detecte, ya que ha quedado obsoleta esa técnica.
Verifica la conexión del puente rectificador, ya que está mal conectado, la unión de cátodos debe ir al colector del transistor, y la unión de anodos al emisor.
Existiendo C1 y C2, C3 no causa efecto.
D2 no tiene efecto ahí, si quieres monitorear lo que entra y sale, toma la señal de Arduino.
Conecta al Zener con una resistencia serie cómo te adjunté en el esquema.
El tramo marcado en rojo está bien puesto, porque así cierra el circuito.
« Última modificación: 10 de Julio de 2019, 16:34:16 por Robert76 »

Desconectado humberto 02

  • PIC12
  • **
  • Mensajes: 93
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #11 en: 10 de Julio de 2019, 17:05:41 »
Sigo al pié tus comentarios, lo corrijo y veo adonde llego. Con respecto a los pulsos lo descarto entonces...gracias

Desconectado humberto 02

  • PIC12
  • **
  • Mensajes: 93
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #12 en: 10 de Julio de 2019, 18:36:43 »
 :oops: Si no he comprendido mal las correcciones debería de quedar así...


Conectado Robert76

  • PIC16
  • ***
  • Mensajes: 241
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #13 en: 10 de Julio de 2019, 22:46:33 »
Está perfecto!!!! ((:-)) ((:-))
Hay que aclarar que la masa de Arduino y la masa de la línea TEL. tienen que estar unidas, sino el transistor no va a funcionar.

Desconectado humberto 02

  • PIC12
  • **
  • Mensajes: 93
Re:Comunicar por Línea Telefónica FIJA a dos Arduinos
« Respuesta #14 en: 11 de Julio de 2019, 12:40:52 »
Bueno finalmente; entonces me debería de quedar de este modo.


Gracias (Robert76) una vez más aprendí un montón con tu guía.