АЦП на базе микросхемы hx711: различия между версиями
Материал из MIK32 микроконтроллер
Artecoll (обсуждение | вклад) Нет описания правки |
Artecoll (обсуждение | вклад) Нет описания правки |
||
Строка 5: | Строка 5: | ||
==Спецификация модуля HX711== | |||
*Напряжение питания – 6-5.5 В | *Напряжение питания – 6-5.5 В | ||
*Рабочее напряжение – 5 В | *Рабочее напряжение – 5 В | ||
Строка 20: | Строка 20: | ||
==Контакты АЦП== | |||
*'''GND''' - земля; | *'''GND''' - земля; | ||
*'''VCC''' - питание 5В; | *'''VCC''' - питание 5В; | ||
Строка 28: | Строка 28: | ||
*'''A–''' , '''A+''' - подключение канала А; | *'''A–''' , '''A+''' - подключение канала А; | ||
*'''В–''' , '''В+''' - подключение канала В; | *'''В–''' , '''В+''' - подключение канала В; | ||
==Схема подключения на примере Arduino Uno== | |||
[[Файл:ТР с АЦП.jpg|обрамить|центр]] | |||
==Пример кода== | |||
<syntaxhighlight lang="c"> | |||
#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"); // выводим текст в монитор последовательного порта | |||
} | |||
</syntaxhighlight> |
Версия от 23:38, 28 мая 2021
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"); // выводим текст в монитор последовательного порта }