esp32 称重传送带开源项目

2024102207085575

#include <LiquidCrystal.h>
#include “HX711.h”
// Ultrasonic Sensor Pins
#define TRIG_PIN 18
#define ECHO_PIN 19
#define MAX_DISTANCE 200 // Maximum distance to detect objects (in cm)
// Stepper Motor Pins
#define MOTOR_PIN_A1 21
#define MOTOR_PIN_A2 22
#define MOTOR_PIN_B1 23
#define MOTOR_PIN_B2 25
// Load Cell Pins
#define LOADCELL_DOUT_PIN 4
#define LOADCELL_SCK_PIN 5
// LED Pins
#define RED_LED_PIN 15
#define GREEN_LED_PIN 14
// Load Cell Threshold
#define WEIGHT_THRESHOLD 25.0 // 25 kg
HX711 scale;
// Stepper Motor Steps
int stepNumber = 0;
// LCD Display Pins
LiquidCrystal lcd(22, 21, 19, 18, 5, 17); // Define pins for LCD (RS, E, D4, D5, D6, D7)
void setup() {
  // Initialize Serial Monitor
  Serial.begin(115200);
  // Initialize LCD
  lcd.begin(16, 2); // Specify the number of columns and rows
  lcd.setCursor(0, 0);
  lcd.print(“Conveyor Status:”);
  // Set up Ultrasonic Sensor Pins
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  // Set up Stepper Motor Pins
  pinMode(MOTOR_PIN_A1, OUTPUT);
  pinMode(MOTOR_PIN_A2, OUTPUT);
  pinMode(MOTOR_PIN_B1, OUTPUT);
  pinMode(MOTOR_PIN_B2, OUTPUT);
  // Initialize Load Cell
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
  scale.set_scale(); // You should calibrate your scale using a known weight and then set the scale
  // Set up LED Pins
  pinMode(RED_LED_PIN, OUTPUT);
  pinMode(GREEN_LED_PIN, OUTPUT);
  // Initially stop the motor
  stopMotor();
  lcd.setCursor(0, 1);
  lcd.print(“Motor Stops   “); // Display “Motor Stops”
}
void loop() {
  // Measure distance using the ultrasonic sensor
  long distance = measureDistance();
  // Measure weight using the load cell
  float weight = scale.get_units(10); // Get the average of 10 readings
  // Control the conveyor belt based on distance
  if (distance > 0 && distance < MAX_DISTANCE) {
    Serial.println(“Object detected! Starting conveyor belt.”);
    stepMotor(); // Step the motor
    lcd.setCursor(0, 1);
    lcd.print(“Motor Starts   “); // Display “Motor Starts”
  } else {
    Serial.println(“No object detected. Stopping conveyor belt.”);
    stopMotor(); // Stop the motor if no object is detected
    lcd.setCursor(0, 1);
    lcd.print(“Motor Stops   “); // Display “Motor Stops”
  }
  // Control LEDs based on weight
  if (weight > WEIGHT_THRESHOLD) {
    digitalWrite(RED_LED_PIN, HIGH);
    digitalWrite(GREEN_LED_PIN, LOW);
    Serial.println(“Weight above threshold, Red LED ON, Green LED OFF”);
  } else {
    digitalWrite(RED_LED_PIN, LOW);
    digitalWrite(GREEN_LED_PIN, HIGH);
    Serial.println(“Weight below threshold, Red LED OFF, Green LED ON”);
  }
  // Print weight to Serial Monitor
  Serial.print(“Weight: “);
  Serial.print(weight);
  Serial.println(” kg”);
  delay(100); // Delay for stability
}
void stepMotor() {
  switch (stepNumber) {
    case 0:
      digitalWrite(MOTOR_PIN_A1, HIGH);
      digitalWrite(MOTOR_PIN_A2, LOW);
      digitalWrite(MOTOR_PIN_B1, HIGH);
      digitalWrite(MOTOR_PIN_B2, LOW);
      break;
    case 1:
      digitalWrite(MOTOR_PIN_A1, LOW);
      digitalWrite(MOTOR_PIN_A2, HIGH);
      digitalWrite(MOTOR_PIN_B1, HIGH);
      digitalWrite(MOTOR_PIN_B2, LOW);
      break;
    case 2:
      digitalWrite(MOTOR_PIN_A1, LOW);
      digitalWrite(MOTOR_PIN_A2, HIGH);
      digitalWrite(MOTOR_PIN_B1, LOW);
      digitalWrite(MOTOR_PIN_B2, HIGH);
      break;
    case 3:
      digitalWrite(MOTOR_PIN_A1, HIGH);
      digitalWrite(MOTOR_PIN_A2, LOW);
      digitalWrite(MOTOR_PIN_B1, LOW);
      digitalWrite(MOTOR_PIN_B2, HIGH);
      break;
  }
  stepNumber++;
  if (stepNumber > 3) {
    stepNumber = 0;
  }
  delay(10); // Adjust delay for motor speed
}
void stopMotor() {
  digitalWrite(MOTOR_PIN_A1, LOW);
  digitalWrite(MOTOR_PIN_A2, LOW);
  digitalWrite(MOTOR_PIN_B1, LOW);
  digitalWrite(MOTOR_PIN_B2, LOW);
}
long measureDistance() {
  // Send a 10us pulse to trigger the ultrasonic sensor
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  // Read the echo pin, returns the sound wave travel time in microseconds
  long duration = pulseIn(ECHO_PIN, HIGH);
  // Calculate the distance (speed of sound is 34300 cm/s)
  long distance = duration * 0.034 / 2;
  return distance;
}
项目地址:https://wokwi.com/projects/405170590102260737

本文来自投稿,不代表创客DIY项目网-科技创新创客项目立场,如若转载,请注明出处:https://www.chuang-ke.com/19528

(0)
卧龙涤生卧龙涤生
上一篇 2024年10月19日 下午10:36
下一篇 2024年10月22日 下午3:17

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

创客交流群