กลับไปหน้ารวมไฟล์
automated-powder-dispenser-16d7c7-en.md

Industrial Dosing: Automated Powder Dispenser

  • Hello everyone in this project we thought one of the problem we had in the lab. Getting exact amount of powder is some time can be difficult but with this project not anymore.
  • We used a loadcell for the scale the weight a display to show the weight and the input. For putting input we used simple button and potentiometer. Lastly servo motor used for dispense function.

The Load Cell Feedback Loop (HX711)

After loadcell is fixated to his platform we used code from Hrisko, J for calibrating the loadcell.

The system cannot rely purely on time ("run auger for 3 seconds"). Depending on humidity, powder clumping causes variable flow rates. The system must weigh the payload in real time.

  1. The receiving cup sits on a physical aluminum beam called a Load Cell (Strain Gauge).
  2. When the cup fills with powder, the aluminum beam microscopically bends.
  3. This bending produces an incredibly tiny electrical voltage change (a few millivolts).
  4. The HX711 Amplifier Chip boosts this tiny voltage so the Arduino can read it.
  5. In the code, using the <HX711.h> library, the Arduino continuously checks the weight.
#include <Q2HX711.h>
const byte hx711_data_pin = 3;
const byte hx711_clock_pin = 4;
float y1 = 20.0; // calibrated mass to be added
long x1 = 0L;
long x0 = 0L;
float avg_size = 10.0; // amount of averages for each mass measurement
Q2HX711 hx711(hx711_data_pin, hx711_clock_pin); // prep hx711
void setup() {
 Serial.begin(9600); // prepare serial port
 delay(1000); // allow load cell and hx711 to settle
 // tare procedure
 for (int ii=0;ii<int(avg_size);ii++){
   delay(10);
   x0+=hx711.read();
 }
 x0/=long(avg_size);
 Serial.println("Add Calibrated Mass");
 // calibration procedure (mass should be added equal to y1)
 int ii = 1;
 while(true){
   if (hx711.read()<x0+10000){
   } else {
     ii++;
     delay(2000);
     for (int jj=0;jj<int(avg_size);jj++){
       x1+=hx711.read();
     }
     x1/=long(avg_size);
     break;
   }
 }
 Serial.println("Calibration Complete");
}
void loop() {
 // averaging reading
 long reading = 0;
 for (int jj=0;jj<int(avg_size);jj++){
   reading+=hx711.read();
 }
 reading/=long(avg_size);
 // calculating mass based on calibration and linear fit
 float ratio_1 = (float) (reading-x0);
 float ratio_2 = (float) (x1-x0);
 float ratio = ratio_1/ratio_2;
 float mass = y1*ratio;
 Serial.print("Raw: ");
 Serial.print(reading);
 Serial.print(", ");
 Serial.println(mass);
}

Engineering the Motor Action

After calibrating the loadcell we started to build part for input function. We wanted this project to work without a computer. Installed a button a potentiometer and a display.

Used potentiometer take input and with map function we converted potentiometer input to single digit number then button was used for confirmation with while loop.

You input the target: Target: 40 Grams.

  1. Bulk Dispense Rate: The Arduino powers the servo motor attached to a dispensing mechanism. Because it's 40 grams, the motor spins at full speed, aggressively pushing powder out of the chute.
  2. The Dynamic Slowdown: The load cell constantly yells back the weight. Weight: 20g... 30g... 35g...
  3. The instant the weight gets close to the target, the Arduino enters the "Precision Finish" loop. It drastically slows the servo motor down to a crawl.
  4. When the scale hits the target weight, the Arduino commands the servo to stop.

After input received a while loop constantly checks if the weight reeded from loadcell is matched or not and when the desired weight reached it stops.

In the process weight constantly showed in the display. We used a round function and basic math to show the weight in display.

We also did built 3 different speed so it is going slower when the desired weight is close.

For dispense a servo motor was used. We used a basic servo.write function with different degrees for different speeds.

Lastly we added a tare function which measure weight when button pressed in the beginning so it can ignore containers weight.

Necessary System Build

  • Arduino Mega/Uno: Real-time interrupt processors.
  • Aluminum Load Cell (e.g., 1kg max limit) and the HX711 24-Bit ADC Module.
  • Servo Motor for dispensing.
  • A 3D Printer or other materials to fabricate the custom dispensing mechanism and storage hopper.

After the coding part is over we started to assembly our powder dispenser, we used duplo blocks but you can use different materials of course.

Powder Dispenser Assembly

Circuit Diagram

Board

Servo

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x Arduino IDE"
author: "proprietor"
category: "Home & Automation"
components:
  - "1x Rotary potentiometer (generic)"
  - "1x Arduino Due"
  - "1x Loadcell Sensor"
  - "1x Male/Male Jumper Wires"
  - "1x Breadboard (generic)"
  - "1x Resistor 1k ohm"
  - "1x TM1637 4-bits digital LED-display"
  - "1x Pushbutton Switch, Momentary"
  - "1x SparkFun Load Cell Amplifier - HX711"
  - "1x SG90 Micro-servo motor"
  - "1x Male/Female Jumper Wires"
description: "Precision measurements! Upgrade from cheap plastic chutes to an industrial-grade motorized auger system capable of dispensing exact gram weights of protein powder or coffee grounds."
difficulty: "Advanced"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/5fa7fed6-903a-4e65-9163-0f26e6e0be5b.ino"
encryptedPayload: "U2FsdGVkX1/wu2mtyhhpMd7ui/8/Luf+R8QwSWVke2Nq7t4QSm4JVYSjEeUVzr00HxHkXOEwecicof02TY7JM3QO5O6U7CCOu/7VfKSJeRo="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/automated-powder-dispenser-16d7c7_cover.jpg"
lang: "en"
likes: 0
passwordHash: "ec6e2637d77609c3ac83afaf610fab095684f9e6e7f1c346bd692d7cfbdbd696"
price: 1120
seoDescription: "Build an Automated powder dispenser with Arduino and a pot. Control the exact amount of powder dispensed in this DIY project."
tags:
  - "scale"
  - "dispanser"
  - "powder"
title: "Automated powder dispenser"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/6z_ZCzpVibs"
views: 7656