Construí un proyecto simple con una placa Arduino. Utilizo la placa para leer valores de entrada analógica de un sensor de rotación (potenciómetro), y uso los valores para determinar qué relé SSR en un módulo se enciende. Luego conecté los relés a los LED y el proyecto funciona, pero solo de una manera. Por ejemplo, cuando enciendo el potenciómetro hacia el máximo, los relés se cierran secuencialmente, como se supone que deben hacer. Lo mismo cuando llego al máximo y marqué el bote. de vuelta hacia 0. Puedo moverme en el medio y el Arduino activará el (los) relé (s) de acuerdo con los valores analógicos leídos. Esta parte funciona como debe ser.
El problema es que cuando conecto los LED a los relés, los LED se encenderán secuencialmente a medida que se enciendan los relés, mientras marco el potenciómetro. desde 0 hacia máximo. Pero los LED no se apagarán cuando marque el bote. retroceda hacia 0. Los relés indican que se están apagando en el módulo (cada uno tiene un indicador LED), pero los LED que conecté permanecen encendidos sin importar lo que pase.
La salida estándar de 5 V de la placa Arduino alimenta el módulo de relé, los LED y el sensor. Cada terreno es común con el Arduino GND.
Entonces, ¿por qué los LED no se apagan? Es probable que sea algo muy principiante que no conozco. Leí en alguna parte que cuando usas un MOSFET para encender y apagar algo, debes conectar una resistencia desplegable a GND, para que funcione el "apagado". De lo contrario, la luz o el motor o lo que sea permanecerá encendido. ¿Suena como que se aplica aquí?
Aquí está mi módulo de retransmisión: enlace
Y aquí está mi código de Arduino, si es de ayuda:
//define the digital pins for controlling the relays on the module
//these pins are connected to the relay gate pins on the module
#define in1 13
#define in2 11
#define in3 10
#define in4 9
void setup(){ //make sure the pins are all output, as 5V will be drawn from them
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}
void loop(){
float rotationValue = analogRead(A0); //read the raw sensor value
float percentValue = rotationValue / 10.23; //convert raw value to 0-100
if(percentValue >= 0.00 && percentValue <= 1.00){ //all relays off
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
else if(percentValue > 1.00 && percentValue <= 25.00){ //turn on relay 1
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
else if(percentValue > 25.00 && percentValue <= 50.00){ //turn on relay 1, 2
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
else if(percentValue > 50.00 && percentValue <= 75.00){ //turn on relays 1,2,3
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
else if(percentValue > 75.00){ //turn on all the relays
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, HIGH);
}
}