Go Down

Topic: Control de aire acondicionado (Automóvil) (Read 5042 times) previous topic - next topic

juand91

hola si entendí bien fanno1 tiene que funcionar cuando lo mandes por serial o cuando fan2 este en uno

para solucionarlo rapido he eliminado es swith del fan2 pues arduino segun va leyendo segun va haciendo. entonces solo le ponerlo a 1 el ciclo en el que le llega la letra correspondiente. luego en la siguiente lectura lee fan2= o pues fanno1 tambien a 0 de hay el problema. cree una variable fan1 que memoriza como esta el AC asi la salida es una or entre la ECU y el AC

espero que funcione pues estoy sin forma de simular el codigo
Code: [Select]
#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;
int fan1 = 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);
  digitalWrite(fanno1, (fan2 || fan1));

  if (Serial.available() > 0) {
    comando = Serial.read();
    posicion = Serial.parseInt();
  }
 

  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);
      fan1=1;
      Serial.println("Encendido A/C" );
      comando = ' ';
      break;

    case 'p':
      digitalWrite(clutchmagrelay, LOW);
      fan1 = 0;
      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;
  }
}

Swift

Pues si funciona de maravilla en la simulación no hay ningún problema, muchas gracias por tu ayuda juan91

Pollo_98

que onda mira fijate para acivar el aire acondicionado es algo simple podes simplemente utilisar un un relay para que esta exite el relay del cloutch del compresor pero ademas de eso tenes que activar el ventilador del motor para que este no se sobre caliente y tenes que colocarle un siclo a modo que cuando ta este frio a una temperatura deseada este desactive el compresor y el ventilador.

y para ahorrarte problemas con el blower simplemnte dejalo activado y actibalo con positivo

Swift

Pollo_98 Proque un relay para activar otro relay, no seria mejor utilizar un transistor o octoaclopador para activar el relay del embrague magnético , ahora es cierto lo que dices que debe accionar el ventilador al encenderse el aire acondicionado, y ademas debe indicarle a la ECU que suba las revoluciones del motor (ralentí) lo cual ya tengo implementado, ahora el problema que tengo es que mi unidad del aire acondicionado controlaba el ventilador del motor el cual se encendía a cierta temperatura lo cual ahora tengo en puente para que siempre pase prendido, esto pienso lo cual pienso solucionar con la shield can-bus y este le indique al arduino que del aire acondicionado que debe encender la refrigerancion del motor (ventilador) 

Swift

Bueno después de un tiempo tengo casi todo funcionando a excepción de un sensor DHT22 que aun no me llega, ya que para los servos que tiene incluido el sistema me toco hacer la parte de control les adjunto los diagramas y pagina con los componentes y un vídeo por si se quieren hacer su propios servos


http://www.homofaciens.de/technics-base-circuits-servos_en.htm
https://www.youtube.com/watch?time_continue=7&v=v2jpnyKPH64

Mi primer prototipo con el cual tengo funcionando todo



No es lo mas adecuado, pero funciona, próximamente lo are mas pequeño y todo en una sola placa

surbyte


Swift

Buenas a todos el problema que se me presento ahora es con dos señale digitales de 12v que proviene de la ECU

Exactamente son THWO ( Temperatura del refrigerante del motor) y TACH (revoluciones por minuto)
lo que pensaba es utilizar un divisor de tensión para poderlas leer con el arduino en un pin digital

ahora el problema seria como puedo "leer" a que temperatura esta el motor en el arduino con esa señal, necesito que me guíen que camino debo seguir para poder interpretarla por así decirlo.

surbyte

Y que sabes al respecto?
Digo tienes alguna tabla que indique que tensión se corresponde con que temperatura?

Swift

Intente con un multimetro medir pero solo me arroja entre 6.20 a 3.40 estando frió o caliente el motor, son los mismo valores no cambian nada, no tengo un osciloscopio estar seguro de que tipo de onda tiene, no tengo mas datos  acerca de esa señal no especifica nada en el manual tendré que buscar en la ECU  y su funcionamiento mas a profundidad me parece

surbyte

#24
Sep 19, 2017, 02:02 pm Last Edit: Sep 19, 2017, 02:33 pm by surbyte
Ampia tu búsqueda usando el foro de tu auto. Tal vez alguien tenga algún manual técnico que pueda arrojar mas información.

He encontrado esto y no estoy seguro si aplica a todos los sensores ECT o no.
Mira a ver si  ayuda Sensor ECT - Sensor de Temperatura del Refrigerante
Según la descripción el sensor debe conectarse asi, que debe ser tu conexión claro





Por lo visto es una NTC.

juand91

Bueno te escribo lo que haría yo: en vez de usar un divisor resistivo montaba un potenciómetro(las patillas que no varían una a  gnd otra a la ecu) la patilla regulable al arduino:

Si suponemos una temperatura máxima de 150° : nos dan 30° por voltio

Arrancamos el motor vemos que la aguja marca 90° pues ajustamos el potenciómetro hasta medir 90/30=3v. Con eso ya podrías escalar las entradas

plan b mete varios diodos para bajar de 6.8v a 5v y listo

Plan c olvidaré de la ECU mete un termómetro en el aceite o en el radiador

Swift

Gracias por comentar surbyte y juand91, como me  indico surbyte solo llevo la señal del sensor al arduino y no hay ningún problema se lee correctamente ya lo comprobé, ahora lo que quiero poder "leer" la señal que sale de la ECU ya que tengo 2 mas, como son las de revoluciones del motor y la velocidad,esto lo quiero hacer ya que tengo otro proyecto que sera la alarma (no se si seguirlo aquí o abrir otro tema) ahora todas esas señales las tenia pensado leer por el puerto OBD2 con una shield CAN-BUS, pero mi auto tiene el M-OBD propio de Toyota, si no lo logro voy a aplicar el plan c que me comentas juand91, muchas gracias por su apoyo.

Swift

Buenas a todos por fin me llegaron algunas piezas para seguir con el proyecto fuente de poder para la computadora, la cual va a ser encargada de encender la pc además de proporcionar los 19v con los cual trabaja la pc además de proteger la pc contra los picos y mantenerla encendida en el caso que se apague automóvil, la PC es una intel NUC, procesador quadcore de 2.3 ghz con 8gb de ram y disco duro SSD de 230 GB, creo que se puede utilizar una raspberry para abaratar el costo, un par de can bus shield ( que por ahora no las voy a utilizar) lo que aun me falta de llegar es la pantalla.
Ahora me acabo de encontrar con que el automóvil todavía a tenido la alarma original la cual no a estado activada por suerte pero en parte funcionando ya que antes de retirarla me cerraba las puertas a lo que el vehiculo llegaba mas o menos a 30 km/h ahora no se si se podra sacar la programacion para saber como esta leyendo la velocidad, segun vi tenía un pic16c72a una memoria eeprom externa(no me acuerdo la serie) y uno que otro driver de motor paso a paso los uln2003 para lo que es apertura de puertas sirena etc. Hay alguna forma de sacar la programación para saber cómo lee la velocidad, por supuesto si no esta protegida contra lectura y escritura.






Go Up