Опять весы, опять HX711..

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

Суть задачи такова.

Имеем кухонные весы с 4-мя тензодатчиками включенными в мост (вся аппаратная часть аналогична теме http://arduino.ru/forum/apparatnye-voprosy/hx711#comment-179926). Так как "плавающие" показания веса убить не удалось возникла идея выводить текущий вес на экран не постоянно, а тогда, когда нам это нужно, а текст на экране заменять словом "Измерение" и показывать бегущие кубики (как в уроках Джереми).

Теперь зачем мне это нужно.

Это будет некое устройство, которое будет измерять расход жидкости. Жидкость в сосуде известного объема, который, в свою очередь находится на весах. Нам известен вес полного сосуда, скажем 700 грамм, и вес почти пустого 100 грамм. Жидкость будет наливаться в сосуд посредством насоса и забираться оттуда потребителем. Когда вес сосуда 100 грамм ардуино должен дать команду на включение насоса (через реле и транзистор), при достижении веса 700 грамм отключаем насос, обнуляем вес и замеряем время, за которое мы израсходовали 600 грамм жидкости. В это время на дисплее надпись "Измерение" и весело бегущие кубики. По достижении веса сосуда 100 грамм выводим на экран расход жидкости в грамм за минуту.

Аппаратная часть для меня не представляет сложностей.

Скетч для измерения веса и вывода его на экран я тоже написал.

Но вот как написать такую программу я не знаю. В ардуино пока разобрался весьма поверхностно, поэтому прошу помощи в написании кода, или хотя бы совет какие операторы и команды для этого использовать.

Спасибо заранее.

 

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016
#include "HX711.h"
#include <LiquidCrystal.h>

#define DOUT  A1
#define CLK  A0

LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
HX711 balanza(DOUT, CLK);
HX711 scale (A1, A0, 64);
// Анимация кубики
byte p20[8] = {
  B10000,
  B10000,
  B10000,
  B10000,
  B10000,
  B10000,
  B10000,
};
byte p40[8] = {
  B11000,
  B11000,
  B11000,
  B11000,
  B11000,
  B11000,
  B11000,
};
byte p60[8] = {
  B11100,
  B11100,
  B11100,
  B11100,
  B11100,
  B11100,
  B11100,
};
byte p80[8] = {
  B11110,
  B11110,
  B11110,
  B11110,
  B11110,
  B11110,
  B11110,
};
byte p100[8] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
};

void setup() {
lcd.begin(16, 2);
 
 balanza.set_scale(110400); // Градуирование весов
 balanza.tare(10);  //Текущий вес считается нулевым или тарой
 lcd.setCursor(0, 0);
 lcd.print ("\xA8\x70\x6F\xB4\x70\x65\xB3 \xE3\x61\xBF\xC0\xB8\xBA\x6F\xB3"); //надпись Прогрев датчаков. В данном случае необходима задержка в 10 секунд для прогрева тензодатчиков.
 //Вместо функции delay применяем анимацию, которая длиться ровно 10 секунд
 lcd.setCursor(0, 1);
 lcd.print ("                ");
   
   for (int i = 0; i<16; i++)
   {
    for (int j = 0; j<5; j++)
    {
      lcd.setCursor (i,1);
      lcd.write(j);
      delay (125);
    }
   }
 balanza.set_scale(110400); // Градуирование весов
 balanza.tare(50);  //Текущий вес считается нулевым или тарой
 lcd.setCursor(0, 0);
 lcd.print ("                ");
 lcd.setCursor(0, 1);
 lcd.print ("                ");
};

void loop() {
  lcd.setCursor(1,1);
  lcd.print("B\x65\x63 \x3D "); //Надпись "Вес = "
  lcd.print(balanza.get_units(10),3);
  lcd.print(" kg");
  lcd.print("       ");
  delay(1);
  };

 

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

Это код весов. Библиотека НХ711 была немного модифицирована, уменьшен в 2 раза коэффициент усиления.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Jackson_KHV пишет:

В ардуино пока разобрался весьма поверхностно, поэтому прошу помощи в написании кода

Так может сначала разобраться поглубже, а потом браться за сложные проекты? А то как-то телега впереди лошад стоит.

Jackson_KHV пишет:

хотя бы совет какие операторы и команды для этого использовать.

Рекомендую использовать конструкции и операторы bool, break, case, char, class, const, continue, default, delete, do, double, else, enum, export, extern, false, float, for, friend, goto, if, inline, int, long, new, operator, or, private, protected, public, register, return, short, signed, sizeof, static, struct, switch, template, this, true, typedef, union, unsigned, virtual, void, volatile и while. 

 

 

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

ЕвгенийП пишет:

Так может сначала разобраться поглубже, а потом браться за сложные проекты? А то как-то телега впереди лошад стоит.

 

 

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

В том то и дело, что нужно сделать, а разбираться придется в процессе..

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Jackson_KHV пишет:

В том то и дело, что нужно сделать, а разбираться придется в процессе..

Удачи!

den-ga
Offline
Зарегистрирован: 26.02.2016

ЕвгенийП вы работали с тензо датчиками?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Нет. Бог миловал :)