TODOPIC
Otros Microcontroladores / Dispositivos programables => ** PROYECTOS ** => Mensaje iniciado por: bitpic en 14 de Agosto de 2013, 07:26:38
-
Buenas forerso,
Me estoy haciendo una especie de cámara térmica o quizá se podría definir mejor como scaner térmico.
Este escaner consiste en un sensor que mide temperatura a distancia por infrarrojos y dos servos que hacen de Pan/Tilt (un barrido horizontal y vertical)
La cuestion es que voy midiendo temperaturas a distancia y cada punto de temperatura lo voy enviando al PC.
Ahora quería hacerme un software en Visual Basic 2010 que pinte en la pantalla cada temperatura de un color diferente para simular una imagen de camara termica para que quede algo parecido a la siguiente imagen:
(http://3.bp.blogspot.com/_0cZSijxThj0/S98SnGH5G3I/AAAAAAAAAzk/3gKwzsOM9zY/s1600/camara-termica-300x350.jpg)
por supuesto no quedará con la misma precisión que una camara termica y la distancia de escaneo tampoco será la misma, pero intentaré que tenga la mayor precisión posible dentro de mis limitaciones.
La cuestión es: ¿cual sería la mejor manera de pintar los pixeles de cada color? ¿es mejor pintar pixeles, lineas, cuadros? ¿Tenéis alguna idea de cual sería la mejor manera de hacer esto?
Gracias.
-
¿Que sensor estas usando como cámara termica?.
Un saludo
-
¿Que sensor estas usando como cámara termica?.
Un saludo
Estoy usando el MLX90614, tengo un modelo que abarcar un rango bastante amplio, estoy esperando que me llegue un modelo un poco más caro pero que es más direccional, con lo que espero que gane precisión.
Más o menos empieza a funcionar, he decidido ir pintanto pixel a pixel cada medida en la pantalla de VB (ahora mismo estoy usando 4x4 pixels por medida).
El problema que tengo es el siguiente:
- Desde el micro envio la temperatura y el punto X y el punto Y donde estoy midiendo.
- Con estos datos pinto el pixel de la pantalla correspondiente (en mi caso, ahora mismo estoy pintando 4x4 pixeles)
- Lo que ocurre es que pinto el pixel actual, pero no me mantiene los pixeles ya pintados.
Estoy usando un PictureBox, y el codigo para pintar los pixeles es el siguiente:
Dim temp As String
Dim Pantalla As Bitmap
Pantalla = New Bitmap(PictureBox1.Width, PictureBox1.Height)
Dim h As Integer
Dim v As Integer
Dim PixelColor As Color
PixelColor = Color.White
temp = Temperatura
h = Horizontal * 4
v = Vertical * 4
If temp > "29.00" Then
PixelColor = Color.Red
ElseIf temp > "28.00" Then
PixelColor = Color.DarkOrange
ElseIf temp > "27.00" Then
PixelColor = Color.Orange
ElseIf temp > "26.00" Then
PixelColor = Color.Yellow
ElseIf temp < "26.00" Then
PixelColor = Color.LightYellow
End If
For xi = h To h + 4
For yi = v To v + 4
Pantalla.SetPixel(xi, yi, PixelColor)
Next
Next
PictureBox1.Image = Pantalla
Como podéis ver el código todavía no esta optimizado porque estoy haciendo pruebas todavía, pero querría resolver antes lo de ir pintando todos los pixeles sin perderlos.
Supongo que si pinto todos los pixeles y al final hago el PictureBox1.Image = Pantalla se resolvería, pero quiero ir viendo como se van pintado pixel a pixel.
¿Alguna idea de como puedo hacerlo?
-
Ya esta solucionado.
En cuanto tenga algunos resultados aceptables pondré algunas imagenes.
saludos :-/
-
Interesante proyecto, pero creo que la resolución será muy baja.
Un saludo
-
A la imagen que consigas, que tendrá muy poca resolución, le podrías superponer, con un cierto grado de transparencia, la imagen capturada por una webcam, si le quitas el filtro que llevan, son muy sensibles a los infrarrojos. Al menos así quedarían más definidos los contornos, para identificar mejor los objetos o las personas.
-
Bueno aquí tengo algunos resultados, es un paquete de espinacas congelado :D
(http://imageshack.us/a/img822/7265/mhfp.jpg)
Y aquí un video de mala calidad (tengo que cambiarme el telefono... :oops:) pero algo se puede ver.
Scaner temperatura (http://www.youtube.com/watch?v=7F9VUt88q9E&feature=youtu.be)
El sensor que estoy usando ahora es el modelo AAA y tiene este angulo de medida:
(http://imageshack.us/a/img707/3001/njqg.png)
Estoy a la espera de que me llegue el mismo sensor pero modelo ESF que es más direccional y espero que me de algo más de precisión:
(http://imageshack.us/a/img153/1384/vseh.png)
El actual:
(http://www.bricogeek.com/shop/199-587-large/sensor-de-temperatura-mlx90614.jpg)
y el que estoy esperando:
(http://mbed.org/media/uploads/4180_1/_scaled_mlx90614esf-bci.jpg)
Como podéis ver va metido dentro de una especie de capsula y esta capsula lleva una lente en la entrada de luz.
A la imagen que consigas, que tendrá muy poca resolución, le podrías superponer, con un cierto grado de transparencia, la imagen capturada por una webcam, si le quitas el filtro que llevan, son muy sensibles a los infrarrojos. Al menos así quedarían más definidos los contornos, para identificar mejor los objetos o las personas.
Si, es el próximo paso que quiero conseguir, pero todavía no se como capturar imagenes de la web cam con el Visual Basic 2010. Recuerdo que en el VB 6 había una "libreria", "dll" o no recuerdo bien que, que lo hacia muy fácil de usar, pero en VB2010 no encuentro la manera. ¿Alguien tiene algo de idea sobre como usar la camara con VB 2010?
saludos
-
Hay una libreria que se llama OpenGL que te permite hacer lo que quieras con las imágenes. Esta librería esta disponible como DLL y se puede llamar desde cualquier lenguaje.
Un saludo
-
Hay una libreria que se llama OpenGL que te permite hacer lo que quieras con las imágenes. Esta librería esta disponible como DLL y se puede llamar desde cualquier lenguaje.
Un saludo
De momento he conseguido hacer funcionar la camara con la libreria WebCam.dll y hacer capturas. Voy a mirarme esto del OpenGL a ver si me permite dar transparenca o mezlar las dos imagenes (camara + pixeles temperatura)
Si no a unas malas coloco una imagen al lado de la otra para comparar
-
Hay una libreria que se llama OpenGL que te permite hacer lo que quieras con las imágenes. Esta librería esta disponible como DLL y se puede llamar desde cualquier lenguaje.
Un saludo
De momento he conseguido hacer funcionar la camara con la libreria WebCam.dll y hacer capturas. Voy a mirarme esto del OpenGL a ver si me permite dar transparenca o mezlar las dos imagenes (camara + pixeles temperatura)
Si no a unas malas coloco una imagen al lado de la otra para comparar
OpenGL permite trabajar con capas y darles las trasparencias que quieras.
Un saludo
-
Hay una libreria que se llama OpenGL que te permite hacer lo que quieras con las imágenes. Esta librería esta disponible como DLL y se puede llamar desde cualquier lenguaje.
Un saludo
De momento he conseguido hacer funcionar la camara con la libreria WebCam.dll y hacer capturas. Voy a mirarme esto del OpenGL a ver si me permite dar transparenca o mezlar las dos imagenes (camara + pixeles temperatura)
Si no a unas malas coloco una imagen al lado de la otra para comparar
OpenGL permite trabajar con capas y darles las trasparencias que quieras.
Un saludo
He estado buscando algo de información del OpenGL, parece que se usa mucho para hacer juegos y trabajar con 3D. Veré a ver si se usarlo... ¿Lo has probado tu alguna vez? Es que nunca he trabajado con capas ... ya os diré como me ha ido.
De momento os dejo aquí otra captura que he hecho pero esta vez con el nuevo sensor... la diferencia es abismal, mucho mejor ahora.
Esta captura esta hecha a dos metros de distancia y por un lado se ve el televisor y al otro lado una persona sentada hablando por telefono (no se ve bien definida porque esta todo el rato moviéndose)
(http://imageshack.us/a/img194/676/3540.png)
Ahora solo superponer la imagen de la webcam y estaría bastante bien
-
me gusta... seguire detenidamente el post.... felicidades bitpic, te esta quedando de miedo....
-
A ver si un experto en VB.net me puede echar una mano.
He encontrado como hacer lineas transparentes en la ayuda de MSN:
Dibujar lineas opacas y transparentes (http://msdn.microsoft.com/es-es/library/87ffw8c1(v=vs.100).aspx)
pero no se como usarlo.
Si copio el código tal y como está, me da error en todas las lineas que empiezan por "e.Graphics." ¿ Me falta declarar algo? ¿No se de donde sale esta "e"?
saludos
-
Hola,
el codigo debe colocarse dentro del evento Paint() del control gráfico donde deseas dibujar.
Saludos.
-
Gracias Bruno, al final lo he resuelto de otra manera.
Ahora me surge otra tarea que en un principio parece complicada (espero que no lo sea...), tengo que escalar el dibujo que va creando el escaner para que coincida con la imagen de la camara...
El problema está en que la distancia de cada paso del motor es diferente dependiendo de la distancia a la que se encuentre el objeto. A 20cm el paso es muy pequeño, pero a 2 m la distancia entre cada paso puede ser de 5 cm. Tengo que darle alguna vueltas a ver como resuelvo esto... Espero que no sea necesario añadir un medidor de distancia y que pueda resolverlo con algún algoritmo.
Primero voy a tratar de integrar una webcam en la misma caja del escaner para que el angulo de la imagen coincida con el de este y luego que el tamaño de las dos imagenes se correspondan.
Ya os contaré y pondré alguna imagen cuando quede medianamente decente.
saludos.
-
Bueno, aquí pongo los primeros resultados
(http://imageshack.us/a/img833/6180/sc3f.png)
Como podréis ver tengo que ajustar la alineacion de la imagen de la webcam y la del sensor, además creo que tengo algún problema mecánico y me cae un poco el motor cuando escanea el lado izquierdo de la imagen.
Queda aun mucho por mejorar pero poco a poco.
:D
-
Bueno creo que va mejorando, os dejo un video para que le echeis un ojo.
:-/
-
Saludos Bitpic. desde aqui Peru mis muchas felicitaciones por tan laborioso proyecto el que vas llevando.
Aunque me muero de curiosidad de preguntarte por varios detalles de este proyecto, siendo nuevo en el foro sólo quisiera limitarme
a preguntarte si se puede por el costo del último sensor térmico que usaste.
-
El primer sensor lo compre en este proveedor por 15,90€
Sensor 1 (http://www.bricogeek.com/shop/search.php?orderby=position&orderway=desc&submit_search=Buscar&search_query=MLX90614)
El segundo sensor, que es el que funciona mejor es mucho más caro. Lo encontré en un proveedor ingles $48.52 USD:
Sensor 2 (http://www.futureelectronics.com/en/Technologies/Product.aspx?ProductID=MLX90614ESFDCIMELEXIS3003055)
saludos
-
ahh, vale.
Le di un vistazo rapido al datasheet.
siendo por nomenclatura los XCI con más agudo FOV (FIELD OF VIEW)
q diferencia habría entonces entre el BCI y el DCI? (sucede que el DCI q compraste no hay stock en nuestro proveedor)
La aplicación en la q pensamos usarla, es en la medición de intensidades de corrientes DC muy grandes en un ambiente extremadamente ruidoso.
por ahora los tests son con un sensor de efecto de hall. por lo q sensar la temperatura es la otra alternativa. (el descarte de otras alternativas se debe a que la medición tiene q ser a distancia y en desplazamiento, se pasa de un punto de senseo al siguiente y luego al siguiente de manera manual)
Ya con tiempo veré de publicar su propio post, si el proyecto avanza.
-
Bueno creo que va mejorando, os dejo un video para que le echeis un ojo.
muy bueno tu proyecto felicitaciones!
pero te hago una pregunta porque se demora en generar la imagen? el sensor lo conectas al PC directamente o va un micro?
Podrías colocar varios sensores alineados para hacer múltiples refresco de imagen, como especie de renders.
felicitaciones por tu proyecto, muy interesante.
-
Bueno creo que va mejorando, os dejo un video para que le echeis un ojo.
muy bueno tu proyecto felicitaciones!
pero te hago una pregunta porque se demora en generar la imagen? el sensor lo conectas al PC directamente o va un micro?
Podrías colocar varios sensores alineados para hacer múltiples refresco de imagen, como especie de renders.
felicitaciones por tu proyecto, muy interesante.
Tarda porque lo dejo unos ms en cada posición para que el sensor detecte correctamente la temperatura.
El sensor está conectado a un Arduino uno. El Arduino se comunica con el sensor por I2C y envía los datos al PC. Además de esto, el Arduino se encarga que controlar los dos servos que hacen el movimiento del sensor. En el PC tengo un programa hecho en Visual Basic 2010 que recibe los datos y gestiona la webcam y pinta los pixeles de cada punto en función de la temperatura leída.
Se puede usar varios sensores, pero son un poco caros, en total el precio + IVA + envío me costo 69€, así que de momento descarto poner un array de sensores, para lo que necesito ya me va bien con uno.
saludos
-
Hola bitpic, finalmente me pude hacer de los siguientes sensores:
MLX90614ESF-ACA y
MLX90614ESF-BCI
mis primeras pruebas fueron bien con el ACA. de manera relativamente exitosa.
Tengo las siguientes dos dudas:
1. Cuando recibo algunos paquetes de lectura (revisando los ACK, pero sin revisar el paquete PEC) me sale como lectura 0xFFFF. este me sucede aleatoriamente. Lo puedo filtrar por software para evitar esas lectura, pero te sucedía lo mismo? o todas tus lecturas eran correctas?
2. El tipo BCI funciona a 3V. me acabo de desilusionar por que creia que mi PIC funcuonaba a 3V pero sólo funciona a 5V. Ya que tu tambien cambiaste una version (AAA) de 5V
a una versión (DCI) de 3V como lo hiciste?
saludos.