关于花卉浇水指示器的实现过程

开发者 张同学 通过外接湿度传感器,利用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芯片对外供货竟是高通“搞鬼”?
化工人员定位安全管理系统解决方案
反垄断被罚!阿里、阅文和丰巢做出回应