找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8453|回复: 20
收起左侧

STM32f103zet6+AMG8833的热成像例程

  [复制链接]
ID:285534 发表于 2020-3-28 17:26 | 显示全部楼层 |阅读模式
714d9cd1ca3715ac19ea0c04b348c67.jpg
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"
  7. #include "asm88xx.h"


  8. low range of the sensor (this will be blue on the screen)
  9. #define MINTEMP 15

  10. high range of the sensor (this will be red on the screen)
  11. #define MAXTEMP 29

  12. #define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))

  13. const uint16_t camColors[] = {0x480F,
  14. 0x400F,0x400F,0x400F,0x4010,0x3810,0x3810,0x3810,0x3810,0x3010,0x3010,
  15. 0x3010,0x2810,0x2810,0x2810,0x2810,0x2010,0x2010,0x2010,0x1810,0x1810,
  16. 0x1811,0x1811,0x1011,0x1011,0x1011,0x0811,0x0811,0x0811,0x0011,0x0011,
  17. 0x0011,0x0011,0x0011,0x0031,0x0031,0x0051,0x0072,0x0072,0x0092,0x00B2,
  18. 0x00B2,0x00D2,0x00F2,0x00F2,0x0112,0x0132,0x0152,0x0152,0x0172,0x0192,
  19. 0x0192,0x01B2,0x01D2,0x01F3,0x01F3,0x0213,0x0233,0x0253,0x0253,0x0273,
  20. 0x0293,0x02B3,0x02D3,0x02D3,0x02F3,0x0313,0x0333,0x0333,0x0353,0x0373,
  21. 0x0394,0x03B4,0x03D4,0x03D4,0x03F4,0x0414,0x0434,0x0454,0x0474,0x0474,
  22. 0x0494,0x04B4,0x04D4,0x04F4,0x0514,0x0534,0x0534,0x0554,0x0554,0x0574,
  23. 0x0574,0x0573,0x0573,0x0573,0x0572,0x0572,0x0572,0x0571,0x0591,0x0591,
  24. 0x0590,0x0590,0x058F,0x058F,0x058F,0x058E,0x05AE,0x05AE,0x05AD,0x05AD,
  25. 0x05AD,0x05AC,0x05AC,0x05AB,0x05CB,0x05CB,0x05CA,0x05CA,0x05CA,0x05C9,
  26. 0x05C9,0x05C8,0x05E8,0x05E8,0x05E7,0x05E7,0x05E6,0x05E6,0x05E6,0x05E5,
  27. 0x05E5,0x0604,0x0604,0x0604,0x0603,0x0603,0x0602,0x0602,0x0601,0x0621,
  28. 0x0621,0x0620,0x0620,0x0620,0x0620,0x0E20,0x0E20,0x0E40,0x1640,0x1640,
  29. 0x1E40,0x1E40,0x2640,0x2640,0x2E40,0x2E60,0x3660,0x3660,0x3E60,0x3E60,
  30. 0x3E60,0x4660,0x4660,0x4E60,0x4E80,0x5680,0x5680,0x5E80,0x5E80,0x6680,
  31. 0x6680,0x6E80,0x6EA0,0x76A0,0x76A0,0x7EA0,0x7EA0,0x86A0,0x86A0,0x8EA0,
  32. 0x8EC0,0x96C0,0x96C0,0x9EC0,0x9EC0,0xA6C0,0xAEC0,0xAEC0,0xB6E0,0xB6E0,
  33. 0xBEE0,0xBEE0,0xC6E0,0xC6E0,0xCEE0,0xCEE0,0xD6E0,0xD700,0xDF00,0xDEE0,
  34. 0xDEC0,0xDEA0,0xDE80,0xDE80,0xE660,0xE640,0xE620,0xE600,0xE5E0,0xE5C0,
  35. 0xE5A0,0xE580,0xE560,0xE540,0xE520,0xE500,0xE4E0,0xE4C0,0xE4A0,0xE480,
  36. 0xE460,0xEC40,0xEC20,0xEC00,0xEBE0,0xEBC0,0xEBA0,0xEB80,0xEB60,0xEB40,
  37. 0xEB20,0xEB00,0xEAE0,0xEAC0,0xEAA0,0xEA80,0xEA60,0xEA40,0xF220,0xF200,
  38. 0xF1E0,0xF1C0,0xF1A0,0xF180,0xF160,0xF140,0xF100,0xF0E0,0xF0C0,0xF0A0,
  39. 0xF080,0xF060,0xF040,0xF020,0xF800,};

  40. float temp;
  41. float pixels[AMG88xx_PIXEL_ARRAY_SIZE];
  42. uint16_t arrColor[64];

  43. float map(float val, float I_Min, float I_Max, float O_Min, float O_Max)
  44. {
  45.     return(val/(I_Max-I_Min)*(O_Max-O_Min) + O_Min);
  46. }
  47. void show(uint16_t *pBuf)
  48. {        u8 i=0;
  49.          u8 j=0;
  50.         u16 colorr1=0;
  51.                         for(j=0;j<8;j++)
  52.                 {
  53.                         for(i=0;i<8;i++)
  54.                         {                                
  55.                         LCD_Fill(i*40,j*40,(i*40)+40,(j*40)+40,arrColor[colorr1]);
  56.                                 colorr1++;
  57.                         }
  58.           }
  59.         

  60. }void pull_color(float *pPixel)
  61. {
  62.         uint8_t i;
  63.         
  64.         for(i = 0; i < 64; i ++)
  65.         {
  66.                 if(pPixel[i] < 10)
  67.                 {
  68.                         arrColor[i] = BLUE;
  69.                 }
  70.                 else if(pPixel[i] < 20)
  71.                 {
  72.                         arrColor[i] = BLUE;
  73.                 }
  74.                 else if(pPixel[i] < 25)
  75.                 {
  76.                         arrColor[i] = GREEN;
  77.                 }
  78.                 else if(pPixel[i] < 30)
  79.                 {
  80.                         arrColor[i] = RED;
  81.                 }
  82.                 else if(pPixel[i] < 35)
  83.                 {
  84.                         arrColor[i] = BRRED;
  85.                 }               
  86.         }
  87. }


  88. int main(void)
  89. {         
  90.         delay_init();                     //延时函数初始化         
  91.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  92.         uart_init(115200);                 //串口初始化为115200
  93.          LED_Init();                             //LED端口初始化
  94.         LCD_Init();  
  95.   amg88xx_init();
  96.          
  97.           while(1)
  98.         {               
  99.    amg88xx_readPixels(pixels, 64);
  100.    pull_color(pixels);
  101.                 show(arrColor);
  102.                 LED0=!LED0;               
  103.         }
  104. }
复制代码

全部资料51hei下载地址:
AMG8833识别成功.7z (225.07 KB, 下载次数: 319)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:384489 发表于 2020-5-18 16:35 | 显示全部楼层
感觉很不错,学习了。
回复

使用道具 举报

ID:762925 发表于 2020-5-27 21:49 | 显示全部楼层
我来学习了
回复

使用道具 举报

ID:770122 发表于 2020-6-5 10:48 | 显示全部楼层
谢谢楼主分享,正需要这个东西
回复

使用道具 举报

ID:819036 发表于 2020-9-14 20:43 | 显示全部楼层
求助,AMG引脚INT和ADO要怎么连o(╥﹏╥)o
回复

使用道具 举报

ID:819036 发表于 2020-9-15 14:02 | 显示全部楼层
本帖最后由 719439150 于 2020-9-15 16:16 编辑

pixels数组中存储的是温度吗,为什么我调用pixels        
while(1)
        {
               
                amg88xx_readPixels(pixels, 64);
                for(t=0;t<=63;t++)
                {
                        printf("%d %f\r\n",t,pixels[t]);
                        delay_ms(100);
                }
}  
串口输出后除了pixels[0]以外其他全是63.75,求大佬解惑
回复

使用道具 举报

ID:778512 发表于 2020-9-26 15:52 | 显示全部楼层
719439150 发表于 2020-9-15 14:02
pixels数组中存储的是温度吗,为什么我调用pixels        
while(1)
        {

请问大佬这个问题解决了吗。我也遇到了,望赐教
回复

使用道具 举报

ID:400726 发表于 2020-10-6 19:02 | 显示全部楼层
719439150 发表于 2020-9-15 14:02
pixels数组中存储的是温度吗,为什么我调用pixels        
while(1)
        {

我也遇到这个问题了,大佬怎么解决
回复

使用道具 举报

ID:698988 发表于 2020-10-9 20:16 | 显示全部楼层
719439150 发表于 2020-9-15 14:02
pixels数组中存储的是温度吗,为什么我调用pixels        
while(1)
        {

多回复ACK了
回复

使用道具 举报

ID:698988 发表于 2020-10-9 20:23 | 显示全部楼层
首先感谢楼主的分享。
一次性读取64个温度时,应答了两次,所以第一个数正确,其它返回值都是FF。应删去读字节中的应答即可。
回复

使用道具 举报

ID:657190 发表于 2020-10-11 21:55 来自手机 | 显示全部楼层
719439150 发表于 2020-9-15 14:02
pixels数组中存储的是温度吗,为什么我调用pixels        
while(1)
        {

兄弟我也是这样,你解决了吗,
回复

使用道具 举报

ID:210511 发表于 2020-11-22 23:48 来自手机 | 显示全部楼层
可以运行成功吗
回复

使用道具 举报

ID:337139 发表于 2020-11-25 13:56 | 显示全部楼层
青天有月 发表于 2020-10-11 21:55
兄弟我也是这样,你解决了吗,

同问,这个我也碰到了。
回复

使用道具 举报

ID:634558 发表于 2021-4-7 16:49 | 显示全部楼层
根据上面两楼大佬的回复,把asm88xx.c里第73行的应答注释掉,应该就能正常工作了
回复

使用道具 举报

ID:232129 发表于 2021-4-9 10:44 | 显示全部楼层
正在学习,收到的值为00 正在找原因
回复

使用道具 举报

ID:854025 发表于 2022-6-29 16:41 | 显示全部楼层
能正常显示温度,但是图像显示出现了问题,这是什么原因呢,是通过修改pPixe后面的数字大小来修正图像显示吗?
回复

使用道具 举报

ID:981841 发表于 2023-6-9 10:39 | 显示全部楼层
2900015021 发表于 2022-6-29 16:41
能正常显示温度,但是图像显示出现了问题,这是什么原因呢,是通过修改pPixe后面的数字大小来修正图像显示 ...

修改显示函数
回复

使用道具 举报

ID:1086988 发表于 2023-7-5 16:17 | 显示全部楼层
楼主,我刚好在做这个设计,里面的lcd里面说驱动可以用ili9341?
回复

使用道具 举报

ID:1086988 发表于 2023-7-11 09:16 | 显示全部楼层
楼主,我买的那个amg8833无法写I2C,不知道是什么原因。我用的野火的开发板,运行你给的程序,到amg88xx那里就运行不下去了。不知道楼主有好什么好的建议吗?
回复

使用道具 举报

ID:1106702 发表于 2024-3-7 18:55 | 显示全部楼层
为什么我显示的只有几个色块,而且还是不动的
回复

使用道具 举报

ID:1113339 发表于 2024-3-21 10:23 | 显示全部楼层
发表于 2024-3-7 18:55
为什么我显示的只有几个色块,而且还是不动的

我也是这样,你解决了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表