• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
Marksheider

Весы на тензодатчике, как убрать ненужные цифры???

6 сообщений в этой теме

Marksheider    16

Сижу собираю электронные весы и вроде как все работает даже.

DSC00793.thumb.JPG.9e4365cab352ea5514fe89b80bfaf4f7.JPG

При надавливании число которое показывает граммы увеличивается в числе значащих разрядов вот так.

DSC00794.thumb.JPG.a4444dde67b403fba5c2304829d3ac07.JPG

И когда отпускаешь нагрузку чтоб значения вернулись обратно к нулю получается вот такая засада. как погасить ненужные цифры???

DSC00795.thumb.JPG.68ca2bc18f2e0c4f1fe9d40af6787a62.JPG

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

#include "HX711.h" // библиотека тензодатчика
#include <Wire.h> 
#include <LiquidCrystal_I2C.h> // Библиотека дисплея
HX711 scale(A1, A0);                          

float calibration_factor = -14.4;// калибровочная константа тензодатчика
float units;
float ounces;

LiquidCrystal_I2C lcd(0x3F,16,2);  // Устанавливаем дисплей

void setup() 
{
  scale.set_scale();
  scale.tare();                              //Сбрасываем на 0
  scale.set_scale(calibration_factor);       //Применяем калибровку

  lcd.init();  // инициализация ЖК дисплея                   
  lcd.backlight();// Включаем подсветку дисплея
  
  lcd.setCursor(5, 0);// перевод курсора на строку 1, символ 5
  lcd.print("Thrust");// Пишем Тяга
  lcd.setCursor(11, 1);// перевод курсора на строку 2, символ 11
  lcd.print("Gramm");//пишем Грамм
}

void loop() 
{ 
  for(int i = 0;i < 10; i ++) units =+ scale.get_units(), 10;   // усредняем показания считав 10 раз 
  units / 10;                                                   // делим на 10
   
  ounces = units * 0.035274;                                    // переводим унции в граммы              
  
  // Устанавливаем курсор на вторую строку и нулевой символ.
  lcd.setCursor(3, 1);
  // Выводим на экран вес в граммах
  lcd.print(ounces);
  }

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Yurkin2015    275
1 час назад, Marksheider сказал:

что нужно сделать в коде

Нужно перед выводом результата очистить место на экране для нового значения. Для этого выводим просто 8 пробелов на вторую строчку.

// Устанавливаем курсор на вторую строку на место выводе результата
lcd.setCursor(3, 1); 

// Выводим на экран 8 пробелов 
lcd.print("        ");

// Снова устанавливаем курсор на вторую строку в то же место.
lcd.setCursor(3, 1);

// Выводим на экран вес в граммах 
lcd.print(ounces);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Marksheider    16

Спасибо, есче один вариант от вас, я просто попробовал в конце дописывать один пробел и все, он как раз затирает те цифры. Но все равно кажется это как то не правильно.

// Устанавливаем курсор на вторую строку и второй символ.
  lcd.setCursor(2, 1);
  // Выводим на экран вес в граммах
  lcd.print(ounces);
  lcd.print(" ");

А как избавиться от сотых грамма чтоб целые числа показывал в граммах.

Нужно как то преобразовать float в int16_t и выводить  его но че то не доходит как???

Изменено пользователем Marksheider

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Marksheider    16

Во спасибо, работает. добавил условие чтоб ноль не скакал и с вашей последней строчкой все заработало.

void loop() 
{ 
  for(int i = 0;i < 10; i ++) units += scale.get_units(), 10; // усредняем показания считав 10 раз 
  units /= 10; // делим на 10

  ounces = units * 0.035274;// переводим унции в граммы  
              
  if (ounces > 0.5) //если вес не ничтожно мал
  {
  lcd.setCursor(2, 1);// Устанавливаем курсор на вторую строку и второй символ.
  lcd.print((int)ounces);// Выводим на экран вес в целых граммах
  lcd.print(" ");//затираем последний знак пробелом
  }
  else //или
  {
  lcd.setCursor(2, 1);// Выставляем курсор...
  lcd.print(0);// Выводим ноль
  }
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Marksheider    16

В общем мучался я мучался в результате , с подсказками добрых людей, код весов превратился в 4 строчки.

Подскажите как вольтметр написать.

void loop()
{ 
  ounces = scale.get_units(10);              //усреднение 10 значений
  dtostrf(ounces, 5, 0, myStr);              //Подготовка 5 знакомест
  lcd.setCursor(5, 1);                       //Переводим курсор
  lcd.print(myStr);                          //выводим значение грамм
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: Макcим
      Привет, прошу помощи что и как сделать.
      Кратко, есть пасека с пчелами небольшая.
      Нужно сделать
      1) Под улей поставить 4 тензодатчика каждый на 50кг (как у напольных электронных весов) через модуль АЦП HX711 
       
      2) Во внутрь улья, датчик влажности и температуры DHT11 (неважно какой) 
       
      Пока всё, есть ещё идея сделать "Частотный анализатор"  что-бы отслеживать состояние семьи ( возбужденное или спокойное) но как это сделать пока понятия не имею, в дальнейшем добавить датчик детонации, когда будет gsm модуль. 
      Не знаю как делать, чтоб Arduino опрашивал датчики с интервалом раз в 2 часа и отправлял результат на rasbery pi 3 а он чтоб составлял хронологию (график изменения) на apache сервере. А я мог подключиться к нему к примеру прямо там в поле через wi-fi с телефона и всё посмотреть.(в дальнейшем добавить gsm модуль и отправлял в инет всю информацию.) Или делать сразу всё на Rasbery pi 3. Но ведь мне так не хватит одного Rasbery pi 3 что бы за питать все датчики от всех ульев. Прошу помощи, совета что и как сделать лучше. Делаю для себя.
    • Автор: Анатолий Чуйко
      Нужна помощь. Есть необходимость считывать показания с тензодатчика на частоте больше 1кГц. Сейчас на стенде трудится готовый усилитель (коробка на фото), с которого читает ардуинка своим 10битным АЦП. В итоге вся конструкция подходит максимум для демонстрации принципа, но не для точных измерений. Кроме того данные в виде массива хранятся в памяти МК перед отправкой в сериал, а в ардуино нано влазит этих самых данных достаточно мало(, так что в планах переход на стм32. Посоветуйте пожалуйста связку из усилителя и ацп от 12 бит, способных работать на частоте около 1,5-2 кГц (около 2000 семплов в секунду), по возможности с минимальной внешней обвязкой и простой настройкой. Заранее благодарен.

    • Автор: evgeniy__p
      Доброго времени суток!
      Объясните пожалуйста (как можно примитивнее) отличие тензодатчика от тензометра? Если оно имеется.
      Внешне они отличаются. Оба измеряют деформацию, а в чем разница между ними не разберусь.
      Заранее спасибо!
    • Автор: STALKER7538
      Добрый день всем. Кто может набросать хоть какуюто схему подключения тензодатчика или реохорда к контроллеру и юсб порту ПК.
    • Автор: Tima2008
      Добрый день!
      Необходимо сделать или купить.
      Датчик переключения передачи мотоцикла на основе тензодатчика.
      Суть, тензодатчик который ставиться в разрыв тяги болтами М6,
      по размеру чем меньше тем лучше, 25мм диаметра и 60мм длины максимум.
      Работает на сжатие и растяжения с усилием где-то 3-10 кг.
      Сигнал с датчика поступает на некую схему управления в которой
      мы настраиваем порог срабатывания, к примеру 5кг, по достижении которого
      замыкаеться какая-то цепь. Оч желательно чтобы на сжатие и растяжение можно
      было разные цепи замыкать и желательно порог срабатывания раздельно регулировать.
      Если кто-то знает готовое решение пожалуйста подскажите.
      Или же помогите подобрать подходящий датчик + некую схему обвязки к нему.