0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过机器学习检测叶子颜色并对其健康状态作出判断

电子森林 来源:Aduino Project Hub 作者:Arduino “having11” 2021-04-01 10:10 次阅读

前提

就像人类一样,植物也可能染病,比如植物的叶子可能会因真菌或其他病原体而发黄或出现斑点。因此,通过机器学习的力量,可以扫描颜色,然后将其用于训练一个模型,该模型可以检测叶子的颜色并对其健康状态作出判断。

硬件

这个项目主要用Arduino Nano 33 BLE Sense,它之所以被选中主要是它具有一组功能强大的传感器,包括9DoF IMU,APDS-9960(颜色,手势,接近度和亮度),麦克风以及温度/湿度/压力传感器组合。为了使电路板围绕植物的叶子移动并进行测量,将一对步进电机与一对DRV8825驱动器板配合使用。

设置TinyML

对于此项目,列出的针对Arduino Nano 33 BLE Sense on Edge Impulse的内置传感器将不起作用,这意味着将我们必须使用data forwarder而不是serial daemon。

首先,创建一个新项目并将其命名。接下来需要通过Node.js以及NPM来安装EdgeImpulse CLI。然后运行:

npm install -g edge-impulse-cli

如果找不到安装路径,则可能需要将其安装路径添加到PATH环境变量中。接下来,运行

edge-impulse-data-forwarder

并确保其有效,然后按Ctrl + C退出。

d97068ba-9245-11eb-8b86-12bb97331649.jpg

颜色识别

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%,并且在通过一些测试功能后,能够在大多数时间正确地对叶子进行分类。

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

代码

#include 《Arduino_APDS9960.h》#include 《AccelStepper.h》#include 《MultiStepper.h》#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;// a random location will be chosen within the bounding box

const long boundingBox[2][2] = { {0,0}, {40,40}};

void setup(){ Serial.begin(115200); while(!Serial);

if(!APDS.begin()) { Serial.println(“Could not init APDS9960”); while(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); sum = 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

”, 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 homing y”); while(digitalRead(Y_AXIS_HOMING_SW)) yStepper.move(-1); xStepper.setCurrentPosition(0); yStepper.setCurrentPosition(0);}

原理图

dae9a12a-9245-11eb-8b86-12bb97331649.png

原文标题:Arduino使用TinyML扫描植物的叶子确定植物的健康

文章出处:【微信公众号:FPGA入门到精通】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2545

    文章

    50411

    浏览量

    750794
  • 驱动器
    +关注

    关注

    52

    文章

    8081

    浏览量

    145756
  • 机器学习
    +关注

    关注

    66

    文章

    8340

    浏览量

    132281

原文标题:Arduino使用TinyML扫描植物的叶子确定植物的健康

文章出处:【微信号:xiaojiaoyafpga,微信公众号:电子森林】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    晶体管的工作状态判断方法

    晶体管的工作状态判断是电子工程领域中的一项重要技能,它对于确保电路的正常运行和性能优化至关重要。晶体管的工作状态通常根据其内部PN结的偏置情况来判断,主要包括截止
    的头像 发表于 09-23 18:16 952次阅读

    基于机器学习的IWR6843AOP跌倒和姿态检测实现

    电子发烧友网站提供《基于机器学习的IWR6843AOP跌倒和姿态检测实现.pdf》资料免费下载
    发表于 09-03 10:02 1次下载
    基于<b class='flag-5'>机器</b><b class='flag-5'>学习</b>的IWR6843AOP跌倒和姿态<b class='flag-5'>检测</b>实现

    时序逻辑电路中如何判断有效状态和无效状态

    在时序逻辑电路中,有效状态和无效状态判断是电路分析和设计的重要环节。有效状态是指电路在实际工作过程中被利用到的状态,它们构成了电路的有效循
    的头像 发表于 08-12 15:51 759次阅读

    【「时间序列与机器学习」阅读体验】全书概览与时间序列概述

    如何通过根因分析技术获得导致故障的维度和元素,包括基于时间序列异常检测算法的根因分析、基于熵的根因分析、基于树模型的根因分析、规则学习等。 ●第7章“智能运维的应用场景”:介绍智能运维领域的应用,包括
    发表于 08-07 23:03

    mesh中的非叶子节点是如何配置的?

    mesh中的非叶子节点是如何配置的?是mesh网络自动生成吗?
    发表于 07-11 08:28

    深度学习在工业机器视觉检测中的应用

    随着深度学习技术的快速发展,在工业机器视觉检测中的应用日益广泛,展现出巨大的潜力。工业机器
    的头像 发表于 07-08 10:40 901次阅读

    机器学习算法原理详解

    机器学习作为人工智能的一个重要分支,目标是通过让计算机自动从数据中学习改进
    的头像 发表于 07-02 11:25 659次阅读

    怎么判断MOS管的工作状态

    MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor,金属-氧化物半导体场效应晶体管)是现代电子电路中常见的关键元件,工作状态直接影响电路的性能和稳定性。本文将详细探讨如何判断
    的头像 发表于 05-30 16:42 1493次阅读

    实例分享:如何使用阿童木颜色传感器检测转动轴的转向

    摘要本案例描述了如何利用颜色传感器来检测转动轴的转向。河北省客户提出了一个问题,希望能够判断他们的转向轴是正转还是反转,转速并不快。阿童木工程师提供解决方案,通过在圆柱体上贴上三种不同
    的头像 发表于 05-23 13:50 237次阅读
    实例分享:如何使用阿童木<b class='flag-5'>颜色</b>传感器<b class='flag-5'>检测</b>转动轴的转向

    机器视觉如何检测橡胶圈外观尺寸检测

    外观检测 机器视觉系统可以检测橡胶圈表面的缺陷,裂纹、气泡、凹陷等。通过图像处理算法,系统能够准确识别标记出这些缺陷。系统能够精确识别
    的头像 发表于 03-15 17:24 522次阅读

    如何判断rlc串联电路达到谐振状态

    判断RLC串联电路达到谐振状态是一个重要的问题,在电路设计和实际应用中有着广泛的应用。要准确判断RLC串联电路是否达到谐振状态,需要从电路的特性、频率响应和振荡条件等多个方面进行综合分
    的头像 发表于 03-09 09:07 3270次阅读

    轨道式智能巡检机器通过搭载各项检测设备进行环境采集

    在电力场所内内,智能巡检机器通过搭载双光谱红外热成像仪沿着轨道稳稳经过,可对变电站保护压板状态、变电站二次开关等设备状态等进行图像信息采集;
    的头像 发表于 03-06 09:46 461次阅读
    轨道式智能巡检<b class='flag-5'>机器</b>人<b class='flag-5'>通过</b>搭载各项<b class='flag-5'>检测</b>设备进行环境采集

    颜色传感器实时检测转动轴转向

    摘要 本案例描述了如何利用颜色传感器来检测转动轴的转向。河北省客户提出了一个问题,希望能够判断他们的转向轴是正转还是反转,转速并不快。阿童木工程师提供解决方案,通过在圆柱体上贴上三种不
    的头像 发表于 02-26 13:52 310次阅读
    <b class='flag-5'>颜色</b>传感器实时<b class='flag-5'>检测</b>转动轴转向

    如何判断机器视觉的照明的好坏?

    判断机器视觉的照明的好坏,首先必须了解什么是光源需要做到的!显然光源应该不仅仅是使检测部件能够被摄像头“看见”。有时候,一个完整的机器视觉系统无法支持工作,但是仅仅优化一下光源就可以使
    发表于 11-21 10:24 284次阅读

    Flash的健康状态监测在工业应用上的优势

    健康状态监测——Smartfunction在工业上的应用健康状态监测——Smartfunction在SSD上主要作用是寿命预测、性能优化、错误检测
    的头像 发表于 11-14 08:13 313次阅读
    Flash的<b class='flag-5'>健康</b><b class='flag-5'>状态</b>监测在工业应用上的优势