Archivos para mayo, 2013

Quiero compartir con ustedes este proyecto que encontré sumamente interesante. El concepto original fué elaborado por Matías Nahuel Heredia, el cual modifiqué para guardar la información en una tarjeta Micro SD.

El circuito receptor DTMF para monitorear los tonos que se transmiten por la línea telefónica es el siguiente:

HT9170B/D Datasheet

La conexión de los pines de salida del HT9170B/D a la placa Arduino UNO es la siguiente:

HT9170B/D –> Arduino UNO
D0(Pin 11) –> Arduino UNO (Pin 2)
D1(Pin 12) –> Arduino UNO (Pin 3)
D2(Pin 13) –> Arduino UNO (Pin 4)
D3(Pin 14) –> Arduino UNO (Pin 5)
DV(Pin 15) –> Arduino UNO (Pin 6)

El terminal con la etiqueta “Tone” se conecta directamente a un terminal de la línea telefónica y el otro terminal de la línea telefónica se conecta a GND.

La alimentación para este circuito se obtiene directamente de la placa Arduino UNO. Existe en dicha placa un terminal que provee 5V.

Ver Receptor DTMF

El circuito para conectar una tarjeta Micro SD a la placa Arduino UNO es el siguiente:

Los pines 10, 11, 12 y 13 corresponden a los pines de la placa Arduino UNO.
La alimentación para este circuito se obtiene directamente de la placa Arduino UNO. Existe en dicha placa un terminal que provee 3.3V.
Este circuito lo construí sobre un adaptador Micro SD a SD como se puede observar en la siguiente imagen.

Ver Adaptador SD a Arduino UNO

Con ambos circuitos armados procedemos a interconectar las tres placas como se observa en la siguiente imagen.

Ver Arduino UNO + Receptor DTMF + Adaptador SD

Habiendo interconectado exitosamente las tres placas procedemos a escribir el programa cuya función será leer el estado de las 5 entradas (Pin 2 a Pin 6) y almacenar el valor obtenido a un archivo de texto en la tarjeta Micro SD.

Antes de continuar la lectura recomiendo ver la Tabla de Códigos DTMF

#include <SD.h>

File myFile;
byte digit;

void setup()
{
	pinMode(2, INPUT); //D0
	pinMode(3, INPUT); //D1
	pinMode(4, INPUT); //D2
	pinMode(5, INPUT); //D3
	pinMode(6, INPUT); //DV
	pinMode(10, OUTPUT); //SD Card SS
	
	if (!SD.begin(10))
	{
		return;
	}
}

void loop()
{
	while(digitalRead(6) == LOW)
	{
		;
	}
	
	digit = 0;
	
	if (digitalRead(2) == HIGH)
	{
		digit = digit + 1;
	}
	if (digitalRead(3) == HIGH)
	{
		digit = digit + 2;
	}
	if (digitalRead(4) == HIGH)
	{
		digit = digit + 4;
	}
	if (digitalRead(5) == HIGH)
	{
		digit = digit + 8;
	}
	
	myFile = SD.open("log.txt", FILE_WRITE);
	
	if(myFile)
	{
		myFile.print(digit);
		myFile.print("-");
		myFile.close();
	}
	
	while(digitalRead(6) == HIGH)
	{
		;
	}
}

Lógicamente es perfectible y cada uno puede adaptarlo a sus necesidades particulares.

Créditos: Ardogan de www.forosdeelectronica.com y mi amigo Werner.