【GD32F350 都市青年家庭安防卫士 】第三贴 人体感应模块设计
[复制链接]
本帖最后由 传媒学子 于 2018-9-9 23:37 编辑
【GD32F350 都市青年家庭安防卫士 】第三贴 人体感应模块设计
一、设计内容
本周学习GD32的GPIO输入,然后采用热释电传感器进行了安防卫士的人体感应模块设计。
二、设计方法
热释电模块采用HC-SR505传感器模块,如下图所示。电源输入5V,OUT输出3.3V/0V电平,当有人在3M范围内出现时,会输出高电平,否则输出低电平。采用兆易创新生产的GD32作为主控制器,监控传感器的输出信号,判断人是否出现;当人出现时,通过串口、WIFI等向主人告警,本例采用串口和板载LED告警状态。
为叙述方便,板载LED从上到下,依次为LED1, LED2, LED3。LED1代表系统状态指示,LED2/LED3为告警显示。
本实验,采用家用瓷碗遮盖传感器,作为无人状态模拟 。 系统设计图如下:
系统流程图如下:
三、实验现象 系统正常时,LED1代表系统状态,闪亮为正常,不亮、常亮为异常。
LED2/LED3不亮,代表无人闯入;常亮,代表有人闯入。
3.1 系统实物图和正常情况实物图
串口输出:
3.2 有人闯入实物图
串口输出:
3.3 GPIO输入主要代码 - int main(void)
- {
- unsigned char hc_sr_flag = 0;
- systick_config();
-
- /* initilize the hc_sr505 sensor module */
- gpio_deinit(GPIOC);
-
- /* initilize the LEDs, USART and key */
- gd_eval_led_init(LED1);
- gd_eval_led_init(LED2);
- gd_eval_led_init(LED3);
- gd_eval_com_init(EVAL_COM1);
-
- gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_6); //sensor output PC6
- rcu_periph_clock_enable(RCU_GPIOC); // must set
- rcu_periph_clock_enable(RCU_CFGCMP);
-
- gd_eval_key_init(KEY_WAKEUP, KEY_MODE_GPIO);
-
-
- printf("\r\n***安防模式已启动***");
- rcu_ckout_config(RCU_CKOUTSRC_CKSYS, RCU_CKOUT_DIV1);
- while (1){
-
- if(1 == gpio_input_bit_get(GPIOC, GPIO_PIN_6))
- {
- gd_eval_led_on(LED2);
- gd_eval_led_on(LED3);
- if(hc_sr_flag == 0)
- {
- printf("\r\n警告,有人闯入!");
- hc_sr_flag = 1;
- }
- }
- if(0 == gpio_input_bit_get(GPIOC, GPIO_PIN_6))
- {
- gd_eval_led_off(LED2);
- gd_eval_led_off(LED3);
- hc_sr_flag = 0;
- }
- }
- }
复制代码
注意: 启用输入模式,必须启用对应的时钟:如启用PC6输入,需
- gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_6); //sensor output PC6
- rcu_periph_clock_enable(RCU_GPIOC); // must set
- rcu_periph_clock_enable(RCU_CFGCMP);
复制代码
四、实验感悟与下一步安排
本实验,主要纠结的地方就是时钟,以前玩8051,FPGA或者其它单片机的时候,有时不需要启用时钟,而arm等处理器,需要开启GPIO的时钟,采用正常使用输入和输出,因此读懂源码和多查阅datasheet是很有必要的。
稍后,将会调试摄像头传感器,这个对我自己是有挑战的,争取加油完成达到预定的目标。
myprogram.rar
(11.3 MB, 下载次数: 12)
|