АЦП на базе микросхемы hx711: различия между версиями
Материал из me-robotics wiki
Artecoll (обсуждение | вклад) |
|||
| (не показаны 4 промежуточные версии 2 участников) | |||
| Строка 1: | Строка 1: | ||
[[Файл:HX711.jpg|мини|справа|Внешний вид АЦП HX711]] | [[Файл:HX711.jpg|мини|справа|Внешний вид АЦП HX711]] | ||
| − | Arduino-модуль HX711 на основе АЦП со встроенным усилителем HX711 предназначен для получения данных с тензодатчиков ( датчиков, преобразующих величину деформации в электрический сигнал). Основа модуля – специализированная микросхема HX711. | + | Arduino-модуль HX711 на основе АЦП со встроенным усилителем HX711 предназначен для получения данных с тензодатчиков (датчиков, преобразующих величину деформации в электрический сигнал). Основа модуля – специализированная микросхема HX711. |
Микросхема HX711 позволяет с высокой точностью получать показания веса или давления, оказываемого на тензодатчик (он же - тензорезистор). | Микросхема HX711 позволяет с высокой точностью получать показания веса или давления, оказываемого на тензодатчик (он же - тензорезистор). | ||
Микросхема имеет 2 канала считывания показания счётчика: А и В. Это позволяет подключать к микросхеме HX711 до 2 независимых тензодатчиков. | Микросхема имеет 2 канала считывания показания счётчика: А и В. Это позволяет подключать к микросхеме HX711 до 2 независимых тензодатчиков. | ||
| − | '''Спецификация модуля HX711 | + | ==Контакты АЦП== |
| + | *'''GND''' - земля; | ||
| + | *'''VCC''' - питание 5В; | ||
| + | *'''DT''' - линия данных (любой цифровой вход на Arduino); | ||
| + | *'''SCK''' – линия синхронизации (любой цифровой вход на Arduino); | ||
| + | *'''E–''' , '''E+''' - питание тензорного моста; | ||
| + | *'''A–''' , '''A+''' - подключение канала А; | ||
| + | *'''В–''' , '''В+''' - подключение канала В; | ||
| + | |||
| + | ==Спецификация модуля HX711== | ||
*Напряжение питания – 6-5.5 В | *Напряжение питания – 6-5.5 В | ||
*Рабочее напряжение – 5 В | *Рабочее напряжение – 5 В | ||
*Количество каналов подключения тензодатчиков – 2 | *Количество каналов подключения тензодатчиков – 2 | ||
*Коэффициент усиления: | *Коэффициент усиления: | ||
| − | # для канала А: 64, 128 | + | #для канала А: 64, 128 |
| − | # для канала В: 32 | + | #для канала В: 32 |
*Дифференциальный вход с напряжением – ± 40 мВ | *Дифференциальный вход с напряжением – ± 40 мВ | ||
*Разрядность АЦП – 24 бит | *Разрядность АЦП – 24 бит | ||
| Строка 19: | Строка 28: | ||
*Размеры: 38x21x10 мм | *Размеры: 38x21x10 мм | ||
| + | ==Схема подключения на примере 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> | ||
Текущая версия на 00:26, 12 мая 2022
Arduino-модуль HX711 на основе АЦП со встроенным усилителем HX711 предназначен для получения данных с тензодатчиков (датчиков, преобразующих величину деформации в электрический сигнал). Основа модуля – специализированная микросхема HX711. Микросхема HX711 позволяет с высокой точностью получать показания веса или давления, оказываемого на тензодатчик (он же - тензорезистор). Микросхема имеет 2 канала считывания показания счётчика: А и В. Это позволяет подключать к микросхеме HX711 до 2 независимых тензодатчиков.
Контакты АЦП
- GND - земля;
- VCC - питание 5В;
- DT - линия данных (любой цифровой вход на Arduino);
- SCK – линия синхронизации (любой цифровой вход на Arduino);
- E– , E+ - питание тензорного моста;
- A– , A+ - подключение канала А;
- В– , В+ - подключение канала В;
Спецификация модуля HX711
- Напряжение питания – 6-5.5 В
- Рабочее напряжение – 5 В
- Количество каналов подключения тензодатчиков – 2
- Коэффициент усиления:
- для канала А: 64, 128
- для канала В: 32
- Дифференциальный вход с напряжением – ± 40 мВ
- Разрядность АЦП – 24 бит
- Частота измерений – 10/80 Гц
- Рабочий ток <10 мА
- Рабочая температура – -40 – 85 °С
- Размеры: 38x21x10 мм
Схема подключения на примере 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"); // выводим текст в монитор последовательного порта
}
