HX 711 плавает ноль
- Войдите на сайт для отправки комментариев
Понимаю, что точность у меня до сотых грамма при максимальном весе 3 кг, но, тем не менее, пытаюсь добиться четкого нуля нажатии на ресет, ну или при загрузке. Удалось удерживать ноль отсечением любых показаний меньше 0,2 гр. Этот способ сейчас реализован в скетче. Но проблема, если снимаем с весов вес вместе с тарой, весы обнуляются, а должны уйти в минус. Получается, если снова ставишь этот же вес вместе с тарой на весы, то получаешь вес вместе с тарой. Нехорошо как-то. Думаю, надо задать диапазон данных, при которых показания будут обнуляться автоматически, скажем при показаниях от -0,2 до 0,2 гр., но как это сделать не могу понять. В общем, прошу помочь решить этот вопрос, или предложить другой способ борьбы с плавающим нулем. Зараннее спасибо.
[code] #include <EEPROM.h> #include <HX711.h> // Подключаем библиотеку HX711 для работы с АЦП hx711 #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //#define batton_mode 2 // кнопка mode #define batton_up 4 // кнопка up #define batton_down 3 // кнопка down int OutLed = 7; // светодиод сигнала достижения веса #define OutBuzzer A3 // выход на звуковой сигнал #define battonReset 6 // кнопка reset HX711 scale1 ; // Создаем весы float myScale1 ; // Переменные веса int desired_weight ; // переменная заданного веса в граммах //int count_dispenser ; // переменная для подсчета нажатий на кнопку mode (вход в режим настроек) void setup() { EEPROM.get (0, desired_weight ); // pinMode(batton_mode, INPUT_PULLUP); pinMode(batton_up, INPUT_PULLUP); pinMode(batton_down, INPUT_PULLUP); pinMode(battonReset, INPUT_PULLUP); pinMode(OutLed, OUTPUT); pinMode(OutBuzzer, OUTPUT); Serial.begin(9600); lcd.begin(16, 2); scale1.begin(/*DT(DOUT)*/A1,/*SCK*/A0); scale1.set_scale(994); //531 // Устанавливаем калибровочный коэффициент весов. scale1.tare(); // Сбрасываем весы 1 на 0 } void loop(){ if (digitalRead (batton_up) == !HIGH) // кнопка увеличения заданного веса {desired_weight = desired_weight + 100; if (desired_weight > 3000) desired_weight = 3000; delay(300); } if (digitalRead (batton_down) == !HIGH) // кнопка уменьшения заданного веса {desired_weight = desired_weight - 100; if (desired_weight < 0) desired_weight = 0; delay(300); } EEPROM.put (0, desired_weight ); int tare = digitalRead (battonReset); // читаем кнопку ресет myScale1 = scale1.get_units(); // Запоминаем среднее значение на весах 1 без груза, но с учетом тары. // ---------- управляем установкой нуля ----------------- if (myScale1 < 0.2)//задаем значение при котором будет происходить обнуление {scale1.tare(); myScale1 = 0;} // delay(50); // ------------------------ нажатие кнопки "калибровка" ----------------- if (tare == HIGH) {scale1.tare();} // ------------------ сравниваем вес с заданным весом ------------------------- if (myScale1 >= desired_weight) {digitalWrite(OutLed,!HIGH); tone(A3, 5000); delay(100); noTone(A3); } if ((myScale1 >= -(desired_weight/10)) && (myScale1 <= (desired_weight/10))) {digitalWrite(OutLed,!LOW);}/// // ------------ выводим в сериал порт ----------------------------- Serial.print(digitalRead (batton_up)); Serial.print(" "); Serial.print(digitalRead (batton_down)); Serial.print(" "); Serial.print (desired_weight); Serial.print(" ves1 "); Serial.println(myScale1,1); // -------------Подпрограмма вывода на дисплей ------------------------------- lcd.clear(); lcd.setCursor(1,0); lcd.print(myScale1,1); lcd.setCursor(11,0); lcd.print(desired_weight); } [/code]
Схему покажите, пожалуйста.
Схему покажите, пожалуйста.
Досадно, но в редакторах чертить не умею. От руки если только. Не думал даже что может понадобиться. Но вроде все стандартно. Что куда подключается видно по скетчу. HX711 на А1, А0. Свисток А3. Кнопки D3, D4 соответственно замыкают на 0. Тензодатчик к HX711, тоже стандартно. Его если перепутаешь, мерять не будет. Вроде все. Если что упустил, укажите, сообщу.
Метод tare() сбрасывает в ноль, и означает "на весах стоит тара". Если вы хотите, чтобы тара уже не учитывалась - надо вызывать метод set_offset с параметром 0 - тогда вес ранее запомненной тары учитываться не будет.
Спасибо за подсказку. Буду думать как это реализовать.