La lista de materiales consiste en :
- 1 Arduino UNO
- Decodificador 7447
- 3 displays ánodo común
- 3 resistencias 330Ω
- Cable USB
- Muchos otros cables
Algunas imagenes de como quedó:
El proyecto tiene 2 códigos, el código en python ejecuta localmente y utiliza las librerias pyserial y feedparser; el primero se encarga de establecer conexión serial via USB con el Arduino, el segundo se encarga de conectarse con el RSS de Gmail para contar el total de correos.
El proyecto tiene 2 códigos, el código en python ejecuta localmente y utiliza las librerias pyserial y feedparser; el primero se encarga de establecer conexión serial via USB con el Arduino, el segundo se encarga de conectarse con el RSS de Gmail para contar el total de correos.
El código es:
import serial, sys, feedparser, os from time import sleep #Ajustes de cuenta USERNAME="**************@gmail.com" PASSWORD="***********" PROTO="https://" SERVER="mail.google.com" PATH="/gmail/feed/atom" SERIALPORT = "/dev/tty.usbmodemfa131" # Puerto a utilizar para establecer conexión def serialgmail(): # Ajustando el puerto try: ser = serial.Serial(SERIALPORT, 9600) sleep(1) ser.write(chr(1)) except serial.SerialException: print "No hay dispositivo conectado" sys.exit() newmails = int(feedparser.parse(PROTO + USERNAME + ":" + PASSWORD + "@" + SERVER + PATH)["feed"]["fullcount"]) for i in range(newmails): sleep(.01) ser.write(str(0)) sleep(.01) #ser.close() while True: serialgmail() sleep(15)El código de Arduino es el siguiente:
// Pines del decodificador int A = 13; int B = 12; int C = 11; int D = 10; int mail; // Nuevos mails? int val; // Valor del puerto serial a mostrar en los displays int x = 0, y = 0, z = 0; // Cifras del valor serial individuales void setup() { pinMode(A, OUTPUT); // Pines del decodificador como salidas pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(9, OUTPUT); Serial.begin(9600); Serial.flush(); // Se inicia con el led apagado mail = LOW; digitalWrite(9, HIGH); } void loop() { // Lectura de serial val = Serial.read(); Serial.write(val); if (Serial.available()) { Serial.println(val); while(true){ multiplex(); } } } void display_values() { int aux = 0; while (aux <= serReadInt()){ x++; if (x == 10){ x = 0; y++; } if (y == 10){ y=0; z++; } aux++; } } void dec_bin(int value){ if (value == 0){ digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, LOW); } else if (value == 1){ digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, LOW); } else if (value == 2){ digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, LOW); } else if (value == 3){ digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, LOW); } else if (value == 4){ digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, LOW); } else if (value == 5){ digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, LOW); } else if (value == 6){ digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); } else if (value == 7){ digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); } else if (value == 8){ digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, HIGH); } else if (value == 9){ digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, HIGH); } } void multiplex(){ display_values(); dec_bin(x); digitalWrite(3, HIGH); delay(5); dec_bin(y); digitalWrite(3, LOW); digitalWrite(4, HIGH); delay(5); dec_bin(z); digitalWrite(4, LOW); digitalWrite(5, HIGH); delay(5); digitalWrite(5, LOW); } int serReadInt() { int i, serAva; // Contador i, serAva espera a que haya información disponible en serial char inputBytes [7]; // Arreglo de bytes que se reciben char * inputBytesPtr = &inputBytes[0]; // puntero al primer elemento if (Serial.available()>0) // Hay informacion en serial? { delay(.0000001); //Delay para la transmición serAva = Serial.available(); // Se lee el número de bytes de entrada for (i=0; i "mayor que" serAva; i++) // Se cargan los bytes recibidos al arreglo inputBytes[i] = Serial.read(); inputBytes[i] = '\0'; // Se pone el caracter nulo al final return atoi(inputBytesPtr); } else return -1; // Se regresa -1 si no hay información de entrada }
Hola Victor, muchas gracias por tu post.
ResponderBorrarPodrías subir el diseño electronico, porque con las fotos no se alcanza a ver los pines de donde lo conectaste, muchas gracias
Desde hace mucho que hice esto, ya no tengo esa información. :/
BorrarPero es un simple multiplexor; si mal no recuerdo las salidas del arduino 3, 4 y 5 se conectan al vcc de cada display (ánodo comun).
Las salidas 13, 12, 11 y 10 se conectan a los pines A, B, C y D del decodificador 7447 respectivamente de acuerdo con su datasheet (http://www.davidswinscoe.com/electronics/components/7447/74xx47.gif).
Las salida 9 la uso para dar corriente al proto, puede ir donde quieras, y utilizo el gnd del mismo arduino para el proto, tambien ponlo donde quieras.
Para multiplexar, hay muchos tutoriales de como hacerlo, basicamente tienes que puentear los pines de cada segmento de los 3 displays a la misma salida del 7447 (como aquí http://www.electronicsblog.net/wp-content/uploads/7s.png).
Espero que ésto te ayude.