Created
October 18, 2024 01:43
-
-
Save edersonbadeca/7454f8178d386f6a69c1fca536ccb34e to your computer and use it in GitHub Desktop.
Arquivo do código C++ para ESP32 - sketch.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Arduino.h> | |
#include "modelo_iris.h" // Inclua o arquivo gerado pelo microgenml | |
Eloquent::ML::Port::DecisionTree dt; | |
// Definir os pinos dos potenciômetros | |
#define POT1_PIN 34 // Potenciômetro 1 (Comprimento da Sépala) | |
#define POT2_PIN 35 // Potenciômetro 2 (Largura da Sépala) | |
#define POT3_PIN 32 // Potenciômetro 3 (Comprimento da Pétala) | |
#define POT4_PIN 33 // Potenciômetro 4 (Largura da Pétala) | |
// Definir os pinos dos LEDs | |
#define LED_SETOSA_PIN 19 // LED para a classe Setosa | |
#define LED_VERSICOLOR_PIN 18 // LED para a classe Versicolor | |
#define LED_VIRGINICA_PIN 5 // LED para a classe Virginica | |
void setup() { | |
Serial.begin(115200); | |
// Configurar os pinos dos potenciômetros como entradas | |
pinMode(POT1_PIN, INPUT); | |
pinMode(POT2_PIN, INPUT); | |
pinMode(POT3_PIN, INPUT); | |
pinMode(POT4_PIN, INPUT); | |
// Configurar os pinos dos LEDs como saídas | |
pinMode(LED_SETOSA_PIN, OUTPUT); | |
pinMode(LED_VERSICOLOR_PIN, OUTPUT); | |
pinMode(LED_VIRGINICA_PIN, OUTPUT); | |
// Inicializar os LEDs desligados | |
digitalWrite(LED_SETOSA_PIN, LOW); | |
digitalWrite(LED_VERSICOLOR_PIN, LOW); | |
digitalWrite(LED_VIRGINICA_PIN, LOW); | |
} | |
void loop() { | |
// Ler os valores dos potenciômetros (0-4095) | |
int pot1_value = analogRead(POT1_PIN); | |
int pot2_value = analogRead(POT2_PIN); | |
int pot3_value = analogRead(POT3_PIN); | |
int pot4_value = analogRead(POT4_PIN); | |
// Normalizar os valores para os ranges do dataset Iris | |
float sepal_length = map(pot1_value, 0, 4095, 43, 79) / 10.0; // 4.3 - 7.9 cm | |
float sepal_width = map(pot2_value, 0, 4095, 20, 44) / 10.0; // 2.0 - 4.4 cm | |
float petal_length = map(pot3_value, 0, 4095, 10, 69) / 10.0; // 1.0 - 6.9 cm | |
float petal_width = map(pot4_value, 0, 4095, 10, 25) / 10.0; // 1.0 - 2.5 cm | |
// Criar um array com as características para o modelo | |
float features[4] = {sepal_length, sepal_width, petal_length, petal_width}; | |
// Pré-processamento (se necessário) | |
// Valores de média e desvio padrão usados durante o treinamento | |
//float mean[] = {5.8433, 3.054, 3.7587, 1.1987}; | |
//float std_dev[] = {0.8281, 0.4335, 1.7644, 0.7631}; | |
// Padronizar os dados de entrada | |
//for (int i = 0; i < 4; i++) { | |
// features[i] = (features[i] - mean[i]) / std_dev[i]; | |
//} | |
// Chamar a função de predição do modelo | |
int predicted_class = dt.predict(features); // Substitua pelo nome correto da função | |
// Mapear a classe predita para o nome da espécie e acender o LED correspondente | |
String class_name; | |
switch (predicted_class) { | |
case 0: | |
class_name = "Setosa"; | |
// Acender o LED correspondente e apagar os outros | |
digitalWrite(LED_SETOSA_PIN, HIGH); | |
digitalWrite(LED_VERSICOLOR_PIN, LOW); | |
digitalWrite(LED_VIRGINICA_PIN, LOW); | |
break; | |
case 1: | |
class_name = "Versicolor"; | |
digitalWrite(LED_SETOSA_PIN, LOW); | |
digitalWrite(LED_VERSICOLOR_PIN, HIGH); | |
digitalWrite(LED_VIRGINICA_PIN, LOW); | |
break; | |
case 2: | |
class_name = "Virginica"; | |
digitalWrite(LED_SETOSA_PIN, LOW); | |
digitalWrite(LED_VERSICOLOR_PIN, LOW); | |
digitalWrite(LED_VIRGINICA_PIN, HIGH); | |
break; | |
default: | |
class_name = "Desconhecida"; | |
// Desligar todos os LEDs se a classe for desconhecida | |
digitalWrite(LED_SETOSA_PIN, LOW); | |
digitalWrite(LED_VERSICOLOR_PIN, LOW); | |
digitalWrite(LED_VIRGINICA_PIN, LOW); | |
break; | |
} | |
// Imprimir os resultados no Serial Monitor | |
Serial.print("Comprimento da Sépala: "); | |
Serial.print(sepal_length); | |
Serial.print(" cm, Largura da Sépala: "); | |
Serial.print(sepal_width); | |
Serial.print(" cm, Comprimento da Pétala: "); | |
Serial.print(petal_length); | |
Serial.print(" cm, Largura da Pétala: "); | |
Serial.print(petal_width); | |
Serial.print(" cm -> Classe: "); | |
Serial.println(class_name); | |
// Esperar 1 segundo antes de ler os valores novamente | |
delay(1000); | |
} | |
Arquivo google colab - programação em python - treinamento da IA | |
# Instalação das bibliotecas | |
!pip install pycaret &> /dev/null | |
!pip install micromlgen &> /dev/null | |
# Importar as bibliotecas | |
import pandas as pd | |
from pycaret.datasets import get_data | |
from pycaret.classification import * | |
# Carregar o dataset Iris | |
data = get_data('iris') | |
# Configurar o PyCaret para classificação sem pré-processamento | |
clf = setup(data, target='species', session_id=123, normalize=False, preprocess=False) | |
# Criar um modelo de Árvore de Decisão (compatível com microgenml) | |
dt_model = create_model('dt') | |
# Finalizar o modelo (treinar no dataset completo) | |
final_model = finalize_model(dt_model) | |
https://en.wikipedia.org/wiki/Iris_flower_data_set | |
https://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment