Proyecto: controlador de ventiladores Cyg-1

brother, no entendí ni la mitad! Tampoco me interesa realizar ese proyecto por mi mismo, pero dejeme felicitarlo por subir todo ese proceso y TAN BIEN detallado!! Es el primer proyecto de esa magnitud que veo aquí en Laneros!

No te preocupes que al principio yo tampoco entendía nada jejejeje.

Antes pude experimentar con LCD´s que extraje de celulares como el Nokia 5110, pensé que al desaparecer esos celulares del mercado, jamás volvería a tener una fuente de esas pantallas. Con sorpresa hace no mucho encontré algunos especímenes de ese tipo de LCD, son comerciales y pueden ser usados en el arduino. XD

Unoa.png

Algún día volveré de nuevo con ellas.

Uso del CPU, uso de RAM, fecha y hora

Desde los tiempos en los que desarmaba celulares para darle un uso a sus pantalla monocromáticas, siempre quise mostrar en esas pantallas datos como el uso del CPU o de la memoria RAM o datos como fecha y hora. Tras investigar algunos días en la red, con agrado he podido encontrar que este tipo de datos también se pueden manipular en una pantalla TFT como la del proyecto. Así que he decidido incluirlas.

En los siguientes días subiré la parte del proceso para conseguir que este tipo de datos se puedan mostrar en la pantalla TFT del controlador.

s1.jpg
 
Sin embargo en esto de la experimentación siempre hay piezas que se salen de control, como por ejemplo el acrílico, tengo algunos cortes que puedo recuperar, pero hoy me he topado con la sorpresa de que el adhesivo que solía usar para unir, ya lo han sacado de circulación comercial en varios locales grandes y solo manejan las soluciones con catalizador. Tocará buscar en los talleres pequeños y hay que considerar gastos de pasajes o de gasolina y claro el refrigerio para el camino...[/QUOTE]

Por si te puede servir yo el acrílico lo pego con cloroformo, si hay que rellenar porque se ha quedado algún hueco cojo trozos de acrílico, los meto en un bote con un poco de cloroformo y se hace una pasta con la que puedes pegarlo sin problemas.

Un enorme trabajo, me está ayudando mucho.

Gracias
Reydeitaca
 
Gracias por la sugerencia con el cloroformo. Pude conseguir algo de este solvente y he podido avanzar con las piezas de acrílico. Me falta cortar los soportes internos del gabinete del controlador.

En este tiempo he podido avanzar con la programación del RTC, al final he conseguido un DS3231, mucho más preciso que DS1307 y con la gran ventaja de que se puede conectar como el DS1307 y funciona con la misma librería. Ambos tienen la capacidad para recargar baterías como la LIR2032.
hgay19940o4j9jmzg.jpg


Con la idea de contar con una pantalla que se pueda controlar con el arduino Due y más adelante con una Beaglebone black, he decidido usar pantallas basadas en el chipdriver ILI9341, con interfase SPI y con pantalla táctil resistiva basada en el chip XPT2046.

Las primeras versiones SPI no tienen pantalla táctil. Sin embargo el año pasado comenzaron a fabricar con pantalla táctil, primero de 2.4" y luego de 2.8". Hay otras versiones de 3.2" e incluso de 3.5", solo que tienen un controlador capacitivo, cuya libreria resulta incompatible con la librería optimizada que uso con el arduino Due

8se359zc4h6qnvtzg.jpg


El proyecto ya va tomando forma, pude conseguir la ILI9341 de 2.8" con pantalla táctil, y será la pantalla primaria; como pantalla secundaria usaré la SmartGPU 2 de 3.5".

w87w39b7lfs757ezg.jpg

El pequeñín usa tres bahías de 5 1/4, pero lo reduciré a dos bahías, ya que lo dejaré solo con la pantalla ILI9341 de 2.8".

Les comparto un pequeño video en el que el encendido y apagado de la PC es controlado desde la pantalla táctil del proyecto, con apoyo de un relevador. Las primeras pruebas las hice con la pantalla táctil de 2.4".

No ha sido fácil pero creo que ya tengo claro el camino. Descarté el control de ventiladores ya que el ruido que produce el control PWM sobre la circuitería de los motores es bastante molesto, sobre todo a bajas RPM. Mejor me apoyaré de un controlador táctil NZXT.
 
  • Me gusta
Reacciones: p3loso
hola muchas felicidades es un excelente trabajo pues me encuentro realizando trabajos de igual manera con las pantallas táctiles solo que tengo un problema y quisiera saber si puedo contar con su ayuda..?? mi problema es que cuando cargo el demo de la pantalla me sale todo como un efecto espejo quisiera solucionar eso
 
Para mantener el orden en el tema y que varios laneros mas puedan revisar el problema que señalas, crea un nuevo tema en la sección de electrónica y por allá te respondo con todo gusto. Indica que hardware estás usando: placa base y modelo de TFT, si es posible coloca links a páginas donde se puedan apreciar detalles de los componentes que estás usando. Si puedes subir fotos de tu proyecto y del problema que aparece, mejor aún.
 
No había contado con el tiempo suficiente para comentar los avances. He estado ocupado actualizando el proyecto. Conseguí una nueva pantalla y reconfiguré el controlador, ya que cambié el gabinete de la PC por un Azza genesis 9000.

Desafortunadamente el control de ventiladores me ha resultado muy complejo, la variación de RPM por PWM es factible, pero induce ruido eléctrico en el motor de los ventiladores sobre todo a bajas velocidades. Sigo buscando un circuito que remedie esa situación.

La pantalla que funcionará como base del controlador es esta: FT843+ADAM. Esta pantalla tiene un procesador de video basado en el chipo FT800 de FTDI, viene con un adaptador para placas arduino y se ajusta perfectamente en el arduino Due, incluye un bisel para facilitar su montaje.
j13ia3c7rni1xonzg.jpg


xpgydfngsaat9t8zg.jpg

mptzzelx16gzvfgzg.jpg

s7p4ba7abfm567wzg.jpg


Instale la refrigeración liquida en el azza pero el domo del gabinete resultó muy restrictivo para la salida de aire. Tuve que recortar el domo y diseñé un domo de ventilación, el cual estará accionado por un servomotor. Inicialmente consideré solo tres rejillas, mas adelante creo que aumentaré a 6 rejillas.
lxhlxv2lxl3cm9kzg.jpg


msxsodbytl3vna7zg.jpg


9t8c06g6damhdrmzg.jpg


cxx47isxo335z5azg.jpg

Me falta construir el eje de control de apertura y los anclajes de cada rejilla.

El soporte para el frontal del gabinete ocupa 3 bahías:
j5vbhqd70n737wtzg.jpg


4x478bby1m7nlfjzg.jpg


zfgj2r6aduv7mw4zg.jpg
 
Avances en el proyecto

Ahora si tengo posibilidades de controlar los ventiladores sin el ruido de fondo. La solución que encontré consiste en usar un transistor de potencia como el TIP41C y un potenciometro lineal de 20K. Solo he podido conseguir algunos de 50K, me daré una vuelta al centro a conseguir algunos disipadores para transistor y si hay suerte, tarer de una vez los potenciometros!.

Por fin tengo un avance concreto sobre el control de la velocidad de los ventiladores, armé un set de pruebas con un ventilador de 20 cms:

He avanzado en el manejo de la FT843, me ha tomado tiempo familiarizarme con su funcionamiento. Manejo de gráficas en tiempo real

Directamente el FT800 no tiene una primitiva que permita dibujar coronas o sectores circulares, sin embargo con trigonometria es posible diubujar esas figuras. Esta es la primer versión de indicadores analógicos:

Estas son algunas variantes que se pueden conseguir con las funciones, usaré estos indicadores para mostrar temperaturas y solo por diversión algunas salidas de los analizadores de espectro de audio:

La calibración de las sondas NTC que me permitirán monitorear la temperatura, se me había complicado, ya que con cada ajuste tenía que modificar los parámatros en el sketch y para ver el resultado tenía que reiniciar el programa frecuentemente. Se me ocurrió aprovechar la pantalla con la idea de realizar la calibración en tiempo real.

En un rango discreto de temperatura como por ejemplo 15 a 40 C, las sondas NTC tienen un comportamiento casi lineal, por lo que se puede usar aproximación por minimos cuadrados e incluso aproximar la curva a la función de una recta que pasa por dos puntos. Las primeras pruebas me permiten ver el resultado de la calibración de forma inmediata.

Ahora toca aprender como guardar los datos de la calibración en la microSD del ADAM, con la idea de que al reiniciar el controlador, los datos de calibración no se pierdan o se tengan que volver a modificar.
 
No te preocupes que al principio yo tampoco entendía nada jejejeje.

Antes pude experimentar con LCD´s que extraje de celulares como el Nokia 5110, pensé que al desaparecer esos celulares del mercado, jamás volvería a tener una fuente de esas pantallas. Con sorpresa hace no mucho encontré algunos especímenes de ese tipo de LCD, son comerciales y pueden ser usados en el arduino. XD

Unoa.png

Algún día volveré de nuevo con ellas.

Uso del CPU, uso de RAM, fecha y hora

Desde los tiempos en los que desarmaba celulares para darle un uso a sus pantalla monocromáticas, siempre quise mostrar en esas pantallas datos como el uso del CPU o de la memoria RAM o datos como fecha y hora. Tras investigar algunos días en la red, con agrado he podido encontrar que este tipo de datos también se pueden manipular en una pantalla TFT como la del proyecto. Así que he decidido incluirlas.

En los siguientes días subiré la parte del proceso para conseguir que este tipo de datos se puedan mostrar en la pantalla TFT del controlador.

s1.jpg
Amigo que tal, me agrada este foro y es muy interesante el desarrollo de esta pantalla.
Ahora trabajo con una pantalla similar para un proyecto de la universidad, pero no hay suficiente información (nadie explica un poco su código) y necesito hacer algo muy similar a esto que muestras en esta pantalla con tus memorias ram.
Te agradecería mucho si me puedes proporcionar tu código fuente de esta parte de la pantalla, para entenderlo y librarme de unas dudas.

Gracias
 
Vaya hace rato que no usaba esa parte del programa.

Te dejo el link de descarga del proyecto, incluye el programa que se debe ejecutar cuando has subido el skecth al arduino. Ese programa (PCMeter) permite enviar los datos de uso de CPU y RAM de la PC al arduino.

Los datos de temperatura se obtienen de una sonda NTC como las que tienen los controladores de ventiladores como los sentry o los NZXT. Está conectado al arduino (pin A7) mediante un divisor de voltaje construido con el NTC y una resistencia de 1K.

Acá puedes aprender como armar el divisor de voltaje
http://www.tr3sdland.com/2011/12/tutorial-arduino-0005-sensor-de-temperatura-ntc/

Debes modificar los parámetros de calibración de la sonda de temperatura que vayas a conectar, para que los valores de temperatura sean correctos.

En el ejemplo he dejado un valor fijo de 20C para construir la linea base de la gráfica de temperatura. Así es como está en el ejemplo
Código:
//Lectura del sensor NTC
void LecturaNTC()
{
  //Dato del NTC-A7
    Lectura=analogRead(analogPin);
// Conversión de lectura en temperatura
   //TempC= TempX1 + ((LectY1 - Lectura)/p);
   TempC= 20;  //prueba para escala de gráfica
}

Una vez que conectes el sensor de temperatura, debes modificar la rutina previa así:
Código:
//Lectura del sensor NTC
void LecturaNTC()
{
  //Dato del NTC-A7
    Lectura=analogRead(analogPin);
// Conversión de lectura en temperatura
   TempC= TempX1 + ((LectY1 - Lectura)/p);
   // TempC= 20;  //prueba para escala de gráfica
}

Dentro de void loop() hay un apartado que toma la lectura actual del sensor y la grafica en tiempo real en la pantalla:

Código:
// Continua recorriendo los datos hasta llegar al último de la lista, en el que se colocará la nueva lectura de
// temperatura del sensor
      if (j==maxlecturas-1)
       {
         LecturaNTC();
         myGLCD.setColor(255,255,255);
         lecturaprevia[j]=lectura[j];      
//         lectura[j] = TempC;  // lectura del sensor NTC en el pin A7
       lectura[j] = 36;  // lectura para ajustar escala

         myGLCD.setFont(SevenSegNumFont); myGLCD.printNumF(lectura[j],0,250,10);   myGLCD.setFont(SmallFont);
      
         myGLCD.setColor(DBLUE);  myGLCD.drawPixel(j+xinicial, ybase-escala*lecturaprevia[j]); //borra el pixel previo
         myGLCD.setColor(WHITE);  myGLCD.drawPixel(j+xinicial, ybase-escala*lectura[j]); //grafica el pixel nuevo
         j=0;
       }
}

El ejemplo solo muestra la temperatura en 36C, para que tome la lectura actual del sensor, hay que dejar modificar estas dos lineas así:

Código:
        lectura[j] = TempC;  // lectura del sensor NTC en el pin A7
       //  lectura[j] = 36;  // lectura para ajustar escala

Descomprime la carpeta (PCMeter) en C. Luego que subas el skecth en tu arduino, ve a la carpeta y carga el programa PC Meter.EXE,

En la barra de inicio se abrirá un icono que te indica que PCMeter está conectado al COM 21. Para que se ajuste al puerto COM en el que tienes conectado tu arduino, debes darle click con el boton derecho al icono que se cargó en tu barra de inicio. Le das click a Disconnect. En el apartado COM Port, ingresa el numero de puerto COM en el que tienes tu placa arduino.

Luego das click en Connect. Puedes cerrar la vantana y automáticamente se minimizará a la barra de programas.

El autor del programa indica que hay dos cosas a tener cuidado:

1) Cerrar el programa antes de que apagues tu PC, ya que no se puede cerrar de forma autonoma.
2) Hay que desconectarlo cada vez que vayas a subir un skecth a tu arduino, si no recibiras un mensaje de "puerto serie ocupado" o algo así.

Así se ve el ejemplo, es la misma pantalla ILI9325C de 2.4" con la que hice las primeras pruebas, solo que le construi un shield para poder coenctarla rápidamente sin usar tanto cable
6v5ik6zpwgohgiczg.jpg
 
Última edición:
  • Me gusta
Reacciones: Jose_Carlos_tadeo
Mil gracias Bro por el dato lo analizare para llevarlo a cabo, despues creare algun foro para dar a conocer la información =D Gracias.
Cualquier duda espero me apoyes.
 
Ojalá te sirva. Por cierto la gráfica está formada por puntos, ya que dadas las limitaciones de las librerias, usar lineas para unir los puntos afecta enormemente la velocidad de presentación de los datos. El proceso que implica la limpieza de pantalla y luego la presentación de la base almacenada+el dato actualizado de temperatura, produce saltos de imagen en la pantalla, dando como resultado una tasa de refresco muy baja.

Tal como está el ejemplo, no presenta este detalle, manteniendo la gráfica en todo momento. Solo hay que optimizar la presentación de los valores del uso de CPU y de uso de RAM, ya que si presentan esos "saltos visuales". Habría que convertirlos en cadenas de caracteres para poder presentarlos con la función sprintf y con ello quitarles ese problema.
 
Conseguí un gameduino 2, está basado en el mismo chip FT800 que tiene el FT843. En principio el núcleo de instrucciones es similar, la ventaja del gameduino 2 es que el set de instrucciones de control está optimizado. La librería para el arduino Due cuenta con una precalibración de la pantalla táctil, por lo que no es necesario calibrar cada vez que se enciende el gameduino.

Originalmente el gameduino 2 está diseñado para instalarse directamente sobre una placa arduino UNO, por lo que los pines sobrantes del arduino no son accesibles con la pantalla instalada. En la librería para arduino Due, las señales SPI están porteadas hacia los pines 11,12 y 13, por lo que se puede conectar directamente. Esto es muy problemático si se instala directamente sobre el Due, ya que la mitad de las entradas y salidas de la placa quedan obstruidas. Otro punto en contra es la longitud del cableado que se necesita para separar la pantalla de la placa arduino, no puede usarse un cable demasiado largo, ya que la resistencia del conductor impide una correcta interacción entre el FT800 y el núcleo del arduino.

A pesar de estos detalles, pude ensamblar un cable de interfase con 9 hilos. La distancia máxima resultó ser de 18.0 cms, si es mayor que esa distancia la pantalla manda errores de co-procesador. Construí dos shields que permiten conectar el cable entre el gameduino y el Due. Un shield se acopla en la parte posterior del gameduino y el otro shield se conecta directamente sobre el arduinio Due.

5a4yzexio964x6izg.jpg


La idea de este diseño, es eliminar los cables de prototipado y retirar las placas extra que tengo en el contolador, adicionalmente me permitirá usar la libreria del gameduino 2 para controlar el FT843, ya que me parece bastante menos compleja que la libreria original FTDI.
gb2m1qu6u3oo45jzg.jpg

El arreglo tiene todos los elementos del controlador a excepción de las dos placas de leds WS2812b, la interfase de sensores NTC y la placa de relevadores.

He estado revisando los ejemplos que vienen en con la libreria del gameduino 2 y en particular el ejemplo JPG viewer, me llamó bastante la atención. Lo modifiqué un poco para poder regresar al meú de archivos inicial, cosa que no hace originalmente, ya que solo permite seleccionar una sola imagen y hay que resetear el gameduino para que retorne al menu inicial.

Además habilité las funciones que permiten acceder a los datos del analizador de espectro de audio hecho con 4 chips MSGEQ7 y también conseguí graficar datos en forma de una linea continua.


Manipulando lineas con funciones trigonométricas conseguí armar indicadores circulares


Me falta construir el shield que permitirá conectar los 7 sensores NTC que monitorean la temperatura, pienso usar resistencias SMD, para reducir aun mas el tamaño de ese shield. El proyecto sigue en marcha.
 
Última edición:
  • Me gusta
Reacciones: LuFerCuSan y p3loso
Me uno a seguir este proyecto, esta muy bueno y tiene mucha informacion, yo actualmente solo estoy empezando con arduino, tengo un UNO pero aun asi quiero aprender mas
 
Pues bienvenido. He dejado de lado la redacción del avance, por los proyectos de vida que están ahora primero que los hobbies. A ver si en la semana puedo subir algunos de los avances que ya tengo instalados en la PC
 
Parte 2

Conociendo el TFT


Llevo un par de semanas investigando la forma de conectar el TFT en el Due. La mayor parte de lo que hay disponible en la red hace referencia a tarjetas con micros de 16 Mhz o TFT con chipdrivers diferentes al que tengo para el proyecto y por tanto el cableado es diferente.

Creo que esta es la mejor forma de conectar el TFT en el Due y en el Mega. Tendrá que ponerse a prueba mañana que regrese del trabajo e instale el IDE que permite elaborar, depurar, compilar y subir cada programa (o sketch, en el argot Arduino) a la tarjeta.

Los datos del TFT son:

Modelo: TFT 320QVT de 3.2", 320x240 pixeles, 65K colores, RGB
Chipdriver: SSD1289
Bus: 16 bits
Interfase: 40 pines
Complementos: pantalla táctil resistiva (XPT20460) y lector de tarjetas SD
Voltaje de alimentación para la retroiluminación: 3.3 V
Voltaje de alimentación en arduino MEGA: 5 V
Voltaje de alimentación en arduino Due: 3.3V

Al parecer el TFT corresponde al diseño del modelo SainSmart 3.2" SSD1289, ya que el pinout es idéntico.

Pinout del TFT

PinoutTFT-1.png


Elementos importantes:
1. Chip controlador de la pantalla táctil: 5 pines (comunicación digital)
2. Lector SD: 4 pines, (comunicación por protocolo SPI)
3. Regulador de 5V a 3.3V. No es necesario unir el jumper J1, para puentear el regulador y alimentar los 3.3V del due, el TFT puede trabajar sin problemas con menos de 3.3V sin dañarse.

Conexión con el arduino due

conexion.png


Conexión de la pantalla táctil

La librería que permite el manejo de la pantalla táctil es la Utouch. Lo que he encontrado en la red es que funcionan perfectamente con el Mega, ya es una buena señal. Al mirar el archivo Utouch.ccp, aparece esta instrucción

Código:
UTouch::UTouch(byte tclk, byte tcs, byte din, byte dout, byte irq)
{
    T_CLK    = tclk;
    T_CS    = tcs;
    T_DIN    = din;
    T_DOUT    = dout;
    T_IRQ    = irq;
}

En ella podemos ver lo que debemos hacer para conectar la pantalla táctil en el due:
Código:
(tclk, tcs, din, dout, irq)

Dado que no hay una referencia adicional para el hardware SPI, I2C u otro parecido, creo que podemos usar 5 pines digitales del arduino y declararlos como se indica en las instrucciones complementarias:

Código:
{
    T_CLK = 6;
    T_CS = 5;
    T_DIN = 4;
    T_DOUT = 3;
    T_IRQ = 2;
}

Solo hay que averiguar como definir esas variables en el entrono de programación del arduino

Me puedo aventurar a imaginar el código para activar la pantalla táctil, quedaría a groso modo así:
Código:
Instrucción en el encabezado para llamar la libreria UTouch

Definición de las variables en la que se almacenen los datos de los pines seleccionados

UTouch(6, 5, 4, 3, 2)}

Ya veremos...

Fin parte 2

Le dejo aquí que debo ir al trabajo.
Buenos dias, perdón por mi carencia de conocimiento la verdad soy nuevo en el tema arduino, cuandos hablas de pines digitales (pines del controlador XPT2046), a donde los mandas.
 
Saludos felipehernandez40

La plataforma arduino tiene dos tipos de pines entrada/salida: digitales, identificados por un número y analógicos, identificados por una letra A seguido de un número: Ax.

Los pines digitales que debes buscar en tu placa, para conectar al XPT2046, son los que tienen los números 6,5,4,3 y 2.
 
Pantallas FT81X

Desde que conseguí el gameduino 2, he estado esperando que FTDI libere al mercado la siguiente generación de chips: la familia FT81X. Esos chip tienen una resolución máxima de 800x600 px y 1 mb de memoria gráfica.

Varios fabricantes de pantallas TFT han incorporado en su listas de productos, pantallas basadas en la familia FT81X, con resoluciones máximas de 800x480 px:
HotMCU: http://www.hotmcu.com/5-graphical-l...creen-800x480-spi-ft811-p-301.html?cPath=6_16
Riverdi: https://riverdi.com/product-category/displays/ft8xx/
Mikrolektronika: http://www.mikroe.com/mikromedia-hmi/

HotMCU y Riverdi, refieren como librería de control los ejemplos de FTDI chip.

FTDI señala que los ejemplos base para arduino que sirven para la familia FT80X, funcionan para las pantallas FT81X. Tuve oportunidad de verificarlos, pero funcionan algunos, no hay una librería en forma que permita ver como funciona cada ejemplo; en cada caso hay que hacer varios ajustes, sin garantía de que funcionen. Las instrucciones son un tanto complicadas, ya que accesan directamente los registros del coprocesador.

Mikroelektronika ha incorporado en su herramienta VisualTFT, una libreria para manejar pantallas FT81X. Parece que este entorno de programación es bastante simple, pero hay que pagar una licencia y creo que solo funciona para las pantallas que ellos fabrican.

Opté por conseguir una pantalla FT813 de 5", con pantalla táctil capacitiva, fabricada por Riverdi. La pantalla que he conseguido es esta: RVT50UQFNWC00

eun5z27lq186qe1zg.jpg


He estado estudiando a fondo la librería del gameduino 2 y creo que ya tengo una versión 100 % funcional.
 
Última edición:
  • Me gusta
Reacciones: p3loso
Hola a todos. Con tres años de retraso he descubierto este magnífico proyecto pero, llegado hasta aquí, me ha dejado con la miel en los labios.
En particular, me ha interesado sobremanera el apartado en el que llevo una semana perdida y es el manejo de los bitmaps archivado en la SD.
Lamentablemente, o bien no he sabido encontrarlo, o bien no está.
¿Alguna alma caritativa puede poner el código de éste proyecto?, no lo necesito íntegramente, si es que hay algún reparo en publicarlo, me conformaría con la parte en la que se lee un bitmap (creo que en formato raw) de la SD y se coloca, por ejemplo, dentro de un botón.
Obviamente, cualquier sketch que haga ésto, también me serviría.
Gracias por vuestro tiempo y atención.
 

Los últimos temas