【联盛德 W800 Arduino开发板】+ADC采集flex弯曲传感数据传输
1、取到板子第一步依然是简单的硬件检查,观察表面是否有焊接不良,使用万用表测试电源输入是否存在短路(3V3-GND)与(5V-GND)。测试没有明显短路时,菜可以使用电脑供电口对开发板进行供电使用,否则可能会对电脑等设备USB口造成严重影响。
2、获取开发资料,在WM IoT SDK编程指南中,可以获取到硬件软件相关的指引,其中硬件原理图是比较必须的资料,可以从链接[https://doc.winnermicro.net/download/board/w800_arduino_board_v4_20240826.zip]下载到:
从硬件原理图中,可知,v4,比较v3,提供了更多的电源和地引脚,但是减少了1个RESET引脚,增加了1组SPI引脚,减少了一组I2S引脚,另外把MCLK引脚引出了。同时增加了自动复位,以及串口RTS引脚连接了开发板的RESET引脚。串口部分之前是两枚Mircro-USB接口,v4使用CH342F芯片做了合并:
CH342是一颗USB总线的转接芯片,可以实现USB转两个异步串口。(v4将上层USB分别转到了W800的PB19/PB20和PB6/PB7)。
这是与之前不同的地方,相同的,w800_arduino_v4保持PIN to PIN与Arduino接口兼容。除了单独开发(其本身就含有丰富的外设)使用外,还可以支持作为Wi-Fi模块与Arduino接口主板进行对接。官方给出的对接参考:
3、搭建开发环境
吸取星球和q群以及论坛各位大佬的经验,先把Arduino IDE版本降低为1.8.19,再进行下一步环境和项目库拉取。
我是在Windows Store商店直接下载的,也可以到链接[https://www.arduino.cc/en/software]下载:
选择 文件-首选项:
在附加开发板管理器网站中,增加链接[http://dl.isme.fun/w80x_arduino/package_w80x_index.json]
更新之后,选择工具-开发板-开发板管理器,
打开后其会按附加链接更新库,等待:
更新完成后,就可以搜索开发板了,输入关键字“W80x“,可以看到输入“W80“时,就看到了,版本为[0.0.6],点击安装:
选择工具-开发板-W80x Boards-W800,选择W800作为开发板开发:
4、进行示例测试
选择文件-示例,可以看到W800相关的示例库,这里提供了一些示例代码参考,但可能不适配用户当前开发用的板,因此还需要进行一部分自行修改。为了测试w800_arduino_v4的基本状态,这里将计划驱动板载RGB灯以测试其状态。
先看到原理图部分:
板载的RGB分别接到:
PB0 --- PWM0 --- GREEN
PB1 --- PWM2 --- RED
PB2 --- PWM1 --- BLUE
正在编译项目...
csky-elfabiv2-gcc: error: C:\Users\CarbonSens: No such file or directory
csky-elfabiv2-gcc: error: Tech\Documents\ArduinoData\packages\w80x_duino\hardware\XT804\0.0.6\cores\w806/lib/libdsp.a: No such file or directory
csky-elfabiv2-gcc: error: Tech\Documents\ArduinoData\packages\w80x_duino\hardware\XT804\0.0.6\cores\w806/ld/gcc_csky.ld: No such file or directory
exit status 1
为开发板 W800 编译时出错。
因为路径中出现了空格或者中文,不支持,修改路径即可解决该问题。
连接好开发板之后,看开发板初始状态:
在烧录之前,先获取以下开发板信息,获取之前,需要选择对应的端口,这里选择COM9
上传完成,提示重启设备,按下板载重启按钮“RST”
稍微等待,等待上传完成
查看效果,由于动图放不上来,这里就多拍两张RGB的图片效果。
该例代码:
void setup() {
// put your setup code here, to run once:
pinMode(PB0, PWM_OUT);
pinMode(PB1, PWM_OUT);
pinMode(PB2, PWM_OUT);
}
void setColor(int red,int green,int blue)
{
analogWrite(PB0,green);
analogWrite(PB1,red);
analogWrite(PB2,blue);
}
void loop() {
// put your main code here, to run repeatedly:
int i;
for(i=0;i<256;i++)
{
setColor(i,0,0);
delay(4);
}
delay(500); //turn the RGB LED red smoth
for(i=0;i<256;i++)
{
setColor(0,i,0);
delay(4);
}
delay(500); //turn the RGB LED green smoth
for(i=0;i<256;i++)
{
setColor(0,0,i);
delay(4);
}
delay(100); //turn the RGB LED blue smoth
}
【感谢@小恶魔owo提供的部分RGB代码】
5、进行评估任务
在管脚说明表中,可以看到PA_1和PA_4可以作为ADC引脚,组装flex传感器及其调理电路,将其AO引脚连接到w800_arduino_v4的PA1上,VCC接3V3供电,GND接GND:
完整例程:
void setup()
{
pinMode(A1,ANALOG_INPUT); // or pinMode(PA2,ANALOG_INPUT);
Serial.begin(115200);
}
void loop()
{
float volt = 0;
volt = analogRead(A1);
Serial.printf("ADC millivolt [%f]\r\n", volt);
delay (100);
}
打开串口监视器:
可以看到当传感器发生弯曲,对应的ADC值正常变化,接着根据传感器和调理电路的特性,利用map函数换算角度,完整代码:
#include "Arduino.h"
const float VCC =3.3; // 模块供电电压,ADC参考电压为V
const float R_DIV =100000.0; // 分压电阻为100KΩ
const float STRAIGHT_RESISTANCE =36363.62; // 平直时的电阻值
const float BEND_RESISTANCE =53846.0; // 180度弯曲时的电阻值
void setup()
{
pinMode(A1,ANALOG_INPUT); // or pinMode(PA2,ANALOG_INPUT);
Serial.begin(115200);
}
void loop()
{
float flexADC = analogRead(A1);
float flexV=flexADC/1000;
float flexR= R_DIV * (VCC / flexV-1.0);
Serial.println("Voltage: "+String(flexV) +" V");
Serial.println("Resistance: "+String(flexR) +" ohms");
float angle = map(flexR, STRAIGHT_RESISTANCE, BEND_RESISTANCE,0, 180.0);
Serial.println("Bend: "+String(angle) +" degrees");
Serial.println();
delay(500);
}
Ok了,接下来就是拓展5个,完成手套,然后配合w80x的无线功能,传输数据,期待完善一下对Arduino IDE的支持,特别是WIFI和蓝牙部分,接下来准备研究一下无线数据传输部分,让整体可以脱离数据线传输数据。