Semaforo de tres bombillas usando triac

Aver va de nuevo porque creo que no me entendieron es que luego soy medio wey pa explicar, quiero controlar el brillo de 6 lamparas mediante el uso de PWM, solo dispongo de una salida PWM, ahora ademas de controlar el brillo debo poder prender o apagar las lamparas que yo quiera, para ello dispongo de otras 6 salidas, por ese motivo queria usar el circuito de transistores para que con la salida PWM controle los transistores superiores y solo cuando activara un trasistor de los de abajo, se encendiera esa lampara con el brillo proporcionado por el PWM, oye FERNADOB no te entendi, soy mexicano y a veces no entiendo palabras que emplean como picando y porque dices que "sorprendente"
 
hola, el ultimo mensaje que puse no es para vos, es por una duda que tengo con zopilote , pero no lo compeltare hasta haberlo confirmado al tema.

tu concepto en lineas generales es correcto:
manejas cada lampara con una compuerta en una entrada le pones el control o habilitacion y en la otra el PWM , lo puedes hacer de muchas formas posibles.
eso lo eliges tu ya que sos el que tiene el circuito completo.

mira aca ota forma:

el T. comun sera de las potencia que lso demas.
o si no queres usar ese , y si solo los T de control, pues entonces una compuerta para cada uno con su habilitacion .

en fin..... segun lo que prefieras hay formas.
quizas justito son 6 salidas que ncesitas y encontras un ci que tiene justo 6 y te viene joyita.
 

Adjuntos

  • zza3.JPG
    zza3.JPG
    12.1 KB · Visitas: 10
no hay nad para quemar para hacer eso .
o lo haces con T o con compuertas.
y no da para quemar nada .

ni te digo cis ya que no se que conseguis facil y que no .
pero decis que trabajas con 5v , fijate que hay compuertas y buffers que tienen un control comun para habilitarlos y ahi podes meter el pwm
 
Ocuparé este esquema, quitaré el potenciometro y en vez de regular la potencia regularé el tiempo. El código de Arduino que ocuparé:

#include <LiquidCrystal.h>//Libreria necesaria para LCD

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//Definiendo los pines de la LCD a utilizar
int tiempo, tiempo2, tiempo3,a,b,c;//Variables para control de tiempos

void setup() {
// initialize digital pin 13 as an output.
pinMode(6, OUTPUT);//PIN 6 salida
pinMode(7, OUTPUT);//PIN 7 salida
pinMode(8, OUTPUT);//PIN 8 salida
lcd.begin(16, 2);//Se define las dimenciones de la LCD

}

// the loop function runs over and over again forever
void loop() {
tiempo = analogRead(0);//Declarando el PIN analogo para entrada de Voltaje
tiempo = map(tiempo, 0, 1023, 0, 60);//Definiendo el rango de numeros que necesito para los tiempos max 60s
a=0;//Se define como variable contadora se iguala a 0 para el inicio
while(a<=tiempo){ //Estructura repetitiva while con condicion que si 0 es menor o igual al tiempo (0s-60s) puede correr

lcd.print(" Luminaria 1 ");//Imprime el mensaje en la LCD

lcd.setCursor(0,5);//Defino donde posicionar el numero de los segundos
lcd.print(a);//Imprime numeros de 0 a 60 con retardo de 1s cada uno en la LCD
delay(1000);//Temporizador que controla los segundos
digitalWrite(6, HIGH);//PIN 6 encendido el tiempo que el usuario ingres (0s-60s)
lcd.clear();//Borra el mensaje de la LCD
a++;//Variable contadora de Uno en Uno hasta cumplir la condicion
}
digitalWrite(6, LOW);//PIN 6 apagar luego de terminar el ciclo while
lcd.clear();

tiempo2 = analogRead(1);
tiempo2 = map(tiempo2, 0, 1023, 0, 60);
b=0;
while(b<=tiempo2){

lcd.print(" Luminaria 2 ");
lcd.setCursor(0,5);
lcd.print(b);
delay(1000);
digitalWrite(7, HIGH);
lcd.clear();
b++;
}
digitalWrite(7, LOW);
lcd.clear();

tiempo3 = analogRead(2);
tiempo3 = map(tiempo3, 0, 1023, 0, 60);
c=0;
while(c<=tiempo3){

lcd.print(" Luminaria 3");

lcd.setCursor(0,5);
lcd.print(c);
delay(1000);
digitalWrite(8, HIGH);
lcd.clear();
c++;
}
digitalWrite(8, LOW);
lcd.clear();
}



schematic_pot (3).png
 
Buenas. Estoy intentando hacer que se muestre mediante una LCD y con Arduino (simulando un semáforo), el control del tiempo transcurrido mientras se enciende cada foco y a su vez el tiempo seleccionado que se mantendrá encendido cada foco mediante un potenciómetro.
He logrado que cuente los segundos transcurrido, sin embargo el tiempo de seteado solo se muestra brevemente al inicio de cada ciclo y luego se refresca la pantalla empezando el conteo por separado.
Lo que necesito es que se muestre a la vez el tiempo transcurrido y el tiempo seleccionado sin que se interfieran entre sí.
Nada más lo podré variar mediante un potenciómetro.

Les comparto el código que tengo:
C++:
#include <LiquidCrystal.h>//Libreria necesaria para LCD

LiquidCrystal lcd(2, 4, 9, 10, 11 , 12);//Definiendo los pines de la LCD a utilizar
int tiempo, tiempo2, tiempo3,a,b,c, val, val2, val3;//Variables para control de tiempos

void setup() {
  // initialize digital pin 13 as an output.
  pinMode(6, OUTPUT);//PIN 6 salida
  pinMode(7, OUTPUT);//PIN 7 salida
  pinMode(8, OUTPUT);//PIN 8 salida
lcd.begin(16, 2);//Se define las dimenciones de la LCD
 

}

// the loop function runs over and over again forever
void loop() { //aquí es el tiempo de seteo
   int sensorValue = analogRead(A0);
     sensorValue = map(sensorValue, 0, 1023, 0, 60);
    Serial.println(sensorValue);
    lcd.print(sensorValue);
    lcd.setCursor(3,1);
    delay(100);

    int sensorValue1 = analogRead(A1);
    sensorValue1 = map(sensorValue1, 0, 1023, 0, 60);
    Serial.println(sensorValue1);
    lcd.print(sensorValue1);
    lcd.setCursor(6,1);
    delay(100);
     int sensorValue2 = analogRead(A2);
    sensorValue2 = map(sensorValue2, 0, 1023, 0, 60);
    Serial.println(sensorValue2);
    lcd.print(sensorValue2);
    lcd.setCursor(9,1);
    delay(100);
  tiempo = analogRead(0);//Declarando el PIN analogo para entrada de Voltaje
  tiempo = map(tiempo, 0, 1023, 0, 60);//Definiendo el rango de numeros que necesito para los tiempos max 60s
  a=0;//Se define como variable contadora se iguala a 0 para el inicio
while(a<=tiempo){ //Estructura repetitiva while con condicion que si 0 es menor o igual al tiempo (0s-60s) puede correr

lcd.print(" Foco 1 ");//Imprime el mensaje en la LCD

lcd.setCursor(9,0);//Defino donde posicionar el numero de los segundos
lcd.print(a);//Imprime numeros de 0 a 60 con retardo de 1s cada uno en la LCD
delay(1000);//Temporisador que controla los segundos
digitalWrite(6, HIGH);//PIN 6 encendido el tiempo que el usuario ingres (0s-60s)
lcd.clear();//Borra el mensaje de la LCD
a++;//Variable contadora de Uno en Uno hasta cumplir la condicion
}
digitalWrite(6, LOW);//PIN 6 apagar luego de terminar el ciclo while
lcd.clear();

  tiempo2 = analogRead(1);
  tiempo2 = map(tiempo2, 0, 1023, 0, 60);
  b=0;
while(b<=tiempo2){

lcd.print(" Foco 2 ");
lcd.setCursor(9,0);
lcd.print(b);
delay(1000);
digitalWrite(7, HIGH);
lcd.clear();
b++;
}
digitalWrite(7, LOW);
lcd.clear();


  tiempo3 = analogRead(2);
  tiempo3 = map(tiempo3, 0, 1023, 0, 60);
   c=0;
while(c<=tiempo3){

lcd.print(" Foco 3");

lcd.setCursor(9,0);
lcd.print(c);
delay(1000);
digitalWrite(8, HIGH);
lcd.clear();
c++;
}
digitalWrite(8, LOW);
lcd.clear();
}
 
Última edición por un moderador:
Atrás
Arriba