Изделия своими руками

Устройство определения спелости овощей и фруктов по их цвету

Устройство определения спелости овощей и фруктов по их цветуЭто устройство предназначено для определения спелости овощей и фруктов путем сопоставления данных спектрального анализа с заранее установленными шаблонами.
Такой анализатор, с некоторыми доработками, можно использовать, например, в фермерском хозяйстве.

Инструменты и материалы:- Arduino Nano;
-Спектральный датчик AS7341 или такой;
-Raspberry Pi 3B + или 4;
-10K потенциометр;
-Ручка потенциометра;-Тактильная кнопка – 4 шт;-5 мм светодиод зеленый;-5 мм светодиод красный;-Макетная плата;
Шаг первый: теория
Благодаря развитому зрению человека, нам не составляет труда определить спелость по внешнему виду фрукта или овоща. Однако, при массовом выращивании контроль за созреванием и последующая сортировка спелых овощей/фруктов от неспелых, без автоматизации, довольно трудозатратен.
Это устройство мастер решил сделать для помощи пищевым компаниям, продуктовым магазинам и фермерам в сортировке фруктов и овощей. С помощью него можно определять стадии созревания по цвету с помощью модели нейронной сети.
По мере созревания фруктов и овощей они меняют цвет из-за четырех групп класса пигментов:
хлорофилл (зеленый)
каротиноиды (желтый, красный, оранжевый)
флавоноиды: антоцианы + антоксантины (красный, синий, фиолетовый)
беталаины (красный, желтый, фиолетовый)
Эти пигменты представляют собой группы молекулярных структур, поглощающих определенный набор длин волн и отражающих остальные. Незрелые плоды (зеленые) из-за хлорофилла в их клетках. По мере созревания хлорофилл распадается и заменяется оранжевыми каротиноидами и красными антоцианами. Эти соединения являются антиоксидантами, которые не позволяют фруктам слишком быстро портиться на воздухе. Затем происходит ферментативное потемнение и обесцвечивание – становление коричневого цвета. Ферменты действуют как катализатор химических реакций, вызывающих обесцвечивание фенолов.
Проведя некоторое исследование процессов изменения цвета по мере созревания фруктов и овощей, мастер решил построить искусственную нейронную сеть (ИНС) для интерпретации спектрального цвета различных фруктов и овощей и прогнозирования стадий созревания.
Перед построением и тестированием данной модели нейронной сети он разработал веб-приложение для сопоставления данных спектрального цвета фруктов и овощей, сгенерированных датчиком видимого света AS7341. Мастер использовал Arduino Nano для отправки данных, созданных датчиком видимого света, в веб-приложение. Основываясь на своих наблюдениях, он назначил стадию созревания (метку) при получении данных спектрального цвета для каждого фрукта и овоща:
Раннеспелые
Частично спелые
Спелые
Переспевшие
Устройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуШаг второй: разработка веб-приложения
Мастер разработал веб-приложение (Vegetables and Fruits Data Logger) для получения данных о спектральном цвете фруктов и овощей от датчика AS7341 через Arduino Nano 33 IoT и установки этих данных в файл CSV (spectral_color_database.csv) для создания таблицы о стадиях.
Веб-приложение включает в себя один файл (index.php) и требует, чтобы эти параметры вставляли новую строку (запись) в набор данных:

F1  F2  F3  F4  F5  F6  F7  F8  nir_1  nir_2  class

Дальше нужно проверить, все ли необходимые параметры передаются Nano.
Если да, создаем массив данных с полученными параметрами, включая текущую дату.
Вставляем недавно созданный массив данных в файл spectral_color_database.csv как новую строку с помощью функции fputcsv.
Затем прописываем: Data Inserted Successfully!
Если есть пропуски или нет входящих данных, прописываем: Waiting for data from the AS7341 sensor to insert

# Check the incoming data packet:  if(isset($_GET["F1"]) && isset($_GET["F2"]) && isset($_GET["F3"]) && isset($_GET["F4"]) && isset($_GET["F5"]) && isset($_GET["F6"]) && isset($_GET["F7"]) && isset($_GET["F8"]) && isset($_GET["nir_1"]) && isset($_GET["nir_2"]) && isset($_GET["class"])){  	# Create the data array.  	$data = array($_GET["F1"], $_GET["F2"], $_GET["F3"], $_GET["F4"], $_GET["F5"], $_GET["F6"], $_GET["F7"], $_GET["F8"], $_GET["nir_1"], $_GET["nir_2"], $_GET["class"], date("m/d"));      # Insert the recently generated data array into the CSV file as a new row.	  	$file = fopen("spectral_color_database.csv", "a");  	fputcsv($file, $data);  	fclose($file);  	// Print result:  	echo "Data Inserted Successfully!";  }else{  	echo "Waiting for data from the AS7341 sensor to insert...";  }

Шаг третий: настройка веб-приложения на Raspberry Pi
После создания веб-приложения нужно запустить его на Raspberry Pi или любом другом сервере, если это сервер PHP.
Для настройки Raspberry Pi выполняем следующие действия:
Прежде всего, извлекаем папку Vegetables_and_Fruits_Data_Logger.zip.
Затем перемещаем папку приложения (Vegetables_and_Fruits_Data_Logger) на сервер apache (/ var / www / html).

sudo mv /home/pi/Downloads/Vegetables_and_Fruits_Data_Logger/ /var/www/html/

Если требуемые параметры не установлены и не найдены, веб-приложение пропишет: Waiting for data from the AS7341 sensor to insert…(Ожидание данных от датчика AS7341 для вставки )

http: // localhost / Vegetables_and_Fruits_Data_Logger /

В противном случае веб-приложение вставляет входящие данные в виде новой строки в файл CSV (набор данных), добавляя текущую дату, и печатает: Data Inserted Successfully! (Данные успешно вставлены!)

http://localhost/Vegetables_and_Fruits_Data_Logger/?F1=13&F2=12&F3=12&F4=12&F5=12&F6=12&F7=12&F8=12&nir_1=12&nir_2=9&class=0

Устройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуШаг четвертый: настройка Arduino Nano
Дальше нужно загрузить необходимые драйверы – Arduino SAMD Core – как описано в этом руководстве.
Чтобы иметь возможность подключиться к Wi-Fi, нужно загрузить библиотеку WiFiNINA.
Устройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуЧтобы иметь возможность получать данные о цвете от датчика AS7341 необходимо установить библиотеку DFRobot AS7341.
Дальше нужно включить необходимые библиотеки и определить настройки WiFi.

char ssid[] = "SSID";        // your network SSID (name)  char pass[] = "PASSWORD";    // your network password (use for WPA, or use as key for WEP)  int keyIndex = 0;            // your network key Index number (needed only for WEP)  int status = WL_IDLE_STATUS;    // Enter the IPAddress of your Raspberry Pi.  IPAddress server(192, 168, 1, 20);    // Initialize the Ethernet client library  WiFiClient client; /* WiFiSSLClient client; */

Определить настройки и объекты датчика видимого света AS7341

// Define the AS7341 object.  DFRobot_AS7341 as7341;  // Define AS7341 data objects:  DFRobot_AS7341::sModeOneData_t data1;  DFRobot_AS7341::sModeTwoData_t data2;
[/spoiler]Определить может ли I2C правильно обмениваться данными, и включить встроенный светодиод на датчике AS7341.

  // Detect if I2C can communicate properly     while (as7341.begin() != 0) {      Serial.println("I2C init failed, please check if the wire connection is correct");      delay(1000);    }      // Enable the built-in LED on the AS7341 sensor.    as7341.enableLed(true);

Проверить модуль WiFi, чтобы проверить соединение.

  if (WiFi.status() == WL_NO_MODULE) { Serial.println("Connection Failed!"); while (true); }    // Attempt to connect to the WiFi network:    while (status != WL_CONNECTED) {      Serial.println("Attempting to connect to WiFi !!!");      // Connect to WPA/WPA2 network. Change this line if using open or WEP network:      status = WiFi.begin(ssid, pass);      // Wait 10 seconds for connection:      delay(10000);    }

В функции read_controls считываем значения потенциометра и четырех кнопок класса.

void read_controls(){    // Potentiometer:    pot_val = analogRead(pot);    // Class Buttons:    class_1_val = digitalRead(class_1);    class_2_val = digitalRead(class_2);    class_3_val = digitalRead(class_3);    class_4_val = digitalRead(class_4);  }

В функции adjust_brightness устанавливаем ток вывода для управления яркостью (от 1 до 20 – соответствует току 4 мА, 6 мА, 8 мА, 10 мА, 12 мА, ……, 42 мА) встроенного светодиода на датчике AS7341.
Для измерение спектра с помощью датчика AS7341 и считывания значение канала данных датчика 0 ~ 5 в следующих режимах отображения каналов:

eF1F4ClearNIR  eF5F8ClearNIR

Затем нужно распечатать спектральные данные о цвете, сгенерированные датчиком:
[spoiler]

 // Start spectrum measurement:    // Channel mapping mode: 1.eF1F4ClearNIR    as7341.startMeasure(as7341.eF1F4ClearNIR);    // Read the value of sensor data channel 0~5, under eF1F4ClearNIR    data1 = as7341.readSpectralDataOne();    // Channel mapping mode: 2.eF5F8ClearNIR    as7341.startMeasure(as7341.eF5F8ClearNIR);    // Read the value of sensor data channel 0~5, under eF5F8ClearNIR    data2 = as7341.readSpectralDataTwo();    // Print data:    Serial.print("F1(405-425nm): "); Serial.println(data1.ADF1);    Serial.print("F2(435-455nm): "); Serial.println(data1.ADF2);    Serial.print("F3(470-490nm): "); Serial.println(data1.ADF3);    Serial.print("F4(505-525nm): "); Serial.println(data1.ADF4);    Serial.print("F5(545-565nm): "); Serial.println(data2.ADF5);    Serial.print("F6(580-600nm): "); Serial.println(data2.ADF6);    Serial.print("F7(620-640nm): "); Serial.println(data2.ADF7);    Serial.print("F8(670-690nm): "); Serial.println(data2.ADF8);    // CLEAR and NIR:    Serial.print("Clear_1: "); Serial.println(data1.ADCLEAR);    Serial.print("NIR_1: "); Serial.println(data1.ADNIR);    Serial.print("Clear_2: "); Serial.println(data2.ADCLEAR);    Serial.print("NIR_2: "); Serial.println(data2.ADNIR);    Serial.print("n------------------------------n");    delay(1000);

Теперь нужно установить метку/номер каждому классу:
0 – Раннеспелый
1 – Частично спелый
2 – Спелый
3 – Переспелый

  if(!class_1_val) make_a_get_request("/Vegetables_and_Fruits_Data_Logger/", "0");    if(!class_2_val) make_a_get_request("/Vegetables_and_Fruits_Data_Logger/", "1");    if(!class_3_val) make_a_get_request("/Vegetables_and_Fruits_Data_Logger/", "2");    if(!class_4_val) make_a_get_request("/Vegetables_and_Fruits_Data_Logger/", "3");

Подключаемся к приложению, устанавливаем метки зрелости и подключаем красный светодиод.

void make_a_get_request(String application, String _class){    // Connect to the web application named Vegetables_and_Fruits_Data_Logger. Change '80' with '443' if you are using SSL connection.    if(client.connect(server, 80)){      // If successful:      Serial.println("nnConnected to the server!");      // Create the query string:      String query = application + "?F1="+data1.ADF1+"&F2="+data1.ADF2+"&F3="+data1.ADF3+"&F4="+data1.ADF4+"&F5="+data2.ADF5+"&F6="+data2.ADF6+"&F7="+data2.ADF7+"&F8="+data2.ADF8+"&nir_1="+data1.ADNIR+"&nir_2="+data2.ADNIR+"&class="+_class;      // Make an HTTP Get request:      client.println("GET " + query + " HTTP/1.1");      client.println("Host: 192.168.1.20");      client.println("Connection: close");      client.println();    }else{      Serial.println("Server Error!");      digitalWrite(red, HIGH);    }    delay(2000); // Wait 2 seconds after connection...    // If there are incoming bytes available, get the response from the web application.    String response = "";    while (client.available()) { char c = client.read(); response += c; }    if(response != ""){      Serial.println(response);      Serial.println("n");      // Check whether the transferred data is inserted successfully or not:      if(response.indexOf("Data Inserted Successfully!") > 0){        digitalWrite(green, HIGH);      }else{        digitalWrite(red, HIGH);      }    }    // Turn off LEDs:    delay(3000);    digitalWrite(green, LOW);    digitalWrite(red, LOW);  }

Устройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуШаг пятый: создание набора данных стадий созревания на основе спектрального цвета
Чтобы обучить данную модель нейронной сети стадиям созревания по спектральному цвету, нужно было собрать данные о спектральном цвете различных фруктов и овощей. Для этого мастер использует датчик AS7341.
В этом датчике используется микросхема спектрального датчика нового поколения AS7341, выпущенная известной компанией AMS. Он имеет восемь каналов для видимого света, один канал для ближнего ИК-диапазона (NIR), один канал без фильтра (Clear) и дополнительный канал, распределенный по мерцанию окружающего света (Flicker). Кроме того, он имеет шесть параллельных 16-битных каналов АЦП для обработки сигналов и данных. Благодаря двум встроенным светодиодам с регулируемой яркостью он может собирать данные даже в темноте.
Проведя ряд исследований, мастер собрал параметры ниже с помощью датчика видимого света AS7341:
F1 (405-425nm)
F2 (435-455nm)
F3 (470-490nm)
F4 (505-525nm)
F5 (545-565nm)
F6 (580-600nm)
F7 (620-640nm)
F8 (670-690nm)
Clear_1
NIR_1
Clear_2
NIR_2
Как объяснялось в предыдущем шаге, мастер подключил датчик AS7341 к Arduino Nano 33 IoT для отправки параметров и назначенных меток стадии созревания в веб-приложение. После получения данных веб-приложение вставляет необходимые параметры, добавляя параметр текущей даты, в файл spectral_color_database.csv (набор данных) под этими строками:
F1
F2
F3
F4
F5
F6
F7
F8
NIR_1
NIR_2
Ripeness
Date
После завершения программирования и сборки устройства он выбрал одиннадцать разных фруктов и овощей, чтобы собрать их классы спелости по спектральному цвету.
Устройство позволяет пользователю отправлять данные в веб-приложение и назначать класс (метку) спелости, нажимая одну из четырех кнопок классов:
0 – Раннеспелый
1 – Частично спелый
2 – Спелый
3 – Переспелый
Для каждого фрукта и овоща он сопоставлял спектральные данные о цвете и присвоенный класс спелости в течение десяти дней, три раза в день.
Устройство позволяет пользователю регулировать яркость встроенного светодиода на датчике AS7341 с помощью потенциометра.
Если переданные данные успешно вставлены в набор данных, на устройстве загорится зеленый светодиод. В противном случае загорится красный светодиод.
Наконец, после сбора классов спелости по спектральному цвету три раза в день в течение десяти дней он извлек набор данных (spectral_color_database.csv) для обучения нейронной сети.
Устройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуШаг шестой: создание искусственной нейронной сети (ИНС) с помощью TensorFlow
Дальше мастер создает и обучает нейронную сеть для данного устройства. Ее цель – научить устройство не только определять спелость,но и прогнозировать стадии созревания. Подробно о данном шаге можно ознакомиться здесь.
Полностью код можно скачать здесь.
Устройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуШаг седьмой: подключение и регулировка
Сначала мастер устанавливает на макетную плату Arduino Nano 33 IoT. Затем устанавливает четыре кнопки классов, чтобы назначить класс зрелости (Early Ripe, Parically Ripe, Ripe, Decay) при отправке данных в веб-приложение. Мастер использовал потенциометр, чтобы отрегулировать яркость встроенного светодиода на датчике AS7341. Наконец, он установил 5-миллиметровые зеленые и красные светодиоды.
Схема подключения следующая:

// Connections  // Arduino Nano 33 IoT :             //                                AS7341 11-Channel Spectral Color Sensor  // 3.3V --------------------------- +  // GND  --------------------------- -  // A5   --------------------------- C  // A4   --------------------------- D  //                                10K Potentiometer  // A0   --------------------------- S  //                                Class Button_1 (6x6)  // D2   ---------------------------  //                                Class Button_2 (6x6)  // D3   ---------------------------  //                                Class Button_3 (6x6)  // D4   ---------------------------  //                                Class Button_4 (6x6)  // D5   ---------------------------  //                                5mm Green LED  // D6   ---------------------------  //                                5mm Red LED  // D7   ---------------------------

Устройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуСобрав схему, он установил макетную плату и датчик AS7341 на старой книжной полке с помощью клеевого пистолета.
Устройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цветуУстройство собрано и готово к тестированию.
Устройство определения спелости овощей и фруктов по их цветуУстройство определения спелости овощей и фруктов по их цвету

Самоделкин

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. - Альберт Эйнштейн

Your Header Sidebar area is currently empty. Hurry up and add some widgets.