0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >智能家居 > 【RT-Thread作品秀】桌面式智能家居控制系统

【RT-Thread作品秀】桌面式智能家居控制系统

来源: 电路城
2021-01-20
类别:智能家居
eye 100
文章创建人 拍明

原标题:【RT-Thread作品秀】桌面式智能家居控制系统

cirmall

cirmall

cirmall

cirmall

cirmall

cirmall

cirmall

cirmall

[相关器件] THVD1419

  具有浪涌保护功能的 3.3V 至 5V RS-485 收发器

  数据手册

  AD

  开发背景

  随着显示器件的多样化,人机交互界面也在不断地进行着变更,如今在TFT显示屏上进行图标化的功能管理已成为一种趋势,为此以ART-Pi STM32H750开发板为硬件平台,来构建一个以图标界面进行功能管理的桌面式智能家居控制系统,该系统的主要功能如图1所示,整体构成如图2所示。

图1  功能结构图

图2  整体构成图

  功能规划:

  RTC: 利用MCU内部的RTC实现电子时钟的计时功能,可用于定时控制固态继电器来驱动家用电器的开关。

  ADC: 利用MCU内部的A/D转换器对外部的模拟量进行采集,并可绘制出数据波形图。在连接土壤湿度传感器的情况下,可对家庭养植的绿色植物进行补水控制,当然这需要小型水泵的配合。

  PWM调光:利用MCU内部的定时器通过占空比的设置来控制光源的明亮程度,也可利用亮度强弱变化的呼吸灯效果来辅助睡眠。

  环境温湿度检测: 使用数字式温湿度传感器DHT22对家居的温湿度状态进行检测,若配置2个DHT22的情况下,还可将2个DHT22分别放置在居室内外,以检测冬季供暖与墙体的保温性能。

  环境光照度检测: 使用数字式光照度传感器BH1750对居室的日照状态进行检测,从而对日照采光情况提供一个可靠的依据。

  乐曲播放: 利用MCU内部的UART向MP3功能模块来发送指令,从而对播放的乐曲加以选择。受板载按键只有一个的制约,这里只采用单键控制,若对按键加以扩展,则可实现双向的选择处理及音量的调控。

  开关控制: 利用MCU的GPIO口,在连接固态继电器的情况下,可通过按键来控制家居的小电器进行开关控制,也可与RTC计时器相配合来进行定时控制电器的开关。

  图像显示: 该功能要依托W25Q16之类的FLASH存储器件或是TF卡来辅助存储图片数据,受时间的制约该功能只预备了一个功能调用的接口,具体的功能实现有待于辅助存储功能的实现。

  2.硬件设计

  该系统的整体硬件结构如图3所示,主要由显示模块、语音模块、继电控制模块及传感器模块等组成。

图3  原理构成图

  1)显示部分

  显示部分是通过SPI接口的TFT屏来实现的,这样比较节省GPIO资源,其连接关系如图4所示。

图4  TFT显示电路原理图

  2)音频播放部分

  音频播放是通过MP3播放模块来实现,这样有利于节省MCU资源并可形成并行的处理关系。MP3播放模块是采用通讯方式来控制MP3播放模块。除连接5V电源外,只需将MP3播放模块的RX引脚与PA9连接。

图5  MP3播放模块引脚图

  3)控制部分

  为了进行电器的控制,使用带光隔的继电器模块以防止继电器对MCU的干扰,对稍大功率的电器,则使用固态继电器来控制。

  4)传感器部分

  为了进行物理信号的检测,可选取不同类型的传感器,例如对绿植的管控是采用土壤湿度传感器,属模拟量的传感器,相应的接口电路如图6和图7所示。此外,对数字式的传感器的使用,则可省去数值标度的麻烦,DHT22和BH1750就属于这一类型。

图6 土壤湿度检测模块接口

图7 土壤湿度传感器

  5)按键部分

  按键是人机交互的主要器件,为便于控制所用的是开发板上用户USER,若增添更多的处理,则需要自行扩展更多的按键。

  3. 软件设计

  1)界面设计

  操作界面是人机交互的窗口,系统的主界面如图8所示,主要以图标的形式来标识功能,并通过文字的反显来指示待选的功能,主菜单下的相关界面如图8~图10所示。

图8 主界面

图9 RTC计时

图10  MP3播放选择

  2)功能实现

  在功能管理方面,是采用模块化的设计方法并通过功能函数调用来实现。在功能设计中,既涉及到外部功能模块的使用,也涉及到MCU内部的RTC、A/D、UART、GPIO等。

  界面生成程序:

  void jm(void)

  {

  LCD_Clear(WHITE);

  show_tbh(20,240,0);

  showhanzi16h(80,280,3,1);

  showhanzi16h(80,264,4,1);

  show_tbh(20,180,1);

  show_tbh(20,120,2);

  show_tbh(20,60,3);

  showhanzi16h(80,100,5,1);

  showhanzi16h(80,84,6,1);

  show_tbh(120,60,4);

  show_tbh(120,120,5);

  show_tbh(120,180,6);

  show_tbh(120,240,7);

  showhanzi16h(180,280,13,1);

  showhanzi16h(180,264,14,1);

  showhanzi16h(180,220,11,1);

  showhanzi16h(180,204,12,1);

  showhanzi16h(180,160,9,1);

  showhanzi16h(180,144,10,1);

  showhanzi16h(180,100,7,1);

  showhanzi16h(180,84,8,1);

  BACK_COLOR=WHITE;

  POINT_COLOR=RED;

  LCD_ShowCharh(80,160,'R',1);

  LCD_ShowCharh(80,152,'T',1);

  LCD_ShowCharh(80,144,'C',1);

  LCD_ShowCharh(80,220,'P',1);

  LCD_ShowCharh(80,212,'W',1);

  LCD_ShowCharh(80,204,'M',1);

  }

  图标布置程序:

  void show_tbh(unsigned int x,unsigned int y,unsigned int n)

  {

  unsigned int i,j,k;

  unsigned int da;

  k=0;

  for(i=0;i<50;i++)

  {

  for(j=0;j<50;j++)

  {

  if(n==0) da=gImage_tb[k*2];

  if(n==1) da=gImage_pwm[k*2];

  if(n==2) da=gImage_rtc[k*2];

  if(n==3) da=gImage_a2d[k*2];

  if(n==4) da=gImage_tft[k*2];

  if(n==5) da=gImage_sz[k*2];

  if(n==6) da=gImage_kz[k*2];

  if(n==7) da=gImage_dht[k*2];

  da<<=8;

  if(n==0) da|=gImage_tb[k*2+1];

  if(n==1) da|=gImage_pwm[k*2+1];

  if(n==2) da|=gImage_rtc[k*2+1];

  if(n==3) da|=gImage_a2d[k*2+1];

  if(n==4) da|=gImage_tft[k*2+1];

  if(n==5) da|=gImage_sz[k*2+1];

  if(n==6) da|=gImage_kz[k*2+1];

  if(n==7) da|=gImage_dht[k*2+1];

  POINT_COLOR=da;

  LCD_DrawPoint(x+i,y+j);

  k++;

  }

  }

  }

  MP3乐曲选择播放程序:

  if(i==0)

  {

  setVolume(18);

  for(j=0;j<10;j++)

  {

  USART1->TDR=cmd6[j];

  while((USART1->ISR&0X40)==0);

  }

  showhanzi16h(180,100,7,1);

  showhanzi16h(180,84,8,1);

  showhanzi16h(80,280,3,0);

  showhanzi16h(80,264,4,0);

  delay_ms(200);

  LCD_Clear(WHITE);

  BACK_COLOR=WHITE;

  POINT_COLOR=RED;

  LCD_ShowCharh(60,280,'1',0);

  LCD_ShowCharh(60,260,'-',0);

  LCD_ShowCharh(80,280,'2',0);

  LCD_ShowCharh(80,260,'-',0);

  LCD_ShowCharh(100,280,'3',0);

  LCD_ShowCharh(100,260,'-',0);

  LCD_ShowCharh(120,280,'4',0);

  LCD_ShowCharh(120,260,'-',0);

  LCD_ShowCharh(140,280,'5',0);

  LCD_ShowCharh(140,260,'-',0);

  LCD_ShowCharh(160,280,'6',0);

  LCD_ShowCharh(160,260,'-',0);

  LCD_ShowCharh(180,280,'7',0);

  LCD_ShowCharh(180,260,'-',0);

  showhanzi16h(60,240,39,1);

  showhanzi16h(60,220,40,1);

  showhanzi16h(60,200,41,1);

  showhanzi16h(80,240,19,1);

  showhanzi16h(80,220,20,1);

  showhanzi16h(100,240,35,1);

  showhanzi16h(100,220,36,1);

  showhanzi16h(100,200,37,1);

  showhanzi16h(100,180,38,1);

  showhanzi16h(120,240,33,1);

  showhanzi16h(120,220,34,1);

  showhanzi16h(140,240,29,1);

  showhanzi16h(140,220,30,1);

  showhanzi16h(140,200,31,1);

  showhanzi16h(140,180,32,1);

  showhanzi16h(160,240,21,1);

  showhanzi16h(160,220,22,1);

  showhanzi16h(180,240,42,1);

  showhanzi16h(180,220,43,1);

  j=0;

  while(j<7)

  {

  if(KEY1==0)

  {

  if(j>0)

  {

  LCD_ShowCharh(40+20*j,300,' ',0);

  LCD_ShowCharh(40+20*j,292,' ',0);

  showhanzi16h(60+20*j,300,27,1);

  }

  else

  {

  showhanzi16h(60,300,27,1);  // Èý½Ç + 20

  }

  if(j<5)

  {

  playn(j+1);

  for(k=0;k<10;k++)

  {

  USART1->TDR=cmd3[k];

  while((USART1->ISR&0X40)==0);

  }

  }

  j++;

  }

  delay_ms(200);

  }

  for(k=0;k<10;k++)

  {

  USART1->TDR=cmd5[k];

  while((USART1->ISR&0X40)==0);

  }

  LCD_Clear(WHITE);

  jm();

  showhanzi16h(180,100,7,1);

  showhanzi16h(180,84,8,1);

  showhanzi16h(80,280,3,0);

  showhanzi16h(80,264,4,0);

  }

  4. 功能测试

  在功能测试中,测试方法的选择是较为重要的,应加以合理地选择。

  为了进行MP3播放模块的控制,可先通过虚拟串口来验证指令的发送功能,待功能得到验证后再将虚拟串口通讯改为实际的MP3模块控制能节省许多的验证时间。虚拟串口的验证效果如图11所示,说明指令发送是正确的。在连接MP3播放模块后,有效地证明了控制的有效性。

图11  Play指令测试

  对RTC计时功能的测试如图12所示,对DHT22的温湿度测试如图13所示。

图12 RTC计时

图13 温湿度测试

  对BH1750的照度测试如图14所示,对波形绘制功能的验证如图15所示。

图14 照度测试

图15 波形绘制功能验证

  结语

  尽管设计已初具规模,但受时间和技术水平的限制,还存在着待补充和完善的地方,例如STM32H750的闪存只有128K,相对来说还是比较小,要想完全达到设计目标,W25Q16和TF卡之类的外存使用还是十分必要的,它可以有效地解决图标、中文字库及数码相框的存储问题,有利于界面的美观和中文化。




责任编辑:

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: 家居控制系统

相关资讯

方案推荐
基于MC33771主控芯片的新能源锂电池管理系统解决方案

基于MC33771主控芯片的新能源锂电池管理系统解决方案

AMIC110 32位Sitara ARM MCU开发方案

AMIC110 32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于TI公司的AM437x双照相机参考设计

基于TI公司的AM437x双照相机参考设计

基于MTK6580芯片的W2智能手表解决方案

基于MTK6580芯片的W2智能手表解决方案