Arduino (MEGA) + 2 Pantallas Touch (Control Clima de Un Coche)

ApacheSp

Lanero Regular
18 Abr 2015
10
Buenas Tardes.

Me presento en el foro ya que es el primero proyecto que voy a meter por aquí.

Os comento. El Objetivo es sustituir el Aire Acondicionado Manual de un Coche por un Climatizador Automático, y a de paso meterle algunas funciones extras (abrir puerta de garaje, y lo que se vaya ocurriendo).

En este caso en concreto, aunque el coche tiene mandos manuales, son realmente electrónicos, es decir, que cuando giras la rueda del ventilador, por ejemplo, haces avanzar unos contactos. En principio y visto lo visto solo necesitaré las entradas y salidas digitales.

Como el salpicadero de un coche tiende a ser más alargado que cuadrado, no entra una pantalla de 4" o 7", y pantallas "estiradas" o en formato 16:9, o no encuentro, o no tienen librerías genericas para usar. Asi que había pensado usar dos pantallas de 3.5" o 3.2" una al lado de otra.

En todo internet solo he encontrado un proyecto de CygnusX de este foro que muestre dos pantallas.

La primera duda que tengo es si el Hardware elegido es el correcto o no.
Placa de Desarrollo:
Arduino Mega (ya que tiene muchas salidas, muchas muchas)
Arduino Due es más rápida, pero tiene menos salidas, y lo mismo las necesito para las conexiones del aire Ac.

Pantallas:
ILI9481 320x480 3.2" -Generica de Ebay
ILI9327 400x240 3.5" - Generica de Ebay
O si no hay más remedio, dejarme un sueldo y coger
SmartGPU2 480x320 3.5" (124$ la unidad, arg que daño)

Para economizar pines, había pensado usar el Smart Shield de vizictechnologies. Es una solución muy buena, pero no se si será válido para las pantallas "generícas" ILI9327 o tienen que ser para la SmartGPU2 por narices.

Sensor de Temperatura/Humedad
DHT11--- Cambiado por DHT22. Mejor precisión y sigue siendo barato.

Conversor 12vdc a 9vdc para alimentar el Arduino una vez instalado en el coche.

Diferentes Componentes (cables, resistencias, etc).

Mas o menos esta es la idea de como quedaría
frame.jpg
 
Última edición:
  • Me gusta
Reacciones: Likibuay y DonPosada
Interesante el proyecto que vas a armar.

El MEGA y el DUE son iguales en cuanto a los pines que tienen para conectar hardware, la diferencia es que el MEGA es de 5V y corre a 16MHz y el Due funciona a 3.3V y corre a 84 MHz. Te recomiendo el Due

Espero que aun no pidas las pantallas. Aguarda un poco. Las pantallas que has seleccionado van bien, sin embargo hay algunos detalles que debes considerar. La smartGPU es buena, no lo niego, pero tiene un defecto: cuando presenta valores numericos que cambian con el tiempo, como una temperatura o la hora de un RTC, tiende a presentar pixeles aleatorios, obligando a resetearla después de un rato. No sé si el adaptador corrija el problema, y desconozco si en las versiones de 4.3" o de 2.8" aparezca, por lo menos en la de 3.5" fué algo que me desmotivó a usarla.

Debes ubicar pantallas cuyas librerias funcionen bien sin que tengas que modificar registros de inicio, eso da muchos dolores de cabeza. Para las dos pantallas que has seleccionado, vas a tener que usar la UTFT y solo podrá funcionar una, la primera que definas en el sketch, no las dos al mismo tiempo. No hay una opción que le permita a la libreria seleccionar que pantalla usar en la salida gráfica.

Para usar dos pantallas al mismo tiempo, éstas deben hacerse funcionar con dos librerías diferentes. El MEGA se va a quedar corto y verás ralentizaciones porque su núcleo corre a solo 16 MHz, para esta configuración, es mejor el Due.

Opciones de pantallas a usar

Mis sugerencias son:

Opción 1: Arduino Due o Arduino MEGA

Pantalla primaria:
VM800C35A-D, con procesador gráfico FT800. de 3.5"

Pantalla de apoyo:
TFT ILI9341: La versión mas económica de pantalla ILI9341 es la de 2.8", tiene pantalla táctil, con una resolución de 320x240 pixeles. Hay otra opción en la que puedes conseguir una pantalla de hasta 3.2" con el controlador táctil XPT2046, incluso la puedes configurar : TFT 3.2" ILI9341. La pantalla ILI9341 en ambos casos tiene protocolo de conexion SPI, para que no consumas demasiados pines para conexión en el arduino. La librería para arduino Due es la más rápida que podrás encontrar para este tipo de pantalla

Opción 2: Dos pantallas de 3.5": VM800P35A

Esas pantallas estan construidas sobre un arduino Pro de 5V, aunque tienes pocos pines de conexion en cada una de ellas, con las dos funcionando independientemente, tendrás bastantes pines digitales, ademñas te ahorrarás el cableado a la placa de control, ya que el arduino pro está embebido en la pantalla. Cada módulo tiene su propio procesador gráfico FT800, lector microSD y pantalla táctil resistiva. "Son todo en uno".

Es mas con una sola de ellas podrías hacer funcionar lo que tienes en mente.

El funcionamiento del FT800

Mi proyecto con el controlador se ha dirigido hacia una pantalla con procesador gráfico FT800 de 4.3". Aunque la primer versión con dos pantallas, funcionó muy bien, hay temas gráficos que no pude superar con pantallas como las que piensas seleccionar y llegué a callejones sin salida y muchas horas de programación que no resultaron como esperaba.

La pantalla que seleccioné es esta: FT843+ADAM de 4D systems, incluye procesador gráfico FT800, tiene lector microSD, procesador de audio y pantalla táctil, funcionando en un Arduino Due. Aunque el conector flexible es bastante corto, solucioné el problema armando una extensión con dos kits como estos.

i0bi36nh8h8hbn3zg.jpg

xkmfvrvwv5sljm4zg.jpg



Una foto del selector de imagenes JPEG mediante un teclado numérico XD
zvf2jz88cn4b74kzg.jpg


Un video más de lo que puede hacer el FT800, está algo desordenado, pero en el puedes ver algo de lo que puede hacer este tipo de pantallas
 
Última edición:
Las pantallas que comentes en Indiegogo. El proyecto ya ha superdo la barrera de financiación, así que en breve estará disponible, pero tienen o 2.4" o 4.3", ya podian haber tirado por el 3.2/3.5", cachis la mar.

Je, como las he pedido a china, tanto las pantallas como los MEGA (pedí un par) ya están de camino, pero no pasa nada, visto el precio que tienen, se puede pedir un DUE y las pantallas nuevas.

Respecto a las pantallas.
VM800C35A-D No me queda nada claro como conectarlo al Arduino, ni que librería usar.
VM800P35A Esto es el "arduino" integrado, pero no tiene pines de salida, por lo que entiendo seguiría existiendo un DUE que la controlara?.
ILI9341 3.2" El enlace que has mandado, es una pasada, te dejan elegir todo de la Pantalla. Si no me equivoco, sería elegirla.
Pin Header 4WireSPI (esta es la duda sobre la conexion)
3.3v
MicroSD (no valdrá para nada, pero por ese precio..)
Touch Panel + Controller
128Mbit (mejor si se puede usar esta memoria para almacenar las imagenes)
Y el Font Chip me pilla, ni idea de cual es mejor y/o necesario.

· Aqui está la variante china, que no es configurable, pero tiene el ILI9341 y el xpt2046.

Se podría usar una ILI9341 y una ILI9481/ILI9327? o usan la misma librería?.

La pantalla que comentas de 4,3" con el FT800 tiene buena pinta, pero no me cabe por tamaño, 3.5" máximo, seguramente 3.2".


Estoy haciendo el diagrama de flujo de la aplicación, por ahora en papel, a ver si lo paso a algún gráfico y lo puedo subir.

La idea no pide mucha chicha, por lo que puede que hasta con el Mega Pudiera hacerlo (voy a pedir el Due por si acaso, que además tiene la librería gráfica). Teniendo en cuenta que la imagen va a ser casi siempre estática. Lo único que cambia de la imagen es la temperatura "objetivo" que selecciones, y quizá unos pequeños "falsos leds" que nos avisen de cuando está activa alguna función.
Resumiendo mucho mucho.
Carga Las Pantallas con las imágenes de Fondo.
Muestra la última temperatura deseada (la llamaré TARGET)
Lee el Sensor de Temperatura. (Se me olvidaba, he cambiado el DHT11 por el DHT22, ya que el 11 tiene una precisión de un grado, y el DHT22 de 0.5)
Si el Sensor lee más alto que la "TARGET" se va a "Frio", y lo lee más Bajo, se va a "calor".
En cada uno de ellos, el arduino hace algunos parámetros (cambia salida de aire (arriba, pies, etc), elige la velocidad del ventilador, y el dial de temperatura (frio/calor).
En funcion de la diferencia entre el TARGET y la Leida, aplica unos u otros valores.
Una vez aplicado vuelve a leer el sensor (entra en bucle)
Luego está por ahí la opcion de ponerlo en manual, pero como ves el código no es muy pesado, y no tira mucho de interfaz gráfica, por no decir nada.
 
Última edición:
En experimentos previos, encontré que es mejor contar con dos controladores diferentes, digamos un ILI9341, con un SSD1289, así las librerías no interfieren entre sí.

Es probable que si puedas tener dos ILI9341 en un mismo arduino, no he hecho el experimento antes, bien podría funcionar. Se me ocurre usar la pantalla primaria con la librería ILI9341_due (recientemente tiene soporte para MEGA y Due), en combinación con la librería Adafruit_ILI9341 o posiblemente la Adafruit_ILI9340. Incluso se podría usar la librería modificada Adafruit_ILI9341_AS, para la pantalla de apoyo.

Te recomiendo que las imagenes de fondo las cargues desde un lector SD de las mismas pantallas, así no tienes que cablear ambos lectores o instalar otro tipo de lector SD. Además es posible que puedas seleccionar varios fondos de pantalla y no dejarlo con uno solo.

El pin header 4 wire-SPI es el conector mas adecuado en el configurador. La memoria interna podría funcionar pero las librerias estan diseñadas para soportar imagenes pequeñas, no sé si pudiese funcionar con imagenes de 320x240.

La variante china del ILI9341 no es SPI, requiere de por lo menos unos 22/28 hilos digitales para hacerla funcionar, además requiere de un shield especial para el MEGA, te va a complicar el cableado.

Otra cosa importante que se me paso comentar, la pantalla ILI9341 opera con lógica de 3.3V, para que la hagas funcionar en el MEGA requerirás un circuito para bajar el voltaje de 5V a 3.3V entre el MEGA y el TFT, en estas lineas: TFT_CS, TFT_RST, TFT, TFT_MOSI y TFT_D/C.

La mejor forma es usar un divisor de voltaje en cada una de las 5 lineas que te he comentado previamente: la linea que viene del mega se conecta a una resistencia de 1K, el extremo de esta resistencia se une a una segunda resistencia de 2K. El extremo de esta segunda resitencia va a GND. En el nodo de unión de las dos resistencias se conecta la linea del TFT.

Para activar el lector SD, no es necesario usar divisores de voltaje, SD_CS, SD_MOSI, SD_MISO y SD_SCK, se conectan de forma directa entre el TFT y el MEGA.

PD: justamente terminé de armar un conexinado para pruebas del ILI9341, me va a servir para hacer experimentos en un arduino MEGA. Tiene los 5 divisores de voltaje. es algo rudimentario pero me olvido de estar batallando con cables cada vez que quiero probar alguna librería

7c20ohouvgpw1xdzg.jpg


Sirve para cualquiera de las variantes chinas del ILI9341 con las que me he topado en el protecto
8se359zc4h6qnvtzg.jpg
 
Última edición:
Buenas

Ya me he puesto con el diagrama.

diagramaflujo.jpg


Seguramente haya errores, ya que lo poco que he programado a sido mayormente en C, y esto del Loop me tiene un poco loco. Ya que realmente no se donde poner que "lea" las pulsaciones de la Touch, por eso he puesto un "leer pantalla", para dejar tiempo en el "loop" a que puedas tocar botones (subir/bajar temperatura por ejemplo en modo auto)
La lectura del modo auto es porque si está a Cero, entiende el bicho que regulas tu mismo la velocidad del ventilador, aire frio o caliente, etc. Lo de "ajustar calor y/o frio", lo estoy desarrollando aparte porque salía un diagrama muy grande el solito.
Y claro está, faltan por definir las funciones de cada botón (subir temp= aumentar 0.5 el Target + cambiar el gráfico de Target, por ej).

Como lo veis, muchas burradas? :D

Respecto a las placas, he visto dos versiones del DUE, una "generica" con una alimentacion maxima de 130ma en los 3.3v, y la smartsain que permite 800ma. Merece la pena la smartsain?.

Saludos
 
Dentro del loop o ciclo de instrucciones hay tres partes:

La primera muestra objetos como fondos de pantalla, recuadros, botones, encabezados, etc., que se dibujan solo la primer vez cuando se carga un menú o un submenú.
La segunda parte se encarga de actualizar datos que cambian con el tiempo como RPM, hora o temperaturas.
La tercer parte está a la espera de que se toque alguna superficie de la pantalla táctil, como por ejemplo un botón que aumente o disminuya algún parámetro de control.

Así que en principio es correcto que lo definas como el nodo de espera: "leer pantalla".

Respecto al amperaje, no hay diferencia entre la genérica y la Sainsmart-Due. Tienen los mismos parámetros de amperaje. Solo debes tener en mente que su logica de operación es de 3.3V. Cualquier pantalla TFT que sea de 3.3V se puede conectar de forma directa en el Due, sin usar circuitos de conversión.

¿Que pantallas vas a usar?
 
En principio, y salvo que me digas lo contrario, estaba pensando usar la TFT 3.2" ILI9341.que comentaste con el SPI de 4 hilos.
Y como apoyo, usar una SSD1289 por ejemplo esta, o la saintsmart. Principalmente porque las librerias y las conexiones están bastante documentadas.

Y como placa, usar la DUE. Por la diferencia de precio, merece la pena llevar más Mhz, no sea que se quede corta la MEGA, y te ahorras el problema de los 3.3v de las TFT.
Se comen entre las dos un montón de salidas, sobre todo la SSD1289, pero realmente, con que me dejaran un par de salidas libres, con un Shift tipo SN74HC595N, aunque se complica el código y se vuelva un tanto más lento el sistema, se puede apañar, teniendo en cuenta que muchas de las salidas van a ser de tipo "pulsación" ON/OFF.
 
Es mejor el Due, solo es cosa de que te acostumbres a cuidar la lógica de 3.3V

La Saintsmart tiene fallas, he tenido malas experiencias con esas pantallas. Salen mejor las genéricas chinas.

Esas dos quedarán bien. Aunque uses las dos pantallas táctiles te quedarán salidas suficientes para controlar el hardware. También quedan los pines analógicos, en algo te pueden ayudar. Las dos tienen lector SD, te sugiero usar solo el micro SD de la ILI9341, tiene un clip de retención mejor que el del lector SD del SSD1289, así no te preocuparas porque se caiga la tarjeta SD con los movimientos del auto.
 
Bueno, pues el pedido ya está en camino.
1 Pantalla ILI9341, 1 Pantalla SSD1289, y el Arduino DUE.
Ahora a esperar porque tardarán en llegar lo suyo.
Supongo que el Mega y una de las ILI llegarán unos días antes.
Mientras tanto voy a desempolvar un Arduino UNO que tengo por aquí, y al menos podré ir haciendo pruebas con el código más elemental.
Como por ejemplo lo del cronómetro. La idea es arrancar un crono al encender el motor, y cuando llegue a 5 minutos, que considere el motor "caliente". Esa variable, la leera el programa cuando queramos aire caliente, y hasta que el valor no esté a 1(1=caliente, el motor lleva más de 5 minutos encendedido), no pondrá el ventilador más que al mínimo.
Tambien puedo ir probando los caminos que seguiría el código con las diferentes temperaturas, salvo que en vez de las temperaturas obtenidas del termómetro, las iré metiendo yo con el teclado por ahora.
 
Si, en cuanto vaya avanzando iré poniendo aqui las cosas paso a paso.

El primer paso es ir metiendome con el código, algo complejo al no tener las piezas para probar errores y ver qué hace cada cosa, pero al menos lo básico se puede ir haciendo.

Primera parte, inicializar el Sensor de temperatura, y al menos por ahora que lo escriba en la pantalla.
Parte dos. Que vea el tiempo que lleva el motor encendido. Por ahora si lleva menos de 5 minutos pone motor frio, si lleva 5 minutos o más, pone motor caliente. (esto luego solo sera a efectos internos, no se escribe por ningun lado, pero me sirve para probar el código)


// Primer codigo Climatizado.
// Example DHT temperature sensors Written by ladyada, public domain

#include "DHT.h"

#define DHTPIN 2 // what pin we're connected to

#define DHTTYPE DHT22 // DHT 22 (AM2302)

// Initialize DHT sensor for Arduino Due
DHT dht(DHTPIN, DHTTYPE, 30);

void setup() {
Serial.begin(9600);

dht.begin();
}

void loop() {
// Wait a few seconds between measurements.
delay(2000);
// Read temperature as Celsius
float t = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

Serial.print("Temperatura Interior Habitáculo: ");
Serial.print(t);
Serial.print(" *C ");

If (millis < 300000) //comprueba el tiempo que lleva el motor encendido
Serial.print("Motor Frio");
Ese if
Serial.print("Motor Caliente");

Lo siguiente es inicializar el crono, y leer la ultima temperatura deseada, para lo que tendré que grabar la ultima temperatura y luego leerla. Visto que la DUE no tiene ranura SD, la grabo en la Ram incluida? (EPROM)
 
Última edición:
  • Me gusta
Reacciones: Likibuay
Bueno, aunque esto está algo perdido, no lo tengo olvidado. Estoy esperando que lleguen las piezas. Ya llegaron las pantallas LCD, pero me falta lo principal, el Arduino DUE y los sensores de temperatura... espero que lleguen en pocos días, ya que se pidió todo a la vez.
 
Perdona por responder hasta ahora. Para registrar cualquier dato, puedes usar alguno de los lectores SD de tus pantallas. No es necesario que conectes los dos lectores con uno bastará, además no sé si haya alguna libreria que permita tener dos lectores SD al mismo tiempo.

¿Que pantallas te llegaron?. Si tienes oportunidad sube algunas fotos para ir curioseando las piezas.
 
Uf, he estado un tanto perdido, más que nada porque aun no llegaron componentes clave como el sensor de temperatura :(. Este fin de semana que tendré tiempo libre pongo fotos del material que sí ha llegado, las pantallas y la placa arduino due!.
 
Buenas laneros, me presento, soy ingeniero de sistemas area de desarrollo de software, pero muy apasionado con la electrónica aunque practique muy poco en la U, hace un poco mas de 8 dias estoy viendo videos de la maravilla de arduino y como da la mano para el desarrollo de proyectos, estoy planteándome tomar como hobby esta plataforma y crear un monitor de hardware para el pc con informacion tanto de sensores integrados al arduino como también información sofrware desde windows y presentarlo en pantalla LCD, me pregunto, tan difícil es conseguir componentes aquí en Bogota?, quedo atento al seguimiento de este proyecto, exitos!
 
Bueno, tras no se cuantos días, por no decir meses, por fin han llegado los componentes esenciales. Lo último en llegar ha sido el sensor de temperatura, sin el cual poco podía avanzar. Eso si, como no llegaban las piezas y me "aburría", me he puesto de obras en casa, asi que... nuevo retraso :D. Pero que conste que no está abandonado el proyecto. Eso si, como se me haya olvidado algo (conectores de pantalla) o lo que sea, me voy a dar con un ladrillo en la cabeza por zoquete.
 
  • Me gusta
Reacciones: elas80
Tengo curiosidad por la pantalla ILI9341 que pediste, ¿tienes algunas fotos de ese TFT?

Esperemos que te hayan llegado los componentes.
 
Buenas tardes, me he registrado en Laneros porque e pensado en esta idea y al buscar en Google habeis aparecido.
Me interesa mucho esta idea, para ponerlo en mi Dacia Dokker. Tengo conocimientos de electricidad y electronica pero no domino nada el arduino. Os seguiré...
 

Los últimos temas