网站开发推荐笔记本,峡山网站建设,百度统计登录,做网络推广哪家好摘要 本系统采用stm32f407作为主控芯片#xff0c;实现对环境的监测。并且通过和手机通信#xff0c;获取当前的天气预报信息#xff0c;结合当前测得的温湿度#xff0c;可以为用户提供出行建议。利用stm32自带的RTC可以实现时间及闹钟功能。此外RTC还可以用于电子日历的…摘要 本系统采用stm32f407作为主控芯片实现对环境的监测。并且通过和手机通信获取当前的天气预报信息结合当前测得的温湿度可以为用户提供出行建议。利用stm32自带的RTC可以实现时间及闹钟功能。此外RTC还可以用于电子日历的制作。从机主控芯片是STM32f103其主要功能是测取当前的温湿度信息和语音识别。主从机通过nrf24l01无线通信。
引言 科技发展越来越快我们将要进入物联网的世界。利用已经成熟的温湿度传感器技术可以获得当前的温湿度信息利用已经很成熟的光敏传感器技术可以获得当前的光照强度。如果我们将这些信息搜集起来通过微处理器分析从而给出控制信息实现智能控制。我们所要做的事情就是通过微处理器丰富的外设来获取周围信息。再分析这些数据利用自动控制算法控制外围器件实现环境的调控。 系统方案 一、温湿度监测模块1.与数字温度传感器通信获取当前的温湿度信息。 2.将获得温湿度信息进行滤波处理 3.将温湿度数据打包传送给上位机 4.上位机接受下位机传输数据将数据解包存储 5.上位机数据分析
该模块中最关键的算法是数据滤波代码如下
#define N 11 char filter()
{ char value_buf[N]; char count,i,j,temp; for ( count0;countN;count) { value_buf[count] get_ad(); delay(); } for (j0;jN-1;j) { for (i0;iN-j;i) { if ( value_buf[i]value_buf[i1] ) { temp value_buf[i]; value_buf[i] value_buf[i1]; value_buf[i1] temp; } } } return value_buf[(N-1)/2];
}
二、光照强度监测模块 本模块比较简单。通过监测光敏电阻两端的电压来获得电压数据。再将电压数据转化成光照强度数据。检测电压的方法是采用STM32F407的AD模块来实现。同上一个模块一样要对数据进行滤波处理。算法如上。
三、2.4G无线通信模块 本模块是连接主从机的关键模块。采用的通信芯片是NRF24L01。该芯片内部包括频率发生器、增强型ShockBurst模式控制器、功率放大器、晶体振荡器、调制器、解调器等功能模块。通信接口为SPI待机电流22uA。 该模块的使用主要是通过对其进行初始化、再选择工作状态RX/TX、发送或接收数据。通过软件查询方式来通信。前期调试时下位机由于以前调试过没有遇到什么问题。主要是在STM32F407上由于干接触还不太了解该SPI库函数的使用方法犯了一些低级错误。后期调好之后没有出现过大的问题。
蓝牙通信模块 蓝牙通行模块是用于与智能手机及电脑通信的。本系统通过该模块与手机通信获取当前的天气预报信息。此外还可通过智能手机、电脑等获取本系统当前的信息以及控制本系统。该模块与通过通信。主要难点是控制指令是指令。由于此前没有学习过该指令学习该指令花费了几天时间。该模块稳定性高调试成功后一直没有出现过大的问题。 五、SYN6288合成语音模块 本模块采用进行通信。该语音合成芯片支持多种编码的数据。如 等。语音合成数据通过打包发送到该模块。
支持多音字及人名的智能识别。该模块控制命令多大几十条可以很好的实现对输出音量、语速、背景音、多音字识别、强制连读等调控。该模块实现时遇到两个难题、多指令的学习使用问题 、电流干扰问题。第一个问题通过学习该芯片使用手册很快得到了解决。第二个问题的现象是每当播放语音时显示屏上就会乱码。经过多次检测发现问题是该模块播音时电流变化大对开发板上的电源产生了干扰。解决办法是采用外界电源。
六、语音识别模块 本模块基本功能是识别语音附加功能是播放语音。本模块通过与从机主控芯片通信。从机控制该模块进行语音识别和语音播放。结合与可从卡上读取数据从而实现了语音识别播放器。该模块使用时首先初始化再选择模块工作模式。通过查阅数据手册可以更好的控制该芯片。结合无线模块可以实现对上位机的控制。结合语音识别功能和语音播放功能可以实现语音对话。 系统硬件设计
详细介绍系统各个模块的硬件实现过程包括电路系统仿真说明采用关键器件的理由及关键部分的原理图 不得大量复制原理图和PCB图更多用框图的方式示意仅对能体现工作量和创新的部分提供原理图评委有权对滥用原理图的论文扣分 语音模块 语音识别模块 无线模块 系统软件设计
主机
int main(void)
{
extern u8 voice7[];
extern u8 Vscripte1[];
extern u8 voice7[];
extern u8 voice1[];
massage.ScreenMsg1;
massage.ScreenMain1;
massage.Id-1;
massage.Flag1;
massage.HardMsg0;
massage.Temp128;
massage.Temp239;
massage.Humi158;
massage.Humi238; delay_init();
LCD_Config();
Touch_Init(); LCD_Clear(BLUE);
COM1Init(9600);
SelfCheck();
delay_ms(1000);
My_Init();
while(1){ MainMenu();
}
} void My_Init(void){
extern u8 voice7[];
extern u8 Vscripte1[];
extern u8 voice7[];
extern u8 voice1[];
u8 i0;
u8 Rx_Buf[20];
LCD_Clear(BLUE);
GUI_TextV(50,80,Waitting for data... ,RED,BLUE,1); RX_Mode(); while(NRF24L01_RxPacket(Rx_Buf)); if(Rx_Buf[0]0xda) { massage.Temp1Rx_Buf[1]; massage.Humi1Rx_Buf[2]; massage.Temp2Rx_Buf[3]; massage.Humi2Rx_Buf[4];// } for(i0;i11;i) { Usart2_Putc(Vscripte1[i]); } while(Usart2_Getc()0x4f); //联机成功提示音 for(i0;i11;i) { Usart2_Putc(Vscripte1[i]); } while(Usart2_Getc()!0x4f); //开机成功欢迎音 for(i0;i27;i) { Usart2_Putc(voice1[i]); } Touch_Init();
} void MainMenuV(void){ GetId();
switch(massage.Id){ case 0: bluetooth();
break; case 8: changeS();
break;
case 12: monitor();
break;
case 13: temperature(); break;
case 15: setting();
break; case 16: humidity();
break;
case 17:
voice(); break;
case 19: speaker(); break;
default: break;
} }
void MainMenuH(void){ /*AI_LoadPicFile(0:/JPG/mas.jpg,0,0,240,320);
delay_ms(800);
AI_LoadPicFile(0:/JPG/mas1.jpg,0,0,240,320);
delay_ms(800);
AI_LoadPicFile(0:/JPG/mas2.jpg,0,0,240,320);
delay_ms(800);
AI_LoadPicFile(0:/JPG/mas3.jpg,0,0,240,320);
delay_ms(800);
AI_LoadPicFile(0:/JPG/mas4.jpg,0,0,240,320);
delay_ms(800);
AI_LoadPicFile(0:/JPG/mas5.jpg,0,0,240,320);
delay_ms(800);*/
//RTC_TimeShow();
GetId();
switch(massage.Id){ case 15: bluetooth();
break; case 16: setting();
break;
case 3: voice();
break;
case 10: temperature(); break;
case 2: //changeS();
break; case 18: humidity();
break;
case 11:
speaker(); break;
case 19: network(); break; case 14: nowtime();
break;
case 6: monitor();
break;
case 7: calendar();
break;
default: break;
}
slither(); } void sysmas(void){ if(massage.ScreenMsg0){ //GUI_Text(50,80,Speaker for you ,RED,BLACK,1); }else{ AI_LoadPicFile(0:/JPG/happ.jpg,0,0,240,320); if(massage.HardMsg|0x00){ GUI_TextV(30,20,SD working well... ,RED,BLACK,0); }else{ GUI_TextV(30,20,SD can not work... ,RED,BLACK,0); } if(massage.HardMsg|0x02){ GUI_TextV(50,20,Net working well... ,RED,BLACK,0); }else{ GUI_TextV(50,20,Net can not work... ,RED,BLACK,0); } if(massage.HardMsg|0x04){ GUI_TextV(70,20,BlueTooth working well...,RED,BLACK,0); }else{ GUI_TextV(70,20,BlueTooth can not work...,RED,BLACK,0); } if(massage.HardMsg|0x08){ GUI_TextV(90,20,SYN6288 working well...,RED,BLACK,0); }else{ GUI_TextV(90,20,SYN6288 can not work...,RED,BLACK,0); } while(!exit_fun(0:/JPG/happ.jpg)){}//end for while }
} char exit_fun(u8 *path){ char temp[2]; extern MSG massage; GetId(); temp[0]massage.Id; delay_ms(100); GetId(); temp[1]massage.Id; if(massage.ScreenMsg){ //横屏 //双指收缩 if((temp[0]0)){ if((temp[1]5)||(temp[1]1)||((temp[1]4))) { turnback(path,0:/JPG/happbg.jpg); //MainMenuH();
temp[0]0; temp[1]0;
massage.Id-1;
return 1; } } // 单指滑屏 if((temp[0]9)){ if(temp[1]temp[0]){ turnback(path,0:/JPG/happbg.jpg); temp[0]0; temp[1]0; massage.Id-1; return 1; } }else{ if(temp[0]10){ if(temp[1]temp[0]){ turnback(path,0:/JPG/happbg.jpg); temp[0]0; temp[1]0; massage.Id-1; return 1; }
} } }else{ // 竖屏状态 // 双指放缩 if((temp[0]3)){ if((temp[1]2)||(temp[1]7)||(temp[1]6)) { turnback(path,0:/JPG/vappbg.jpg); //MainMenuV(); temp[0]0; temp[1]0; massage.Id-1; return 1; } } // 单指滑屏 if((temp[0]6)||(temp[0]10)||(temp[0]14)){ if(temp[1]temp[0]) { turnback(path,0:/JPG/vappbg.jpg); //MainMenuV(); temp[0]0; temp[1]0; massage.Id-1; return 1; } } } temp[0]0; temp[1]0; massage.Id-1; return 0;
} void slither(void){ char temp[2]; extern MSG massage; GetId(); temp[0]massage.Id; delay_ms(20); GetId(); temp[1]massage.Id; if(massage.ScreenMsg0) { }else{ if((temp[0]5||temp[0]1)){ if(temp[1]temp[0]){ sysmas(); temp[0]0; temp[1]0; massage.Id-1; } } if((temp[0]13||temp[0]17)){ if(temp[1]temp[0]){ sysmas(); temp[0]0; temp[1]0; massage.Id-1; } } }
}
系统创新 本系统将主从机分开利用从机进行语音识别和温湿度监控主机进行数据分析。通过蓝牙通信获取智能手机上的天气数据很好的解决了微控制器连接网路难题。并且通过蓝牙连接用户能够使用手机获得当前的温度信息。语音识别功能增添了更加丰富的人机交互方式。此外利用开发板上自带的加速度模块能够实现彩屏的横竖屏切换。
评测与结论 系统的测试分三个阶段第一个阶段主要是对硬件的测试。包括原理图焊接等检测。焊接时分模块焊接、测试。最后进行整个模块上电测测。 第二个阶段主要是对软件的测试。软件测试也是先分模块测试再总的进行测试。 第三个阶段是黑盒测试。我们小组内先进行组内测试。通过后再请其他同学通过使用发现其中的问题。再进行改进。 进过测试第一第二个阶段的测试比较顺利。第三个阶段的测试出现一些问题主要是语音识别上的问题。通过不断改变算法最终得到了很好的效果。