本帖最后由 云天 于 2021-8-14 19:00 编辑
【Arduino环境配置】
通过wiki文档进行配置https://wiki.dfrobot.com.cn/_SKU ... rd_ESP32_E#target_7
【超声波传感器】
URM09 Ultrasonic Sensor Gravity Analog V1.0 超声波传感器
这是一款开放式双探头超声波测距模块,采用Gravity标准PH2.0-3P立式贴片座接口,输出为模拟电压,兼容arduino、树莓派等各种3.3V或5V逻辑电平的主控板。 该模块自带温度补偿,避免高温或低温环境对测量结果产生影响。模拟电压值输出,ADC简单转化即可直接读取距离值,简化操作步骤,降低实验难度。经测试,平整墙面的有效测距量程为2–500cm,分辨率为1cm,误差约为±1%。
由于esp32芯片模拟输入精度和电压问题,esp32芯片相关主控板(firebeetle、掌控板)无法正常作为精确测距使用。
友情提示:由于esp32芯片模拟输入精度和电压问题,esp32芯片相关主控板(firebeetle、掌控板)无法正常作为精确测距使用(需搭配AD转换模块DFR0553才可正常使用)。
【16位AD转换模块】
DFRobot I2C ADS1115 16位AD转换模块可对模拟量信号进行精确的采集与转换,通过这款AD模块,树莓派主控板就能非常方便的使用种类丰富的Gravity系列模拟量传感器,测量各类信号,感知这个世界。
【DFRobot_ADS1115库】
通过wiki文档进行配置https://wiki.dfrobot.com.cn/_SKU_DFR0553_I2C_16-Bit_ADC_Module
【程序代码】
-
- #include <Wire.h>
- #include <DFRobot_ADS1115.h>
-
- DFRobot_ADS1115 ads(&Wire);
-
- void setup(void)
- {
- Serial.begin(115200);
- ads.setAddr_ADS1115(ADS1115_IIC_ADDRESS0); // 0x48
- ads.setGain(eGAIN_TWOTHIRDS); // 2/3x gain
- ads.setMode(eMODE_SINGLE); // single-shot mode
- ads.setRate(eRATE_128); // 128SPS (default)
- ads.setOSMode(eOSMODE_SINGLE); // Set to start a single-conversion
- ads.init();
- }
-
- void loop(void)
- {
- if (ads.checkADS1115())
- {
- int16_t adc0, adc1, adc2, adc3;
- adc0 = ads.readVoltage(0);
- Serial.print("A0:");
- Serial.print(adc0*550/3284);//3.3V=3300mv,(空载:3284)最大量程500cm,模块测距极值为550cm(比有效最大量程值略大)
- Serial.println("cm, ");
-
- }
- else
- {
- Serial.println("ADS1115 Disconnected!");
- }
-
- delay(1000);
- }
复制代码
【距离控灯】
-
-
- #include <Wire.h>
- #include <DFRobot_ADS1115.h>
-
- DFRobot_ADS1115 ads(&Wire);
-
- void setup(void)
- {
- Serial.begin(115200);
- ads.setAddr_ADS1115(ADS1115_IIC_ADDRESS0); // 0x48
- ads.setGain(eGAIN_TWOTHIRDS); // 2/3x gain
- ads.setMode(eMODE_SINGLE); // single-shot mode
- ads.setRate(eRATE_128); // 128SPS (default)
- ads.setOSMode(eOSMODE_SINGLE); // Set to start a single-conversion
- ads.init();
- pinMode(16,OUTPUT);
- }
-
- void loop(void)
- {
- if (ads.checkADS1115())
- {
- int16_t adc0;
- int distance;
- adc0 = ads.readVoltage(0);
- distance=int(adc0*550/3284);//3.3V=3300mv,(空载:3284)最大量程500cm,模块测距极值为550cm(比有效最大量程值略大)
- if (distance<15){
- digitalWrite(16,HIGH);
- }
- else{
- digitalWrite(16,LOW);
- }
-
- Serial.print(distance);
- Serial.println("cm, ");
-
- }
- else
- {
- Serial.println("ADS1115 Disconnected!");
- }
-
- delay(500);
- }
复制代码
【演示视频】
|