Авторизация
Регистрация

Напомнить пароль

Простой беспроводной метеодатчик на Attiny13

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

Измерение температуры

Atiny13/13A не имеет встроенного датчика температуры, поэтому необходимо использовать внешний. В самоделках в качестве датчиков наиболее часто используются простые и цифровые сенсоры температуры и влажности серии DHT11, DHT22 и их многочисленные китайские клоны (в моем случае — AM2320):

Все они отличаются точностью и диапазонами измерения, но имеют общий протокол для обмена информацией с микроконтроллером:

Для работы с этими датчиками я состряпал простую и «ленивую» мини библиотеку, которая позволяет читать данные из DHT11 и DHT22 (AM2320):
TinyDHT.h
#ifndef _TINYDHT_H_
#define _TINYDHT_H_

#include <avr/io.h>
#include <util/delay.h>

#ifndef TDHT_DDR_REG
#define TDHT_DDR_REG DDRB
#endif
#ifndef TDHT_PORT_REG
#define TDHT_PORT_REG PORTB
#endif
#ifndef TDHT_PIN_REG
#define TDHT_PIN_REG PINB
#endif
#ifndef TDHT_ONE_DELAY_US
#define TDHT_ONE_DELAY_US 30
#endif
#ifndef TDHT_READ_ATTEMPTS
#define TDHT_READ_ATTEMPTS 2
#endif

#define _tdhtPinLow(pin) TDHT_PORT_REG &= ~(1 << pin)
#define _tdhtPinHigh(pin) TDHT_PORT_REG |= (1 << pin)
#define _tdhtPinToOut(pin) TDHT_DDR_REG |= (1 << pin)
#define _tdhtPinToIn(pin) TDHT_DDR_REG &= ~(1 << pin)
#define _tdhtGetPinValue(pin) (TDHT_PIN_REG & (1 << pin))

static inline void _tdhtPinChangeWait(uint8_t pin, uint8_t currentState) {
  uint8_t counter = 0;
  while ((!_tdhtGetPinValue(pin)) != currentState && ++counter < 255) {
    _delay_us(1);
  }
}

static inline uint8_t _tdhtReadRawData(uint8_t pin, uint16_t sensorDelay, uint8_t *raw_data_buffer) {
  _delay_ms(sensorDelay);

  _tdhtPinToOut(pin);
  _tdhtPinLow(pin);
  _delay_ms(20);

  _tdhtPinToIn(pin);
  _tdhtPinHigh(pin);

  _tdhtPinChangeWait(pin, 1);
  _tdhtPinChangeWait(pin, 0);
  _tdhtPinChangeWait(pin, 1);

  for (uint8_t i = 0; i < 5; i++) {
    for (uint8_t j = 0; j < 8; j++) {
      _tdhtPinChangeWait(pin, 0);
      raw_data_buffer[i] <<= 1;
      _delay_us(TDHT_ONE_DELAY_US);
	  if (_tdhtGetPinValue(pin)) {
	    raw_data_buffer[i] |= 1;
	    _tdhtPinChangeWait(pin, 1);
	  }
    }
  }

  return (raw_data_buffer[4] == (uint8_t) (raw_data_buffer[0] + raw_data_buffer[1] + raw_data_buffer[2] + raw_data_buffer[3]));
}

static inline uint8_t tdhtReadDataDHT11(uint8_t pin, int16_t *temperature, uint16_t *humidity) {
  uint8_t raw_data[5] = {0, 0, 0, 0, 0};
  for (uint8_t i = 0; i < TDHT_READ_ATTEMPTS; i++) {
    if (_tdhtReadRawData(pin, 1500, raw_data)) {
      *temperature = (uint16_t) raw_data[2] * 10;
      *humidity = (uint16_t) raw_data[0] * 10;
      if (i > 0) return 1;
    }
  }
  return 0;
}

static inline uint8_t tdhtReadDataDHT22(uint8_t pin, int16_t *temperature, uint16_t *humidity) {
  uint8_t raw_data[5] = {0, 0, 0, 0, 0};
  for (uint8_t i = 0; i < TDHT_READ_ATTEMPTS; i++) {
    if (_tdhtReadRawData(pin, 2000, raw_data)) {
      *temperature = ((uint16_t) raw_data[2] << 8) | raw_data[3];
      *humidity = ((uint16_t) raw_data[0] << 8) | raw_data[1];
      if (i > 0) return 1;
    }
  }
  return 0;
}

#endif /* _TINYDHT_H_ */

Она не использует никакие прерывания, все взаимодействие происходит через простой bit-banging без какого-либо контроля корректности интервалов. Тем не менее код работает практически на любых МК, не завелось только на Attiny13 с частотой 600КГц — скорее всего причина в высоких накладных расходах. Собственно, сами методы получения данных с датчиков:
uint8_t tdhtReadDataDHT11(uint8_t pin, int16_t *temperature, uint16_t *humidity);
uint8_t tdhtReadDataDHT22(uint8_t pin, int16_t *temperature, uint16_t *humidity);

Передаем номер пина, к которому подключен датчик, и указатели на переменные, куда записывать результат. В случае успешного получения данных методы возвращают 1, в случае ошибки — 0. Параметр TDHT_READ_ATTEMPTS задает количество попыток чтения данных и должен быть не меньше 2, так как многие клоны датчиков выдают при первом чтении мусорные данные, и поэтому результат первого чтения отбрасывается.

Упаковка данных

Для передачи по воздуху данные датчика нужно предварительно и как можно более компактно упаковать в байты. Чем меньше пакет — тем больше вероятность его успешной доставки и меньше затраты энергии на передачу. Кроме того, пакеты длиной не более 32 бит (4 байта) можно принимать практически чем угодно с помощью библиотеки RCSwitch. В общем случае температура с датчиков DHT может принимать значения от -40°C до 80°C, влажность — от 0% до 100%. В итоге я решил использовать следующую структуру 32-битного пакета:

  • 3 бита — ID метеодатчика (значения от 0 до 7, позволяет адресовать до 8 устройств)
  • 1 бит — знак температуры (0 — положительная, 1 — отрицательная)
  • 10 бит — температура
  • 10 бит — влажность
  • 8 бит — контрольная сумма всех предыдущих значений, обрезанная до 8 бит
Таким образом, в посылке можно передать температуру от -102.3°C до 102.3°C и влажность от 0 до 102.3%, что перекрывает возможности датчиков и не вносит большой избыточности. Контрольная сумма позволяет на приемной стороне отсеивать битые пакеты, 8 бит для этого, конечно, маловато, но за все время экспериментов я не заметил, чтобы даже через эту простейшую защиту пробивались некорректные данные.

Собираем воедино

Для сборки метеодатчика нам понадобятся буквально несколько деталей:


Общая схема метеодатчика:

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

Attiny13, как и многие другие микроконтроллеры, имеет встроенные подтягивающие (pull-up) резисторы, но я столкнулся с тем, что на некоторых экземплярах МК они недостаточно «сильные» для корректной работы с датчиком, поэтому мне пришлось усилить подтяжку с помощью резистора на 10 кОм, включив его между PB0 и PB1 (VCC и DATA датчика).
Исходный код программы
/*
 * WeatherSensor.cpp
 *
 * Created: 14.09.2021 15:13:19
 * Author : SinuX
 */ 

#define F_CPU 1200000UL		// 1.2 MHz

#define TRF_TX_PIN      PB4	// Передатчик на 4 пине
#define TRF_DATA_SIZE   4	// Размер посылки 4 байта
#define TRF_RX_DISABLED	// Исключаем приемную часть TinyRF для экономии места

#define DHT22			// Тип датчика: DHT22/AM2320
#define DHT_PIN PB0		// Датчик на 0 пине

// Контакты VCC датчика и передатчика
#define TX_VCC_PIN	PB3
#define DHT_VCC_PIN	PB1

// Множитель циклов сна (значения от 1 до 255) позволяет настраивать интервал отправки данных от 8 секунд до 34 минут
#define SLEEP_MULTIPLIER 5  // Просыпаемся и отправляем инфу раз в 5 * 8 = 40 секунд
#define SENSOR_ID 0                // ID метеодатчика (значения от 0 до 7)

#include "tinydht.h"
#include "tinyrf.h"
#include <stdlib.h>
#include <avr/sleep.h>
#include <avr/wdt.h>

typedef union {
	struct {
		uint8_t sensorId : 3;
		uint8_t temperatureSign : 1;
		uint16_t temperature : 10;
		uint16_t humidity : 10;
		uint8_t checksum : 8;
	};
	uint8_t dataBytes[4];
	uint32_t data;
} TxData;

uint8_t volatile wakeupCounter = 0;

void sendData(int16_t temperature, uint16_t humidity) {
	TxData txData;
	txData.data = 0;
	txData.sensorId = SENSOR_ID;
	txData.temperatureSign = temperature < 0 ? 1 : 0;
	txData.temperature = abs(temperature);
	txData.humidity = humidity;
	txData.checksum = txData.sensorId + txData.temperatureSign + txData.temperature + txData.humidity;
	
	// Включаем передатчик и отправляем данные
	trf_init();
	PORTB |= (1 << TX_VCC_PIN);
	trf_send(txData.dataBytes);
}

ISR (WDT_vect) {
	// Если не настало время отправки - погружаемся обратно в сон
	if (++wakeupCounter < SLEEP_MULTIPLIER) {
		return;
	}
	
	wakeupCounter = 0;
	
	// Временно отключаем ватчдог, чтобы он не сбросил МК в процессе получения значений
	wdt_disable();
	
	// Включаем датчик и пытаемся получить данные
	PORTB |= (1 << DHT_VCC_PIN);
	int16_t temperature = 0;
	uint16_t humidity = 0;
	uint8_t readResult = 0;
	
	// DHT11
	#ifdef DHT11
	readResult = tdhtReadDataDHT11(DHT_PIN, &temperature, &humidity);
	#endif

	// DHT22
	#ifdef DHT22
	readResult = tdhtReadDataDHT22(DHT_PIN,  &temperature, &humidity);
	#endif
	
	// Отключаем датчик и отправляем инфу
	PORTB &= ~(1 << DHT_VCC_PIN);
	if (readResult) {
		sendData(temperature, humidity);
	}
}

int main(void) {
	DDRB |= (1 << TX_VCC_PIN);
	DDRB |= (1 << DHT_VCC_PIN);

	wdt_reset();
	sei();
	set_sleep_mode(SLEEP_MODE_PWR_DOWN);
	
	while(1) {
		// Отключаем пины, заводим "будильник" на 8 секунд и выключаемся
		PORTB = 0;
		wdt_enable(WDTO_8S);
		WDTCR |= (1 << WDTIE);
		sleep_enable();
		sleep_cpu();
	}
}

Со включенной оптимизацией -Os код компилируется в 780 байт, чего достаточно для заливки в t13, и даже остается еще место для добавления каких-нибудь дополнительных фич (например, чтения уровня батарейки и отправки отдельными посылками). Фьюзы для прошивки следующие: -Ulfuse:w:0x62:m -Uhfuse:w:0xDF:m

В коде наибольший интерес представляют константы SENSOR_ID и SLEEP_MULTIPLIER, первая задает идентификатор метеодатчика (должен быть уникальным), вторая позволяет настроить период пробуждения для чтения и отправки данных.

Общий алгоритм работы следующий:

  • МК находится в выключенном состоянии и просыпается каждые 8 * SLEEP_MULTIPLIER секунд по прерыванию WDT
  • Подает питание на датчик и с задержкой (1.5 сек для DHT11, 2 сек для DHT22) делает 2 попытки чтения данных
  • Отключает питание датчика и, если данные были успешно прочитаны, включает передатчик и отправляет данные
  • Снова уходит в отключку
Таким образом, с помощью SLEEP_MULTIPLIER можно гибко настроить длительность сна (а следовательно и период отправки инфы) в пределах от 8 до 2040 секунд. Пакет данных отправляется 10 раз, если нужно другое значение — можно настроить параметром TRF_TX_REPEAT_COUNT из TinyRF.

Благодаря программному управлению питанием датчика и передатчика в режиме сна через них нет никакой утечки тока. В режиме сна схема потребляет всего 7 мкА при питании от 5В, при чтении данных датчика — 0.9 — 3 мА, при передаче — около 10 мА. При периодах обновления, исчисляемых десятками минут, среднее энергопотребление близится к минимально возможному, поэтому такой датчик может очень долгое время (недели и месяцы) работать от литиевого аккумулятора даже небольшой емкости. Микроконтроллер и передатчик могут работать даже от одной 3-вольтовой батарейки CR2032, но вот DHT исключает такой вариант питания, потому что требует на вход минимум 3.3В. От 2xCR2023 питаться также не выйдет — выдаваемые ими 6 вольт выходят за рамки допустимых 5.5В как датчика, так и микроконтроллера, поэтому из батарейных вариантов питания здесь мне видятся только 3 элемента по 1.5В.

Приемная часть

Так как посылка имеет длину 32 бита, то ее можно принять с помощью любой ардуины с библиотекой RCSwitch. Берем любой приемник на 433.92 МГц, подключаем его к Arduino и заливаем скетч (не забыв поправить номер пина данных в соответствии со своей моделью платы):
Скетч приемника для Arduino Nano
#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();
unsigned long lastValue;

union {
  struct {
    uint8_t sensorId : 3;
    uint8_t temperatureSign : 1;
    uint16_t temperature : 10;
    uint16_t humidity : 10;
    uint8_t checksum : 8;
  };
  byte dataBytes[4];
} RxData;

void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
}

void loop() {
  if (mySwitch.available()) {
    unsigned long value = mySwitch.getReceivedValue();
    // Получена новая посылка, отличная от предыдущей
    if (lastValue != value) {
      lastValue = value;

      // Переворачиваем байты посылки
      for (int8_t i = 3; i >= 0; i--) {
        RxData.dataBytes[i] = (byte) value;
        value >>= 8;
      }
      
      // Выводим на экран, если контрольная сумма верна
      if (RxData.checksum == (byte)(RxData.sensorId + RxData.temperatureSign + RxData.temperature + RxData.humidity)) {
        Serial.print("Sensor: ");
        Serial.print(RxData.sensorId);
        Serial.print(", Temp: ");
        Serial.print(RxData.temperatureSign ? "-" : "");
        Serial.print(RxData.temperature / 10);
        Serial.print(".");
        Serial.print(RxData.temperature % 10);
        Serial.print("ºC, Humid: ");
        Serial.print(RxData.humidity / 10);
        Serial.print(".");
        Serial.print(RxData.humidity % 10);
        Serial.println("%");
      }
    }
    
    mySwitch.resetAvailable();
  }
}

Открываем консоль, включаем метеодатчики, и если все было выполнено верно — наблюдаем вывод получаемых данных:

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

Областей применения для самодельного метеодатчика можно придумать множество. Единственное, что меня смущает и вызывает вопросы, — его работоспособность при сильно отрицательных температурах. Микроконтроллеры ATtiny имеют не самый стабильный внутренний генератор, который в неблагоприятных условиях может «поплыть» еще сильнее вплоть до невозможности взаимодействия с датчиком или возникновения некорректных таймингов при отправке данных по радио. Попытка заморозки работающего датчика в морозилке до -10ºC показала, что с таким небольшим минусом проблем в его работе не возникает, как будут обстоять дела с более низкими температурами — я думаю надвигающаяся зима покажет.
Добавить в избранное
+130 +188
свернутьразвернуть
Комментарии (150)
RSS
+
avatar
+4
спасибо. очень познавательно.

вопрос. вы этот датчик в морозилке пробовали? почему спрашиваю. когда-то давно пытался делать клон передатчика для станции AcuRite на Attiny. пришлось отказаться. частота внутреннего генератора (кварца то нет) сильно уходила от температуры и все delay() улетали.

ну и датчик полная шляпа — по T еще ничего, RH показывает погоду на марсе.
+
avatar
+1
  • SinuX
  • 22 сентября 2021, 17:15
При -10 пробовал, ниже нигде не нашел пока) Тоже есть большие сомнения, что при условных -40 будет нормально работать, но для комнаты или летнего периода пойдет
+
avatar
+1
морозилка? там легко -18С.
+
avatar
+4
  • SinuX
  • 22 сентября 2021, 17:23
Я думаю это все же сильно зависит от холодоса, мой по возрасту не сильно мне уступает)
+
avatar
+1
понимаю.
+
avatar
0
Лёд + соль= -25
+
avatar
0
Лучше мешать с аммиачной селитрой, эффект будет еще сильней.
+
avatar
0
  • shai27
  • 23 сентября 2021, 00:43
Еще лучше сухой лёд с ацетоном.
Аммиачная селитра теперь стоит дохрена, соль все же дешевле.
+
avatar
0
  • emii
  • 23 сентября 2021, 10:50
А еще лучше с солью и селитрой
+
avatar
+1
Натолките льда и смешайте с солью в пакетах, и между ними положите конструкцию с термометром, легко уйдет за -25
+
avatar
+1
  • RatsM
  • 23 сентября 2021, 05:25
Это какая-то магия вне Хогвартса или я что-то не знаю о химии?
+
avatar
+4
  • SinuX
  • 23 сентября 2021, 08:46
Для плавления льда нужна энергия извне, соль заставляет его делать это «насильно» с поглощением энергии у самого себя — температура падает
+
avatar
+3
Это скорее о физике.
+
avatar
+1
  • emii
  • 23 сентября 2021, 10:49
-20 скорее, хотя зависит от термометра)
+
avatar
0
  • Eggth
  • 04 мая 2022, 11:26
У меня вопрос можно ли считать данные с датчика и сверить с нужной температурой или влажность на антини сразу же если да то можете помочь?
+
avatar
0
  • rx3apf
  • 22 сентября 2021, 17:32
Влажность при отрицательных температурах вообще нетривиально измерить. Да и нужно ли?
+
avatar
0
так DHT11, DHT22 и на положительных врет после 50%RH
+
avatar
+1
  • rx3apf
  • 22 сентября 2021, 17:45
Ну, тут ничего не могу сказать. 22-й лежит где-то, но не пробовал. Пробовал SI7021 и BME280 — понравились. Первый еще хорош тем, что штатно с защитной мембраной идет. Тормознее из-за нее, зато как-то спокойнее…
+
avatar
0
SI7021 хорош. его можно заменить на SHT21, HTU21D. 99% команд совпадают.
+
avatar
0
С Attiny13?
+
avatar
0
  • rx3apf
  • 23 сентября 2021, 15:17
Нет. Но никаких препятствий не вижу — чип примитивный, аппроксимации с индивидуальными коэффициентами не требует. ~100 слов памяти программ на упрощенный I2C, плюс все расчеты и прочее — 30% памяти tiny13. Останется места для простенького модема или работы с радиотрансивером.

Вот BME280 да, для его обслуживания и tiny24 только-только…
+
avatar
0
Это прямо тянет каким то мазохизмом смотреть на тини (да вообще на avr8), когда есть 8мибитный тот же stm8s003 предполагаю что в цену этого tiny13. При чем даже есть в корпусе 3х3мм (QFN-20), если нужна миниатюрность, но не теряющий при этом кол-во ног. Во всем на голову выше, начиная от размера, кол-ва ног, периферии, настройки на лету, а не через фьюзы, полноценным отладчиком, когда ты можешь пошагово отлаживать код и ставить точки останова и т.д.
+
avatar
0
  • rx3apf
  • 23 сентября 2021, 20:07
Общение с STM8 мне совершенно никакого удовольствия не доставило. Не нравится ну совершенно. К тому же резко подскочили в цене…
+
avatar
0
  • Z2K
  • 24 сентября 2021, 14:06
Тут уж лучше 10 центовые на 8051.
+
avatar
0
  • SEG
  • 26 сентября 2021, 21:29
И кормить его в сотни раз больше придется )

ps: я лично голосую за стмку.
+
avatar
0
  • ssurneed
  • 26 сентября 2021, 23:22
Хех, цены подросли
+
avatar
0
  • ssurneed
  • 26 сентября 2021, 23:21
Bme280 на stm8 норм. Но шифровать радиопакеты не получится. Памяти мало.
+
avatar
+1
  • gamebox
  • 24 сентября 2021, 10:42
У меня Bme280, частенько уходит в зашкал, в сухую погоду по ночам, а в дождливую погоду круглосуточно 100% влажности выдаёт
+
avatar
0
в дождливую погоду круглосуточно 100% влажности выдаёт
вам это кажется удивительным?
+
avatar
+1
  • gamebox
  • 24 сентября 2021, 20:34
Ну как сказать, судя по дневнику погоды влажность в это время действительно подбирается к пределам 95-98%, и зашкал можно списать на погрешность датчика. Только вот на народном мониторинге постоянно датчик выкидывают из публичного доступа из-за того, что показания влажности не меняются в течение нескольких дней. Пришлось прибегнуть к уловкам и раз в сутки вместо 100 передавать 99.99
+
avatar
+2
  • Jet
  • 23 сентября 2021, 00:36
ещё по опыту DHT22 умирает через год-полтора пребывания на улице (без прямых солнечных лучей и скрытый от дождей), после сдыхания второго датчика перестал их ставить
+
avatar
0
  • shai27
  • 23 сентября 2021, 00:50
Я его помыл и феном прожарил как следует — заработал. Но датчик всё равно уг и показывает плюс минус погоду на марсе. Поутру на нем роса выпала — все, три часа будет рисовать сто процентов, хотя роса уже давно высохла. А если, как часто в нашем болоте, влажность 80+, то сто процентов будет рисовать весь день.
+
avatar
0
У меня около 5-ти DHT22 пришло в негодность где-то за год после покупки (покупал в разное время и в разных местах). Симптомы всегда одни и те же — со временем начинает занижать показания влажности, затем уходит вообще на некий минимум вроде 5.0 или 1.0 процента. Температуру при этом показывает правильно. И, кстати, не важно, включен ли датчик это время или просто лежит в коробке — через год и те, и те оказались неисправны.

В итоге выкинул их все и переделал на Si7021 (тоже с Али). Этот уже года два-три работает более менее исправно. Хотя, кажется, что тоже немного занижает реальную влажность, т.к. в первый год эксплуатации летом я на нем видел и более 80%, а после этого больше 70 — 72 % не видел (каких-либо измерений не проводил).
+
avatar
+12
  • Asteroth
  • 22 сентября 2021, 17:31

Вот это простой датчик — а у вас еще паять нужно :) Но за статью плюс однозначно! Еще бы организовать вывод данных в Home Assistant для наглядности.
+
avatar
+3
Вариантов этого датчика очень много. И болт, и кирпич, и капусты кочан, но при любом раскладе в последней строке мне всегда читается: "[] нет..........[] спиз@или".
+
avatar
+2
  • rx3apf
  • 22 сентября 2021, 17:34
«поэтому из батарейных вариантов питания здесь мне видятся только 3 элемента по 1.5В.»
Бустер из чего-то типа BL853x и от одной банки? У TI вообще есть роскошные изделия с током в единицы uA без нагрузки, но китайчатина доступнее и дешевле.
+
avatar
0
  • SinuX
  • 22 сентября 2021, 17:42
Как вариант, можно датчик вообще через любой бустер с того же пина МК питать, порт легко потянет эти миллиамперы, и потребления в выключенном состоянии также не будет лишнего
+
avatar
0
  • rx3apf
  • 22 сентября 2021, 17:47
Да, но если бустер жрет мало, то можно все от одного алкалинового элемента питать, что удобно.
+
avatar
-7
  • parakhod
  • 22 сентября 2021, 17:46
+
avatar
+5
  • SinuX
  • 22 сентября 2021, 18:04
Но. Зачем?
Да прост)) А как правильно?) Делать показометр на 128 битной SoC с вайфаем и 5G?)
дайте ему хотя бы чуть-чуть в себя придти прежде чем данные считывать
Это есть
+
avatar
-1
  • parakhod
  • 22 сентября 2021, 18:28
Ну хотя бы да ))

Я тут просто прямо сейчас на evaluation board c CC2652RB светодиодиком моргаю (в нерабочее время чисто экспериментов ради), так что просто разрыв технологий резанул ))

Не вру, моргаю
+
avatar
0
CC2652RB дорого. уважаемый в узких кругах pvvx топит за китайские bluetooth TLSR82xx
+
avatar
-5
  • parakhod
  • 22 сентября 2021, 18:54
+
avatar
0
Типа logicmachine от evika?
+
avatar
0
  • parakhod
  • 22 сентября 2021, 19:16
Не видел, посмотрю, пасиб.
Наверное типа, только лучше ))
+
avatar
0
logicmachine.net.ru/

Сам ни разу еще не ковырял их железяки, но по отзывам говорят что очень приятно их контроллеры конфигурируются
+
avatar
0
  • parakhod
  • 22 сентября 2021, 19:28
Забавно, но сразу вижу пару нюансов.

Во-первых у ребят сайт не очень часто обновляется, как можно заметить, но это ладно ))
Но.
Из беспроводных только BT4.
А с проводными большой вопрос с лицензированием интерфейсов, которые они используют — тот же KNX, они не члены ассоциации, а это ни разу не открытый стандарт. То есть для дома для семьи конечно играйся сколько хочешь, но вот продавать, указывая на сайте и в документации поддержку интерфейса — это ой.
+
avatar
0
А вот это очень любопытные вопросы, да. Knx скорее всего у них через софтварного партнера в виде иридиума лицензирован. А может и нет.

Еще есть wirenboard- но его все пилят и пилят, а конца не видно:)) Хотя уже куча поколений вышло. Но там knx уже точно не лицензирован- т.е в плане софта можно скриптами дергать шину, но в плане поддержки етс-ки фиг вам понятное дело.
+
avatar
0
  • parakhod
  • 22 сентября 2021, 21:16
Ну и вопрос поддержки встаёт во весь рост. Я от ISE не могу уже много месяцев внятный ответ получить будет ли реализован вообще мой достаточно простой feature request, и если будет то когда. А тут даже не особо ясно, будет ли контора жива через полгода… (((

А с wiren я вообще удивлён что они живы — давно ничего не слышал.

По поводу моей задумки — у меня основная цель zigbee. Причём много каналов, чтобы без лимита устройств и без лагов.
+
avatar
+1
Внезапно, но вайреновцы живы до сих пор, да. Их кстати в начале года сильно пинал электрошаман за косяки в регистрах их комбинированного датчика
cs-cs.net/news-spring-2021-afdd-inrush-smi-plc-sh-wiren

Zigbee, понятно. Я вот до сих пор не особо признаю решения на радио. Но это у меня горький осадок остался от нескольких проектах сделанных целиком на z-wave.
+
avatar
0
  • parakhod
  • 22 сентября 2021, 23:48
Почитаю завтра псто с компа — там сайт для телефона не оптимизирован, неудобно.

Ну живы — молодцы конечно. Но с другой стороны если за такое время не смогли найти инвестиции на нормальную достаточную команду разработчиков и интеграторов, или не смогли кому-нибудь крупному продаться, то по-хорошему надо проект в open source переводить. Не нравится что-то, мил человек? Пили pull request самостоятельно, будь любезен. Или issue создай хотя бы, и посмотри, все ли согласны с твоей идеей.

Зигбя — очень доволен. Раньше тоже скептически относился, но вот уже полтора года на практике — претензий нет. Лампочками забил уже почти два филипсовских хаба (у них лимит в 50 устройств). Идеально работают сами филипсы, ikea tradfri и на удивление лидловские silver crest LivarnoLux. Но избавился ото всех innr (кому нужен ящик лампочек — отдам даром, самовывоз). Очень глюкавая прошивка, постоянно теряли свои команды и иногда чужие, ломая сеть. Как убрал все эти — идеально всё работает.
+
avatar
-1
  • parakhod
  • 23 сентября 2021, 23:59
Глянул сегодня на сайт рижан — они оказывается действительно в KNX вступили, одни из 500 избранных )) при этом информацию об этом нашёл просто случайно. Походу они вполне интересные товарищи на инженерном уровне, но вот техдизайн и sales у них (ну и всё прилагающееся типа сайта) — тушите свет.
Но это лечится, спишусь как будет время.

И зашёл почитать т-ща электрошамана (не встречал раньше) и реально залип. Чувак — король щиткового оверкилла)))
Ну и да, домашняя автоматизация на PLC в нашем веке — убейте меня кто-нибудь. Всему своё место.
+
avatar
+1
Вы про какую компанию из Риги?

Шаман, да, псих в хорошем плане, в плане электрики:))) Хотя, по оверкиллу, мне приходилось и покрупнее шкафы видеть, чем собирает Шаман:))) Но он то занимается шкафами для квартир и домов, а не для промки, так что да, пожалуй у него оверкилл по шкафчикам))) У меня на бывшей работе щитки, с количеством автоматов больше 5 штук почти всегда были размерами с 19 дюймовый шкаф на 42 юнита, а то и крупнее. Ну и сами шкафы обычно либо риттал, либо хорошие копии риттала:))) Про шкафы, куда с полей приходят сотни сигналов я вообще промолчу.

По плк в домашней автоматизации- ну пока knx будет дороже решения на плк, то проще плк и пучок кабелей прокинуть, чем на knx делать. Тем более те же силовые модули для knx все-равно обычно на дин рейку идут:))) Так что для тех же квартир и домов не сильная экономия по кабелям выходит.
+
avatar
0
  • parakhod
  • 24 сентября 2021, 09:21
Embedded Systems / logicmachine. Почитал у них «о нас» — они из Риги, хотя на русскоязычном сайте это не афишируют почти, ну плюс я так понимаю у них московский офис есть ещё.

Ну да, такие огромные шкафы на крохотные квартирки (да и даже на домики в 200 метров — тоже ничего такого) — это маньячество, конечно. Плюс не видно особых плюсов от их использования, выигрыша ни в комфорте ни в безопасности на таких масштабах они не дают никакого.
KNX лучше в плане распределенности, но я даже не о нём, а о той же зигбе. Задача автоматизации света, со сценариями, таймерами и всем чем угодно, решается на электрическом уровне одним двухамперным автоматом на линию света в комнате, всё. Ну а KNX уже только для кнопочек (опциональных, впрочем). Ну и да, плюс управление термостатами и всякие датчики-приводы, это на проводе, конечно.
+
avatar
0
Ну «умные» дома по хорошему на освещении не ограничиваются:)) То же отопление, вентиляция, кондиционирование, увлажнение и т.д. Кстати, хотел спросить, вопрос с увлажнением воздуха уже решили? Я вот смотрю в сторону кареловских паровых, но блин я в квартире с центральным отоплением и без квартирых теплосчетчиков живу( Придется при таком раскладе двойные суммы за отопление платить- первый раз за центральное отопление, второй- за постоянно работающий умный кипятильник в виде парового увлажнителя.
+
avatar
0
  • parakhod
  • 24 сентября 2021, 14:20
Да, как раз отопление и вентиляция — то ради чего KNX и будет задействовано в основном.
В эти выходные торжественно запускаю первый и единственный пока фэнкойл (комната большая, огромная чугуниевая батарея не влезала под окно и стояла криво рядом, решил заменить на современный подход). Наколхозил к Sabiana Carisma родной контроллер для проводного пульта скрещённый с KNX контроллером Legrand, который рулится BTicino'вской панелькой, я таких уже несколько поставил. Посмотрим, как будет работать.

Я просто про щиты того товарища — у него 90% логики на PLC — это про свет. Ну а оставшиеся проценты — какой-нибудь релюшкой отрубать насос или перекрывать трубу или заслонку. Скучно.
Ещё видел управление всякими термостатами по модбасу, но это миллионом способов сделать можно, да и большой вопрос нужно ли вообще (и зачем тут в принципе контроллер, просто как избыточное передаточное звено).

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

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

А ещё в этом году в планах на крышу солнечные батареи поставить на 6-8кВт и систему накопления энергии (типа powerwall или чего-нибудь такого). У нас до конца года ecobonus 50% действует, причём даже на нашу категорию дома (к сожалению ништяки типа бонуса в 110% нам не светят, как владельцам «люксовой» недвижимости по мнению итальянского правительства), так что с такой системой вполне можно будет уложиться тысяч в 10 (где-то 5 получаются панели с инвертором и установкой и столько же павербанка киловатт-часов на 15, а так по прайсу они в два раза дороже выходят, половину компенсирует правительство, причём сразу при оплате, а не вычетами из налогов).
+
avatar
0
Вот и я до вентиляции с увлажнением до сих пор не дошел( А по управлению думаю все-таки датчики на модбас шину навесить и через бекхоффовский плк управлять всей квартирой. Блин, у меня руки даже до плк до сих пор не добрались(
+
avatar
0
  • parakhod
  • 24 сентября 2021, 23:49
Для квартиры PLC выглядят вполне здоровым решением. Просто если дом и один щиток — это уже лишние сотни метров проводов. Ну и модбас — тоже нормальное кондовое решение. Вполне возможно тоже добавлю в зоопарк, если вентиляция потребует.

А что по поводу руки не доходят — то тут и говорить нечего. Я даже и не знаю, стоит ли завидовать людям с кучей свободного времени. Сегодня после работы обнаружил что есть немного времени и можно потратить его на хозяйство — пошёл в саду добивать уютное место под ёлочкой: там была рядом старая чугунная распаечная коробка, где полностью в воде шли провода к воротам, плюс жуткий чугунный же встраиваемый светильник что теоретически должен был подсвечивать лестницу (но в реальности просто тупо всех слепил) — коробку отреставрировал, светильник выломал и сейчас цементирую туда новый аккуратный, плюс поставил там красивый фонарный столбик и розетки сделал — можно устроиться с ноутом уютно (как доделаю — сфоткаю). Так вдруг вспомнил, что начал это всё в июне. А уже сентябрь кончается. А работы там на полдня по-хорошему (ну плюс ждать пока цемент схватится). Куда время уходит?
+
avatar
+1
А фиг знает куда время уходит(
Я вот например пилил себе тумбочку под инструмент. С одной стороны там не сказать что овер дофига времени по идее надо, но по итогу вышло аж 9 месяцев как я ее делал- то некогда было, то условия неподходящие, то еще что-то
+
avatar
0
  • parakhod
  • 25 сентября 2021, 10:57
Тумбочка — класс. Солидный девайс, сразу видно — для себя и с любовью. Сроки — как по мне так вполне быстро получилось )))
+
avatar
0
Не без косячков правда вышло:)) Но учитывая что я деревяшками лет сто не занимался (да и то, сто лет назад только авиамодели клеил из бальсы, без использования электроинструмента), то вполне неплохой результат как по мне вышел. Я доволен. Хотя за потраченные деньги на инструмент и за потраченное время я бы мог накупить несколько хороших брендовых тумб для инструмента. Но металлические телеги как-то неохота в квартиру ставить)))
+
avatar
0
  • Z2K
  • 24 сентября 2021, 13:58
«KNX лучше в плане распределенности»
— единственный плюс.
+
avatar
-1
  • parakhod
  • 24 сентября 2021, 14:21
Нет.
+
avatar
0
  • SinuX
  • 22 сентября 2021, 18:38
И потом с первого же коммента в лицо плевок, что эти москвичи совсем зажрались там компьютеры на уличные градусники пускать))
+
avatar
+1
  • parakhod
  • 22 сентября 2021, 18:48
Ну а кто говорил что будет легко? ))
+
avatar
+1
  • dskinder
  • 22 сентября 2021, 20:25
Nordic Semiconductor еще никто не упоминал? )))
+
avatar
0
  • antinomy
  • 24 сентября 2021, 02:36
Не подскажете, хочу сделать переносную метеостанцию с автономными беспроводными датчиками (с собственным питанием). Смотрю в сторону ESP32 с экраном (типа Lilygo). Не попадались ли вам датчики температуры, влажности и давления на BLE? Не проприетарном, со своей станцией, а чтобы открытый протокол был.
Или может какой-то ещё вариант реализации посоветуете.
+
avatar
+1
Очередное изобретение велосипеды
Очередной оверинженер пожаловал, который бы ради этой задачи поставил нюк, упс и запустил на нем под JSом опрос, отдаванмый по wifi maх ага?
+
avatar
0
  • parakhod
  • 22 сентября 2021, 18:41
Фи. Низко берёте.
Микросервисы на кластере kubernetes — наш стартовый минимум. Нюк потянет. Но желательно жидкостное охлаждение.
+
avatar
0
  • dskinder
  • 22 сентября 2021, 20:27
Ну кудаж без вас ))) Что скажете о NRF52xxx? )))
+
avatar
+5
Сам через такое проходил. Как обучение микроконтроллерам такие поделки очень взбадривают. Тут и WDT и сон и проблемы с питанием решить надо, и влезть в память Tiny13. Но практического применения у изделия маловато по следующим причинам:

1. Малая дальность. Даже используя дорогой приёмник, 30 метров сквозь стены уже сложно.
2. Если строить свою метеостанцию, то база получается сильно дороже готовых китайских. Все эти экраны, кнопки, корпуса не дешевые.
3. Если интегрировать в умный дом то как? Либо надо шлюз RF — MQTT делать, либо включать приёмник по USB и писать драйвер.

Вот по таким причинам использую неспортивный, но менее геморройный Sonoff + Tasmota.
+
avatar
+1
  • u3712
  • 22 сентября 2021, 18:49
3 бита — ID метеодатчика (значения от 0 до 7, позволяет адресовать до 8 устройств)
1 бит — знак температуры (0 — положительная, 1 — отрицательная)
10 бит — температура
10 бит — влажность
8 бит — контрольная сумма всех предыдущих значений, обрезанная до 8 бит
Для «влажности» 10 бит «роскошь», хватит и 7. А вот обрезать самого-себя на «ID» и пропустить поле «тип датчика» — эттт перебор. ))
Потом захотите что-то расширить, а некуда.
Remark
«1 бит — знак температуры (0 — положительная, 1 — отрицательная)
10 бит — температура»
ой. 11 бит в дополнительном коде.
+
avatar
+2
  • Monk100
  • 22 сентября 2021, 23:03
если не важна точность измерения температуры (что соизмеримо с реальной точностью датчика, направления ветра, влажности и инерционности датчика, калибровкой датчика на Ляо-заводе/подвале) а так же датчик находится в средних широтах то температуру можно брать от -63 до +63, что можно упаковать в 7 бит вместе со знаком, оставить столько же для «влажности» (хотя по опыту достаточно и 5-и бит), 7 бит для ID и 3 бита для CRC — итого 3 байта длинна посылки. важно эту посылку суметь поймать за первый присест в условиях «забитости» эфира такими вот свистелками (в моём случае). Подтяжка D-ноги датчика к +5 во время сна контроллера тоже так себе идея. Питания датчику от ноги контроллера может не хватить, будет сбоить чтение. Конденсатор туда однозначно и программно задержку после подачи питания на датчик перед чтением 0.5...1 сек.
Да, 5 вольт на передатчик это около 5 метров уверенной связи в условиях ж\б панельки.
+
avatar
+4
3 бита для CRC — маловато. В определенных случаях может и помеха пройти. Да и точность снижать не надо, сегодня используется вот такой датчик, завтра Si7021, например, поставите. Если ограничивать длину пакета на 32 бита, то лучше разделить влажность и температуру на два отдельных пакета, типа 3 бита — тип датчика, 5 бит — ID (может совпадать у разных типов датчиков), 16 бит — значение, 8 бит — CRC.

А между повторами передачи пакетов вводить псевдослучайную задержку, которая будет достаточно уникальной у каждого МК (например, по его ID). Тогда даже в случае одновременного просыпания двух передатчиков оба пакета будет все же возможно принять.
+
avatar
+1
Учитывая точность этого датчика, для влажности хватит 4-5 бит.
Для температуры 7 бит «до градуса», 9 «до четверти градуса» — выше точности все равно не будет.
Вот нам и широкий ID, и тип, и флаг «батарейка садится»…

Или да, разделить пакеты по типам.
+
avatar
0
Не понял, в какой среде надо собрать и залить код в передатчик, в Arduino IDE?
+
avatar
0
  • SinuX
  • 22 сентября 2021, 19:19
Atmel Studio, в Arduino тоже можно вроде, если поддержку Attiny добавить
+
avatar
0
  • Reverse
  • 23 сентября 2021, 03:47
в IDE надо добавить описание процессоров и лить обычным программатором, который делается из ардуины. Пользуйтесь гуглом.
alexgyver.ru/lessons/naked-chip/
+
avatar
+2
  • mooni73
  • 22 сентября 2021, 19:00
Хотелось бы прошивку с датчиком DS18B20
Есть конструктор прошивки homes-smart.ru/index.php/oborudovanie/bez-provodov-433-315mgts/besprovodnoj-datchik-temperatury-i-vlazhnosti-na-baze-radiomodulej-433-315
но он не работает
+
avatar
0
А что именно там не работает? Я собирал и у меня всё отлично работает.
+
avatar
0
  • mooni73
  • 23 сентября 2021, 10:24
Мне пишет « Ошибка компиляции.» при любых параметрах.
+
avatar
0
  • willrain
  • 26 сентября 2021, 13:12
del
+
avatar
0
  • yuzd
  • 23 сентября 2021, 11:01
Только собрался делать на базе этого конструктора, а он и вправду не работает. Ошибка компиляции.
+
avatar
+2
Проверяй ещё раз, попросил автора (Максима) поправить. У меня компеляция прошла.
+
avatar
0
  • willrain
  • 26 сентября 2021, 13:18
Напомни ему при случае почту оживить, слал как-то письмо — ящик переполнен.
+
avatar
+2
  • mike888
  • 22 сентября 2021, 19:15
Нет никакого смысла лепить на датчиках типа DHT, что они показывают только им известно. Как выше писали BME280 более пристойны
+
avatar
+1
  • Fakel63
  • 22 сентября 2021, 19:39
кстати, последнее время цены на BME280 выросли неадекватно общему росту цен на электронику
+
avatar
0
  • mike888
  • 22 сентября 2021, 20:28
Странно, может где есть за вменяемую цену. Он и так дешёвым не был
+
avatar
0
  • sim31r
  • 25 сентября 2021, 16:38
Это же датчик давления?
+
avatar
0
  • Fakel63
  • 29 сентября 2021, 19:32
мм?
три в одном же — температура, влажность, давление
+
avatar
0
В помещении — да. А вот в качестве уличных датчиков — нет, очень быстро деградируют при высокой влажности.

SHT31 заметно стабильнее.
+
avatar
+1
Про это есть в даташите. «Прожарка» помогает.
+
avatar
0
Ненадолго.
Датчик живет один сезон. А потом раз в месяц снимать его на прожарку? Проще отказаться.
+
avatar
+1
берите SI7021, SHT21, HTU21D. у них встроенный нагреватель, можно запускать по расписанию.
+
avatar
0
  • Fakel63
  • 23 сентября 2021, 19:39
а где почитать про управление встроенным нагревателем?
+
avatar
0
в datasheet все есть. остальное ваша фантазия и прямые руки.
+
avatar
0
  • willrain
  • 22 сентября 2021, 19:21
Обратите внимание, что контакты VCC у передатчика и датчика подключены не к VCC микроконтроллера, а к пинам — в целях экономии энергии они будут включаться самим микроконтроллером только в нужный момент времени.
Вход данных и так фактически дергает питание генератора в передатчике, при нулевом сигнале потребления нет.
+
avatar
0
  • kashcei
  • 22 сентября 2021, 20:08
А помогите, кто в теме.опознать метеостанцию по фотке-вроде орегон, надписи сзади на немецком, гугля молчит.
Досталась на обмен на какую-то околокомпьютерную железяку…
Проблема-ловит чей-то датчик, и видимо считает его главным, переключает автоматом канал на него.Хотя мой на 1м канале.Но этот чей-то датчик периодически пропадает, и станция висит на его канале(в данном случае 2м).Приходиться перебирать каналы, чтоб увидеть свой…
+
avatar
+1
+
avatar
0
  • kashcei
  • 23 сентября 2021, 22:09
Спасибо, оно+++
+
avatar
+1
  • DainB
  • 23 сентября 2021, 02:03
Oregon Scientific. Очень известный производитель. Почему то я уверен что его модель написана где-то сзади.
+
avatar
0
делал как-то на littlewire для DHT22 и DS18B20 и службу для винды, чтобы хттп запросом лила данные, там точно недописаны всякие буфферинги при обрывах связи, но вот так просто оно точно работало, но не понадобилось в итоге, поэтому забросил)
+
avatar
+1
поэтому их посылки могут периодически накладываться друг на друга
Сделайте многократную отправку пакета с задержкой между отправкой в зависимости от ID датчика. Тогда будет больше шансов получить на приемнике оба пакета.
+
avatar
+1
Что касается температурной стабильности генератора: так ведь у вас же есть термодатчик, вы же знаете текущую температуру!) подкручивайте OSCCAL в зависимости от температуры, и вот оно счастье.
+
avatar
0
  • DainB
  • 23 сентября 2021, 02:02
Ну уж коль тут собрались специалисты закину такой вопрос — как собрать данные со 100-120 термисторов с помощью одного контроллера, скажем ESP? DS18B20 и любые другое готовые 1-wire датчики не могут быть использованы по техническим причинам.
+
avatar
0
100 термисторов ведь не будут расположены на одном столе? А при размещении их в разных частях какой-то большой установки возникнет настолько адская проблема с кабельным хозяйством, наводками и прочим, что вариант остается лишь один: стадо мало-входовых контроллеров, расположенных в местах плотного кучкования термисторов, и гальванически развязанная цифровая шина между ними.
+
avatar
0
  • DainB
  • 23 сентября 2021, 02:18
Все что я пока придумал это завести пару в аналоговые входы tiny85 с и вывести из нее через 1-wire, i2c с таким количеством устройств не полетит. Но мнение коллективного разума тоже интересно.
+
avatar
0
Есть платы с 7 входами АЦП и выводом данных в шину I2C.
Можно задействовать сколько-то таких плат.
Вопрос только с адресами.
Насколько помню, в этих платах есть 4 варианта адреса.
А вам на 100 датчиков нужно больше адресов, чем эти 4.
Посмотрите, может там можно больше адресов использовать.
+
avatar
0
  • rx3apf
  • 23 сентября 2021, 02:17
Как расположены датчики (топология и расстояния)? Какая точность требуется?
+
avatar
0
  • DainB
  • 23 сентября 2021, 02:19
6 метров, по паре датчиков через каждые 10 см. Точность — да чтобы показывало приблизительно похоже.
+
avatar
0
  • rx3apf
  • 23 сентября 2021, 02:23
Тогда да, контроллер на пару. Опрос и прием ответа — можно и по питанию сделать (что-то a la M-BUS). Tiny13 должно бы хватить…
+
avatar
0
  • DainB
  • 23 сентября 2021, 03:38
Зачем там 13, я планировал 85, мне нужно два дифференциальных входа и один выход, 85 для этого должно хватить.

перепутал с 2313. 85 умеет 1-wire и i2c если приспичит
+
avatar
0
  • rx3apf
  • 23 сентября 2021, 11:56
Питать такую кучу по 1-wire так себе затея. А три провода больше, чем два. Я бы сделал все по двум проводам. Но, конечно, не асинхронный как в Mbus, а что-то самосинхронизирующееся (бифазное кодирование или Манчестер).

Дифвходы не нужны, нужна пара аналоговых (раз два датчика), один на запитку опорных резисторов (чтобы меньше жрало), один на ввод (прием опроса), один на вывод (модулятор ответа).
+
avatar
0
  • DainB
  • 23 сентября 2021, 12:52
Питание будет отдельное 12V с конвертером на 5 непосредственно у контроллера, так что никакого паразитного питания для однопровода.

Диффвходы очень нужны для того что я делаю, с термисторов снимается падение напряжения, не спрашивайте зачем, так нада.
+
avatar
0
  • rx3apf
  • 23 сентября 2021, 15:11
Ну, для того, чтобы _измерить температуру_ с помощью NTC, все это совершенно не нужно. Достаточно входа ADC и опорного резистора. Если нужно что-то еще — навыками телепатии я не владею, увы…
+
avatar
0
Если опорный вход АЦП соединен с опорным резистором для NTC (например, и то и то соединено с + питания) — достаточно одного входа АЦП, мы измеряем в данном случае не напряжение, а просто пропорцию сопротивлений резисторов.
+
avatar
0
  • rx3apf
  • 23 сентября 2021, 16:07
Да. Я об этом и говорю. Но если два датчика — то два входа. А если чтобы и жрало по-меньше, то ключевать опорники. NTC удобны тем, что крутизна характеристики позволяет иметь весьма приличное разрешение и вполне даже неплохую точность (если исходно брать однопроцентные).
+
avatar
0
  • DainB
  • 24 сентября 2021, 00:32
Я измеряб сопротивление термисторов включенных по схеме constant current hot wire anemometer, это схема для измерения движения воздуха а не температуры.
+
avatar
0
  • Z2K
  • 24 сентября 2021, 14:04
Хочу похожее сделать для бака с водой. Но датчиков поменьше — 10-15 шт и интервал считывания побольше.
+
avatar
0
  • rx3apf
  • 24 сентября 2021, 16:32
А… Я, кстати, в прошлой теме был неправ — для этой задачи NTC плохо подходят. Или платина или, пожалуй что, подошла бы мелкая лампочка без баллона. Причем — одна. В общем-то задача вполне решается одним сенсором, причем минимум двумя разными вариантами.
+
avatar
0
  • DainB
  • 26 сентября 2021, 06:43
Нормально там работают термисторы, см moderndevice.com/product/wind-sensor/

The hot wire technique excels at low to medium wind speed, and is the preferred technique for sensing indoor air movement, where the spinning cup anemometers typically seen on weather stations are ineffective. As an experimenters tool, the sensor is exquisitely sensitive, with a small puff of air being sensed at a distance of 18-24″.
+
avatar
0
Одна ардуина (pro mini) на 6 датчиков, к ней 485.
Получается 20 устройств.
+
avatar
0
  • DainB
  • 23 сентября 2021, 03:35
Нужно чтобы все заходило в одно место желательно без мультиплексоров.
+
avatar
0
  • sswa
  • 23 сентября 2021, 06:55
Я бы рассмотрел модбас на том же 85ом.
+
avatar
0
  • DainB
  • 23 сентября 2021, 10:18
В чем преимушество RS485 по сравнению с 1-wire кроме скорости шины? В теории 1-wire поддерживает 63 устройства на шине и можно за 15-30 секунд потихоньку опросить все датчики. К тому же сам MAX485 требует 3 линий из всего 4(?) доступных.
+
avatar
0
  • sswa
  • 23 сентября 2021, 11:55
В чем преимущества — для меня вопрос сложны. С 1-wire не работал (только с ds18b20)
Для 485го есть двайвера с автопереключением Rx/Tx, тогда у мк заняты всего 2 линии.
+
avatar
0
  • rx3apf
  • 23 сентября 2021, 11:58
На низких скоростях практикуется и передача по DE (DI на «землю»). Оно коряво, но так делают. Но RS485 — лишние провода.
+
avatar
0
  • DainB
  • 23 сентября 2021, 12:59
Кроме лишних проводов там еще и лишний чип как бы.
+
avatar
0
  • rx3apf
  • 23 сентября 2021, 15:09
Потому я в данном случае и не стал бы применять RS485, ибо совершенно не нужен. Все можно сделать по паре проводов.
+
avatar
0
20 устройств на 485 шине вы запустите без проблем, 60 устройств на 1-wire не будут работать никогда и никак. Даже с активным драйвером. Тогда уж логичнее выбрать LIN, но 60 устройств в гирлянде…

И это… у вас есть живая библиотека для 1-wire-slave? Поделитесь?
+
avatar
0
  • DainB
  • 23 сентября 2021, 23:43
60 устройств на 1-wire не будут работать никогда и никак. Даже с активным драйвером.
Это практический опыт? Объяснить почему сможете?
+
avatar
+2
Преимущество в том, что 485 — это дифференциальная согласованная линия с симметричными драйверами. А 1-wire это одиночная несогласованная линия с односторонним драйвером.

В чем разница? Представьте себе здание с лифтом. И вверх, и вниз лифт везет вас с одинаковой скоростью — и привозит куда надо с гарантией. Это симметричный драйвер.

Теперь представьте, что вы лезете по стене дома. Вниз вас тянет притяжение Земли (односторонний драйвер), вверх вы ползете по стене самостоятельно. Если стена 1 метр (1 устройство на шине), скорее всего все будет работать нормально, на стену высотой 1 метр вы заберетесь без труда. Но если стена 50 метров (50 устройств на шине), вы точно уверены в своей способности гарантированно за строго оговоренное время залезть на эту 50-метровую стену раз хотя бы по 100 в день?

При десятках, не говоря про сотни, устройств на однопроводной шине у вас будет дичайшая емкость и многократные отражения, и вы ничего не сможете с этим сделать, кроме как радикально снижать скорость. И все равно будете ловить кучу помех, потому что в состоянии «все неактивны» длинная линия — это антенна.
Грубо говоря, когда вы едете в лифте, лифт четко вас везет. Когда вы ползете по отвесной 50 метровой стене вверх, вас может сбить вниз пролетающий мимо кирпич или просто порыв ветра.
+
avatar
0
  • Z2K
  • 23 сентября 2021, 11:41
Точему без мультиплексоров? С ними какраз был бы оптимальный вариант.
+
avatar
0
  • DainB
  • 23 сентября 2021, 12:45
Потому что хочется иметь контроллер в одном углу и шину с подключенными с ней одинаковыми сенсорами по всей длине шины, чтобы не гонять дополнительные кабеля и не заморачиваться экрнаирование проводов для аналоговых сигналов, сейчас в моем решении получается 4-х проводная шина (+12, +5, GND, 1-wire), при желании 5 можно получить из 12 на месте, тогда будет 3-х проводная.
+
avatar
0
  • iamjdoe
  • 23 сентября 2021, 19:59
Так у Вас получилось подключить сто датчиков к этой шине и добиться стабильной работы продолжительное время или Вы всё ещё ждёте когда Вам предложат решение под Ваши требования?
+
avatar
0
  • DainB
  • 24 сентября 2021, 00:37
Я жду пока кто-то мне сделает схему, разведет плату и все спаяет конечно же.
+
avatar
0
  • Z2K
  • 23 сентября 2021, 11:39
А быстродействие снятия показаний какое?
+
avatar
0
  • DainB
  • 23 сентября 2021, 12:41
Да не особо важно, скажем если оно опросит все сенсоры за 5-6 секунд этого будет даостаточно.
+
avatar
0
Боюсь по ценнику вам не подойдет, но у того же болида есть термогигрометры на их двухпроводную шину связи
bolid.ru/production/orion/ops-subsystems/spi2000a/s2000-vt.html

В принципе 768 р за готовый датчик на sht как по мне не настолько дорого, плюс при таком объеме вполне возможно что и скидка нормальная будет.
+
avatar
0
  • DainB
  • 23 сентября 2021, 13:56
Благодарю, но задачи совершенно другие, если бы нужно было просто считывать температуру я бы взял DS18B20 и не морочил бы голову.
+
avatar
0
  • Connar
  • 23 сентября 2021, 03:59
А какая дальность? Говорят Lora на несколько ем спокойно бьёт.
+
avatar
0
  • alextvr
  • 23 сентября 2021, 10:15
2 км в плотной городской застройке — модули E32, 10 мВт, скорость 300 бит/с.
+
avatar
0
  • efimovsn
  • 23 сентября 2021, 13:55
Милая штука) Но я бы добавил, что
1. конденсатор надо ставить у каждого девайся в отдельности, а лучше там два, керамика и электролит, этож самоделка, так сделаем непревзойдённо!
2. питание через мины контроллера, это мовитон, надо полевики.
+
avatar
0
Arduino IDE, tinydht.h, просит, скачал с github.com TinyDHT, не принимает, как быть? Подскажите ПЛИЗ
+
avatar
0
Если получиться в Arduino IDE выложите как сделали, пожалуйста. Atmel Studio очень громоздкая среда.
+
avatar
0
  • SinuX
  • 27 сентября 2021, 16:40
Скопировать код tinydht.h из статьи, через блокнот сохранить как файл tinydht.h и закинуть в папку скетча
+
avatar
0
Спасибо! Буду знать что можно так,-«я не волшебник, я только учусь.»
+
avatar
0
Ам2303 и днт11/22 и аналоги нужно питать строго от 5 вольт, иначе влажность будет врать. От 3.3 вольт уже больше 70-80% не покажет, а средние показания будут заниженьі. Они и так очень врут, а от литиевой батареи с плавающим напряжением и тем более. Оптимально 2s lipol или lifepo + LDO стаб (+ маленькая солн. Панелька опционально) ИМХО.
+
avatar
0
Нужна помощь. Все работает но мне нужно получать данние не в Ардуино, а на ESP32. Єто возможно и как сделать?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.