АЦП на базе микросхемы hx711: различия между версиями

Материал из me-robotics wiki
 
(не показаны 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;        // калибровочный коэффициент (необходимо сначала определить)
*'''GND''' - земля;
+
float units;                              // переменная для измерений в граммах
*'''VCC''' - питание 5В;
+
float ounces;                             // в унциях
*'''DT''' - линия данных (любой цифровой вход на Arduino);
+
 
* '''SCK''' – линия синхронизации (любой цифровой вход на Arduino);
+
void setup() {
*'''E–''' , '''E+'''  - питание тензорного моста;
+
  Serial.begin(9600);                     // работу порта на 9600 бод
*'''A–''' , '''A+'''  - подключение канала А;
+
  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

Внешний вид АЦП HX711

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
  • Коэффициент усиления:
  1. для канала А: 64, 128
  2. для канала В: 32
  • Дифференциальный вход с напряжением – ± 40 мВ
  • Разрядность АЦП – 24 бит
  • Частота измерений – 10/80 Гц
  • Рабочий ток <10 мА
  • Рабочая температура – -40 – 85 °С
  • Размеры: 38x21x10 мм

Схема подключения на примере Arduino Uno

ТР с АЦП.jpg

Пример кода

#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");               // выводим текст в монитор последовательного порта
}