Напольные весы с отсылкой данных.

Araris
Offline
Зарегистрирован: 09.11.2012

Прочитал я как-то на Хабре статью "Как я сделал Wi-Fi весы, ниоткуда не уволился, а про жизнь вообще молчу" (http://habrahabr.ru/post/224137/), и захотелось нечто подобное себе соорудить.
Задачи были поставлены простые, всего три: взвесить, показать вес на дисплее, отправить данные про вес по радио.

Добрый человек [почти бесплатно] подогнал трое разных напольных весов разной степени убитости, из которых я выбрал наиболее подходящие по конструктиву и с исправными датчиками. (Про датчики, мосты/полумосты Витстоуна прекрасно написано в вышеупомянутой статье.)

Заморачиваться с инструментальным усилителем INA125 не стал, просто заказал готовый HX711 A/D Module, специально предназначенный для весов. В сусеках нашлись также Ардуино Нано, 4-х разрядный светодиодный индикатор, передатчик на 433 МГц, пара кнопок.

Итак, все составляющие имеются, теперь можно было очистить корпус весов от "родного" содержимого и набить своим.

Зачем там кнопки ? - а для калибровки. В скетче вес вычисляется  по формуле CurWeight = scale.get_units(NumTimes) * 1000 / CurScale; , вот эта CurScale кнопками и корректируется, затем в EEPROM на будущее сохраняется. Естественно, можно обойтись и без кнопок, но так калибровать удобнее.

Дальше было доведение до ума скетча (скетч закину следующим постом). Получилось примерно так :

в режиме ожидания жертвы

и с двухкилограммовым аккумулятором


Бюджет:
Весы достались практически даром.
Nano $4.03, LED module $3.34, HX711 module $1.79, 433MHz TX module $0.61.
Кнопки, проводки и блок питания со шнуром - цены назвать затрудняюсь.
Итого прямых затрат $9.71.

Готов ответить на вопросы, ежели возникнут.

 

Araris
Offline
Зарегистрирован: 09.11.2012


Скетч:


#include <Arduino.h>
#include <TM1637Display.h> 
#include <HX711.h>
#include <VirtualWire.h>
#include <EEPROM.h>
//
#define DISPLAY_CLK      2    // digital pin connected to display
#define DISPLAY_DIO      3    // digital pin connected to display
#define BUTTON_MINUS_PIN 6    // digital pin connected to button
#define BUTTON_PLUS_PIN  7    // digital pin connected to button
#define SOUND_PIN       11    // digital pin connected to sound buzzer
#define RF_TX_PIN       12    // digital pin connected to RF TX 433 MHz
//
#define NumTimesIdle    5
#define NumTimesMeasure 15
//
const uint8_t SEG_CLEAR[] = {0,0,0,0};
const uint8_t SEG_DELIM[] = {SEG_G};
const uint8_t SEG_1[] = { SEG_C | SEG_D | SEG_E | SEG_G,
                          SEG_A | SEG_B | SEG_F | SEG_G,
                          SEG_C | SEG_D | SEG_E | SEG_G,
                          SEG_A | SEG_B | SEG_F | SEG_G };
const uint8_t SEG_2[] = { SEG_A | SEG_B | SEG_F | SEG_G,
                          SEG_C | SEG_D | SEG_E | SEG_G,
                          SEG_A | SEG_B | SEG_F | SEG_G,
                          SEG_C | SEG_D | SEG_E | SEG_G }; 
//
HX711 scale(A1, A0);         // A1 - DOUT , A0 - SCK
TM1637Display display(DISPLAY_CLK, DISPLAY_DIO); 
// -------------------------------------------------
// setSegments(const uint8_t segments[], uint8_t length = 4, uint8_t pos = 0); 
// This function receives raw segment values as input and displays them. The segment data
// is given as a byte array, each byte corresponding to a single digit. Within each byte,
// bit 0 is segment A, bit 1 is segment B etc.
// segments     - array of size @ref length containing the raw segment values
// length       - number of digits to be modified
// pos          - position from which to start the modification (0 - leftmost, 3 - rightmost)
// -------------------------------------------------
// showNumberDec(int num, bool leading_zero = false, uint8_t length = 4, uint8_t pos = 0);
// num          - number to be shown
// leading_zero - when true, leading zeros are displayed. Otherwise unnecessary digits are blank
// length       - number of digits to set
// pos          - position least significant digit (0 - lefttmost, 3 - leftmost)  
// -------------------------------------------------
//
unsigned long LastTareCheckMillis = 0;
unsigned long LastTareCheckMillisMAX = 60000;
unsigned long LastDisplayWeightMillis = 0;
unsigned long LastDisplayWeightMillisMAX = 5000;
float CurScale = 4120.f; // default 2280.f
byte  NumTimes = NumTimesIdle;
byte  WeightCounter = 0;
byte  MaxWeightCounter = 5;
float CurWeight = 0;
float MinWeight = 1; // kg
float FinishWeight = 0;
boolean seg_selector;
//
void setup() 
{
// for RF TX
vw_set_ptt_pin(RF_TX_PIN);
vw_set_tx_pin(RF_TX_PIN);
vw_setup(2000);	 // Bits per sec
pinMode(BUTTON_MINUS_PIN, INPUT);
pinMode(BUTTON_PLUS_PIN, INPUT);
pinMode(SOUND_PIN, OUTPUT);
Serial.begin(9600);
Serial.println("");
Serial.println("A.V. SmartScales.");
CurScale = (float) EEPROMReadInt(0);
if (CurScale < 1000) { CurScale = 4426.f; }
Serial.print("CurScale = ");
Serial.println(CurScale,2);
ScalesInit();
LastTareCheckMillis = millis();
}
//
void loop() 
{
// Check buttons
if ( digitalRead(BUTTON_PLUS_PIN) )
 {
 PlayTone(SOUND_PIN,4000,50);
 CurScale = CurScale + 10;  
 Serial.print("BUTTON_PLUS. CurScale = ");
 Serial.println(CurScale,2);
 EEPROMWriteInt(0, int(CurScale));
 display.setSegments(SEG_CLEAR); // display clear
 display.showNumberDec(int(CurScale),true,4,0); 
 LastTareCheckMillis = millis();
 LastDisplayWeightMillis = millis();
 }
if ( digitalRead(BUTTON_MINUS_PIN) )
 {
 PlayTone(SOUND_PIN,4000,50);
 CurScale = CurScale - 10;  
 scale.set_scale(CurScale);
 Serial.print("BUTTON_MINUS. CurScale = ");
 Serial.println(CurScale,2);
 EEPROMWriteInt(0, int(CurScale));
 display.setSegments(SEG_CLEAR); // display clear
 display.showNumberDec(int(CurScale),true,4,0); 
 LastTareCheckMillis = millis();
 LastDisplayWeightMillis = millis();
 }
// Calculate weight
CurWeight = scale.get_units(NumTimes) * 1000 / CurScale;
if ( CurWeight > MinWeight )
 {
 NumTimes = NumTimesMeasure;
 LastDisplayWeightMillis = millis();
 if ( WeightCounter <= MaxWeightCounter )
  {
  if ( WeightCounter > 0 ) 
   {
   if ( WeightCounter < MaxWeightCounter ) 
    {
    PlayTone(SOUND_PIN, 800 + WeightCounter * 800 ,50); 
    display.setBrightness(WeightCounter + 10); // from 8 to 15
    if (seg_selector) { display.setSegments(SEG_1); } else { display.setSegments(SEG_2); }
    seg_selector = !seg_selector;
    }
   FinishWeight = FinishWeight + CurWeight; 
   }
  if ( WeightCounter == MaxWeightCounter )
   {
   PlayTone(SOUND_PIN,4000,50); delay(50);
   PlayTone(SOUND_PIN,3000,50); delay(50);
   PlayTone(SOUND_PIN,4000,50);
   FinishWeight = FinishWeight / (int)MaxWeightCounter;
   display.setSegments(SEG_CLEAR); // display clear
   display.setSegments(SEG_DELIM,1,2); // display delimiter
   display.showNumberDec(int(FinishWeight),true,2,0); 
   display.showNumberDec(int((FinishWeight - int(FinishWeight)) * 10),true,1,3); 
   Serial.print(" WEIGHT = ");
   Serial.println(FinishWeight,2);
   SendWeight();
   LastTareCheckMillis = millis();
   LastDisplayWeightMillis = millis();
   }
  }
 else { WeightCounter = (MaxWeightCounter + 1); }
 WeightCounter++;
 }
else
 {
 WeightCounter = 0;
 NumTimes = NumTimesIdle;
 FinishWeight = 0;
 if ( millis() < LastDisplayWeightMillis ) { LastDisplayWeightMillis = millis(); } // after millis() overflow
 if ( millis() - LastDisplayWeightMillis > LastDisplayWeightMillisMAX ) 
  {
  if ( LastDisplayWeightMillis != 0 ) { ScalesInit(); }
  LastDisplayWeightMillis = 0;
  }
 if ( millis() < LastTareCheckMillis ) { LastTareCheckMillis = millis(); } // after millis() overflow
 if ( millis() - LastTareCheckMillis > LastTareCheckMillisMAX )
  {
  if ( (CurWeight >= 0.01) || (CurWeight <= -0.01) )
   {  
   display.setSegments(SEG_1);
   Serial.println("Set tare...");
   ScalesInit();
   } 
  LastTareCheckMillis = millis();
  }
 } // if ( CurWeight > MinWeight )
//
Serial.println(CurWeight,3);
}

//////////////////////////////////////////////////////////////////
void PlayTone(byte tonePin, int frequency, int duration)
{
int period = 1000000L / frequency;
int pulse = period / 2;
for (long i = 0; i < duration * 1000L; i += period)
 {
 digitalWrite(tonePin, HIGH);
 delayMicroseconds(pulse);
 digitalWrite(tonePin, LOW);
 delayMicroseconds(pulse);
 }
}

void SendWeight()
{
////////// RF Send
char RFMessage[28];
String RFtemp;
// RFtemp = "Sgg.gg/";
// gg.gg - weight
RFtemp = "S";
RFtemp = RFtemp + int(FinishWeight) + ".";
if ( int((FinishWeight - int(FinishWeight)) * 100) > 9 )
 { RFtemp = RFtemp + int((FinishWeight - int(FinishWeight)) * 100); }
else
 { RFtemp = RFtemp + "0"; RFtemp = RFtemp + int((FinishWeight - int(FinishWeight)) * 100); }
RFtemp = RFtemp + "/";
RFtemp.toCharArray(RFMessage,RFtemp.length()+1);
int jj;
for ( jj = 0; jj < 5; jj++ )
 {
 delay(50);
 vw_send((uint8_t *)RFMessage, strlen(RFMessage));
 vw_wait_tx();
 }
Serial.print("RFtemp = ");
Serial.println(RFtemp);
}

void EEPROMWriteInt(int p_address, int p_value)
// This function will write a 2 byte integer to the eeprom at the specified address and address + 1
{
byte lowByte = ((p_value >> 0) & 0xFF);
byte highByte = ((p_value >> 8) & 0xFF);
EEPROM.write(p_address, lowByte);
EEPROM.write(p_address + 1, highByte);
}

unsigned int EEPROMReadInt(int p_address)
// This function will read a 2 byte integer from the eeprom at the specified address and address + 1
{
byte lowByte = EEPROM.read(p_address);
byte highByte = EEPROM.read(p_address + 1);
if ( (((lowByte << 0) & 0xFF) == 0xFF) && (((highByte << 0) & 0xFF) == 0xFF) ) return 0;
                       else return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
}

void ScalesInit()
{
display.setBrightness(9); // from 8 to 15
display.setSegments(SEG_CLEAR); // display clear
display.showNumberDec(0,false,1,1); 
display.setSegments(SEG_DELIM,1,2); // display delimiter
display.showNumberDec(0,false,1,3); 
scale.set_scale(CurScale);
scale.tare();
}

 

art100
Offline
Зарегистрирован: 09.03.2014

Я что-то понять не могу этот HX711 ?  Понял, что втыкается куда-то, к чему-то, в некий тензодатчик, и что-то возвращает в последовательный порт? А даташит существет в природе?

http://www.dfrobot.com/image/data/SEN0160/hx711_english.pdf

Все понял.

В весах какой-то мостик изгибается. А что это такое? Пьезо пластинка гнется? А эта микрушка подпирает напряжением пьезик и меряеть под 90 градусов миливольты от изгиба? Жуть как интересно что сейчас в весах?

 

Araris
Offline
Зарегистрирован: 09.11.2012

Документация по HX711, библиотеки, скетч, схема - https://www.dropbox.com/sh/dr63743zjnjdawz/AABwijf7YDxUoJvn2YT7kmU0a?dl=0

art100
Offline
Зарегистрирован: 09.03.2014

Araris пишет:
А в весах действительно резисторы изгибаются?

И резисторы эти соеденены не полными мостами?

Сколько же там проводов от резисторов?

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

Araris
Offline
Зарегистрирован: 09.11.2012

Каждый датчик - полумост. С него идут три провода (Б-К-Ч), как на картинке с иероглифами. Итого имеем четыре полумоста.

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

В результате в точности получается схема, как на картинке с фоном в клеточку. То есть два провода каждого датчика уходят к соседним датчикам, а третий провод - к HX711 модулю. Изначальная начинка весов также соответствовала этой схеме.

Araris
Offline
Зарегистрирован: 09.11.2012

art100 пишет:

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

Резистор изгибается, сопротивление увеличивается.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

в hx711 2 канала. я бы не исключал варианта что каждые 2 моста образуют мост, получается 2 моста 2 канала. а потом математикой  рассчитывается вес

не случайно в нем 2 канала а не 1

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Тестером реально уловить изменение сопротивления при нажатии на датчик веса? 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

теоретически да в режиме милливольт

измерять не сопротивление а напряжение

Araris
Offline
Зарегистрирован: 09.11.2012

Ага, я пробовал, потом понял, что не зря в модуле HX711 поставили precision 24-bit analog-to-digital converter (ADC).

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да не зря. но просто проверить можно

а вообще с такими весами да проблема с ровной поверхностью

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Araris пишет:
Конструкция дешевая, стабильность показаний никакая, плюс-минус сотня граммов...

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

Я вот хочу сделать из своих весов игрушку для ребенка. Игра "кто сильнее", нужно потянуть на себя верёвку, аппарат покажет сколько у тебя силы. Для ребёнка можно показывать не числа, а картинки животных, заяц самый слабый, самый сильный медведь (с такой силой должен тянуть только папа :) разумеется). Для взрослых можно сделать аппарат по которому нужно как следует вмазать, и тут уже можно смело показывать числа.

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

А по опыту, если не волнует точность +/- 100 граммов, и весы стоят стационарно, динамику изменения веса реально получать на таких датчиках?
Вопрос не праздный. Имеем улей. Каждый день ездить проблематично. Необходимы контрольные весы, на которых он будет стоять, и по которым можно будет понимать ситуацию - носят пчёлы мёд или нет...
Насколько идея реализуема на таких датчиках? Понимаю, что остальная начинка будет другой, но раз увидел - спрошу, если позволите...
Заранее спасибо за ответ!

dmawzx
dmawzx аватар
Offline
Зарегистрирован: 02.05.2014

Я думаю что вполне реально.

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

Спасибо! Начали реализацию...

Автору - огромное спасибо за идею, описание и скетч. Первые шаги делаю, но сразу в прикладной области. Ибо надо :)

Araris
Offline
Зарегистрирован: 09.11.2012

Успехов. Обращайтесь, если что.

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

Огромное спасибо!

Пока заказан модуль Arduino UNO R3 (китайский клон, $2,95), тензорезисторы, усилитель сигнала на Hx711, модуль GSM для отправки данных по sms/gprs, плата часов реального времени, чтобы отправлять данные по расписанию раз в сутки.

Приедет - надо будет всё это добро подружить между собой и заставить работать в качестве контрольных весов на пасеке...

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

Попробуем...

Сейчас трушу интернет на предмет готовых решений по принципу "с миру по нитке" - собственных знаний пока нет, учусь.

bwn
Offline
Зарегистрирован: 25.08.2014

Voblin_UA пишет:

Огромное спасибо!

Пока заказан модуль Arduino UNO R3 (китайский клон, $2,95), тензорезисторы, усилитель сигнала на Hx711, модуль GSM для отправки данных по sms/gprs, плата часов реального времени, чтобы отправлять данные по расписанию раз в сутки.

Приедет - надо будет всё это добро подружить между собой и заставить работать в качестве контрольных весов на пасеке...

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

Попробуем...

Сейчас трушу интернет на предмет готовых решений по принципу "с миру по нитке" - собственных знаний пока нет, учусь.

А как пчелки к GSM относятся? Где то читал, что не любят они это до смерти, даже с телефонами подходить не рекомендуют.

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

То когда неправильные пчёлы :)

А если серьёзно, такие системы есть и работают, но ценники на них настолько негуманные, что даже не рассматриваются. А по телефону я возле пчёл разговариваю без проблем. Это от породы пчёл ещё может зависеть. У меня бакфаст - они очень мирные, можно большую часть года даже без сетки работать.

bwn
Offline
Зарегистрирован: 25.08.2014

Voblin_UA пишет:

То когда неправильные пчёлы :)

А если серьёзно, такие системы есть и работают, но ценники на них настолько негуманные, что даже не рассматриваются. А по телефону я возле пчёл разговариваю без проблем. Это от породы пчёл ещё может зависеть. У меня бакфаст - они очень мирные, можно большую часть года даже без сетки работать.

Я совершенно не настаиваю, не любовь до смерти имелась в виду (до их смерти). Когда думал себе завести, попадалась статья, что и улики приходится экранировать. Возможно и журналистский бред.

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

Очень похоже на то :) Хотя есть среднерусские пчёлы, так у тех сама по себе охранная зона порядка 5 метров от улья, ближе жалят и без всяких излучений ;)

bwn
Offline
Зарегистрирован: 25.08.2014

Ладно, похоже в оффтоп ушли. Удачи в разведении.

toc
Offline
Зарегистрирован: 09.02.2013

Voblin_UA, мне кажется, что вам ещё нужно погодную станцию к улью прикрутить.
Прохладно, пасмурно, и мало мёда - понятно.
Тепло, ясно и мало мёда - повод навестить пчёлок.

Электричество там есть или от аккумулятора?

Araris
Offline
Зарегистрирован: 09.11.2012

Действительно, можно будет бонусом прикрутить измерение наружной и внутренней температур, влажности, освещенности и чего-нибудь еще. Отправку данных можно сделать также и по запросу.

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

Питание от аккумулятора. Пока рассматриваю разные варианты, например - последовательно два 18650 прикрутить...
Что касается погодной станции... Пока думаю. Для начала последовательно - заставлю снимать показания веса и передавать на комп, потом писать на микро-сд на случай потери связи и затем - отправлять смс / в гуглдокс.

greencave
Offline
Зарегистрирован: 08.02.2015

Voblin_UA пишет:
Питание от аккумулятора. Пока рассматриваю разные варианты, например - последовательно два 18650 прикрутить... Что касается погодной станции... Пока думаю. Для начала последовательно - заставлю снимать показания веса и передавать на комп, потом писать на микро-сд на случай потери связи и затем - отправлять смс / в гуглдокс.

 

а подскажите пожалйуста где вы тензодатчики покупали? и есть ли отечественного производства что-то хорошее и маленькое 

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

Это из серии "быстро, качественно, недорого - выберите любые ДВА пункта"? ;)

Я покупал в Китае, $7,80 за лот из 5 штук. Датчики веса, по 50 кг каждый с возможностью превышения до 150%. Итого мостовое включение 4 датчиков даёт возможность штатно взвешивать до 200, с перегрузом - до 300 кг.

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

Датчики я пока не подключал - модуль Hx711 ещё не приехал.

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

toc пишет:
Voblin_UA, мне кажется, что вам ещё нужно погодную станцию к улью прикрутить.

Заказал ещё датчик температуры и влажности DHT11, хотя сейчас смотрю - надо было DHT22 брать... А то этот только положительную температуру меряет, а 22-й - от -40°С. Может дозакажу потом.

greencave
Offline
Зарегистрирован: 08.02.2015

спасибо за инфу! удачи в проэктах! 

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

Фото датчиков веса

Забыл сразу фото датчиков веса приложить...

bwn
Offline
Зарегистрирован: 25.08.2014

Эх, ну тогда и мои 5 копеек. Датчик SHT10 в улик, мониторим темп.и влажность, серва прикрыть-открыть отверстие для газообмена,  а для уличного измерения что то типа AM2301. Так и рождаются супердевайсы)))).

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

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

Влажность регулировать не надо - у меня полностью сетчатые днища круглый год :)
Сейчас конфигурация следующая: Arduino Uno R3 Mega 328P CH340G (пришлось поприседать, пока дрова нашёл), датчики веса с АЦП/усилителем, датчик температуры/влажности, GSM-модуль на чипе Neoway M590 (с ним тоже придётся поприседать, чувствует моё сердце - зато цена $7,80 против обычных $30), модуль часов реального времени. Ко всему этому прикручу модуль карты памяти, и буду пытаться колдовать... Пока жду, когда вся комплектуха доедет.

bwn
Offline
Зарегистрирован: 25.08.2014

А карта памяти для чего? Или вы каждые полчаса хотите писать? У вас на часах есть AT24C32 это 4кВ EEPROM с 1 000 000 циклов перезаписи по I2C. Итого минус один шилд, а кодить я думаю одинаково.

Если не жалко, выложите схему и деталировку весовых датчиков. Спасибо.

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

bwn пишет:

А карта памяти для чего? Или вы каждые полчаса хотите писать?

По-хорошему, есть мысль сделать съём данных раз в час с 6:00 до 20:00, записывать на карту памяти в csv, потом в 20:00 из него считывать данные и класть на сервер. Этот функционал ещё в стадии размышлений и медитации ;) Опыта и знаний куда меньше, чем желания реализовать, откровенно говоря. Усиленно учу.

bwn пишет:
У вас на часах есть AT24C32 это 4кВ EEPROM с 1 000 000 циклов перезаписи по I2C. Итого минус один шилд, а кодить я думаю одинаково.

А можно для чайников чуть подробнее, если не затруднит? А то из всей фразы я понял только "минус один шилд" :)))) Я решил RTC прикрутить, чтобы время при смене элементов питания не сбивалось. Позже оказалось, что там можно будильники прописать... Изучаю - голова уже пухнет от объёмов информации...

bwn пишет:
Если не жалко, выложите схему и деталировку весовых датчиков. Спасибо.

Первое сообщение в этой теме, ссылка на Хабр, там разжёвано - так и буду соединять. Только пока неясен вопрос по цветам проводов - что куда? Много неясного, исходя из того, как собирается измерительный мост - если подключить все тензодатчики вместо одного - откуда возьмётся перекос? Буду пробовать...
Паять усилитель не буду, использую готовый Hx711

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

bwn
Offline
Зарегистрирован: 25.08.2014

SD карта удобна в двух случаях, когда нужен очень большой объем или хотим эти данные читать прямо с карточки на комп (при этом контакты умрут весьма быстро) Судя по вашему желанию, можно обойтись даже штатным EEPROM Atmegi328 (там 1кВ). При 14 записях в сутки, даже не применяя щадящие алгоритмы, вам ресурса хватит на 20 лет при постоянном использовании весь год.

На RTC модуле есть  мелкосхема памяти, она уже на 4кВ и на 200 лет ресурса))). Там правда немного сложнее будет кодить, но ничего сверхестественного.

Так что карточка, по моему, ненужное излишество.

Voblin_UA
Voblin_UA аватар
Offline
Зарегистрирован: 12.01.2015

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

Moonchild
Moonchild аватар
Offline
Зарегистрирован: 15.04.2015
Здравствуйте! Не подскажете ли несколько ответов на вопросы про весы? Довелось мне тут разобрать напольные электронные весы, сделанные, наверное, где-то в глубоком Китае... И задался я такими вопросами:
1. Не могу понять как они включаются при нажатии на тензодатчик? Там нет никаких кнопок. Тензодатчики как пьезоэлементы тоже не должны работать. Там стоит мост из тензодатчиков, одно плечо которого соединено с минусом батарейки. С каждого плеча моста идет дорожка к микроконтроллеру, который залит компаундом. От плюса батарейки дорожка также идет в микроконтролер. При этом, в выключенном состоянии напряжение между плюсом батарейки и любым плечом тензодатчика одинаково и равно напряжению батарейки, а между плечами моста тензодатчиков напряжения нет. Если надавить на любой тензодатчик, то на плечах моста появляются различные напряжения, как и должно быть. Интуитивно я догадываюсь, что контроллер может быть разбужен сигналом прерывания, но откуда китайцы его берут - не могу понять!
2. Судя по принципу работы весов, в микроконтроллере должен быть АЦП и хороший усилитель. Какие микроконтроллеры могут использоваться и где они такие берутся? И ккстати, разъема для программирования тоже нет... Они же не к ножкам подпаиваются чтобы зашить туда программу?
Заранее спасибо!
azs27
Offline
Зарегистрирован: 09.12.2015

Araris

Документация по HX711, библиотеки, скетч, схема - https://www.dropbox.com/s/tvy4quuis7d7iht/Scales.zip?dl=0

Битая ссылка дайте схему подключения 4 датчиков по 3 провода.
Araris
Offline
Зарегистрирован: 09.11.2012

Пожалуйста: https://www.dropbox.com/s/ik2pk27zog4nn7d/AVSmartScales.zip?dl=0

Схема подключения датчиков присутствует и в этой теме, и в первоисточнике на http://geektimes.ru/post/258592/

Artemvip7
Offline
Зарегистрирован: 02.08.2014

Что означает такая запись "4120.f"?

Araris
Offline
Зарегистрирован: 09.11.2012

Artemvip7 пишет:

Что означает такая запись "4120.f"?

???

Это о чём вообще ?

Artemvip7
Offline
Зарегистрирован: 02.08.2014

Строка 50 из вашего скетча. Что означает ".f"?

Araris
Offline
Зарегистрирован: 09.11.2012

float CurScale = 4120.f; // default 2280.f 

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

Вот тут немного нашел : http://stackoverflow.com/questions/2391818/f-after-number-float-in-objective-c-c

komar73
Offline
Зарегистрирован: 26.02.2016

Расскажите пожалуйста о процессе калиброки. Нужні єталонніе гири или как?

Araris
Offline
Зарегистрирован: 09.11.2012

В первом посте темы найдите фразу

"Зачем там кнопки ? - а для калибровки. В скетче вес вычисляется  по формуле CurWeight = scale.get_units(NumTimes) * 1000 / CurScale; , вот эта CurScale кнопками и корректируется, затем в EEPROM на будущее сохраняется. Естественно, можно обойтись и без кнопок, но так калибровать удобнее."

Возможно, это ответ на Ваш вопрос.

Begemot
Offline
Зарегистрирован: 28.04.2016

Пришли датчики, из даташита http://www.fut-electronics.com/wp-content/plugins/fe_downloads/Uploads/Tutorial_for_Load_Cell_weight_sensor%2050KG.pdf я понял одна половина датчика должна обладать положительным коэффициентом, вторая отрицательным, но при испытании сопротивление обоих половинок датчика изменяется одинаково - оба увеличиваются или оба уменьшаются. Датчики бракованные?

Japar
Offline
Зарегистрирован: 28.05.2016

Здравствуйте, можно ваши контакты, хотел обсудить с вами по поводу весов.

Araris
Offline
Зарегистрирован: 09.11.2012

Здравствуйте. Технические вопросы обсуждаются в данной теме, коммерческие и прочие мне, извините, неинтересны.

Japar
Offline
Зарегистрирован: 28.05.2016

Спасибо за ответ. К сожалению я никак не могу решить проблему с весами. Есть весы, ацп711 и ардуино, не знаю как их подключить, подскажите схему подключения четырех тензодатчиков с тремя проводами к ацп 711?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013