打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
给Phyphox增加位移传感器(1)

给Phyphox增加位移传感器(1)

做些准备工作,给Phyphox增加位移传感器,以便有多种方法实现运动学中的、离开实验室的实验。

VL6180X是一款TOF飞行时间传感器,测量原理是通过芯片上的一个光孔发出850nm的红外光,然后用时钟记下光从发出到从物体表面反射反射回来的时间,就测算出来了距离。VL6810X也能测量环境光和姿势。其量程为20cm左右,误差1mm。

VL6180X引脚说明:

(1)VIN即电源正,接Arduino/ESP32的5V或3V3,GND即电源负,接Arduino/ESP32的GND。

(2)2V8是从VL6810上输出的稳压2.8V,加在VL6810X电源输入3V3或5V时,VL6810X都会把它分出一个稳定的2.8V从这个引脚输出出来,以便他用。

(3) SDA和SCL,I2C通信引脚,ESP32板上分别接IO21和IO22,Arduino UNO上是A4和A5。

(4)GPIO用于告知VL6810X是否已就绪。就绪输出2.8V高电平,否则输出低电平。一般悬空不用,因为2.8V高电平ESP32和Arduino都不认识。

(5)SHDN用来控制VL6810X工作状态,平常时候VL6810X都是正常工作的,给SHDN低电平,VL6810X停止工作,给高电平,开始工作。一般悬空不用。

接线:

直接修改ADA水果库里的例子:

#include <phyphoxBle.h>
//使用VL6180X
#include <Wire.h>
#include "Adafruit_VL6180X.h"
Adafruit_VL6180X vl = Adafruit_VL6180X();
float fV = 0.00;
void setup()
{
  PhyphoxBLE::start("MxxBLE");
  PhyphoxBleExperiment plotVoltage;

  plotVoltage.setTitle("高精度位移传感器测距");
  plotVoltage.setCategory("阿璇实验创作集");
  plotVoltage.setDescription("北京市和平街第一中学,梅晓璇,使用VL6180X测微小距离,量程不大于20cm,精度1mm。");

  //View
  PhyphoxBleExperiment::View firstView;
  firstView.setLabel("MyView"); //Create a "view"

  //Graph
  PhyphoxBleExperiment::Graph firstGraph;
  firstGraph.setLabel("displacemet-time curve");
  firstGraph.setUnitX("s");
  firstGraph.setUnitY("mm");
  firstGraph.setLabelX("time");
  firstGraph.setLabelY("displacemet");

  firstGraph.setChannel(0, 1);

  firstView.addElement(firstGraph);
  plotVoltage.addView(firstView);
  PhyphoxBLE::addExperiment(plotVoltage);
  //以下可离开Phyphox使用串口调试
  Serial.begin(115200);
  // wait for serial port to open on native usb devices
  while (!Serial) {
    delay(1);
  }
  Serial.println("Adafruit VL6180x test!");
  if (! vl.begin()) {
    Serial.println("Failed to find sensor");
    while (1);
  }
  Serial.println("Sensor found!");
}

void loop()
{
  float lux = vl.readLux(VL6180X_ALS_GAIN_5);

  //Serial.print("Lux: "); Serial.println(lux);

  uint8_t range = vl.readRange();
  uint8_t status = vl.readRangeStatus();

  if (status == VL6180X_ERROR_NONE) {
    Serial.print("Range: "); Serial.println(range);
    fV = float(range);
  }
  else {
    fV = -1.00;
  }

  // Some error occurred, print it out!

  if  ((status >= VL6180X_ERROR_SYSERR_1) && (status <= VL6180X_ERROR_SYSERR_5)) {
    Serial.println("System error");
  }
  else if (status == VL6180X_ERROR_ECEFAIL) {
    Serial.println("ECE failure");
  }
  else if (status == VL6180X_ERROR_NOCONVERGE) {
    Serial.println("No convergence");
  }
  else if (status == VL6180X_ERROR_RANGEIGNORE) {
    Serial.println("Ignoring range");
  }
  else if (status == VL6180X_ERROR_SNR) {
    Serial.println("Signal/Noise error");
  }
  else if (status == VL6180X_ERROR_RAWUFLOW) {
    Serial.println("Raw reading underflow");
  }
  else if (status == VL6180X_ERROR_RAWOFLOW) {
    Serial.println("Raw reading overflow");
  }
  else if (status == VL6180X_ERROR_RANGEUFLOW) {
    Serial.println("Range reading underflow");
  }
  else if (status == VL6180X_ERROR_RANGEOFLOW) {
    Serial.println("Range reading overflow");
  }

  PhyphoxBLE::write(fV);
  delay(10);
  PhyphoxBLE::poll();
}

编译,通过蓝牙BLE上传到ESP32,开始实验。竖直的小板子即VL6810X。

被测物体,是一个小盒子:

通过细线悬挂两张卡片和一袋LED:

Phyphox捕获数据曲线。当超出20cm量程后,强行返回负的1mm,意思是该数据已无效。

把数据传入Excel,画图线、拟合函数曲线:

得加速度0.75米每二次方秒,挺象的。然额。。。为什么每一个时刻或极邻近某一个时刻,会同时返回3个测量值呢?????若是把这极相邻的3个时刻打掉两个,只留1个,看起来R方增大了,但凭什么这么做呢?????

------心存DREAM喜欢琢磨实验并自娱自乐的MIRACLE------

实验教学值得学习的去处:

  1.中学物理实验教学研讨

  2.学生自主创新实验

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
利用Phyphox和ESP32蓝牙做关于楞次定律的实验探究
基于arduino的气象站
Arduino传感器连载之温度测量篇 | OSZINE | 发现技术之美
分享一个整理并测试好用的MFRC522 RFID库
用BMP180显示气压和温度
普通Arduino控制GoPro全系列
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服