开发者 张同学 通过外接湿度传感器,利用rvb2601处理湿度传感器送来的信号,用rvb2601点亮不同颜色的led灯及oled显示不同数量的横线表示花卉土壤的干湿度,完成了创意应用开发——花卉浇水指示器。
关于花卉浇水指示器的实现过程,请见本文详细介绍。
01 项目背景
花儿人见人爱,很多人都喜欢养殖花卉,刚买来的花儿艳丽多姿,没过几天,花儿就蔫了。其中浇水是否恰当,是主要问题。
花卉是否缺水?花卉是否应该浇水了?花卉的浇水问题,对很多人来说是个难题。
02 作品简介
2.1 设置湿度传感器
当花卉土壤过于干燥时,rvb2601的红色led点亮,同时oled仅显示几根横线,提醒花卉需要浇水,参见下图1。
实测图1-红色灯亮
2.2 此传感器与rvb2601相连
当花卉土壤干湿度恰当时,rvb2601的绿色led点亮,同时oled显示恰当数量的横线,表示花卉不需浇水或通风散湿,参见下图2。
实测图2-绿色灯亮
2.3 rvb2601处理湿度传感器送来的信号
当花卉土壤过于潮湿时,rvb2601的蓝色led点亮,同时oled显示几乎满屏的横线,提醒花卉需要通风散湿,参见下图3。
实测图3-蓝色灯亮
4.4 用rvb2601点亮不同颜色的led灯及oled显示不同数量的横线表示花卉土壤的干湿度。
03 系统框图
用“平头哥risc-v rvb2601开发板”检测土壤湿度的办法:
开发板读取土壤湿度传感器的模拟信号,经开发板adc转换后变成数字信号,然后驱动开发板的led及oled;
经筛选,选取下款湿度传感器,参见图4:
图4 湿度传感器外形图
湿度传感器模块为双输出模式:数字量输出及模拟量输出,比较器采用lm393芯片,工作稳定,信号干净。设有固定螺栓孔,方便安装。
电路图参见图5:
图5电路图
04 各部分功能说明和解析
4.1 土壤湿度传感器
参见图6:
图6土壤湿度传感器
4.2 土壤湿度信号放大处理模块
参见图7:
图7土壤湿度信号放大处理模块
4.3 湿度处理、显示模块
即rvb2601,参见图8:
图8 rvb2601
05 作品源码和案例中处理的传感器数据
5.1 作品源码
#define _default_source /* needed for usleep() */#include #include #include #include #include #include aos/cli.h #include app_config.h#include app_init.h#include csi_config.h#include hw_config.h#include csi_config.h#include lvgl.h#include lv_label.h#include oled.h #include board_config.h#include drv/gpio_pin.h#include #include #include #include #define tag app /**************************oled*****************************/extern void oled_draw_point(uint8_t r, uint8_t c, uint8_t t);extern void fill_ram(unsigned char data); extern void oled_reflesh();/**************************************************************/ /*******************************led****************************/csi_gpio_pin_t my_pin_led_red;csi_gpio_pin_t my_pin_led_green;csi_gpio_pin_t my_pin_led_blue; /*************************************************************/ #define adc_check_return(ret) do { if (ret != csi_ok) return -1; } while(0); static csi_adc_t adc; int main(void){ char j,k; int ret; uint32_t data; int x0,x1,y0,y1; //uint8_t p1[128][64]; /********************************light led*****************************/ board_yoc_init(); logd(tag, board_yoc_init() completed!); aos_msleep(1000); //by me oled_init(); //pa4 - blue pa7-red pa25 green csi_pin_set_mux(pa4, pin_func_gpio); csi_pin_set_mux(pa7, pin_func_gpio); csi_pin_set_mux(pa25, pin_func_gpio); csi_gpio_pin_init(&my_pin_led_blue, pa4); csi_gpio_pin_init(&my_pin_led_red, pa7); csi_gpio_pin_init(&my_pin_led_green, pa25); csi_gpio_pin_dir(&my_pin_led_green, gpio_direction_output); csi_gpio_pin_dir(&my_pin_led_red, gpio_direction_output); csi_gpio_pin_dir(&my_pin_led_blue, gpio_direction_output); csi_gpio_pin_write(&my_pin_led_blue, gpio_pin_high); csi_gpio_pin_write(&my_pin_led_red, gpio_pin_high); csi_gpio_pin_write(&my_pin_led_green, gpio_pin_high);/***************************************************************************/ /***********************************adc******************************/ csi_pin_set_mux(example_adc_channel0_pin, example_adc_channel0_pin_func); //editfind in filesfind in files 搜索“example_adc_channel0_pin”可得://g:c-skycdkcskypackch2601_evbv7.4.3includeoard_config.h有此字段: //#define example_adc_channel0_pin example_adc_ch0,再搜索: //example_adc_ch0,可得:#define example_adc_ch0 pa3、p18 //可见,本程序的adc输入引脚是:pa3 //pa3:j1:9-10脚,参见: //rvb2601开发板用户手册:37067137319852441601615475227781dm4cdsepey-音频dac、音频adc.pdf p8/19 ret = csi_adc_init(&adc, 0); adc_check_return(ret); csi_adc_continue_mode(&adc, true); adc_check_return(ret); //开启/关闭adc连续采样模式,false->禁止 //参见:adc · gitbook.pdf ret = csi_adc_freq_div(&adc, 128); if(ret == 0){ return -1; } /* configure sampling time */ ret = csi_adc_sampling_time(&adc, 2); adc_check_return(ret); /* enable channel */ ret = csi_adc_channel_enable(&adc, 0, true); adc_check_return(ret); /* trigger new conversion */ ret = csi_adc_start(&adc); adc_check_return(ret); // logd(tag, %s ,adc inited!, aos_get_app_version()); while(1) { /* read result */ data = csi_adc_read(&adc); printf(get adc result: %d, data);//在串口调试助手中显示 printf(the voltage is: %d mv, data*3300/4096); aos_msleep(500); /***********************************************************end of adc************************/ /*************************************oled***********************/ x0=50; x1=80; y0=63; y1=(4096-data)/3.3/20; for(j=y0;j>y0-y1;j--) { fill_ram(0x00); for(k=x0;k2800) { csi_gpio_pin_write(&my_pin_led_red, gpio_pin_low); //aos_msleep(2000); //acsi_gpio_pin_write(&my_pin_led_red, gpio_pin_high); } if(data=800)&&(data<=2800)) { csi_gpio_pin_write(&my_pin_led_green, gpio_pin_low); //aos_msleep(2000); //csi_gpio_pin_write(&my_pin_led_green, gpio_pin_high); } /********************************end of led***************************/ aos_msleep(5000); fill_ram(0x00); oled_reflesh(); } csi_adc_uninit(&adc); printf(csi_adc_uninited.); return 0;}
5.2 传感器数据
实测的传感器数据如下:
(1)土壤极端干燥时的电压值:2.99v
根据多次试验,当电压值为:2 .26v时,土壤就比较干燥,此时的data:2.26*4096/3300=2805。
(2)土壤湿度最适当时的电压值:1.50v
根据多次试验,当电压值为:0.65-2 .26v时,土壤湿度比较适当,此时的data:0.65*4096/3300到2805即:807~2805。
(3)土壤极端过湿时的电压值:0.56v
根据多次试验,当电压值为:0.65v时,土壤就过湿,此时的data:0.65*4096/3300=807
06 视频演示
https://pan.baidu.com/s/14e7pxorkclusf74bcm4bzw
提取码:jkdf
07 项目总结
花卉的浇水问题,对很多人来说是个难题。此款“花卉浇水指示器”将浇水问题,转化为土壤的干湿度问题,用传感器检测的数值,直观地指示花儿是否需要浇水,不需依仗经验,主观判断,值得推广。
差分桥式放大器
多元联动直击热点,2022深圳国际薄膜与胶带展聚焦四大关键词
NVIDIA MDL SDK可为各种渲染器提供出色的 MDL 支持
独立看门狗功能描述
影响侧蚀因素
关于花卉浇水指示器的实现过程
我国首创收发两用紫外同质集成光电子芯片
浅谈CANoe实现SOA仿真测试
Infineon TLE9879单片汽车3相马达驱动方案
华为Mate10什么时候上市?全面屏的华为Mate10和Mate10 Lite即将发布,最厉害也最贵华为手机,买吗?
javaweb和java有什么区别
长电科技解读芯片成品制造的“四个协同”
!!销售/回收HP33120A函数发生器HP33120A小兵
览邦WACH MAX-A90智能手表怎么样?有哪些优势与不足
没有证据表明华为设备不安全,菲律宾表态支持华为参与该国5G网络部署
谷仓海外仓AMR智慧仓亮相,揭秘物流机器人海外仓“打工”实况
方天圣华运用5G+AR元宇宙技术提出数字文旅建设与运营整体解决方案
三星限制Exynos芯片对外供货竟是高通“搞鬼”?
化工人员定位安全管理系统解决方案
反垄断被罚!阿里、阅文和丰巢做出回应