本帖最后由 古来夏 于 2024-11-20 11:53 编辑

【联盛德 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]下载到:

013754omddts7ltektkm11

从硬件原理图中,可知,v4,比较v3,提供了更多的电源和地引脚,但是减少了1个RESET引脚,增加了1组SPI引脚,减少了一组I2S引脚,另外把MCLK引脚引出了。同时增加了自动复位,以及串口RTS引脚连接了开发板的RESET引脚。串口部分之前是两枚Mircro-USB接口,v4使用CH342F芯片做了合并:

013754s2kaivninqasaa09

CH342是一颗USB总线的转接芯片,可以实现USB转两个异步串口。(v4将上层USB分别转到了W800的PB19/PB20和PB6/PB7)。

这是与之前不同的地方,相同的,w800_arduino_v4保持PIN to PIN与Arduino接口兼容。除了单独开发(其本身就含有丰富的外设)使用外,还可以支持作为Wi-Fi模块与Arduino接口主板进行对接。官方给出的对接参考:

013754ckhqdrqecoqrquqr

3、搭建开发环境

吸取星球和q群以及论坛各位大佬的经验,先把Arduino IDE版本降低为1.8.19,再进行下一步环境和项目库拉取。

013755ay86sk5lkcbqxj1k

我是在Windows Store商店直接下载的,也可以到链接[https://www.arduino.cc/en/software]下载:

013755ydg899gpt8eq8ed8

选择 文件-首选项:

013755kg6vj2gjjfmr8uad

在附加开发板管理器网站中,增加链接[http://dl.isme.fun/w80x_arduino/package_w80x_index.json]

013755igd5m25pmfmmmnn3

更新之后,选择工具-开发板-开发板管理器,

013755ivli58vvi856vffs

打开后其会按附加链接更新库,等待:

013755f5d7066924f1j2q6

更新完成后,就可以搜索开发板了,输入关键字“W80x“,可以看到输入“W80“时,就看到了,版本为[0.0.6],点击安装:

013756b2yxv8ihvi08giji

013756wcvzzpsuppivfpp8

013756o3d38798q3zyp3b3

选择工具-开发板-W80x Boards-W800,选择W800作为开发板开发:

013757ojcfqh9foc69o6s5

4、进行示例测试

选择文件-示例,可以看到W800相关的示例库,这里提供了一些示例代码参考,但可能不适配用户当前开发用的板,因此还需要进行一部分自行修改。为了测试w800_arduino_v4的基本状态,这里将计划驱动板载RGB灯以测试其状态。

先看到原理图部分:

013757hbftx1j2b3wh2648

板载的RGB分别接到:

PB0 --- PWM0 --- GREEN

PB1 --- PWM2 --- RED

PB2 --- PWM1 --- BLUE

013757pndnwcn99h4n0n9c

正在编译项目...

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 编译时出错。

因为路径中出现了空格或者中文,不支持,修改路径即可解决该问题。

013800vxq6axao7aa53oqa

013800tsse2fu272pu2ts9

连接好开发板之后,看开发板初始状态:

013800p5bgw60able1xnwl

在烧录之前,先获取以下开发板信息,获取之前,需要选择对应的端口,这里选择COM9

013801eldvb9z5ld4d9qpw

013801qa324p13aeca3xpq

上传完成,提示重启设备,按下板载重启按钮“RST”

013801ezz2128cqmgsss8v

稍微等待,等待上传完成

查看效果,由于动图放不上来,这里就多拍两张RGB的图片效果。

013803jbm4mjsbyc4o0bow

该例代码:

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、进行评估任务

013803cvegefew7x3slkv1

在管脚说明表中,可以看到PA_1和PA_4可以作为ADC引脚,组装flex传感器及其调理电路,将其AO引脚连接到w800_arduino_v4的PA1上,VCC接3V3供电,GND接GND:

013803q82ispjss8yl5jjj

完整例程:

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);

}

打开串口监视器:

013806um3zlrmvh130mdoo

013806eguywce4uey39ey4

可以看到当传感器发生弯曲,对应的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);

}

013806j0bw30b6czkw06qh

Ok了,接下来就是拓展5个,完成手套,然后配合w80x的无线功能,传输数据,期待完善一下对Arduino IDE的支持,特别是WIFI和蓝牙部分,接下来准备研究一下无线数据传输部分,让整体可以脱离数据线传输数据。