Go Down

Topic: Orientación para proyecto timer (Read 683 times) previous topic - next topic

IgnoranteAbsoluto

JWOLVERINE, ¿los display que vas a usar son de cátodo común o de ánodo común? Porque el esquema que has puesto es para cátodo común y son transistores NPN y el emisor se conecta a masa. Mientras que el montaje del simulador tienes los transistores conectados a 5 voltios, como si se trataran de transistores PNP para un montaje de display con ánodo común. Y en el programa de pruebas que has puesto de ejemplo comentas que son de ánodo común, pero parece que pones a nivel alto el pin que alimenta la base del transistor que vas a "tratar" y creo que si es de ánodo común has de ponerlo a nivel bajo para "habilitarlo".

¿Estoy equivocado?

JWOLVERINE

#16
Aug 10, 2017, 08:14 pm Last Edit: Aug 11, 2017, 07:34 am by JWOLVERINE
Hola si son de katodo común, perdón es que era de madrugada (como que hay un bug en ese simulador ya que si pongo a tierra los emisores de los trans. npn no funcionan, ya que en el proto funciona bien tanto con npn y mosfet n), ya corregí el circuito simulado estaba invertido el c y emisor del transistor NPN, y sustituí los resistores en las bases por diodos 1n4148 que son de swicheo, :D  ya vi donde esta estan los errores es en el codigo voy a checarlo :( , gracias IgnoranteAbsoluto gracias por la ayuda voy a checar :) saludos

*ese simulador no funciona tiene errores comprobado, lo hice en protoboard y sirve sin ningún problema*

JWOLVERINE

#17
Aug 11, 2017, 07:18 am Last Edit: Aug 11, 2017, 07:30 am by JWOLVERINE
Hola conecte los display en el protoboard pero solo hubo espacio para 2 y con el diagrama que había seguido que es el mismo que me había propuesto IgnoranteAbsoluto y no hubo ningún problema, se pueden anexar los 3 display y mas, aqui el video de un ejercicio con los display armados Video, el codigo que use fue este:


Code: [Select]
int A = 2;
int B = 3;
int C = 4;
int D = 5;
int E = 6;
int F = 7;
int G = 8;
int Dp = 9;
int base1 = A0;
int base2 = A1;

// Configuramos los pines.
void setup() {
  pinMode (A, OUTPUT);
  pinMode (B, OUTPUT);
  pinMode (C, OUTPUT);
  pinMode (D, OUTPUT);
  pinMode (E, OUTPUT);
  pinMode (G, OUTPUT);
  pinMode (F, OUTPUT);
  pinMode (Dp, OUTPUT);
  pinMode (A0, OUTPUT);
  pinMode (A1, OUTPUT);

}

void loop() {
  // CERO
digitalWrite (base1, HIGH);
digitalWrite (base2, LOW);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, HIGH);
digitalWrite (G, LOW);
delay (1000);

//UNO
digitalWrite (base1, HIGH);
digitalWrite (base2, LOW);
digitalWrite (A, LOW);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, LOW);
digitalWrite (G, LOW);
delay (1000);

//DOS
digitalWrite (base1, HIGH);
digitalWrite (base2, LOW);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, LOW);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, LOW);
digitalWrite (G, HIGH);
delay (1000);

//TRES
digitalWrite (base1, HIGH);
digitalWrite (base2, LOW);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, LOW);
digitalWrite (F, LOW);
digitalWrite (G, HIGH);
delay (1000);

//CUATRO
digitalWrite (base1, HIGH);
digitalWrite (base2, LOW);
digitalWrite (A, LOW);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//CINCO
digitalWrite (base1, HIGH);
digitalWrite (base2, LOW);
digitalWrite (A, HIGH);
digitalWrite (B, LOW);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, LOW);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//SEIS
digitalWrite (base1, HIGH);
digitalWrite (base2, LOW);
digitalWrite (A, HIGH);
digitalWrite (B, LOW);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//SIETE
digitalWrite (base1, HIGH);
digitalWrite (base2, LOW);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, LOW);
digitalWrite (G, LOW);
delay (1000);

//OCHO
digitalWrite (base1, HIGH);
digitalWrite (base2, LOW);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//NUEVE
digitalWrite (base1, HIGH);
digitalWrite (base2, LOW);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (2000);

 // CERO
digitalWrite (base1, LOW);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, HIGH);
digitalWrite (G, LOW);
delay (1000);

//UNO
digitalWrite (base1, LOW);
digitalWrite (base2, HIGH);
digitalWrite (A, LOW);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, LOW);
digitalWrite (G, LOW);
delay (1000);

//DOS
digitalWrite (base1, LOW);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, LOW);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, LOW);
digitalWrite (G, HIGH);
delay (1000);

//TRES
digitalWrite (base1, LOW);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, LOW);
digitalWrite (F, LOW);
digitalWrite (G, HIGH);
delay (1000);

//CUATRO
digitalWrite (base1, LOW);
digitalWrite (base2, HIGH);
digitalWrite (A, LOW);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//CINCO
digitalWrite (base1, LOW);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, LOW);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, LOW);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//SEIS
digitalWrite (base1, LOW);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, LOW);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//SIETE
digitalWrite (base1, LOW);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, LOW);
digitalWrite (G, LOW);
delay (1000);

//OCHO
digitalWrite (base1, LOW);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//NUEVE
digitalWrite (base1, LOW);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (2000);

 // CERO
digitalWrite (base1, HIGH);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, HIGH);
digitalWrite (G, LOW);
delay (1000);

//UNO
digitalWrite (base1, HIGH);
digitalWrite (base2, HIGH);
digitalWrite (A, LOW);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, LOW);
digitalWrite (G, LOW);
delay (1000);

//DOS
digitalWrite (base1, HIGH);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, LOW);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, LOW);
digitalWrite (G, HIGH);
delay (1000);

//TRES
digitalWrite (base1, HIGH);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, LOW);
digitalWrite (F, LOW);
digitalWrite (G, HIGH);
delay (1000);

//CUATRO
digitalWrite (base1, HIGH);
digitalWrite (base2, HIGH);
digitalWrite (A, LOW);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//CINCO
digitalWrite (base1, HIGH);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, LOW);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, LOW);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//SEIS
digitalWrite (base1, HIGH);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, LOW);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//SIETE
digitalWrite (base1, HIGH);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, LOW);
digitalWrite (G, LOW);
delay (1000);

//OCHO
digitalWrite (base1, HIGH);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, HIGH);
digitalWrite (E, HIGH);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (1000);

//NUEVE
digitalWrite (base1, HIGH);
digitalWrite (base2, HIGH);
digitalWrite (A, HIGH);
digitalWrite (B, HIGH);
digitalWrite (C, HIGH);
digitalWrite (D, LOW);
digitalWrite (E, LOW);
digitalWrite (F, HIGH);
digitalWrite (G, HIGH);
delay (2000);

}


y ahora seria la realización de la cuenta regresiva y anexarlo al archivo del compañero Ignorante Absoluto me podrían orientar, ya solo faltaria eso ya que el hardware funciona tanto monedero, Etapa de potencia (relay o mosfet), Saludos :D

JWOLVERINE

#18
Aug 13, 2017, 03:38 am Last Edit: Aug 13, 2017, 04:51 am by JWOLVERINE
Este seria el diagrama, pcb del display de 3 dígitos cátodo común, controlados por  transistores bc548, probado y funcionando :)

IgnoranteAbsoluto

Aquí una nueva versión del programa adaptada el montaje de JWOLVERINE. He definido unas nuevas constantes, y cambiado algún pin (has de revisar la asignación de los pines).

Lo he hecho un poco a las prisas (como casi siempre) y no he podido comentarlo todo lo que quisiera. A destacar que puedes elegir si quieres mostrar horas y minutos o todo en minuto (constante MOSTRAR_HORAS_Y_MINUTOS) y si quieres probarlo sin tener que esperar mucho, puedes "multiplicar la velocidad" (prueba a cambiar el valor de la constante VELOCIDAD a 10).

Cuando está apagado muestra OFF en los displays.

Adjunto fichero.

JWOLVERINE

#20
Aug 14, 2017, 04:46 am Last Edit: Aug 14, 2017, 09:23 am by JWOLVERINE
Buenas noches IgnoranteAbsoluto, que bárbaro quedo Genial, de principio me confundí con MOSTRAR_HORAS_Y_MINUTOS jeje, pero ya quedo comprendido, ahora una pregunta en la linea

sevseg.setNumber(valor, mostrarCerosIzquierda ? NUMERO_TOTAL_DE_DIGITOS: -1);

estaba leyendo la librería sevseg pero me hice un lio el "-1" es para que no muestre el punto decimal? y si quisiese que se mostrara el punto decimal en las horas minutos?

IgnoranteAbsoluto

Prueba con:
Code: [Select]
sevseg.setNumber(valor, mostrarCerosIzquierda ? 2 : -1);
O cambia el 2 por un 1. No estoy seguro. Nunca antes había usado esa librería.

JWOLVERINE

Perfecto ahora si quedo listo :D, nada mas que haga los pcb subo video, lo tengo todo armado en proto :D

JWOLVERINE

#23
Aug 15, 2017, 08:19 pm Last Edit: Aug 15, 2017, 08:57 pm by JWOLVERINE
Buenas tardes, seria posible anexarle un pin mas al código que de un pulso para activar un relay por digamos 1 segundos al comenzar el conteo y vuelva activarse por otro seg al terminar el conteo, esto es para controlar un monitor que lo encienda y apague y que no se quedase prendido todo el tiempo.

Saludos.

Estoy tomando el curso que hay en el foro de arduino desde cero, porque si ando perdido en varias cuestiones :)

*edito*
Ya lo logre que diese el pulso para encender  agregando como me explico el compañero Ignoranteabsoluto.

cuando empieza el conteo y al terminar y que no de de nuevo el pulso al agregar moneda.

No se si sea así la mejor forma  :)   lo podrías checar compañero Ignoranteabsoluto?










IgnoranteAbsoluto

Tu solución sólo tiene un problema, el pulso es muy corto, pones a nivel alto el pin y acto seguido lo vuelves a poner a nivel bajo. Y tú dices que lo quieres mínimo de un segundo. Pues eso no es lo que tienes. Lo que sí que has puesto "el encendido" y "el apagado" en los sitios adecuados.

Para controlar el tiempo del pulso habría que hacerlo "un poco" más complejo. Usando los famosos millis() y una muy simple máquina de estados (tan simple que sólo necesito de un boolean para "controlar" el estado. Lo he implementado en una pequeña clase (se podría haber hecho "esparcido" en medio del setup() y del loop(), y con variables globales, pero prefiero hacer una pequeña clase y usar un único objeto global.

He cambiado los nombres de las constantes y definido TIEMPO_PULSO con 1000 milisegundos (el segundo del que hablas) que la puedes adaptar a tus necesidades. PIN_PULSO es el pin en el que se va a generar "el pulso" y ESTADO_PULSO_ACTIVO es el estado al que ha de estar el pin para generar el pulso (HIGH o LOW).

VELOCIDAD, que lo tengo a 1, no afecta al tiempo del pulso ya que se su tiempo se controla independientemente del control del temporizador.

He reorganizado un poco el código, pero no he hecho más cambios que añadir las constantes indicada, así como la clase ControlPulso, crear el objeto controlPulso, llamar a controlPulso.pulso(TIEMPO_PULSO) para generar el pulso cuando se enciende y se apaga "el sistema" y la llamada a controlPulso.loop() al final del loop().

En cuanto al uso de los millis() con máquinas de estados, si te encuentras con ánimos de leer un buen rato y ver una larga explicación de cómo implementar algo "pequeño" con millis()] y máquinas de estados, te recomiendo que te leas de este foro el post alarma temporizada en un mismo led al presionar un botón. Donde en mi respuestas explico un poco cómo usar ambas cosas.

Espero que esto te funcione.

JWOLVERINE

#25
Aug 16, 2017, 07:21 am Last Edit: Aug 16, 2017, 09:07 am by JWOLVERINE
Hola IgnoranteAbsoluto honor a quien honor merece, es increíble y fascinante esto de la programación y el arduino, ahora veo todo lo que hay que hacer para algo como dar una instrucción de unos segundos, y yo que me sentía contento porque si funciono lo que modifique ya que esa salida es para dar la orden a la consola o monitor que encienda y para esto utilice un CD4066 que cuenta en su interior con 4 interruptores bilaterales, accionados por su respectivo pin de control que es el que acciona el PIN_PULSO y como es para encendido o apagado con esa pequeñísima señal hace su cometido, fue felicidad de novato jeje, ya que vi como lo modificaste tu de la forma que se debe y profesional pues me fui de espaldas xD, quedo genial el proyecto, iré subiendo conforme termine las pcbs, de como quedo terminado e implementado el proyecto, mil gracias de antemano por la lata que he dado.

Saludos. :)

*muy interesante el post que me recomiendas, hay que aprender todo lo que se pueda.

Go Up