切换到宽版
  • 27684阅读
  • 236回复

[工仪]DIY热成像仪 廉价低分辨率 8Bit AMG8833 [复制链接]

上一主题 下一主题
 

发帖
557
M币
19437
专家
54
粉丝
19106
— 本帖被 發騷友 设置为精华,作者+3000M币+5专家(2018-09-20) —
前阵子找到一款很有趣的传感器AMG8833,松下的一款8*8Dot的热传感器。看手册是用于智能人体识别或者温度监控的,就想这不是正好可以做热成像么,就是分辨率低了点儿,就拿来做了。


原文写的Pixels也就是人家也觉得是图像传感器呢


淘宝200CNY不到的传感器
然后看网上有现成的最小系统模块,带个LDO和上拉电阻,就干脆拿来用还省去了SMD温度不合适损坏传感器的问题。


硬件简图

传感器是IIC接口的,最大刷新率在10Hz上,还算可以接收,主控单片机选了STM32F1,屏幕选了稍微小点儿的128*160pix的屏幕,并口驱动可以挂在fsmc总线上。再加上零七零八的小部件啥的。


原理图


pcb

然后用AD画原理图,不涉及高速和模拟,放飞自我画。设计成两块PCB前后组装,中间掰开能节省一次打样费用,还能用于调试时两块板通信。


pcb内侧


pcb外侧


emmm
第一次打样的时候忘记SDIO需要上拉电阻,再次打样之前只能先这样凑合着调调看了emmm。。。


先上STM32


内侧


外侧




烧入Bootloader

元件很少,焊接好之后,烧入测试程序和bootloader测试。


电池装配
电池使用900mah的锂电池,按理说应该可以用很久【?


最后一步

两块板掰开后使用排针接在一起,然后靠铜柱固定再焊接,不过修起来就会有些困难。


最后装配效果

つづく…


[ 此帖被皮卡丘の星空在2018-09-27 15:33重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共53条打赏M币+696专家+8
icefire2hot M币 +8 優秀文章 10-06
刘桃桃 M币 +1 優秀文章 10-03
炮兵上尉 M币 +8 優秀文章 09-30
thcf M币 +15 支持成功后量产,造福坛友,下次看哪个元件发热就爽了 09-29
caz28 M币 +1 - 09-29
benten163 M币 +8 謝謝分享 09-27
1ylh 专家 +1 優秀文章 09-27
ynqjzzh 专家 +1 謝謝分享 09-26
ynqjzzh M币 +13 謝謝分享 09-26
wulishui M币 +20 - 09-26
离线zb0924

发帖
1257
M币
7945
专家
2
粉丝
21
只看该作者 1楼 发表于: 09-20
坐等楼主更新,学习

发帖
557
M币
19437
专家
54
粉丝
19106
只看该作者 2楼 发表于: 09-20
构想应该有的基本功能至少要能把温度转换成图像,最好可以有多种假彩色方法。这里便设计了三种假彩色的转换,分别是灰度-铁红-彩虹。也就是市面上常见的热成像的几种色卡。
色卡

然后要能显示温度的数值,这里选取整个图的最大值和最小值显示,同时可以显示中央的温度。为了能直观的显示当前的状态,所以要能显示电池电量和当前测温点的信息。所以界面设计如下:

界面设计图

然后整个程序也不需要做更多的功能,所以流程很简单。采集,转换,然后显示。为了能让图像看起来更大一些,这里对图像插值,使其增加到40*40的软件分辨率,但是实际上硬件分辨率还是8*8。


流程图


最终效果

最终效果还算可以,第一个界面是默认的铁红色卡,第二个是彩虹色卡,第三个是开启中心测温点的彩虹色卡。





还做了个说明书emm
最后还实现了可以保存bmp格式图片进SD卡。连接串口传输数据以及杂七杂八的小功能。


下面是实现代码:

用于插值:
  1. void blowup(void) {
  2.     int i;
  3.     for (i = 0; i < 8 * 7; i++) {
  4. data[i / 7 * 5 + 2][i % 7 * 5 + 2 + 1] = 1+ data[i / 7 * 5 + 2][i % 7 * 5 + 2] * t4 + data[i / 7 * 5 + 2][i % 7 * 5 + 2 + 5] * t1;
  5. data[i / 7 * 5 + 2][i % 7 * 5 + 2 + 2] = 1+ data[i / 7 * 5 + 2][i % 7 * 5 + 2] * t3 + data[i / 7 * 5 + 2][i % 7 * 5 + 2 + 5] * t2;
  6. data[i / 7 * 5 + 2][i % 7 * 5 + 2 + 3] = 1+ data[i / 7 * 5 + 2][i % 7 * 5 + 2] * t2 + data[i / 7 * 5 + 2][i % 7 * 5 + 2 + 5] * t3;
  7. data[i / 7 * 5 + 2][i % 7 * 5 + 2 + 4] = 1+ data[i / 7 * 5 + 2][i % 7 * 5 + 2] * t1 + data[i / 7 * 5 + 2][i % 7 * 5 + 2 + 5] * t4;
  8.     }
  9.     for (i = 0; i < 7 * 36; i++) {
  10. data[i % 7 * 5 + 2 + 1][i / 7 + 2] = 1+ data[i % 7 * 5 + 2][i / 7 + 2] * t4 + data[i % 7 * 5 + 2 + 5][i / 7 + 2] * t1;
  11. data[i % 7 * 5 + 2 + 2][i / 7 + 2] = 1+ data[i % 7 * 5 + 2][i / 7 + 2] * t3 + data[i % 7 * 5 + 2 + 5][i / 7 + 2] * t2;
  12. data[i % 7 * 5 + 2 + 3][i / 7 + 2] = 1+ data[i % 7 * 5 + 2][i / 7 + 2] * t2 + data[i % 7 * 5 + 2 + 5][i / 7 + 2] * t3;
  13. data[i % 7 * 5 + 2 + 4][i / 7 + 2] = 1+ data[i % 7 * 5 + 2][i / 7 + 2] * t1 + data[i % 7 * 5 + 2 + 5][i / 7 + 2] * t4;
  14.     }
  15.     for (i = 0; i < 36; i++) {
  16. data[0][i + 2] = data[1][i + 2] = data[2][i + 2];
  17. data[39][i + 2] = data[38][i + 2] = data[37][i + 2];
  18.     }
  19.     for (i = 0; i < 40; i++) {
  20. data[i][0] = data[i][1] = data[i][2];
  21. data[i][39] = data[i][38] = data[i][37];
  22.     }
  23.     ext[2]=data[19][19];
  24. }



用于假彩色转换:
  1. u16 To_HSB(u8 num){
  2.     u8 R=0,G=0,B=0;
  3.     float a;
  4.     u32 b;
  5.     if(color_mod==Iron){
  6. a=0.7*num;
  7. a+=20;
  8. num=(u8)a;
  9. if (num < 64) {
  10.     B = (unsigned char)(num * 4);
  11.     G = 0;
  12.     R = 0;
  13. }
  14. else if (num < 96) {
  15.     B = 255;
  16.     G = 0;
  17.     R = (unsigned char)(4 * (num - 64));
  18. }
  19. else if (num < 128) {
  20.     B = (unsigned char)(256 - 8 * (num - 95));
  21.     G = 0;
  22.     R = (unsigned char)(4 * (num - 64) - 1);
  23. }
  24. else if (num < 191) {
  25.     B = 0;
  26.     G = (unsigned char)(4 * (num - 128));
  27.     R = 255;
  28. }
  29. else {
  30.     B = (unsigned char)(4 * (num - 191));
  31.     G = 255;
  32.     R = 255;
  33. }
  34.     }else if(color_mod==BW){
  35. R=G=B=num;
  36.     }else if(color_mod==RB){
  37. b=240*num;
  38. b/=255;
  39. num=(u8)b;
  40. if (num < 60) {
  41.     B = 255;
  42.     G = num*4;
  43.     R = 0;
  44. }
  45. else if (num < 120) {
  46.     B = (120-num)*4;
  47.     G = 255;
  48.     R = 0;
  49. }
  50. else if (num < 180) {
  51.     B = 0;
  52.     G = 255;
  53.     R = (num-119)*4;
  54. }else{
  55.     B = 0;
  56.     G = (240-num)*4;
  57.     R = 255;
  58. }
  59.     }
  60.     // RRRRR GGGGG ? BBBBB//
  61.     
  62.     return 0xFFFF&((B&0xf8)>>3|(G&0xf8)<<3|(R&0xf8)<<8);
  63. }    



主函数逻辑:
  1. int main(void){    
  2.      NVIC_SetVectorTable(NVIC_VectTab_FLASH,APP_ADDR&0xFFFFF);
  3.     init_all();      //初始化系统
  4.     DrawBack();      //绘制背景
  5.     
  6.     disp_slow();
  7.     disp_fast();
  8.     //Play_BadApple(); //test
  9.     while(1){
  10. key_do();
  11. disp_slow();
  12. disp_fast();
  13. if(USART_RX_BUF==0)delay_ms(60);
  14. else delay_ms(48);
  15. if(color_mod==RB)delay_ms(5);
  16. if(color_mod==BW)delay_ms(6);
  17.     }
  18. }



可以的话请给我星!↓
(PCB文件及程序都在GitHub开源,也有每部分的使用说明)GitHub连接   flir:  https://github.com/AnalogDragon/flir




乍一看颜值还算蛮高啊hahaha
(并不是主线剧情的视频) https://www.bilibili.com/video/av23094232/


1-水杯 / 2-桶装冰激凌 / 3-一个坐着玩电脑的人 / 4-键盘细节 / 5-6-手

つづく…
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共75条打赏M币+970专家+10
nesw M币 +30 - 10-12
jzpjzl M币 +30 原創內容 10-05
番茄炒鸡蛋 M币 +1 優秀文章 10-04
bluetasle M币 +15 優秀文章 10-03
lzf919 M币 +30 優秀文章 10-03
夜心 M币 +15 謝謝分享 09-30
bingjing0314 M币 +1 優秀文章 09-30
bennyray M币 +30 優秀文章 09-29
人生之际 M币 +1 優秀文章 09-27
winterdate M币 +13 優秀文章 09-26
123456...8下一页
到第
离线cwqcwq007

发帖
2871
M币
100
专家
6
粉丝
48
只看该作者 3楼 发表于: 09-20
坐等更新啊,好久没上论坛,一上就看见这等黑科技

发帖
7219
M币
3461
专家
9
粉丝
125
只看该作者 4楼 发表于: 09-20
高手的高科技玩具
离线shr

发帖
1598
M币
821
专家
1
粉丝
32
只看该作者 5楼 发表于: 09-20
除了牛笔,我还能说啥啊?
离线liuyangczbz

发帖
1715
M币
958
专家
8
粉丝
30
只看该作者 6楼 发表于: 09-20
弄个阵列你就上天了
离线kingsonic

发帖
894
M币
41
专家
1
粉丝
15
只看该作者 7楼 发表于: 09-20
楼主玩得好嗨
手艺不错

发帖
585
M币
452
专家
1
粉丝
15
只看该作者 8楼 发表于: 09-20
高手高手高高手

内容来自Android手机客户端

离线xiaopang

发帖
12051
M币
6413
专家
5
粉丝
42
只看该作者 9楼 发表于: 09-20
分辨率有点低了。