This commit is contained in:
LiHuashen
2019-05-06 20:19:20 +08:00
parent 6f82d1a142
commit 7b80107dd4
2 changed files with 62 additions and 54 deletions
+41 -29
View File
@@ -1,82 +1,94 @@
# TRACE - 巡线Unit {docsify-ignore-all}
# Unit TRACE {docsify-ignore-all}
<img src="assets/img/product_pics/unit/M5GO_Unit_trace_01.png" width="30%" height="30%">
<img src="assets/img/product_pics/unit/unit_trace_01.png" width="30%" height="30%">
***
:memo:**[描述](#描述)**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:octocat:**[例程](#例程)**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:electric_plug:**[原理图](#原理图)**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;🛒**[购买链接](https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-1172588106.66.159c425eoqBTTY&id=577874535012)**
:memo:**[描述](#描述)**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:octocat:**[例程](#例程)**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:electric_plug:**[原理图](#原理图)**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;🛒**[购买链接](https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.54091debxnuOMz&ft=t&id=587199991600)**
## 描述
**<mark>TRACE</mark>** 是一款内置MEGA328芯片控制的摇杆模块,可以输出X-Y两个方向的摇杆偏移量,可以判断Z方向是否按下的。
**TRACE** 是一款红外巡线 Unit.内置4组红外发光LED和红外敏感光电晶体管,机器人在进行移动的同时能够实时的检测地面背景颜色,并其转化为数字信号输出到微控制器.通过程序进行路线矫正,实现巡线功能.
内部电路里,摇杆的X方向与MEGA328的A0管脚相连,Y方向与MEGA328的A1管脚相连,Z方向与MEGA的A2管脚相连。
该 Unit 与 M5Core 通过 Grove A 接口通信,I2C 地址为**0x5A**.
Joystick Unit同样也是与M5Core相连之后,通过PORT A(I2C)控制,其I2C地址是0x52。M5Core只需要读取0x52的I2C地址数据即可知道摇杆的偏移情况。
<img src="assets/img/product_pics/unit/unit_trace_02.png" width="30%" height="30%">
## 特性
## 产品特性
- X, Y方向的范围10~250, Z方向(0: 未按下, 1: 按下)
- GROVE接口,支持[UiFlow](http://flow.m5stack.com)编程,[Arduino](http://www.arduino.cc)编程
- Unit内置两个Lego插件孔,方便与Lego件结合
- 工作范围:反射面距光电面小于11mm
- GROVE 接口, 支持 [UIFlow](http://flow.m5stack.com)[Arduino](http://www.arduino.cc)
- 2x LEGO 兼容孔
## 包含
- 1x TRACE Unit
- 1x Grove 线
## 应用
- 巡线机器人
## 相关链接
- **[官方频道视频](https://i.youku.com/i/UNjE1ODA2MzE0OA==?spm=a2hzp.8253869.0.0)**
- **[官方论坛](http://forum.m5stack.com/)**
- **[MEGA328 内部固件](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/TRACE/firmware_328p)**
## 例程
### 1. Arduino IDE
*以下仅为用法示意,并不完整。如果需要完整例程请点击[这里](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/JOYSTICK/Arduino)。*
*以下代码仅为片段,如需获取完整代码, [请点击此处.](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/TRACE/Arduino)。*
```arduino
#include <M5Stack.h>
#include "Wire.h"
#define JOY_ADDR 0x52
#define TRACE_ADDR 0x5a
// declaration
uint8_t x_data, y_data, button_data;
char data[100];
#define VALUE_SPLIT
uint8_t value;
int SensorArray[4] = {0};
// initialization
M5.begin();
M5.Lcd.clear();
dacWrite(25, 0);//disable the speak noise
Wire.begin(21, 22, 400000);
m5.begin();
Serial.begin(115200);
Wire.begin();
// read data
Wire.requestFrom(JOY_ADDR, 3);
if (Wire.available()) {
x_data = Wire.read();// X(range: 10~250)
y_data = Wire.read();// Y(range: 10~250)
button_data = Wire.read();// Z(0: released 1: pressed)
sprintf(data, "x:%d y:%d button:%d\n", x_data, y_data, button_data);
Wire.beginTransmission(TRACE_ADDR);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(TRACE_ADDR,1);
while(Wire.available()){
value = Wire.read();
}
SensorArray[3] = (value&0x08)>>3;
SensorArray[2] = (value&0x04)>>2;
SensorArray[1] = (value&0x02)>>1;
SensorArray[0] = (value&0x01)>>0;
```
<img src="assets/img/product_pics/unit/unit_trace_04.png">
### 2. UIFlow
*具体例程请点击[这里](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/JOYSTICK/UIFlow)。*
*以下代码仅为片段,如需获取完整代码, [请点击此处.](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/TRACE/UIFlow)。*
<img src="assets/img/product_pics/unit/unit_example/JOYSTICK/example_unit_joystick_03.png">
<img src="assets/img/product_pics/unit/unit_example/TRACE/example_unit_trace_01.png">
## 原理图
<img src="assets/img/product_pics/unit/joystick_sch.png">
<img src="assets/img/product_pics/unit/trace_sch.png">
### 管脚映射
<table>
<tr><td>M5Core(GROVE接口A)</td><td>GPIO22</td><td>GPIO21</td><td>5V</td><td>GND</td></tr>
<tr><td>摇杆Unit</td><td>SCL</td><td>SDA</td><td>5V</td><td>GND</td></tr>
<tr><td>M5Core(GROVE A)</td><td>GPIO22</td><td>GPIO21</td><td>5V</td><td>GND</td></tr>
<tr><td>TRACE Unit</td><td>SCL</td><td>SDA</td><td>5V</td><td>GND</td></tr>
</table>
+21 -25
View File
@@ -8,25 +8,21 @@
## 描述
**<mark>WEIGHT</mark>** 是一款集成了专用于计重秤设计的ADC芯片 **HX711** 的计重 Unit。
**WEIGHT** 是一款计重 Unit.集成专为高精度电子秤而设计的24位A/D转换器芯片**HX711**.芯片激励电压与GROVE口电压一致为+5V,施加的压力越大,对应输出的电压值就越大(输出电压范围0 ~ 5mV)HX711有两个输入通道A,B.在本设计中使用了通道A,与通道B相比,通道A具有可编程信号放大功能.
* 因为 Unit 接的 GROVE 口,所以相对 Unit 里的 HX711 来说,激励电压 (Positive Supply Voltage) 是 +5V,信号输出给M5Core的电压范围是 0 ~ 5mV,施加的压力越大,对应输出的电压值越大。
* HX711 有两个输入通道A, B。相比通道 B,通道A具有可编程信号放大倍数,该 Unit 的电路设计中,使用了通道A,所以这个Unit具有可编程的放大功能。
该 unit 一端连接压力传感器,另一端通过 GROVE 线连接 M5Core,下图是连接示意
将 Unit 的一端连接到压力传感器、另一端则连接到M5Core.
<img src="assets/img/product_pics/unit/unit_weight_04.png">
<img src="assets/img/product_pics/unit/unit_weight_03.png">
## 特性
## 产品特性
- 可编程放大倍数32, 64, 128
- HX711内部ADC精度24位
- Unit输出电压范围0 ~ 5mV
- GROVE 接口支持 [UIFlow](http://flow.m5stack.com) 编程,[Arduino](http://www.arduino.cc) 编程
- Unit 内置两个 Lego 插件孔,方便与 Lego 件结合
- 可编程放大倍数: 32, 64, 128
- HX711内部ADC精度: 24 bits
- 输出电压范围: 0 ~ 5mV
- GROVE 接口, 支持 [UIFlow](http://flow.m5stack.com) and [Arduino](http://www.arduino.cc)
- 2x LEGO 兼容孔
## 包含
@@ -50,9 +46,9 @@
### 1. Arduino IDE
本例程使用10Kg量程的传感器。(单位:克)
该案例使用10Kg量程的传感器.(单位:克)
*如果需要完整例程请点击[这里](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/WEIGHT/Arduino/weight)。*
*以下代码仅为片段,如需获取完整代码, [请点击此处.](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/WEIGHT/Arduino/weight)。*
```arduino
/*
@@ -99,9 +95,9 @@ void loop(){
### 2. UIFlow
每次下载程序后,需要在不放置被测物体到电子称上的情况下,按下按键A,来零点校验。然后再放被测量物体上去,屏幕上会显示物体重量(单位克)
每次下载程序后,需要先按下按键A进行校准.然后放置测量对象进行测量,在M5Core的屏幕上会显示重量.(单位:克)
*具体例程请点击[这里](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/WEIGHT/UIFlow)。*
*以下代码仅为片段,如需获取完整代码, [请点击此处.](https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/WEIGHT/UIFlow)。*
<img src="assets/img/product_pics/unit/unit_example/WEIGHT/example_unit_weight_01.png">
@@ -111,23 +107,23 @@ void loop(){
### 管脚映射
**如果WEIGHTGROVE A**
**WEIGHT 连接到 GROVE A**
<table>
<tr><td>M5Core(GROVE接口A)</td><td>GPIO22</td><td>GPIO21</td><td>5V</td><td>GND</td></tr>
<tr><td>WEIGHT Unit</td><td>数据引脚 DAT</td><td>时钟引脚 CLK</td><td>5V</td><td>GND</td></tr>
<tr><td>M5Core(GROVE A)</td><td>GPIO22</td><td>GPIO21</td><td>5V</td><td>GND</td></tr>
<tr><td>WEIGHT Unit</td><td>DATA Pin (DAT)</td><td>CLOCK Pin (CLK)</td><td>5V</td><td>GND</td></tr>
</table>
**如果WEIGHTGROVE B**
**WEIGHT 连接到 GROVE B**
<table>
<tr><td>M5Core(GROVE接口B)</td><td>GPIO36</td><td>GPIO26</td><td>5V</td><td>GND</td></tr>
<tr><td>WEIGHT Unit</td><td>数据引脚 DAT</td><td>时钟引脚 CLK</td><td>5V</td><td>GND</td></tr>
<tr><td>M5Core(GROVE B)</td><td>GPIO36</td><td>GPIO26</td><td>5V</td><td>GND</td></tr>
<tr><td>WEIGHT Unit</td><td>DATA Pin (DAT)</td><td>CLOCK Pin (CLK)</td><td>5V</td><td>GND</td></tr>
</table>
**如果WEIGHTGROVE C**
**WEIGHT 连接到 GROVE C**
<table>
<tr><td>M5Core(GROVE接口C)</td><td>GPIO16</td><td>GPIO17</td><td>5V</td><td>GND</td></tr>
<tr><td>WEIGHT Unit</td><td>数据引脚 DAT</td><td>时钟引脚 CLK</td><td>5V</td><td>GND</td></tr>
<tr><td>M5Core(GROVE C)</td><td>GPIO16</td><td>GPIO17</td><td>5V</td><td>GND</td></tr>
<tr><td>WEIGHT Unit</td><td>DATA Pin (DAT)</td><td>CLOCK Pin (CLK)</td><td>5V</td><td>GND</td></tr>
</table>