Autor Tema: APORTE-Arduino llamada telefónica con tonos DTMF  (Leído 582 veces)

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

Desconectado humberto 02

  • PIC12
  • **
  • Mensajes: 96
APORTE-Arduino llamada telefónica con tonos DTMF
« en: 14 de Julio de 2019, 18:42:04 »
Hola; Buenas Tardes.
Luego de una semana entera de trabajar sobre el tema y con la colaboración fundamental de Robert76. Finalmente he logrado que mi Placa de Arduino UNO V3.0 logre:
Discar un Número de teléfono y ejecute la llamada a mi Celular (Sin fritar ningún componente).

Este es el Punta pié más importante (para mí). Ahora comienza la tarea de que Arduino:
Descuelgue, llame y envíe un “código”, “audio” o “Secuencia de datos” para que Otro Arduino Atienda, reciba los datos y ambos cuelguen.
Haciendo una comunicación totalmente autónoma. Aquí les dejo la Primera Etapa. Para que cada uno de Uds. pueda utilizarlo (en el caso que le sirva) de la mejor manera.

El Sketch es:
Código: [Seleccionar]
String NroTel = "15999999"; // el numero de telefono para marcar
int numero = NroTel.length();

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

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

void setup() {
     Serial.begin(9600);
     Serial.print("Inciando Proceso");
     
     pinMode(6, INPUT); digitalWrite(6, LOW); // Colgado/Descolgado
     pinMode(7, INPUT); digitalWrite(7, LOW); // Tecla Tonos
     
     pinMode(tono1Pin,OUTPUT); // Output Tono 1 [D10]
     pinMode(tono2Pin,OUTPUT); // Output Tono 2 [D11]

     pinMode(12,OUTPUT); digitalWrite(12, LOW);// Led Testigo DTMF
}

void loop() {
     if (digitalRead(7) == HIGH){
         Serial.println("Discado <Por medio de Tonos DTMF>: ");
         Serial.print("Numero: ");
         for(int i = 0; i < numero; i++) {
             char x = NroTel.charAt(i);
             int digito = String(x).toInt();
             // Disco el digito del Nro Telefonico
             Serial.print(digito);
             byte digit = digito;
             boolean tono1state = false;
             boolean tono2state = false;
             unsigned long tono1delay = (500000/DTMF[digit][0])-10;
             unsigned long tono2delay = (500000/DTMF[digit][1])-10;
             unsigned long tono1timer = micros();
             unsigned long tono2timer = micros();
             // Para la duracion del tiempo de un solo tono
             unsigned long timer = millis();

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

             digitalWrite(12,HIGH);  // Led Testigo
             while(millis() - timer < 100) {
                   if(micros()-tono1timer>tono1delay) {
                      tono1timer=micros();    // Reset restablecer el temporizador del timer
                      tono1state=!tono1state; // Alternar estado del tono 1
                      digitalWrite(tono1Pin, tono1state);
                   }

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

El vídeo demostrativo con el Circuíto:

Ejemplo de Aplicación:
Tenemos un Arduino en un lugar que cuenta con una línea telefónica. Un sensor de agua sobre una regla al pié de un arroyo. Nosotros estamos en la Ciudad y necesitamos saber cuando el Nivel del Arroyo supere una marca pre establecida. Es ahí cuando Arduino toma el valor, llama por teléfono y le dice al Arduino Central que el Arroyo ha crecido peligrosamente.
Ahora (por ejemplo) Defensa civil sabe qué medidas tomar para evacuar a los vecinos del lugar.

Les deseo lo mejor!

Desconectado Robert76

  • PIC18
  • ****
  • Mensajes: 251
Re:APORTE-Arduino llamada telefónica con tonos DTMF
« Respuesta #1 en: 14 de Julio de 2019, 23:58:19 »
 ((:-)) ((:-))  ((:-)) ((:-))

Desconectado humberto 02

  • PIC12
  • **
  • Mensajes: 96
Re:APORTE-Arduino llamada telefónica con tonos DTMF
« Respuesta #2 en: 29 de Julio de 2019, 10:49:55 »
Buenos Días para Todos!

En este Video podremos ver una etapa más. En este caso Arduino (a partir de un estimulo) al presionar una tecla automaticamente "descuelga" y llama al número.

Por otra parte el resto de la Interface es la indicadora de línea ocupada propuesta en el Sitio de Pablin.

Les deseo lo mejor!


El Código es el mismo del caso anterior con la diferencia que se le agrega el Puerto que se encarga de descolgar (según el Circuito)
« Última modificación: 29 de Julio de 2019, 11:03:42 por humberto 02 »


 

anything