前提
就像人類一樣,植物也可能染病,比如植物的葉子可能會(huì)因真菌或其他病原體而發(fā)黃或出現(xiàn)斑點(diǎn)。因此,通過(guò)機(jī)器學(xué)習(xí)的力量,可以掃描顏色,然后將其用于訓(xùn)練一個(gè)模型,該模型可以檢測(cè)葉子的顏色并對(duì)其健康狀態(tài)作出判斷。
硬件
這個(gè)項(xiàng)目主要用Arduino Nano 33 BLE Sense,它之所以被選中主要是它具有一組功能強(qiáng)大的傳感器,包括9DoF IMU,APDS-9960(顏色,手勢(shì),接近度和亮度),麥克風(fēng)以及溫度/濕度/壓力傳感器組合。為了使電路板圍繞植物的葉子移動(dòng)并進(jìn)行測(cè)量,將一對(duì)步進(jìn)電機(jī)與一對(duì)DRV8825驅(qū)動(dòng)器板配合使用。
設(shè)置TinyML
對(duì)于此項(xiàng)目,列出的針對(duì)Arduino Nano 33 BLE Sense on Edge Impulse的內(nèi)置傳感器將不起作用,這意味著將我們必須使用data forwarder而不是serial daemon。
首先,創(chuàng)建一個(gè)新項(xiàng)目并將其命名。接下來(lái)需要通過(guò)Node.js以及NPM來(lái)安裝EdgeImpulse CLI。然后運(yùn)行:
npm install -g edge-impulse-cli
如果找不到安裝路徑,則可能需要將其安裝路徑添加到PATH環(huán)境變量中。接下來(lái),運(yùn)行
edge-impulse-data-forwarder
并確保其有效,然后按Ctrl + C退出。
顏色識(shí)別
APDS-9960的工作原理是:通過(guò)物體表面所反射的光線波長(zhǎng)來(lái)讀取顏色。為了與傳感器通信,最好安裝Arduino APDS9960庫(kù),該庫(kù)可以訪問一些有用的功能。
在代碼中,首先初始化APDS-9960,然后程序進(jìn)入循環(huán)功能,等待直到有顏色數(shù)據(jù)出現(xiàn)。如果有讀數(shù),則使用
APDS.readColor()
以及與表面的接近程度來(lái)讀取顏色。每個(gè)RGB分量都從0-2 ^ 16-1數(shù)轉(zhuǎn)換為其值與總和的比率。
掃描儀
掃描葉子的顏色是通過(guò)在兩個(gè)軸上移動(dòng)裝備以使葉子在車載APDS-9960下方經(jīng)過(guò)的各個(gè)位置進(jìn)行的。通過(guò)沿順時(shí)針或逆時(shí)針方向旋轉(zhuǎn)絲杠來(lái)移動(dòng)每個(gè)軸,以使程序段沿任一方向平移。整個(gè)系統(tǒng)是在Fusion 360中設(shè)計(jì)的,下面是這些設(shè)計(jì)的一些渲染圖:
X軸位于Y軸的頂部,從而使頂部程序段在兩個(gè)軸上移動(dòng)。Y軸上有一個(gè)附加的V輪,以支撐步進(jìn)電機(jī)的重量。零件是使用PLA打印的,填充量約為45%。
收集數(shù)據(jù)
當(dāng)系統(tǒng)首次啟動(dòng)時(shí),步進(jìn)電機(jī)是不知道它的初始位置的,因此我們必須進(jìn)行原點(diǎn)復(fù)位,(可通過(guò)限位開關(guān)實(shí)現(xiàn))。接下來(lái)初始化APDS-9960。有一個(gè)定義為兩個(gè)元素的數(shù)組的邊界框,它們包含一個(gè)框的相對(duì)角。在這兩個(gè)位置之間選擇一個(gè)隨機(jī)點(diǎn),然后將步進(jìn)器運(yùn)行到該位置,同時(shí)讀取它們之間的顏色。
處理和發(fā)送顏色信息
如前所述,使用
APDS.readColor()
來(lái)讀取顏色。計(jì)算總和后,將計(jì)算百分比,然后通過(guò)調(diào)用
Serial.printf()
的方法通過(guò)USB發(fā)送百分比。值用逗號(hào)分隔,每個(gè)讀數(shù)用換行符分隔。數(shù)據(jù)轉(zhuǎn)發(fā)器程序接收到數(shù)據(jù)后,會(huì)將其作為帶有給定標(biāo)簽(健康或不健康)的訓(xùn)練數(shù)據(jù)發(fā)送到Edge Impulse云端。
訓(xùn)練模型
收集完所有訓(xùn)練數(shù)據(jù)后,就該建立一個(gè)可以區(qū)分健康葉子和不健康葉子的模型了。我使用了由三軸時(shí)間序列,頻譜分析模塊和Keras模塊組成的脈沖。查看以下屏幕截圖可以了解我如何從數(shù)據(jù)中生成這些功能:
測(cè)驗(yàn)
為了測(cè)試新模型,這次我收集了一些新的測(cè)試數(shù)據(jù),這是不健康的。該模型的準(zhǔn)確性約為63%,并且在通過(guò)一些測(cè)試功能后,能夠在大多數(shù)時(shí)間正確地對(duì)葉子進(jìn)行分類。
可以通過(guò)添加更多訓(xùn)練數(shù)據(jù)并減慢訓(xùn)練速度來(lái)提高此準(zhǔn)確性。
代碼
#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);}
原理圖
原文標(biāo)題:Arduino使用TinyML掃描植物的葉子確定植物的健康
文章出處:【微信公眾號(hào):FPGA入門到精通】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
傳感器
+關(guān)注
關(guān)注
2551文章
51207瀏覽量
754531 -
驅(qū)動(dòng)器
+關(guān)注
關(guān)注
53文章
8256瀏覽量
146579 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8424瀏覽量
132761
原文標(biāo)題:Arduino使用TinyML掃描植物的葉子確定植物的健康
文章出處:【微信號(hào):xiaojiaoyafpga,微信公眾號(hào):電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論