Buenas a todos sigo avanzando poco a poco el proyecto, hice funcionar todo lo del aire acondiciona por separado y ahora estoy uniendo todo en uno solo y me surgió un problema para algunas protecciones del sistema de aire acondicionado como refrigeración del motor no estoy seguro si el código esta mal planteado en el sentido de que debo utilizar los if else o los swicht case o hay otra forma de hacerlo que me recomiendan ustedes, adjunto el esquema del ventilador del radiador
Lo que necesito hacer es que el arduino mega me encienda el (FAN NO.1 Relay) al momento que yo encienda el compresor del aire acondicionado, con esta parte del código lo logre
case 'o':
digitalWrite(clutchmagrelay, HIGH);
digitalWrite(fanno1, HIGH);
Serial.println("Encendido A/C" );
comando = ' ';
break;
case 'p':
digitalWrite(clutchmagrelay, LOW);
digitalWrite(fanno1, LOW);
Serial.println("Apagado A/C" );
comando = ' ';
break;
y ahora también necesito que de forma automática me encienda el (FAN NO.1 Relay) a lo que la ECU del automóvil manda un negativo ya que esta enciende otro relay que es (FAN NO.2 Relay) ya que esta mandando un negativo y con el fin de aislar el arduino de los 12v del automóvil estoy utilizando optoacopladores para que envié una seña de 0 y 5v al arduino, esta es la conexión que estoy utilizando
y este es el código que utilizo para que haga esa parte
switch (fan2) {
case 0:
digitalWrite(fanno1, HIGH);
break;
case 1:
digitalWrite(fanno1, LOW);
break;
}
mi problema es que al activar el compresor del aire acondicionado mediante el monitor serial ya no se activa sino solo a lo que se activa el octoacoplador, este es todo el código que estoy utilizando
#include <Servo.h>
#define pinServo1 10
#define pinServo2 9
Servo servomixcontrol;
Servo servoventmode;
const int blower = 2; //Blower motor
const int heaterrelay = 53; //Heater relay
const int defrelay = 52; //defrost relay
const int rec = 51; //Air recirculation
const int fre = 50; //Air Fresh
const int clutchmagrelay = 49; //Clutch relay a/c
const int fanno1 = 48; //Relay Fan No 1
const int fanno2 = 38; // Relay Fan No 2
char comando;
int posicion;
int in = 0;
int au = 51;
int cue = 0;
int cuen = 1;
int fan2 = 0;
void setup() {
Serial.begin(9600);
servomixcontrol.attach(pinServo1);
servoventmode.attach(pinServo2);
pinMode(blower, OUTPUT);
pinMode(heaterrelay, OUTPUT);
pinMode(defrelay, OUTPUT);
pinMode(rec, OUTPUT);
pinMode(fre, OUTPUT);
pinMode(clutchmagrelay, OUTPUT);
pinMode(fanno1, OUTPUT);
pinMode(fanno2, INPUT);
}
void loop() {
fan2 = digitalRead(fanno2);
if (Serial.available() > 0) {
comando = Serial.read();
posicion = Serial.parseInt();
}
switch (fan2) {
case 0:
digitalWrite(fanno1, HIGH);
break;
case 1:
digitalWrite(fanno1, LOW);
break;
}
switch (comando) {
case 'q':
in = in + au;
if (in > 255) {
in = 255;
}
cue = cue + cuen;
if (cue == 5);
if (cue > 5) {
cue = 5;
}
analogWrite(blower, in);
Serial.println(cue);
comando = ' ';
break;
case 'w':
in = in - au;
if (in > 255) {
in = 255;
}
cue = cue - cuen;
if (cue == 5);
if (cue < 0) {
cue = 0;
}
analogWrite(blower, in);
Serial.println(cue);
comando = ' ';
break;
case 'e':
digitalWrite(heaterrelay, HIGH);
Serial.println("Encendido" );
comando = ' ';
break;
case 'r':
digitalWrite(heaterrelay, LOW);
Serial.println("Apagado");
comando = ' ';
break;
case 't':
digitalWrite(defrelay, HIGH);
Serial.println("Desempaña Parabrisa Trasero Encendido" );
comando = ' ';
break;
case 'y':
digitalWrite(defrelay, LOW);
Serial.println("Desempaña Parabrisa Trasero Apagado");
comando = ' ';
break;
case 'u':
digitalWrite(rec, HIGH);
digitalWrite(fre, LOW);
Serial.println("Air recirculation" );
comando = ' ';
break;
case 'i':
digitalWrite(rec, LOW);
digitalWrite(fre, HIGH);
Serial.println("Air Fresh" );
comando = ' ';
break;
case 'o':
digitalWrite(clutchmagrelay, HIGH);
digitalWrite(fanno1, HIGH);
Serial.println("Encendido A/C" );
comando = ' ';
break;
case 'p':
digitalWrite(clutchmagrelay, LOW);
digitalWrite(fanno1, LOW);
Serial.println("Apagado A/C" );
comando = ' ';
break;
case'a':
servomixcontrol.write(posicion);
Serial.println(posicion);
comando = ' ';
break;
case's':
servoventmode.write(posicion);
Serial.println(posicion);
comando = ' ';
break;
}
}
También adjunto todas las conexiones para su simulación en proteus , en el archivo de proteus no estoy utilizando ningún diodo de protección ya que los relay y el motor que están integrados en el automóvil ya los tienen integrados por ende a mi parecer ya no son necesario ponerlos.
https://drive.google.com/drive/folders/0B1ZIep4iFN2ydjk2ODNCdWtTSHc?usp=sharing