/*#include "HX711.h" // Подключаем библиотеку HX711
HX711 scale; // Создаём объект шкала
#define DT A0 // Указываем номер вывода, к которому подключен вывод DT датчика HX711
#define SCK A1 // Указываем номер вывода, к которому подключен вывод SCK датчика HX711
//float calibration_factor = *419.77;
void setup() {
Serial.begin(9600);
Serial.println("Инициализация весов...");
scale.begin(DT, SCK); // Инициируем работу с платой HX711
delay(1000);
//scale.set_scale(); // Без калибровочного коэффициента
scale.tare(); // Обнуляем вес на весах (тарируем)
Serial.println("Весы готовы к работе.");
}
void loop() {
//scale.set_scale(calibration_factor);
//используем метод get_units() для получения веса,отображаемого в граммах.
//Метод scale.get_units(10) усредняет значение по 10 измерениям для точности.
Serial.print("Вес: ");
Serial.print(scale.get_units(), 1); // Получаем значение массы в граммах
Serial.println(" кг");
delay(1000);
}*/
/*
// Подключаем библиотеку HX711
#include "HX711.h"
// Определяем пины для подключения датчика
const uint8_t DATA_PIN = 3;
const uint8_t CLOCK_PIN = 4;
// Создаем объект my_scale для работы с датчиком
HX711 scale;
void setup()
{
// Инициализируем последовательное соединение на скорости 9600 бод
Serial.begin(9600);
// Инициализируем датчик, указывая пины для подключения
scale.begin(DATA_PIN, CLOCK_PIN);
scale.tare(20);
Serial.println("Калибровка датчика HX711...");
Serial.println("Убедитесь, что на весах ничего не лежит и нажпите Enter");
// Ждем подтверждения
while (Serial.available()) Serial.read();
while (Serial.available() == 0);
Serial.println("Определение смещения...");
// Получаем смещение датчика
uint32_t offset = scale.get_offset();
Serial.print("Смещение: ");
Serial.println(offset);
Serial.println();
Serial.print("Положите эталонный образец на весы и введите его вес в граммах (округлите вес до целого числа): ");
while (Serial.available()) Serial.read();
// Инициализируем переменную для хранения веса
size_t weight = 0;
// Читаем вес из ввода пользователя
while (Serial.peek() != '\n')
{
if (Serial.available())
{
char user_input = Serial.read();
// Переводим введенный вес в число
if (isdigit(user_input))
{
weight *= 10;
weight = weight + (user_input - '0');
}
}
}
Serial.print("Вес эталона: ");
Serial.println(weight);
// Калибруем датчик
scale.calibrate_scale(weight, 20);
// Получаем коэффициент масштабирования
float s_scale = scale.get_scale();
Serial.print("Коэффициент масштабирования: ");
Serial.println(s_scale, 6);
Serial.print("\nИспользуйте scale.set_offset(");
Serial.print(offset);
Serial.print("); и scale.set_scale(");
Serial.print(s_scale, 6);
Serial.print("); ");
Serial.print("в настройках вышего проекта.");
}
void loop()
{
// В этом примере loop() пуст, так как калибровка выполняется только один раз при инициализации
}*/
/*#include "HX711.h"
// Создаем объект my_scale для работы с датчиком
HX711 scale;
// Определяем пины для подключения датчика
const uint8_t DATA_PIN = 3;
const uint8_t CLOCK_PIN = 4;
// Данные, полученные при калибровке
uint32_t calibrated_scale = 0.042000;
float calibrated_offset= 378;
void setup()
{
// Инициализируем последовательное соединение на скорости 115200 бод
Serial.begin(115200);
// Инициализируем датчик, указывая пины для подключения
scale.begin(DATA_PIN, CLOCK_PIN);
// Устанавливаем полученные значения масштабирования и смещения
scale.set_scale(calibrated_scale);
scale.set_offset(calibrated_offset);
// Сбрасываем датчик до нуля
scale.tare();
}
void loop()
{
// Получаем измерение веса от датчика
float measurement = scale.get_units(10);
// Выводим измеренный вес
Serial.print("Вес: ");
Serial.println(measurement);
// Пауза перед следующим измерением
delay(100);
}*/
/*#include <LiquidCrystal.h>
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
#define DT 3
#define SCK 4
#define sw 2
long sample=0;
float val=0;
long count=0;
unsigned long readCount(void)
{
unsigned long Count;
unsigned char i;
pinMode(DT, OUTPUT);
digitalWrite(DT,HIGH);
digitalWrite(SCK,LOW);
Count=0;
pinMode(DT, INPUT);
while(digitalRead(DT));
for (i=0;i<24;i++)
{
digitalWrite(SCK,HIGH);
Count=Count<<1;
digitalWrite(SCK,LOW);
if(digitalRead(DT))
Count++;
}
digitalWrite(SCK,HIGH);
Count=Count^0x800000;
digitalWrite(SCK,LOW);
return(Count);
}
void setup()
{
pinMode(SCK, OUTPUT);
pinMode(sw, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.print(" Weight ");
lcd.setCursor(0,1);
lcd.print(" Measurement ");
delay(1000);
lcd.clear();
calibrate();
}
void loop()
{
count= readCount();
int w=(((count-sample)/val)-2*((count-sample)/val));
lcd.setCursor(0,0);
lcd.print("Measured Weight");
lcd.setCursor(0,1);
lcd.print(w);
lcd.print("g ");
if(digitalRead(sw)==0)
{
val=0;
sample=0;
w=0;
count=0;
calibrate();
}
}
void calibrate()
{
lcd.clear();
lcd.print("Calibrating...");
lcd.setCursor(0,1);
lcd.print("Please Wait...");
for(int i=0;i<100;i++)
{
count=readCount();
sample+=count;
}
sample/=100;
lcd.clear();
lcd.print("Put 100g & wait");
count=0;
while(count<1000)
{
count=readCount();
count=sample-count;
}
lcd.clear();
lcd.print("Please Wait....");
delay(2000);
for(int i=0;i<100;i++)
{
count=readCount();
val+=sample-count;
}
val=val/100.0;
val=val/100.0; // put here your calibrating weight
lcd.clear();
}*/
/*#include "HX711.h" // подключаем библиотеку для работы с АЦП и тензодатчиками
HX711 scale; // создаём объект scale для работы с тензодатчиком
uint8_t DOUT_PIN = 3; // указываем вывод DOUT, к которому подключен HX711
uint8_t SCK_PIN = 4; // указываем вывод SCK , к которому подключен HX711
float weight_of_standard = 1000.0; // указываем эталонный вес
float conversion_rate = 0.035274; // указываем коэффициент для перевода из унций в граммы
const int z = 10; // указываем количество измерений, по которым будет найдено среднее значение
float calibration_value[z]; // создаём массив для хранения считанных значений
float calibration_factor = 0; // создаём переменную для значения калибровочного коэффициента
void setup() {
Serial.begin(57600); // инициируем работу с последовательным портом на скорости 57600 бод
scale.begin(DOUT_PIN, SCK_PIN); // инициируем работу с платой HX711, указав номера выводов Arduino, к которым подключена плата
scale.set_scale(); // не калибруем полученные значения
scale.tare(); // обнуляем вес на весах (тарируем)
Serial.println("You have 10 seconds to set your known load"); // выводим в монитор порта текст о том, что у вас есть 10 секунд для установки эталонного веса на весы
delay(10000); // ждём 10 секунд
Serial.print("calibration factor: "); // выводим текст в монитор поседовательного порта
for (int i = 0; i < z; i++) { // запускаем цикл, в котором
calibration_value[i] = scale.get_units(1) / (weight_of_standard / conversion_rate); // считываем значение с тензодатчика и переводим его в граммы
calibration_factor += calibration_value[i]; // суммируем все значения
}
calibration_factor = calibration_factor / z; // делим сумму на количество измерений
Serial.println(calibration_factor); // выводим в монитор порта значение корректирующего коэффициента
}
void loop() {}
*/
/*#include "HX711.h" // подключаем библиотеку для работы с тензодатчиком
#define DT 3 // Указываем номер вывода, к которому подключен вывод DT датчика
#define SCK 4 // Указываем номер вывода, к которому подключен вывод SCK датчика
HX711 scale; // создаём объект scale
float calibration_factor = -0.01; // вводим калибровочный коэффициент
float units; // задаём переменную для измерений в граммах
float ounces; // задаём переменную для измерений в унциях
void setup() {
Serial.begin(9600); // инициируем работу последовательного порта на скорости 9600 бод
scale.begin(DT, SCK); // инициируем работу с датчиком
scale.set_scale(); // выполняем измерение значения без калибровочного коэффициента
scale.tare(); // сбрасываем значения веса на датчике в 0
scale.set_scale(calibration_factor); // устанавливаем калибровочный коэффициент
}
void loop() {
Serial.print("Reading: "); // выводим текст в монитор последовательного порта
for (int i = 0; i < 10; i ++) { // усредняем показания, считав значения датчика 10 раз
units = + scale.get_units(), 10; // суммируем показания 10 замеров
}
units = units / 10; // усредняем показания, разделив сумму значений на 10
ounces = units * 0.035274; // переводим вес из унций в граммы
Serial.print(ounces); // выводим в монитор последовательного порта вес в граммах
Serial.println(" grams"); // выводим текст в монитор последовательного порта
}*/
#include <HX711.h>
HX711 scale;
#define DT 3
#define SCK 4// Инициализация датчика
void setup()
{
Serial.begin(9600);
Serial.println("Инициализация весов...");
scale.begin(DT, SCK); // Инициируем работу с платой HX711
delay(1000);
scale.set_scale(); // Без калибровочного коэффициента
boolean _tare = false;
scale.tare(); // Обнуляем вес на весах (тарируем)
Serial.println("Весы готовы к работе.");// Установка пинов для подключения датчика веса
}
void loop()
{// Получение значения
float weight = scale.get_units();// Вывод значения веса на серийный порт
Serial.print("VES: ");
Serial.print(weight);
Serial.println(" kg");// Задержка перед следующим измерениемdelay(1000);
}