Тензодатчик ардуино подключение через hx711 и использование

Содержание

Подключение:

Тензодатчик (мостовой)

У данного тензодатчика 4 выходных провода:

Провода тензодатчика Выводы микросхемы HX711
Красный провод E+
Чёрный провод E-
Зелёный провод A-
Белый провод A+

Тензодатчик (полумостовой)

У данного тензодатчика 3 выходных провода:

Провода тензодатчика Выводы микросхемы HX711
Красный провод E+
Чёрный провод E-
Белый провод A+
Провода тензодатчика Выводы микросхемы HX711
Зелёный провод A-

HX711

Данная плата подключается к Arduino по 4 проводам:

Выводы микросхемы HX711 Выводы Arduino
GND GND
VCC 5V
DT любой цифровой вывод (указывается в скетче)
SCK любой цифровой вывод (указывается в скетче)

Подключение HX711 к Arduino можно осуществить одним из 2 способов:

  1. Напрямую к плате Arduino/Piranha UNO:
  2. К одному из шилдов для подключения:

Programming Arduino UNO to Measure Weight in Kgs

Calibration Sketch

For this program to run you need HX711 Library Download from here hx711-master

/*
 * https://circuits4you.com
 * 2016 November 25
 * Load Cell HX711 Module Interface with Arduino to measure weight in Kgs
 Arduino 
 pin 
 2 -> HX711 CLK
 3 -> DOUT
 5V -> VCC
 GND -> GND

 Most any pin on the Arduino Uno will be compatible with DOUT/CLK.
 The HX711 board can be powered from 2.7V to 5V so the Arduino 5V power should be fine.
*/

#include "HX711.h"  //You must have this library in your arduino library folder

#define DOUT  3
#define CLK  2

HX711 scale(DOUT, CLK);

//Change this calibration factor as per your load cell once it is found you many need to vary it in thousands
float calibration_factor = -96650; //-106600 worked for my 40Kg max scale setup 

//=============================================================================================
//                         SETUP
//=============================================================================================
void setup() {
  Serial.begin(9600);
  Serial.println("HX711 Calibration");
  Serial.println("Remove all weight from scale");
  Serial.println("After readings begin, place known weight on scale");
  Serial.println("Press a,s,d,f to increase calibration factor by 10,100,1000,10000 respectively");
  Serial.println("Press z,x,c,v to decrease calibration factor by 10,100,1000,10000 respectively");
  Serial.println("Press t for tare");
  scale.set_scale();
  scale.tare(); //Reset the scale to 0

  long zero_factor = scale.read_average(); //Get a baseline reading
  Serial.print("Zero factor: "); //This can be used to remove the need to tare the scale. Useful in permanent scale projects.
  Serial.println(zero_factor);
}

//=============================================================================================
//                         LOOP
//=============================================================================================
void loop() {

  scale.set_scale(calibration_factor); //Adjust to this calibration factor

  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 3);
  Serial.print(" kg"); //Change this to kg and re-adjust the calibration factor if you follow SI units like a sane person
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.println();

  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 10;
    else if(temp == 's')
      calibration_factor += 100;  
    else if(temp == 'x')
      calibration_factor -= 100;  
    else if(temp == 'd')
      calibration_factor += 1000;  
    else if(temp == 'c')
      calibration_factor -= 1000;
    else if(temp == 'f')
      calibration_factor += 10000;  
    else if(temp == 'v')
      calibration_factor -= 10000;  
    else if(temp == 't')
      scale.tare();  //Reset the scale to zero
  }
}
//=============================================================================================

Схемы подключения датчика давления воздуха

Следующая конструкция построена на сенсоре-анероиде BMP180. Экран, в нее входящий, будет отображать текущее давление атмосферного воздуха и температуру окружающей среды. Для изготовления понадобятся:

Элемент Наименование/характеристика Количество
Микроконтроллер Arduino UNO/Nano 1
Датчик BMP180 1
Экран HD447080LCD-1602 1
Резистор 100 Ом 1
Регулируемый резистор До 10 кОм 1

Ну и конечно провода для связки всего названого в единую систему.

Библиотека, управляющая сенсором берется тут: https://github.com/adafruit/Adafruit-BMP085-Library

Принципиальная схема

Фотография итогового устройства:

Плата-шилд самодельная, для желающих повторить, она вблизи:

Датчик питается от 3.3V, соответственно и подключаются его контакты получения энергии (VCC и GND) к плате Arduino. Для передачи данных используются входы A5 (SCL) и A4(SDA). Дисплей с микроконтроллером соединяется согласно следующей таблицы:

Arduino Экран
D6 E и D4 вместе
D4 D5
D3 D6
D2 D7
GND GND
D7 RS

Скетч

Приведенная программа — всего лишь базис операций. Ее можно модифицировать по собственному разумению, добавляя функции отслеживания давления или температуры. Можно даже использовать конечное устройство, после необходимой модификации кода, в качестве своеобразного барометра, предупреждающего об идущей буре. Показания давления, в названом случае сильно упадут.

Как подключить АЦП HX711 к NRF52832 +19

  • 29.09.20 14:35


vitalichik

#521244

Хабрахабр


Из песочницы

2800

Программирование микроконтроллеров, Из песочницы, Беспроводные технологии

1. Введение

Задача оказалась не простой, так как столкнулся с отсутствием какой — либо внятной информации. Вероятнее, что «корень зла» находится в самом SDK от Nordic Semiconductor — это постоянное обновления версий, некоторая избыточность и запутанность функционала. Пришлось писать все с нуля.

Я думаю эта тема довольно актуальна исходя из того, что данный чип обладает BLE стеком и целым набором “вкусняшек” режима энергосбережения. Но в техническую часть я сильно углубляться не буду, так как на эту тему написано немало статей.

2. Описание проекта

Железо:

  • Adafruit Feather nRF52 Bluefruit LE (то что оказалось под рукой)
  • АЦП HX711
  • Китайские тензодатчики 2 шт. (50х2 кг)
  • Программатор ST-LINK V2

Софт:

  • IDE VSCODE
  • NRF SDK 16
  • OpenOCD
  • Программатор ST-LINK V2

Все находится в одном проекте, придется только подшаманить Makefile (указать расположение вашего SDK).

3. Описание кода

Будем использовать GPIOTE модуль для работы с периферией исходя из привязки задач и событий, а также PPI модуль для передачи данных из одной периферии в другую без участия процессора.

Настраиваем линию данных DOUT для считывания состояния готовности HX711, при наличии низкого уровня срабатывает обработчик в котором отключаем прерывание и запускаем таймер для генерации синхронизирующих импульсов на выходе PD_SCL .

После чего инициализируем PPI модуль и коммутируем наш таймер к выходу PD_SCL, для генерирования импульсов длительность 10мкс при наступление события сравнения, а также включаем GPIOTE модуль.

Инициализируем нулевой таймер и его обработчик.

Самое интересное происходит в обработчике таймера. Период импульсов составляет 20 мкс. Нас интересуют нечетные импульсы (по восходящему фронту) и при условии, что их количество не более 24, а событий — 48. При каждом нечетном событии происходит считывание DOUT

Из даташита следует, что количество импульсов должно быть не менее 25, что соответствует коэффициенту усиления 128 (в коде я использовал 25 импульсов), это эквивалентно 50 событиям таймера, что указывает на окончание фрейма данных.

После этого отключаем таймер и обрабатываем данные (по даташиту) и переводим HX711 в режим низкого энергопотребления.

Ожидаем события от RTC таймера с интервалом в 10 с (эту уже на ваше усмотрение) в обработчике запускаем HX711, вызывая прерывание по линии DOUT.
Есть еще один момент, логи выводятся через UART (baud rate 115200, TX — 6 пин, RX — 8 пин) все настройки находятся в sdk_config.h

Выводы

Спасибо всем за внимание, надеюсь эта статья будет полезной и сократит драгоценное время на поиск решения для разработчиков. Хочу сказать, что технический подход который использует Nordic в своих платформах довольно интересен с точки зрения энергоэффективности

P.S.

Проект еще в процессе разработки, поэтому если будет интересна эта тема в следующей статье я постараюсь описать алгоритм калибровки датчиков веса, а также подключения BLE стека.

Тензодатчик и НХ711

В состав микросхемы входит интегральный стабилизатор напряжения, что исключает необходимость применения внешнего стабилизатора. На вход синхронизации может быть подан любой импульсный сигнал от внешнего источника, вместе с тем АЦП допускает работу от встроенного генератора.

Основные технические характеристики НХ711:

  • Разрядность АЦП – 24 бит
  • Усиление по входу А – 64 или 128
  • Усиление по входу В – 32
  • Частота измерений – 10 или 80 раз в секунду
  • Питающее напряжение – 2,6-5,5 В
  • Потребляемый ток – менее 10 мА
  • Входное напряжение – ± 40 мВ

На плате с АЦП имеются два разъёма – J1 и JP2, на которых имеются следующие обозначения:

  • J1
    • E –, E + питание тензорного моста
    • A –, A + дифференциальный вход канала А
    • В –, В + дифференциальный вход канала В
  • JP2
    • GND, VCC питание
    • DT, SCK – информационные шины

Исходный код программы

Прежде чем приступить к написанию программы для нашего устройства, вспомним немного основы работы с АЦП в Arduino Uno. Плата Arduino имеет шесть каналов АЦП. Мы можем использовать любой из них. Разрешение АЦП Arduino составляет 10 бит – то есть мы сможем работать с диапазоном целых чисел (0-(2^10) 1023)). Это означает что данный АЦП преобразует входное напряжение от 0 до 5 Вольт в целое число от 0 до 1023. То есть имеем точность АЦП 5/1024= 4.9 мВ. То есть один шаг приращения целого числа на выходе АЦП равен изменению в 4.9 мВ на его входе.

В нашей схеме для АЦП мы будем использовать канал A0. Для осуществления функций АЦП мы должны в программе сделать следующие вещи:

Все каналы АЦП платы Arduino Uno имеют опорное напряжение 5В – то есть это максимальное значение входного напряжения, которое способны обрабатывать данные каналы. Поскольку, к примеру, некоторые датчики обеспечивают на своем выходе диапазон напряжений 0-2.5В, то использование опорного напряжения 5В в данном случае приведет к уменьшению точности измерений. Поэтому в подобных случаях для изменения опорного напряжения целесообразно использовать функцию “analogReference();”. Мы в рассматриваемом случае оставим значение опорного напряжения без изменений.

По умолчанию разрешающая способность каналов АЦП платы Arduino Uno составляет 10 бит. Однако в некоторых случаях (например, для увеличения скорости преобразования) можно уменьшить эту разрешающую способность с помощью команды “analogReadResolution(bits);”. Мы в нашем примере не будем изменять разрешающую способность каналов АЦП.

Если все необходимые настройки канала АЦП сделаны (или оставлены по умолчанию), то для чтения значения с выхода АЦП можно воспользоваться функцией “analogRead(pin);”, где pin обозначает контакт платы Arduino, который мы будем использовать для аналого-цифрового преобразования, в нашем случае это будет контакт “A0”. Для того чтобы сразу сохранить значение с выхода АЦП в переменной целого типа можно использовать команду вида ”int SENSORVALUE = analogRead(A0);”, в результате этой команды значение с выхода АЦП будет сохранено в переменной “SENSORVALUE”.

Контакты платы Arduino Uno, на которых возможно формирование ШИМ сигнала, обозначены символом “~”. Всего таких каналов на плате Arduino Uno шесть. Мы в рассматриваемом примере для формирования ШИМ сигнала будем использовать контакт PIN3.

Как использовать ШИМ сигнал в Arduino? Это можно сделать, к примеру, с помощью функции analogWrite(3,VALUE) – эта функция на 3-м контакте сформирует ШИМ сигнала со значением (коэффициентом заполнения), определяемым параметром VALUE. Параметр VALUE может изменяться в диапазоне от 0 до 255. 0 соответствует самому низшему значению, а 255 – самому высшему. При VALUE=255 в результате приведенной команды мы получим 5В на контакте PIN3. Если VALUE=125, то на PIN3 мы получим среднее значение напряжения равное 2,5 В.

То есть на выходе АЦП значение может изменяться в диапазоне 0-1024, а коэффициент заполнения ШИМ может изменяться в диапазоне 0-255. То есть значение на выходе АЦП примерно в 4 раза превышает значение необходимого нам коэффициента заполнения сигнала ШИМ. Поэтому если мы разделим значение с выхода АЦП на 4, то мы получим примерное значение нужного нам коэффициента заполнения ШИМ.

В этом случае среднее значение напряжение на выходе ШИМ сигнала будет изменяться линейно с изменением напряжения на выходе делителя напряжения. Поэтому если мы подадим этот сигнал ШИМ на звонок, то мы получим громкость звонка линейно зависящую от значения напряжения на выходе делителя напряжения, которое, в свою очередь, линейно зависит от значения сопротивления датчика силы.

Далее представлен полный текст программы.

Load Cell Connection diagram and its Pinout

HX711 Module

HX711 Module

Most Load cell have four wires red, black, green and white. On HX711 board you will find E+, E-, A+, A- and B+, B- connections. Connect load cell

Red wire to E+

Black wire to E-

Green wire to A-

White wire to A+

Load Cell

Load cell comes in various weights depending on your application select the load cell weight specification, In this tutorial I have used 40Kg, Precision Grade C2 load cell. Load cell also have precision type. 

Precision classes explained: Which load cell for which application?

Load cells are ranked, according to their overall performance capabilities, into differing accuracy classes or grades. A specific accuracy grade specifies an error envelope for certain parameters, such as linearity, hysteresis, temperature effects, creep, etc. In practice, certain system accuracy parameters depend considerably on the application of use, physical load introduction to the transducer and disturbing factors such as Zener barriers and surge protection devices.

Load Cell Classification

Load cells with different accuracy classes are required depending on the application. The chart provides an overview of typical applications, ranging from the lowest to the highest accuracy class.

Load cells with relatively low accuracy classified D1 to C2 are sufficient forsimple building materials scales used to weigh sand, cement or water.

Adding the right proportion of additives to building materials is essential. For this purpose, special building materials scales using accuracy class C3 load cells are available for mixing additives such as ash or sand .

Accuracy class C3 load cells are widely used in machine construction as well. Here, scales contribute to quality assurance, for example, when ball bearingsare checked.

However, increased accuracy is needed with shop-counter scales or scales used in filling machines. Grams or micrograms are required here. Load cells used in these applications comply with accuracy classes C3 to C6.

Схема датчика освещения на фоторезисторе и реле

Примеры скетча для работы с реле приведены в статье, посвященной программированию реле в ардуино. В данном случае, нам не нужно делать сложных телодвижений: после определения «темноты» мы просто включаем реле, подавай на его пин соответствующее значение.

#define PIN_RELAY 10
#define PIN_PHOTO_SENSOR A0

void setup() {
  pinMode(PIN_RELAY, OUTPUT);
  digitalWrite(PIN_RELAY, HIGH);
}

void loop() {
  int val = analogRead(PIN_PHOTO_SENSOR);
  if (val < 300) {
    // Светло, выключаем реле
    digitalWrite(PIN_RELAY, HIGH);
  } else {
    // Темновато, включаем лампочку
    digitalWrite(PIN_RELAY,  LOW);
  }
}

Комментарии 53

я подозреваю, что появление «все есть, дешево, но мусор», не исключает «либо дорого».

по теме — вот прибыль меда веснойлетом — понятный процесс и для чего. А мониторинг убыли веса зимой пчеловодам не интересен?

Как много в этом звуке.

С точностью у китайцев проблемы.

В самом АЦП можно установить три коэффициента усиления 128, 64 и 32.

Но в итоге на 64 некоторые пользователи отмечают более стабильные показания и выше точность против 128.

так и не понял, что это значит? что и где поменялось то?

эм, падение где? на каком элементе?

Если измерять между точками GND и E+ напряжение падает на 100мВ против GND и VCC, независимо от номиналов делителя на R1, R2.

E+ и E- напряжение задается делителем, но ниже чем входное на 750мВ.

Дока-же гласит: The output voltage is equal to VAVDD=VBG*(R1+R2)/ R1 (Fig. 1). This voltage should be designed with a minimum of 100mV below VSUP voltage.

То-есть VAVDD — это напряжение на контактах E+ и E-, VSUP — входное напряжение

Странный у Вас перевод документации. Я больше сию фразу понял так:

Выходное напряжение равно /далее формула/. Это напряжение должно быть рассчитано (задано разработчиком) как минимум на 100мВ ниже чем напряжение VSUP.

Перевели мы ее правильно, просто эти строки советуют выбирать значение выходного напряжения минимум на 100мВ ниже чем напряжение питания схемы.

По-сути они правы, ибо на 750мВ — еще ниже ;-), но пользователи берут за основу число из документации.

вопрос, на сей чудной плате E- с GND не соединен?

Сказать по правде, — не соединен Только что еще одним тестером перепроверил. Плата — однослойная — дорожек не наблюдается.

В доке тоже все туманно:

То-есть земля должна быть вроде одна, но на плате начертили MCU GND и ADC GND

Так соедините, иначе у Вас схема не соответствует datasheet-у.

Этой статье не место на Хабре. Ей место на форуме ардуинщиков. После прочтения статьи становиться ясно, что автор профан в электронике.

Документацию пишут люди. Людям свойственно ошибаться. Ошибки в документации встречаются и у более именитых производителей. Как говориться доверяй, но проверяй. Формула приведена к рисунку 1, где сам рисунок?

Данное утверждение в корне не верно, все зависит от схемотехники.

Удивление автора, по поводу трассировки платы от дядюшки Ляо из Чайнариладж, вообще странные. Сам купил поделие за копейки, не проверил трассировку и удивляется, что она через одно место работает (что снова указывает на дилетантство). Покупать надо было хотя бы от нормальных производителей, например SparkFun.

Даташит — это входные параметры тестирования чипа. Если характеристики микросхемы не соответствуют документации, значит это или брак, или сам производитель не проверял свой продукт по своему даташит.

Собственно это и ключевое отличие дорогих TI и AD от более доступных китайских аналогов

Я бы не рекомендовал пчеловодам покупать ваши весы. Это не прибор, а игрушка. В данном продукте используется, в качестве измерительного устройства схема на самых дешевых компонентах. То, о чем автор говорит- это схема уставки опорного напряжения. Источник опорного напряжения — это ключевой компонент, обеспечивающий точность и стабильность измерений. Автор думает, поставил резисторы и все тип-топ. Только про стабильность измерений можно забыть. И ладно, это отдельные измерения, но автору нужна ретроспектива, т.е изменение по времени. А точностью этих измерений огромные проблемы- в первую очередь, из за внешней температуры и стабильности источника питания. А про то, что ставить надо прецизионные резисторы, как минимум, автор не догадывается. Вообще-то для таких задач используют отдельные источники опорного напряжения. Такая микросхема обеспечивает сверхвысокостабильное напряжение и сверхнизкий шум напряжения, относительно которого производятся вычисления. И стоит она дороже самого АЦП, а для этого- на порядок дороже. Только таким образом можно достичь заявленной точности преобразований. Резисторы, кстати, имеют свой тепловой шум. Настоятельно советую автору непожмотиться и приобрести настоящий комплект измерений на 24 бита, сделанный профессионалами. И сравнить. Измерения с точностью выше 16 бит с наскока и без глубоких знаний схемотехники не решаются.

Установка датчика нагрузки на платформу и базу

Этот этап вы можете пропустить и не использовать никакой платформы/основания, но лучше все таки его сделать для более удобной работы с проектируемыми нами весами. Таким образом, нам необходимо сделать каркас или платформу, на которую мы потом будем класть вещи, вес которых мы хотим измерить. База (основание) также желательна для фиксации на ней датчика нагрузки с помощью болтов. В нашем проекте мы использовали жесткий картон для изготовления каркаса и деревянную доску в качестве базы/основания. Теперь нам осталось сделать всего лишь несколько соединений и наше устройство будет готово.

Характеристики оборудования, его настройка, примечания

Здесь начать стоит непосредственно с преобразователя аналогового сигнала в цифровой, а конкретно с платы-посредника между Arduino и тензодатчиками — HX711:

  • Частота обработки входящих сигналов: от 10 до 80 раз в секунду.
  • Питание: 2.5–5.5 В при 10 мА.
  • Минимальное напряжение на входе: ~40мВ
  • Количество каналов: 2
  • Усиление по входящей линии A: 64, 128
  • Усиление по входящей линии B: 32
  • Разрядность исходящего канала: 24 бита.
  • Ширина на длину платы: 21×34 мм

Основное назначение устройства в конвертации объема поступающего тока в бинарный формат. Причем чувствительность аппарата непосредственно зависит от установленного режима усиления линии:

Коэффициент Пиковый ток
32 ± 80 мА
64 ± 40 мА
238 ± 20 мА

В тех случаях, когда на вход АЦП поступает ток меньше нижней границы диапазона, на его выходе будет выдано 800000h, а если больше верхней — 7FFFFFh.

К сожалению, есть у преобразователя HX711 определенные проблемы. К примеру, точность его работы сильно зависит от температуры окружающей среды. Дополнительно, даже в нормальном режиме, происходит изменение определяемых аналоговых значений. То есть, результирующие коды все время «бегают» в определенных, достаточно сильных пределах:

Один из немногих дельных советов для таких случаев, выясненный при помощи интернет, — использовать для питания ровно 5 В в отношении датчиков и самого АЦП, а также снизить частоту определения до 10 Гц.  Кроме того, пользователи названой платы применяют линейные фильтры на вводе и рекомендуют делать больший упор в конструкциях на канал B — он менее шумный. Также хорошим стабилизатором показаний будет опрос 10 значений и вывода среднего. Вариантом можно применить сборки на основе АЦП HX710A. Названый конвертер дополнительно оснащен сенсором температуры, корректирующим выходные данные.

К Ардуино преобразователь соединяется четырьмя контактами, два из которых питание, а остальные применяются в деле передачи данных:

Arduino HX711
5V VCC
GND GND
DT Цифровой вывод
SCK Цифровой вывод

Закончив с конвертером аналога в цифру для Ардуино, перейдем к характеристикам, которыми обладают сами тензодатчики:

полу мостовые:

  • Критичная измеряемая масса: 50 кг.
  • Размеры: 9×34×34 мм.

На выходе полу мостового тензодатчика три провода, которыми он подключается к HX711. Классически они имеют следующее цветовое разделение:

Контакт Цвет
А+ Белый
E- Черный
E+ Красный

Мостовые:

  • Предельный вес: 1–20 кг.
  • Габариты: 14×14×80.5 мм.

У мостового детектора четыре исходящих контакта, имеющих следующую цветовую дифференциацию:

Контакт Цвет
А+ Белый
E- Черный
E+ Красный
A- Зеленый

На обоих видах резистивных детекторов присутствуют отверстия под крепежные болты M4/5.

Тензодатчик и НХ711

В состав микросхемы входит интегральный стабилизатор напряжения, что исключает необходимость применения внешнего стабилизатора. На вход синхронизации может быть подан любой импульсный сигнал от внешнего источника, вместе с тем АЦП допускает работу от встроенного генератора.

Основные технические характеристики НХ711:

  • Разрядность АЦП – 24 бит
  • Усиление по входу А – 64 или 128
  • Усиление по входу В – 32
  • Частота измерений – 10 или 80 раз в секунду
  • Питающее напряжение – 2,6-5,5 В
  • Потребляемый ток – менее 10 мА
  • Входное напряжение – ± 40 мВ

На плате с АЦП имеются два разъёма – J1 и JP2, на которых имеются следующие обозначения:

  • J1
    • E –, E + питание тензорного моста
    • A –, A + дифференциальный вход канала А
    • В –, В + дифференциальный вход канала В
  • JP2
    • GND, VCC питание
    • DT, SCK – информационные шины

Устройство и принцип работы

Основу тензодатчика составляет тензорезистор, оснащенный специальными контактами, закрепленными на передней части измерительной панели. В процессе измерения чувствительные контакты панели соприкасаются с объектом. Происходит их деформация, которая измеряется и преобразуется в электрический сигнал, передаваемый на элементы обработки и отображения измеряемой величины тензометрического датчика.

В зависимости от сферы функционального использования датчики различаются как по типам, так и по видам измеряемых величин. Важным фактором является требуемая точность измерения. Например, тензодатчик грузовых весов на выезде с хлебозавода совершенно не подойдет к электронным аптекарским весам, где важна каждая сотая часть грамма.

Тактильные

Срабатывают в результате механического действия на чувствительную поверхность. Позволяют устанавливать минимальные деформации, но при неточных настойках могут подавать и ложный сигнал.

Механические

Измерения основаны на фиксации изменения длины объекта под нагрузкой. Работа механического тензометра заключается в определении зависимости удлинения тела от напряжения в поперечном сечении.

Резистивные

Наиболее распространенный тип датчиков. Требуют подключения к слаботочной управляющей цепи, поскольку включают в себя тензорезисторный контур. Надежны при любом состоянии окружающей среды.

Струнные

Струнный вариант представляет собой стальную проволоку (струну), её натягивают между опорами, которые закрепляют на поверхности объекта. Суть измерений заключаются в определении отношения частоты колебания струны к степени её натяжения при изменении длины обследуемого тела под воздействием нагрузки.

Индуктивные

Устройство прибора основано на применении катушки индуктивности, в которой установлен подвижный сердечник. Он напрямую контактирует с поверхностью объекта. При малейшей деформации поверхности происходит смещение сердечника в катушке. Изменяющиеся параметры катушки индуктивности фиксируются через электросхему прибором.

Пьезорезонансные

Относятся к устройствам полупроводникового типа, нуждаются в надежном обслуживании и тонкой настройке. Работают по принципу сравнения эталонного сигнала с фактическим.

Пьезоэлектрические

По своему действию подобны измерителям предыдущего типа, но подают сигнал при изменении значений контактных деформаций, прикладываемых к чувствительному элементу.

Магнитные

Изготавливаются из сплавов с переменным значением коэрцитивной силы, используются при измерении усилий в узлах оборудования, работающих в сильных электромагнитных полях.

Емкостные

Предназначены для измерения малых механических напряжений в деталях со сложной конфигурацией, когда изменение длины токопроводящей проволоки изменяет ее электрическую емкость.

Переключение режимов с помощью кнопки

Для того, чтобы определить, была ли нажата кнопка, надо просто зафиксировать факт ее нажатия и сохранить признак в специальной переменной.

Факт нажатия мы определяем с помощью функции digitalRead(). В результате мы получим HIGH (1, TRUE) или LOW(0, FALSE), в зависимости от того, как подключили кнопку. Если мы подключаем кнопку с помощью внутреннего подтягивающего резистора, то нажатие кнопки приведет к появлению на входе уровня 0 (FALSE).

Для хранения информации о нажатии на кнопку можно использовать переменную типа boolean:

boolean keyPressed = digitalRead(PIN_BUTTON)==LOW;

Почему мы используем такую конструкцию, а не сделали так:

boolean keyPressed = digitalRead(PIN_BUTTON);

Все дело в том, что digitalRead() может вернуть HIGH, но оно не будет означать нажатие кнопки. В случае использования схемы с подтягивающим резистором HIGH будет означать, что кнопка, наоборот, не нажата. В первом варианте (digitalRead(PIN_BUTTON)==LOW ) мы сразу сравнили вход с нужным нам значением и определили, что кнопка нажата, хотя и на входе сейчас низкий уровень сигнала. И сохранили в переменную статус кнопки. Старайтесь явно указывать все выполняемые вами логические операции, чтобы делать свой код более прозрачным и избежать лишних глупых ошибок.

Как переключать режимы работы после нажатия кнопки?

Часто возникает ситуация, когда мы с помощью кнопок должны учитывать факт не только нажатия, но и отпускания кнопки. Например, нажав и отпустив кнопку, мы можем включить свет или переключить режим работы схемы.  Другими словами, нам нужно как-то зафиксировать в коде факт нажатия на кнопку и использовать информацию в дальнейшем, даже если кнопка уже не нажата.  Давайте посмотрим, как это можно сделать.

Логика работы программы очень проста:

  • Запоминаем факт нажатия в служебной переменной.
  • Ожидаем, пока не пройдут явления, связанные с дребезгом.
  • Ожидаем факта отпускания кнопки.
  • Запоминаем факт отпускания и устанавливаем в отдельной переменной признак того, что кнопка была полноценно нажата.
  • Очищаем служебную переменную.

Как определить нажатие нескольких кнопок?

Нужно просто запомнить состояние каждой из кнопок в соответствующей переменной или в массиве ардуино. Здесь главное понимать, что каждая новая кнопка – это занятый пин. Поэтому если количество кнопок у вас будет большим, то возможно возникновение дефицита свободных контактов. Альтернативным вариантом является использование подключения кнопок на один аналоговый пин по схеме с резистивным делителем. Об этом мы поговорим в следующих статьях.

Как настроить балансировочную коробку весов с 4 тензодатчиками

Здравствуйте! Прошу подсказать мне алгоритм настройки балансировочной коробки для платформенных весов с 4 тензодатчиками.

По идее балансировочная коробка нужна чтобы уровнять разброс показаний тензодатчиков а так же скомпенсировать возможные недостатки весовой платформы. К этой коробке подключаются все датчики (обычно 4) затем с помощью подстроечных резисторов расположенных в этой же коробке происходит настройка. Сама коробка подключается к весовому терминалу.

Но вот проблема, похоже что подстроечные резисторы в этой коробке подключены параллельно? или как-то шунтируют датчики, да ещё в схеме присутствуют темрорезисторы. И получается так что подкручивая один резистор вы влияете не только на полключенный к нему тензодатчик но и на все остальные только в меньшей степени. Причем иногда эти изменения совершенно не предсказуемые.

Возникает вопрос а как же тогда быть?

1) судя по всему сделано так что каждый подстроесник шунтирует свой датчик но это немного влияет и на остальные датчики. фото:

(2,11Мб)

2) я может погорячился назвав их не предсказуемыми, но одни подстроечники влияют на другие нелинейно например я прошол и выставил их тестором по 15 ом но оказалось что последний стал 15 а остальные как то по возрастающей 16 17 типа того.

Я гдето видел но немогу найти алгоритм как с этим управиться там что то переставлять по углам и крутить подстроечники причем так несколько кругоа

Источник

Использование датчика ttp223 без Ардуино


Сенсорная кнопка ttp223 выносной сенсор

На схеме размещенной выше, плата Arduino Uno используется в качестве источника питания. При этом к выносному сенсору ttp223 не стоит подключать больше 3 светодиодов. Для управления большой нагрузкой с помощью данного модуля следует использовать транзистор или релейный модуль (силовой ключ), который будет замыкать цепь с высоким током. Пример такого подключения размещен ниже.


Схема подключения ttp223 и LED ленты

Выносной модуль можно использовать без микроконтроллера, если перевести ttp223 в режим работы триггера. Для этого следует замкнуть перемычку B и тогда режим будет переключаться при каждом касании к сенсору

Обратите внимание, что кнопку можно включать в электрическую цепь только, как логический ключ. Большие нагрузки (моторы, адресная LED лента или реле) работать не будут, сенсор просто сгорит

Схема проекта

Схема электронных весов на основе платы Arduino и датчике веса представлена на следующем рисунке.

Датчик веса (load cell) имеет 4 провода: красный, черный, зеленый и белый. Цвета этих проводов могут изменяться в зависимости от производителя датчика, поэтому не стоит всецело доверять цвету проводов – лучше доверяйте даташиту на купленный вами датчик. Подключите красный провод датчика веса к контакту E+ модуля HX711, черный провод – к E-, белый – к A+, а зеленый – к A-. Выходной контакт модуля (Dout) HX711 и его контакт синхронизации подключите к контактам D4 и D5 платы Arduino. Одни концы кнопок подключите к контактам D3, D8, D9 платы Arduino, а другие их концы – к общему проводу схемы (ground). Мы используем ЖК дисплей 16х2 с модулем интерфейса I2C, поэтому подключите его контакты SDA и SCL к контактам A4 и A5 платы Arduino соответственно. Подключите общий провод (ground) ЖК дисплея и модуля HX711 к «земле» платы Arduino, а их контакты питания подключите к контакту 5V платы Arduino. Все компоненты нашей схемы работают от напряжения 5V, поэтому в схему мы добавили регулятор напряжения LM7805. Но если вы не хотите делать весы портативными, то вы можете просто запитать плату Arduino от компьютера с помощью USB кабеля.

Виды и сфера применения

Для начала разберемся в принципе действия тензометрических датчиков. При воздействии на тело внешних сил оно деформируется, противодействует приложенной силе. За счёт деформаций корпуса датчика происходит воздействие на измерительный элемент тензодатчика. В результате устройство выдаёт электрический сигнал, считывая который система обработки выдаёт результат измерений. Но для чего нужен такой тип устройств?

Тензометрические датчики используются для:

  • Измерения веса. При этом в зависимости от конструкции измерительного узла могут использоваться на сжатие или на растяжение. Соответственно их назначение – измерение веса на платформах (например, весы в магазинах) или на подвесе (краны и прочее).
  • Измерения давления. Например, в трубопроводах газов и жидких веществ.
  • Измерения крутящего момента (на двигателях автомобилей или станков).
  • Определения ускорения.
  • Контроля перемещения.

По типу измерительного элемента и принципа работы тензодатчики делятся на:

  • Тензорезистивные.
  • Пьезоэлектрические.
  • Оптико-поляризационные.
  • Волоконно-оптические.
  • Пьезорезистивные.

Конструктивные особенности тензодатчика определяет то где он применяется, ведь конструкция определяет наличие монтажных отверстий и векторов возможного приложения сил, соответственно и самого процесса измерения. По форме также тензометрические датчики бывают разных типов:

  1. Консольные. Назначение таких устройств – измерение количества веществ в дозаторах, конвейерных, платформенных, бункерных и напольных весах.
  2. Цилиндрические. Применяются для взвешивания вагонов, автомобилей, баков и емкостей – там, где нужно измерять большие веса.
  3. S-образные, срабатывают на растяжение, подходят для измерения веса, поднимаемого краном и в других подобных конструкциях.

На практике тензометрические датчики могут производиться в совершенно разнообразном исполнении.

Заключение

Проекты с применением датчика освещенности на базе фоторезистора достаточно просты и эффектны. Вы можете реализовать множество интересных проектов, при этом стоимость оборудования будет не высока. Подключение фоторезистора осуществляется по схеме делителя напряжения с дополнительным сопротивлением. Датчик подключается к аналоговому порту для измерения различных значений уровня освещенности или к цифровому, если нам важен лишь факт наступления темноты. В скетче мы просто считываем данные с аналогового (или цифрового) порта и принимаем решение, как реагировать на изменения. Будем надеяться, что теперь в ваших проектах появятся и такие вот простейшие «глаза».