【Arduino】TOF250(IIC)基于UNO板的运用

7 篇文章 0 订阅
2 篇文章 0 订阅


一、前言

此片文章主要介绍如果通过Arduino UNO开发板来读取TOF250(IIC接口)数据的教程
提示:以下的案例仅供参考学习使用


二、硬件准备

  • TOF250 :测距传感器

  • Arduino UNO:Arduino公司下的开发板

详细资料可以参考:Arduino 官网

  • 电脑 :Windows 7/10/11
  • USB线:USB-B接头连接线(一般UNO板带有)
    在这里插入图片描述
  • 杜邦线:一头公一头母(若干)
    在这里插入图片描述
  • TOF250尾线:购买时自带有一根尾线
    在这里插入图片描述

二、软件准备

  • Arduino IDE:参考官网下载安装教程

三、硬件接线图

在这里插入图片描述


四、例程源码

#include <Wire.h>        //包含IIC库

/**************************************************************  
//技术论坛:https://blog.csdn.net/HCJ_Application/article/details/124058266
//修改日期:2022/4/9
//版本:V1.0
//深圳市弘成基科技有限公司
***************************************************************/

/**************************************************************
*TOF250 IIC通讯:
*地址     : 0x52(82)
*距离高8位 : 0x00
*距离低8位 : 0x01
****************************************************************/  
#define REG_00H 0x00       
#define REG_01L 0x00       
int TOF250_Address = 82;

unsigned int TOF250_Dist = 0;   //定义存放TOF250距离值的变量

void setup() {
  Wire.begin();          // 加入IIC总线协议(IIC主机方式)
  Serial.begin(115200);  // 开启硬件串口,用来打印TOF250数据
  delay(100);
}

void loop() {

  Get_LidarDatafromIIC(TOF250_Address);
  Serial_PrintResult();
  delay(100);
}

void Get_LidarDatafromIIC(int address) {
  char i = 0;
  byte rx_buf[2] = {0};
  Wire.beginTransmission(address);    
  Wire.write(REG_00H);               //向TOF250 00H地址开始要求获取数据
  Wire.endTransmission();             
  Wire.requestFrom(address, 2);      //读取2个byte长度的数据

  while ( Wire.available())
  {
    rx_buf[i] = Wire.read();         //每次接收一个byte的数据
    i++;
    if (i >= 2)
    {
      i = 0;
      TOF250_Dist = rx_buf[0] * 256 + rx_buf[1]; //高8位数据
    }
  }
}

//定义使用硬件串口打印结果的格式
void Serial_PrintResult()
{
  Serial.print("距离 = ");
  Serial.print(TOF250_Dist);
  Serial.println(" CM");
}

五、烧录说明

请添加图片描述


六、结果输出

通过Arduino IDE自带的串口软件打印结果

提示:注意选择对应的波特率,此次测试使用波特率为115200
请添加图片描述

回复多台组网需求(未经测试,仅参考)

#include <Wire.h>        //包含IIC库

/**************************************************************  
//技术论坛:https://blog.csdn.net/HCJ_Application/article/details/124058266
//修改日期:2022/7/13
//版本:V1.0
//深圳市弘成基科技有限公司
***************************************************************/

/**************************************************************
*TOF250 IIC通讯:
*地址     : 0x52(82)
*距离高8位 : 0x00
*距离低8位 : 0x01
****************************************************************/  
#define REG_00H 0x00       
#define REG_01L 0x00

typedef struct {
  int Address;
  unsigned int Dist;
} TOF;

TOF TOF250_1 = {82,0};
TOF TOF250_2 = {83,0};


void setup() {
  Wire.begin();          // 加入IIC总线协议(IIC主机方式)
  Serial.begin(115200);  // 开启硬件串口,用来打印TOF250数据
  delay(100);
}

void loop() {

  Get_LidarDatafromIIC(TOF250_1.Address);
  Serial.print("TOF_1距离 = ");
  Serial_PrintResult(TOF250_1.Dist);
  Serial.println("CM");
  delay(100);
  Get_LidarDatafromIIC(TOF250_2.Address);
  Serial.print("TOF_2距离 = ");
  Serial_PrintResult(TOF250_2.Dist);
  Serial.println("CM");
  delay(100);
}

void Get_LidarDatafromIIC(TOF* TOF250) {
  char i = 0;
  byte rx_buf[2] = {0};
  Wire.beginTransmission(TOF250->Address);    
  Wire.write(REG_00H);               //向TOF250 00H地址开始要求获取数据
  Wire.endTransmission();             
  Wire.requestFrom(TOF250->Address, 2);      //读取2个byte长度的数据

  while ( Wire.available())
  {
    rx_buf[i] = Wire.read();         //每次接收一个byte的数据
    i++;
    if (i >= 2)
    {
      i = 0;
      TOF250->Dist = rx_buf[0] * 256 + rx_buf[1]; //高8位数据
    }
  }
}

//定义使用硬件串口打印结果的格式
void Serial_PrintResult(TOF* TOF250)
{
 // Serial.print("距离 = ");
  Serial.print(TOF250->Dist);
  //Serial.println(" CM");
}
TOF200C是一种飞行时间(ToF)激光测距模块,它采用了VL53L0X芯片,可以提供精确的距离测量。下面是使用TOF200C的教程: 1. 硬件准备: - Arduino开发:可以使用Windows 7/10/11操作系统的电脑。 - USB线:使用USB-B接头连接线,一般UNO带有这种接头。 - 杜邦线:准备一些一头公一头母的杜邦线。 - TOF200C尾线:购买时会自带一根尾线。 2. 软件准备: - Arduino IDE:参考Arduino官网下载安装教程,安装好Arduino IDE。 3. 硬件接线: 根据硬件接线图将TOF200C模块连接到Arduino开发上。 4. 使用方法: - 准备:确保已经烧录了最新的固件到开发上,并连接好TOF200C模块。 - 运行:修改示例代码中的配置部分,将激光瞄头对准测量点后,运行代码,终端将打印出距离信息。 示例代码如下: ``` #include <Wire.h> #include <VL53L0X.h> VL53L0X tof; void setup() { Wire.begin(); tof.init(); tof.setTimeout(500); Serial.begin(9600); Serial.println("TOF200C Distance Measurement"); } void loop() { if (tof.timeoutOccurred()) { Serial.print("Timeout!"); } uint16_t distance = tof.readRangeSingleMillimeters(); if (distance > 2000) { Serial.print("Out of range"); } else { Serial.print(distance); } delay(100); } ``` 这段代码的主要步骤是: - 创建TOF对象并初始化。 - 读取距离,如果读取到的距离大于2000mm,则显示"Out of range",否则显示实际距离。 希望这个教程对您有帮助!\[1\]\[2\] #### 引用[.reference_title] - *1* [【ArduinoTOF250IIC)基于UNO运用](https://blog.csdn.net/HCJ_Application/article/details/124058324)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【新手基础教程】SP-MOD之 TOF测距的使用](https://blog.csdn.net/xuguoliang757/article/details/119419008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值