Библиотека работы с датчиками (АЦП) HX711 для Arduino
- Чтение
- Смена усиления и канала
- Спящий режим
- Калибровка
Совместима со всеми Arduino платформами (используются Arduino-функции)
- Библиотеку можно найти по названию GyverHX711 и установить через менеджер библиотек в:
- Arduino IDE
- Arduino IDE v2
- PlatformIO
- Скачать библиотеку .zip архивом для ручной установки:
- Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
- Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
- Распаковать и положить в Документы/Arduino/libraries/
- (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
- Читай более подробную инструкцию по установке библиотек здесь
- Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
- Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
- Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
GyverHX711 sensor(data, clock, chan);
// константы chan:
// HX_GAIN128_A - канал А усиление 128
// HX_GAIN32_B - канал B усиление 32
// HX_GAIN64_A - канал А усиление 64
bool available(); // true - доступен для чтения
long read(); // получить данные
void tare(); // тарировать (автоматическая калибровка)
void setOffset(long cal); // установить оффсет вручную
long getOffset(); // получить оффсет
void sleepMode(bool mode); // true - режим сна, false - проснуться
void setChannel(uint8_t chan); // установить канал и усиление HX_GAIN128_A/HX_GAIN32_B/HX_GAIN64_A
// ПРИМЕНЯЕТСЯ ПОСЛЕ СЛЕДУЮЩЕГО ВЫЗОВА read()!
АЦП имеет два скоростных режима, настраивается подачей сигнала на 15 ножку (пин RATE):
- LOW (GND): 10 измерений в секунду (каждые 100 мс)
- HIGH (VCC): 80 измерений в секунду (каждые 12.5 мс)
- На китайском модуле скорость выбирается перемычкой (нулевой резистор)
Доступность новых данных проверяется в available()
. Если запросить read()
раньше - библиотека вернёт предыдущее измерение.
Рекомендуется использовать конструкцию if (sensor.available()) val = sensor.read();
При вызове функции tare()
произоайдёт автоматическая калибровка: текущий сигнал с датчика (вес на весах)
будет принят за 0. Функция tare()
берёт последнее полученное значение с датчика, поэтому в некоторых случаях
есть смысл вызывать её внутри available()
и после read()
. Если калибровка вызывается при старте программы,
когда данные с датчика ещё не были получены, то в ней автоматически будет вызван read()
. Поэтому рекомендуется
выждать некоторое время между стартом МК и вызовом tare()
(в районе 200мс).
Один тензодатчик:
- Красный: E+
- Чёрный: E-
- Белый: A-
- Зелёный: A+
Подключение платы к МК:
- GND, VCC: питание 2.5-5V
- SCK, DT: любые IO пины
Остальные примеры смотри в examples!
#include <GyverHX711.h>
GyverHX711 sensor(3, 2, HX_GAIN64_A);
// HX_GAIN128_A - канал А усиление 128
// HX_GAIN32_B - канал B усиление 32
// HX_GAIN64_A - канал А усиление 64
void setup() {
Serial.begin(9600);
// если тарирование при первом запуске -
// нужно выждать готовность датчика
delay(500);
sensor.tare(); // калибровка нуля
//sensor.sleepMode(true); // выключить датчик
//sensor.sleepMode(false); // включить датчик
}
void loop() {
// чтение только по доступности! if available
if (sensor.available()) {
Serial.println(sensor.read());
}
}
- v1.0
- v1.1 (pull VardenTheOne) - отрицательные значения, убран фильтр, тарирование до получения первого значения
- v1.1.1 - убраны лишние переменные после v1.1
- v1.2 - добавлена возможность менять канал/усиление на лету
При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!
При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
- Версия библиотеки
- Какой используется МК
- Версия SDK (для ESP)
- Версия Arduino IDE
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код