Clasificacion — ESP32 simulation

grupo 04

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by dacerquinll.

Components

Sketch code

#include <Wire.h>
#include <ESP32Servo.h>
#include "HX711.h"

const int VEML6040_ADDR = 0x10;

const int enable1Pin = 25; 
const int in1Pin = 26;     
const int in2Pin = 27;     

const int irSensorPin = 34;  
const int trigPin = 5;       
const int echoPin = 18;      

const int ledVerde = 19;     
const int ledRojo = 23;      

const int servoPin = 4;
Servo miServo;

const int LOADCELL_DOUT_PIN = 16;
const int LOADCELL_SCK_PIN = 17;
HX711 balanza;

long duration;
int calibre;
float peso = 0.0;
float pesoAcumulado = 0.0;
const float LIMITE_BANDEJA = 500.0;
bool frutoEnProceso = false;

void setup() {
  pinMode(enable1Pin, OUTPUT);
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(ledVerde, OUTPUT);
  pinMode(ledRojo, OUTPUT);

  pinMode(irSensorPin, INPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  digitalWrite(enable1Pin, HIGH);

  miServo.attach(servoPin);
  miServo.write(0);

  Serial.begin(115200);

  balanza.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
  balanza.set_scale(400.0);
  delay(1000);
  balanza.tare();

  Wire.begin(21, 22);

  Wire.beginTransmission(VEML6040_ADDR);
  Wire.write(0x00); 
  Wire.write(0x00); 
  Wire.write(0x00); 
  Wire.endTransmission();
}

unsigned int leerRegistroSensor(uint8_t reg) {
  Wire.beginTransmission(VEML6040_ADDR);
  Wire.write(reg);
  Wire.endTransmission(false); 
  
  Wire.requestFrom(VEML6040_ADDR, 2);
  if (Wire.available() >= 2) {
    unsigned int lsb = Wire.read();
    unsigned int msb = Wire.read();
    return lsb | (msb << 8);
  }
  return 0;
}

void loop() {
  int estadoIR = digitalRead(irSensorPin);

  if (estadoIR == HIGH) {
    frutoEnProceso = true;
  }

  if (frutoEnProceso) {
    digitalWrite(in1Pin, HIGH);
    digitalWrite(in2Pin, LOW);
    
    digitalWrite(ledVerde, HIGH);
    digitalWrite(ledRojo, LOW);
    
    Serial.println("Cinta transportadora activada: Fruto ingresando...");
    delay(1500); 

    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);

    duration = pulseIn(echoPin, HIGH);
    calibre = duration * 0.034 / 2;

    Serial.print("Fruta Medida: ");
    Serial.print(calibre);
    Serial.println(" cm");

    if (balanza.is_ready()) {
      peso = balanza.get_units(10);
      if (peso < 0) peso = 0;
      Serial.print("Peso detectado: ");
      Serial.print(peso);
      Serial.println(" g");
    } else {
      Serial.println("HX711 no encontrado o no listo.");
    }

    unsigned int red   = leerRegistroSensor(0x08); 
    unsigned int green = leerRegistroSensor(0x09); 
    unsigned int blue  = leerRegistroSensor(0x0A); 

    String nombreColor = "";
    if (green > blue && green > red) {
      nombreColor = "Verde (Inmaduro - Rechazado)";
    } else if (blue >= green && blue >= red) {
      nombreColor = "Arandano Azul (Maduro - Apto)";
    } else {
      nombreColor = "Otro tono";
    }

    Serial.print("Color detectado: ");
    Serial.print(nombre

More projects by dacerquinll