亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用 TinyML 确定植物健​​康

组件和用品

Arduino Nano 33 BLE Sense
× 1
Digilent 步进电机
× 1
Theremino 驱动器 DRV8825 用于 Theremino 系统的步进电机
× 1

必要的工具和机器

3D 打印机(通用)
烙铁(通用)

应用和在线服务

微软 VS 代码
Arduino IDE
Edge Impulse Studio

关于这个项目

前提

就像人类一样,植物也会生病。就像您可能会因皮肤感染而出现皮疹一样,植物的叶子可能会因真菌或其他病原体而变黄和/或出现斑点。因此,通过利用机器学习的力量,可以扫描颜色,然后将其用于训练可以检测叶子颜色何时关闭的模型。

硬件

该项目的核心是 Arduino Nano 33 BLE Sense,选择它有几个原因。首先,它拥有丰富的强大传感器,包括 9DoF IMU、APDS-9960(颜色、手势、接近度和亮度)、麦克风和温度/湿度/压力传感器组合。为了在植物叶子周围移动电路板并进行测量,一对步进电机与一对 DRV8825 驱动板配合使用。

设置 TinyML

对于此项目,为 Arduino Nano 33 BLE Sense on Edge Impulse 列出的内置传感器将不起作用,因为仅列出了加速器和麦克风。这意味着必须使用数据转发器而不是串行守护程序。首先,我创建了一个新项目并将其命名。接下来,我通过安装 Node.js 和 NPM 来安装 Edge Impulse CLI,然后运行 ​​npm install -g edge-impulse-cli .如果找不到,您可能需要将其安装路径添加到 PATH 环境变量中。接下来,运行 edge-impulse-data-forwarder 并确保它有效,然后使用 Ctrl+C 退出。

阅读颜色

APDS-9960 通过从表面反射红外光并读取未被材料吸收的波长来读取颜色。要与传感器通信,最好安装 Arduino APDS9960 库,它可以访问几个有用的功能。代码中先初始化APDS-9960,然后程序进入循环功能。在那里,它一直等到有颜色数据。如果读数可用,则使用 APDS.readColor() 读取颜色 以及与表面的接近程度。每个 RGB 分量都从 0-2^16-1 数字转换为其值与总和的比率。

扫描仪

扫描叶子的颜色是通过在两个轴上移动一个装置来通过板载 APDS-9960 下方叶子的不同位置来完成的。每个轴都通过以顺时针或逆时针运动旋转导螺杆来移动,从而沿任一方向平移块。整个系统是在 Fusion 360 中设计的,以下是设计的一些渲染图:

X 轴位于 Y 轴的顶部,让顶部块在两个轴上移动。 Y 轴上有一个额外的 V 轮,用于支撑步进电机的重量。零件使用 PLA 塑料打印,填充量约为 45%。

收集数据

当系统第一次启动时,步进电机不知道它们在哪里,所以两个轴一步一步地移动到原点,直到它们碰到限位开关。接下来,APDS-9960 被初始化。有一个边界框,它被定义为包含一个框的对角的两个二元素数组。在这两个位置之间随机选择一个点,然后步进器运行到该位置,同时读取两者之间的颜色。

处理和发送颜色信息

使用 APDS.readColor() 读取颜色 , 就像之前提到的。计算总和后,计算一个百分比,然后通过调用 Serial.printf() 通过 USB 发送 方法。值以逗号分隔,每个读数以换行符分隔。当数据转发器程序接收到数据时,它会作为带有给定标签(健康或不健康)的训练数据发送到 Edge Impulse 云项目。

训练模型

在收集了所有训练数据后,是时候制作一个模型来区分健康和不健康的叶子了。我使用了由三轴时间序列、频谱分析块和 Keras 块组成的脉冲。您可以在下面看到我如何从数据中生成特征的屏幕截图:

测试

为了测试我的新模型,我收集了一些新的测试数据,这次是一片不健康的叶子。模型的准确率在63%左右,经过一些测试特征发送后,大部分时间都能正确分类叶子。

可以通过添加更多训练数据和减慢训练速度来提高这种准确性。

代码

  • leafReader.ino
  • pinDefs.h
leafReader.inoC/C++
#include #include #include #include "pinDefs.h"int r, g, b, c, p;float sum;AccelStepper xStepper(AccelStepper::DRIVER, STEPPER_1_STEP, STEPPER_1_DIR);AccelStepper yStepper(AccelStepper::DRIVER, STEPPER_2_STEP, STEPPER_2_DIR);MultiStepper steppers;//将在边界框内随机选择一个位置const long boundingBox[2][2] ={{0, 0 }, {40, 40}};void setup(){ Serial.begin(115200);而(!串行); if(!APDS.begin()) { Serial.println("无法初始化 APDS9960");同时(1); } pinMode(X_AXIS_HOMING_SW, INPUT_PULLUP); pinMode(Y_AXIS_HOMING_SW, INPUT_PULLUP); //Serial.println(digitalRead(X_AXIS_HOMING_SW) + digitalRead(Y_AXIS_HOMING_SW)); xStepper.setPinsInverted(X_AXIS_DIR); yStepper.setPinsInverted(Y_AXIS_DIR); xStepper.setMaxSpeed(150); yStepper.setMaxSpeed(150); steppers.addStepper(xStepper); steppers.addStepper(yStepper); homeMotors();}void loop(){ long randomPos[2]; randomPos[0] =random(boundingBox[0][0], boundingBox[1][0]) * STEPS_PER_MM; randomPos[1] =random(boundingBox[0][1], boundingBox[1][1]) * STEPS_PER_MM; steppers.moveTo(randomPos); while(steppers.run()) { if(!APDS.colorAvailable() || !APDS.proximityAvailable()){} else { APDS.readColor(r, g, b, c);总和 =r + g + b; p =APDS.readProximity(); if(!p &&c> 10 &&sum>=0) { float rr =r / sum, gr =g / sum, br =b / sum; Serial.printf("%1.3f,%1.3f,%1.3f\n", rr, gr, br); } } }}void homeMotors(){ // home x //Serial.println("Now homing x"); while(digitalRead(X_AXIS_HOMING_SW)) xStepper.move(-1); // home y //Serial.println("Now home y"); while(digitalRead(Y_AXIS_HOMING_SW)) yStepper.move(-1); xStepper.setCurrentPosition(0); yStepper.setCurrentPosition(0);}
pinDefs.hC/C++
#define STEPPER_1_STEP 2#define STEPPER_1_DIR 3#define STEPPER_2_STEP 4#define STEPPER_2_DIR 5#define X_AXIS_HOMING_SW 6#define Y_AXIS_HOMING_SW 7// true if reverse #define X_AXIS_DIR false #define MIEPS1EPS_100000000000000000发射

定制零件和外壳

零件到 3D 打印
thingiverse.com 上的 CAD 文件

示意图


制造工艺

  1. 使用 K30 传感器监测二氧化碳
  2. 聋盲通信与 1Sheeld/Arduino
  3. 使用 Arduino 控制硬币接收器
  4. Arduino 带蓝牙控制 LED!
  5. 带有 Arduino 或 ESP8266 的电容式指纹传感器
  6. 玩 Nextion Display
  7. Nunchuk 控制机械臂(使用 Arduino)
  8. Arduino Nano:使用操纵杆控制 2 个步进电机
  9. 使用 Arduino 测量太阳辐射
  10. 带 Arduino 的迷你雷达
  11. 如何用 Arduino 制作音乐
  12. 干渴的推特办公植物