Go Down

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

Swift

May 07, 2017, 07:27 pm Last Edit: Sep 06, 2017, 09:41 pm by Swift
Hola a todos.

Mi proyecto se trata de remplazar el " Amplificador del aire acondicionado" de un Toyota Corolla 2005 G9, y posteriormente añadirle mas funciones,para lo cual pretendo utilizar:

* 1 Arduino Mega (Control de servos, sensores de temperatura y luz, y activación de diferentes relay mediante transistores)
* 1 Arduino Uno +  Can-Bus Shield (Lectura de temperatura de motor, revoluciones por minuto, velocidad etc).
* 1 Intel NUC ( Cerebro).
* 1 Pantalla de 10.1 táctil (Interfaz de usuario).

Ahora para empezar este proyecto tengo los diagramas de conexiones del automóvil como son los del Enfriamiento del motor que en el caso de este automóvil utiliza un solo ventilador  tanto para el sistema de aire acondicionado como para enfriamiento del motor el cual por ahora tengo con un puente para que pase todo un tiempo prendido:

Los de la ECU encargada de aumentar las revoluciones del motor al encender el aire acondicionado y también encargada de cortar el aire acondicionado en caso de algún fallo o en el caso del motor necesite, ademas esta envía señales digitales de temperatura del motor, revoluciones  tanto  al tablero de instrumentos y al aire acondicionado
 
El amplificador de aire acondicionado el cual controla reveladores,servos, y sensores



Codigo

Diagramas

Librerias

PCB


elduino

Bonito el proyecto, yo el tema del aire acondicionado en vehículos no lo domino, ademas dependerá del modelo. Si te digo que suele activarse mediante un electroiman que conecta la polea del compresor al motor, por lo que no creo que arduino tenga muchos problemas para activarlo, también deberás acceder al ventilador del evaporador para regular la potencia del aire, hasta aquí fácil, mas complicado es regular las rejillas zona por la que sale el aire, recirculacion o renovación de aire etc.
En otras palabras deberás investigar como es tu instalación de aire acondicionado, y definir hasta donde quieres llegar, la parte que le toca a arduino creo que es la mas simple y donde mas se te podrá ayudar, para acceder a los elementos de la instalación de aire si deberás tener conocimientos del automóvil.

Swift

#2
May 10, 2017, 04:58 pm Last Edit: May 11, 2017, 08:10 pm by Swift
Si de echo tienes razón tiene un relay que activa un embrague magnético del A/C, lo que es la instalación del auto la tengo claro y es lo que mejor conozco lo único que necesito que me ayuden es por donde empezar con la programación del arduino. Ya tengo identificado todo los servomotores  que controlan la re circulación del aire y 4 sensores que tiene, por el momento estoy diseñando un circuito que que me permita controlar la velocidad del ventilador del evaporador con 1 transistor mosfet irf730 y un transistor npn 2n2222 para que el mediante las salidas pwn del arduino regule la velocidad, el codigo que tengo por el momento me activa y desactiva mediante un comando el motor completo a su velocidad máxima no se como hacerle variar para que poco a poco vaya subiendo o disminuyendo seguiré investigando, en cuanto lo funcione subo algunas fotos gracias por comentar 

surbyte

Estas en proyectos, entonces si no compartes información no podemos ayudarte mas que a grandes rasgos.
Solo dices que quieres controlar un aire acondicionado.

Como no has leído las normas del foro, no prestaste atención a como presentar la información.

Entonces.. que auto tienes, donde estan los esquemas del sistema electrico del aire acondicionado de tu auto.
Postealos. Usa las etiquetas además.

Y entonces.. si podremos hablar un poco a tu nivel. Si no, es un monólogo y solo diremos cosas superficiales.

Swift

#4
May 11, 2017, 10:25 pm Last Edit: May 12, 2017, 01:37 am by Swift
El auto al que le voy a intentar adapta es un Toyora Corolla 2005 serie 1zze122 la imagen siguiente es el esquema eléctrico solo del aire acondicionado,

lo que pretendo es remplazar el A/C amplifier con el arduino y que este sea gobernado mediante una pc lo que primero tengo en mente es hacer que el arduino mega controle lo que es la velocidad del motor (blower motor) esta es la foma como pretendo conectarlo

y el codigo que estoy utilizando
 
Code: [Select]
int motor=3;
void setup() {
  Serial.begin(9600);
}
void loop() {
   if (Serial.available()){
        char a = Serial.read();   
    if (a>='0' && a<='9'){
      int velocidad = map(a,'0','9',0,255);
      analogWrite(motor,velocidad);       
      }
  }
}

Eso es lo que e avanzado del proyecto.

surbyte

Porque le envias 0 a 9?
Es solo para probar la variabilidad?

Swift


surbyte

#7
May 12, 2017, 04:06 pm Last Edit: May 12, 2017, 04:09 pm by surbyte
Coloca un diodo en antiparalelo con el ventilador a controlar o tendras problemas con el MOSFET a corto o mediano plazo.
Un IN4002 será suficiente. Cátodo a +12V y ándoo al otro extremo y el DRain del MOSFET.

Que harás con los sensores?
Vas a usar los existentes o pondrás propios?

Swift

Pues tenia pensado usar los que tiene, ya que el el sensor de temperatura del evaporador esta medio complicado remplazarlo me tocaría desarmar medio tablero, en caso que no funcione pues pondría propios, adjunto imagen del sensor de temperatura ambiental en la parte de abajo y el fotodiodo en la parte superior.

surbyte

Bueno vas a tener que trabajar entonces encontrando equivalencias de lo que miden.
Seguramente son NTC o PTC para los sensores de temperatura.

Swift

Bueno actualizo el proyecto ya que no e tenido tiempo por seguirlo realizando monte en una protoboar el   control de velocidad y ademas añadí un relay para encender el ventilador y poder probar que todo este funcionando, el cual funciono perfectamente como esperaba pero el código que estoy utilizando tengo que estar mandando del 0 al 5 para que varia la velocidad,
Code: [Select]
int ventilador=2;
int relay=3;
void setup() {
  Serial.begin(115200);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
}
void loop() {
  if (Serial.available()){
  char a = Serial.read();   
  if (a>='0'&&a<='5'){
  int velocidad = map(a,'0','5',0,255);
  analogWrite(ventilador,velocidad);
  Serial.println(a);
}
  if (a=='q'){
  digitalWrite(relay, HIGH);
  Serial.println("Encendido" );
}
  else
{
  if (a=='w'){
  digitalWrite(relay, LOW);
  Serial.println("Apagado");
}
}
}
}


e intentado para que mediante 2 teclas me funcione como por ejemplo 'a' y 'b' que mandándola un cierto numero de veces vaya aumentando y disminuyendo pero no lo e logrado, si alguien me puede ayudar en esta parte o algún texto acerca de esto ya que en la mayoría de ejemplos que hay en Internet lo hacen mediante botones pero no mediante comunicación serial.
Los termoresistor que tiene son NTC ya lo comprobe con un multimetro ahora al intentar leer valores me salen valores absurdos, seguiré trabajando en eso para identificar la resistencias.
Ademas el foto-diodo según encontré información conduce en sentido contrario una pequeña cantidad de corriente no se si esto afectar al arduino o podria llegar a dañarlo, estaba pensando en en hacerlo un fototransistor para evitar estos riesgos, estas son las paginas de donde saque la información:https://ingenieriaelectronica.org/fotodiodo-definicion-caracteristicas-y-tipos/ ,https://es.wikipedia.org/wiki/Fotodiodo y esta es la forma en que pienso hacerlo foto transistor

adjunto algunas imágenes del motón de cables que tengo que comprobar y el hueco que pienso tapar con una pantalla táctil

como tengo montado en la protoboard


 


Swift

#11
Jul 10, 2017, 07:34 pm Last Edit: Jul 10, 2017, 07:40 pm by Swift
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
Code: [Select]

    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
Code: [Select]
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
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;
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

juand91

No entiendo porque quieres aislar arduino del automóvil. Seria mas sencillo que ambos usaran la misma gnd pues al final vas a alimentar a arduino directo desde un positivo después de contacto por tanto necesitarás estar en el mismo potencial del vehículo.

Luego una pregunta si quitas la centralita de ac no te da fallo la ECU del vehículo? Lo pregunto porque en el Córdoba se daño el tablero y cada vez que metía diagnosis aparecía un fallo.

podría ser otra opción el engañar a la centralita para que haga lo que arduino manda y por can bus o lo que use tollota leer la información de la propia centralita y arduino que active los "botones" por medio de relés

A todo esto que vas a hacer en esa parte de salpicadero para meterte en tremendo engorro.

A mi me va a tocar bailar con algo parecido en un futuro así que estaré atento

surbyte

Quote
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
debo entender que tu auto trabaja con POSITIVO a chasis?

Swift

En respuesta de juand91:
1)La alimentación no es lo que quiero aislar ya que eso si compartiría el mismo gnd sino mas bien quiero aislar las protecciones del aire acondicionado ya que estas funcionan a 12v el cual en caso de exceder le presión se desconecta un interruptor que se encuentra en la cañerías del aire acondicionado por lo cual deja de pasar los 12v y en este caso el arduino desconecte el compresor del aire acondicionado.
2)En mi caso no me da ningún fallo e revistado varias veces  ya que esta no se comunica con la ECU con la cual pueda informar de algún fallo del aire acondicionado, lo que si en esta le llegan señales digitales de revoluciones por minuto, velocidad, temperatura del refrigerante, en el modelo mas nuevo si e visto que cuando falla algo en el aire acondicionado salta el errores.
3)En mi caso el no podría utilizar la centralita ya que mis mecánicos realizando mantenimiento me la estropearon no tengo ni idea como, por lo que esto me quedo descartado desde un principio, pero si tengo pensado utilizarla para leer otra información del vehículo.
4)Lo que primero tenia en mente era taparlo con una pantalla de 7 pulgadas y una raspberry pi para que controle el A/C y como centro de entretenimiento, pero me emocione un poco y compre una de 10 pulgadas y una Intel Nuc.
En respuesta de surbyte:
No mi auto no trabaja con positivo a chasis

Go Up