АЦП на базе микросхемы hx711
Материал из MIK32 микроконтроллер
Arduino-модуль HX711 на основе АЦП со встроенным усилителем HX711 предназначен для получения данных с тензодатчиков ( датчиков, преобразующих величину деформации в электрический сигнал). Основа модуля – специализированная микросхема HX711. Микросхема HX711 позволяет с высокой точностью получать показания веса или давления, оказываемого на тензодатчик (он же - тензорезистор). Микросхема имеет 2 канала считывания показания счётчика: А и В. Это позволяет подключать к микросхеме HX711 до 2 независимых тензодатчиков.
Спецификация модуля HX711
- Напряжение питания – 6-5.5 В
- Рабочее напряжение – 5 В
- Количество каналов подключения тензодатчиков – 2
- Коэффициент усиления:
- для канала А: 64, 128
- для канала В: 32
- Дифференциальный вход с напряжением – ± 40 мВ
- Разрядность АЦП – 24 бит
- Частота измерений – 10/80 Гц
- Рабочий ток <10 мА
- Рабочая температура – -40 – 85 °С
- Размеры: 38x21x10 мм
Контакты АЦП
- GND - земля;
- VCC - питание 5В;
- DT - линия данных (любой цифровой вход на Arduino);
- SCK – линия синхронизации (любой цифровой вход на Arduino);
- E– , E+ - питание тензорного моста;
- A– , A+ - подключение канала А;
- В– , В+ - подключение канала В;
Схема подключения на примере Arduino Uno
Пример кода
#include "HX711.h" // библиотека для работы с АЦП #define DT A0 // Указываем номер вывода данных DT #define SCK A1 // Указываем номер вывода синхронизации SCK HX711 scale; // создаём объект scale float calibration_factor = -14.15; // калибровочный коэффициент (необходимо сначала определить) 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"); // выводим текст в монитор последовательного порта }