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

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

Термометр & гигрометр на ATMEGA 328P-MU - Поднимаем уровень ARDUINO разработок.

Здравствуйте уважаемые читатели блога Mysku. Сегодня хочу поделиться одним из своих Ардуино проектов. Когда-то, не очень что бы давно я где-то на просторах интернета узнал об Ардуино. Влился я в это дело довольно быстро, уровень вхождения там не высокий.
Через некоторое время уже собрав кучу датчиков, сенсоров для умного дома стал ловить себя на мысли что как то это все не по уму. Модули, большие незамысловатые коробки, куча проводов и термоклея :). Смотря на свою коробку с датчиком темературы и например на датчик температуры того же Сяоми, понимал что хочется что бы выглядел как у Сяоми но в тоже время что бы его можно было как хочешь перепрограмировать как мой в коробке размерами 10см на 6см с проводами и термоклеем. И наверное тогда и было положено начало моим DIY ардуино проектам на PCB платах.

В сегодняшней статье речь пойдет о датчике температуры и влажности на базе процессора atmega328p-mu. Это более «мелкая» версия(абсолютный аналог) изветного всем ардуинщикам процессора atmega328p-au (Arduino Uno, Pro Mini, Nano). Если кто то ранее читал мои статьи то знает что я предпочитаю Mysensors. Что это? Это очень простая и хорошо проработанная и что немаловажно отлично описанная библиотека под Ардуино ИДЕ (и не только) для создания IOT радиосетей на частотах 2.4Ггц, 915, 868, 433 Мгц, а так же проводных сетей на интерфейсе 485, возможно не все упомянул, тк протокол постоянно развивается, все время что то добавляется.

Первое что было сделано, это собственно сам датчик на PCB плате. Делал без оглядки на корпус, по принципу, главное сделать датчик а уж корпус как нибудь да напечатаю,… да уж, не делайте так :). По сути сам датчик это та же ардуинка Про Мини, радиомодуль nRF24l01, датчик температуры и влажности SHT20, только без проводов и термоклея. Из «прибамбасов» это внешняя SPI флешка для прошивки по воздуху(для работы требуется бутлоадер ДуалОптибут, в последствии я перестал их(флешки) ставить на платы, тк пара прошивок по воздуху и полбатарейки нет) и «крипто микра» ATSHA204A так сказать для полного железного комплекта(в Mysensors для активации подписей, шифрования и тп достаточно просто указатать в начале скетча нужные #def)


Саму плату делал в программе Диптрейс, посмотрев видеоуроки на Ютубе, вначале показалось это чем то «адским», но на самом деле все оказалось не так уж и сложно. Платы заказывал в Китае на сайте jlcpcb.com, 2 бакса, любой цвет, и через 2 недели вы уже получаете на руки 10 штук «своего творения» :).



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

В начале разработки корпуса идея была печатать его на FDM 3D принтере, но чем дальше в лес тем становилось понятнее что все мои хотелки оно не способно воспроизвести. К моменту как это понимание пришло уже узнал о другой технологии 3D печати — SLA. Недолго думая и впечатлившись качеством печати была оформлена хотелка на Али — ANYCUBIC Фотон.

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







Это попытки напечатать туже модель на FDM принтере:



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


Список компонентов для самостоятельного изготовления датчика(BOM):
Все закупалось на Али(да, там полно оказывается не только ардуино модулей)
SMD tantalum capacitor 4.7uF — 4.7uF | 10v | 10% — C1
SMD ceramic capacitor 100nF | Y5V — 100nF | 50v | +80-20% — C2, C3, C4, C5, C6, C7
LED — LED SIDE — D1
Pin Header Female — 2x3P | 6pin | 1.27mm — J1, J2
SMD resistor 20K Ohm — 20K | 5% — R1
SMD resistor 4.7K Ohm — 4.7K | 5% — R2, R3, R4
SMD resistor 470K Ohm — 470 | 1% — R5
SMD resistor 1M Ohm — 1M | 1% — R6
SMD resistor 18K Ohm — 18K | 5% — R7
SMD resistor 10K Ohm — 10K | 5% — R8
4-pin SMD side button — SW1, SW2 — спецификация
512-Kbit, 1.65V SPI Serial Flash Memory — AT25DF512C-SSHN-B — U1
(очень желательно наличие буквы D, просто AT25F512C работает в диапозоне 2.7-3.6v что не очень подходит для желающих обновлятся по воздуху)
Mini NRF24L01 + 2.4GHz 1.27MM RF — nRF24l01 1.27 SMD — U2
ATMEGA328P-MU QFN32 — U3
CRYPTO AUTHENTICATION, 1 WIRE — ATSHA204A-STUCZ-T — U4
Humidity and Temperature Sensor IC — SHT20 — U5
BATTERY HOLDER FOR CR2477-1 — L-KLS5-CR2477-1 — U6

Код программы достаточно прост. Для работы с датчиком SHT20 был использован пример библиотеки DFRobot. Впринципе любой скетч, для любого датчика можно за 5 минут преватить в скетч для работы в сети Mysensors.
Скетч

#include <Wire.h>
#include "DFRobot_SHT20.h"
DFRobot_SHT20    sht20; // https://github.com/DFRobot/DFRobot_SHT20

#define MY_DEBUG
//#define MY_DISABLED_SERIAL
#define MY_RADIO_RF24
#define MY_PASSIVE_NODE
#define MY_NODE_ID 200
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
//#define MY_OTA_FIRMWARE_FEATURE
//#define MY_SIGNING_ATSHA204
//#define MY_SIGNING_ATSHA204_PIN A3
//#define MY_SIGNING_REQUEST_SIGNATURES

#define TEMP_SENS_ID 1
#define HUM_SENS_ID 2
#define SETTING_LED_SENS_ID 100
#define DELAY_TIME_SENS_ID 101
#define BATTARY_SEND_SENS_ID 102
#define BATTARY_DATA_SENS_ID 103

#define BAT_COOF 3.04
#define BAT_MIN 195
#define BAT_MAX 295
#define ON 1
#define OFF 0

float humd;
float temp;
float oldhumd;
float oldtemp;
float tempThreshold = 0.5;
float humThreshold = 10.0;
static uint32_t lightMillis;
static uint32_t previousMillis;
uint32_t send_batteryTime;
uint32_t w_battetyTime = 0;
static uint8_t led_pin = 4;
static uint8_t mode_pin = 2; // interrupt
uint32_t delayTime;
int8_t battery;
int8_t old_battery;
uint8_t set_led;
boolean sleep_mode;
boolean configMode = 0;
int8_t timer_status = 0;
bool flag_mode_button = 0;
bool sleep_flag = 0;
bool listen_flag = 0;

#include <MySensors.h>

MyMessage msg_temp(TEMP_SENS_ID, V_TEMP);
MyMessage msg_hum(HUM_SENS_ID, V_HUM);
MyMessage msg_setting_led(SETTING_LED_SENS_ID, V_VAR1);
MyMessage msg_delay_time(DELAY_TIME_SENS_ID, V_VAR1);
MyMessage msg_battary_send(BATTARY_SEND_SENS_ID, V_VAR1);
MyMessage powerMsg(BATTARY_DATA_SENS_ID, V_VAR1);

void preHwInit()
{
  pinMode(led_pin, OUTPUT);
  digitalWrite(led_pin, OFF);
  pinMode(mode_pin, INPUT_PULLUP);
}

void before()
{
  set_led = loadState(100);
  if (set_led > 1) {
    set_led = 1;
    saveState(100, set_led);
  }
  delayTime = loadState(101);
  if (delayTime > 60) {
    delayTime = 3;
    saveState(101, delayTime);
  }
  send_batteryTime = loadState(102);
  if (send_batteryTime > 48) {
    send_batteryTime = 6;
    saveState(102, send_batteryTime);
  }


  digitalWrite(led_pin, ON);
}


void presentation()
{
  sendSketchInfo("Temp & Hum Sensor CR2477", "1.0");
  wait(100);
  present(TEMP_SENS_ID, S_TEMP, "TEMPERATURE DATA");
  wait(100);
  present(HUM_SENS_ID, S_HUM, "HUMIDITY DATA");
  wait(100);
  present(SETTING_LED_SENS_ID, S_CUSTOM, "LED MODE");
  wait(100);
  present(DELAY_TIME_SENS_ID, S_CUSTOM, "DELAY TIME/MIN");
  wait(100);
  present(BATTARY_SEND_SENS_ID, S_CUSTOM, "BATTERY SEND TIME/H");
  wait(100);
  present(BATTARY_DATA_SENS_ID, S_CUSTOM, "BATTERY DATA");
}

void setup()
{
  //attachInterrupt(0, configListener, RISING);
  digitalWrite(led_pin, OFF);
  wait(500);
  digitalWrite(led_pin, ON);
  wait(75);
  digitalWrite(led_pin, OFF);
  wait(50);
  digitalWrite(led_pin, ON);
  wait(75);
  digitalWrite(led_pin, OFF);
  wait(50);
  digitalWrite(led_pin, ON);
  wait(75);
  digitalWrite(led_pin, OFF);
  TRANSPORT_DEBUG(PSTR("MyS: OPERATING MODE\n"));
  wait(100);
  readBatLev();
  wait(100);
  sht20.initSHT20();
  wait(100);
  send_data();
  wait(100);
  send(msg_delay_time.set(delayTime));
  wait(100);
  send(msg_setting_led.set(set_led));
  wait(100);
  send(msg_battary_send.set(send_batteryTime));
}

void loop()
{
  if (configMode == 0) {



    if (sleep_flag == 0) {
      timer_status = sleep(digitalPinToInterrupt(mode_pin), FALLING, delayTime * 60 * 1000, false);
      //timer_status = sleep(digitalPinToInterrupt(mode_pin), RISING, delayTime * 60 * 1000, false);
      sleep_flag = 1;
    }
    if (timer_status == -1) {

      w_battetyTime = w_battetyTime + (delayTime * 60 * 1000);

      if (w_battetyTime >= send_batteryTime * 60 * 60 * 1000) {
        readBatLev();
        w_battetyTime = 0;
      }
      send_data();
      sleep_flag = 0;
    }
    if (timer_status == 0) {
      if (digitalRead(2) == LOW && flag_mode_button == 0) //если кнопка нажата
      {
        flag_mode_button = 1;
        previousMillis = millis();
        wait(50);
      }
      if (digitalRead(2) == LOW && flag_mode_button == 1) {
        if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 2000)) {
          if (millis() - lightMillis > 50)    {
            lightMillis = millis();
            digitalWrite(led_pin, !digitalRead(led_pin));
          }
        }
        if ((millis() - previousMillis > 2000) && (millis() - previousMillis <= 2500)) {
          digitalWrite(led_pin, OFF);
        }
        if ((millis() - previousMillis > 2500) && (millis() - previousMillis <= 4500)) {
          if (millis() - lightMillis > 25)    {
            lightMillis = millis();
            digitalWrite(led_pin, !digitalRead(led_pin));
          }
        }
        if (millis() - previousMillis > 4500) {
          digitalWrite(led_pin, OFF);
        }
      }
      if (digitalRead(2) == HIGH && flag_mode_button == 1) //если кнопка НЕ нажата
      {
        if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 2000)) {
          configMode = !configMode;
          flag_mode_button = 0;
          TRANSPORT_DEBUG(PSTR("MyS: CONFIGURATION MODE\n"));
          sleep_flag = 0;
          digitalWrite(led_pin, OFF);
        }
        if ((millis() - previousMillis > 2000) && (millis() - previousMillis <= 2500)) {
          flag_mode_button = 0;
          sleep_flag = 0;
        }
        if ((millis() - previousMillis > 2500) && (millis() - previousMillis <= 4500))
        {
          flag_mode_button = 0;
          sleep_flag = 0;
          digitalWrite(led_pin, OFF);
        }
        if (millis() - previousMillis > 4500) {
          flag_mode_button = 0;
          sleep_flag = 0;
          wait(50);
        }
      }
    }
  } else {
    if (listen_flag == 0) {
      RF24_startListening();
      listen_flag = 1;
    }
    if (millis() - lightMillis > 1000) {
      lightMillis = millis();
      digitalWrite(led_pin, !digitalRead(led_pin));
    }
    if (digitalRead(2) == LOW && flag_mode_button == 0) //если кнопка нажата
    {
      flag_mode_button = 1;
      //previousMillis = millis();
      wait(50);
    }
    if (digitalRead(2) == LOW && flag_mode_button == 1) {
      
    }
    if (digitalRead(2) == HIGH && flag_mode_button == 1) //если кнопка НЕ нажата
    {
       
      configMode = !configMode;
      listen_flag = 0;
      flag_mode_button = 0;
      TRANSPORT_DEBUG(PSTR("MyS: OPERATING MODE\n"));
      digitalWrite(led_pin, OFF);
      wait(50);
    }
  }
}



void receive(const MyMessage & message)
{
  if (message.sensor == SETTING_LED_SENS_ID) {
    if (message.type == V_VAR1) {
      if (message.getByte() <= 1) {
        set_led = message.getBool();
        saveState(100, set_led);
        send(msg_setting_led.set(set_led));
        if (set_led == 0) {
          TRANSPORT_DEBUG(PSTR("MyS: STATUS LED: OFF\n"));
        }
        if (set_led == 1) {
          TRANSPORT_DEBUG(PSTR("MyS: STATUS LED: ON\n"));
          if (set_led == 1) {
            digitalWrite(led_pin, ON);
            wait(50);
            digitalWrite(led_pin, OFF);
          }
        }
      }
    }
  }
  if (message.sensor == DELAY_TIME_SENS_ID) {
    if (message.type == V_VAR1) {
      if (message.getULong() <= 60 && message.getULong() != 0) {
        delayTime = message.getULong();
        saveState(101, delayTime);
        send(msg_delay_time.set(delayTime));
        TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL TEMP&HUM SEND VALUE IS SET: %d MIN.\n"), delayTime);
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      } else if (message.getULong() > 60) {
        delayTime = 60;
        saveState(101, delayTime);
        send(msg_delay_time.set(delayTime));
        TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL TEMP&HUM SEND VALUE IS SET: %d MIN.\n"), delayTime);
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      } else if (message.getULong() == 0) {
        delayTime = 1;
        saveState(101, delayTime);
        send(msg_delay_time.set(delayTime));
        TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL TEMP&HUM SEND VALUE IS SET: %d MIN.\n"), delayTime);
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      }
    }
  }
  if (message.sensor == BATTARY_SEND_SENS_ID) {
    if (message.type == V_VAR1) {
      if (message.getULong() <= 168) {
        send_batteryTime = message.getULong();
        saveState(102, send_batteryTime);
        send(msg_battary_send.set(send_batteryTime));
        TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL BATTERY SEND IS SET: %d HOUR\n"), send_batteryTime);
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      }
    }
  }
}

void send_data()
{
  humd = sht20.readHumidity();
  temp = sht20.readTemperature();
  int t_humd = (int)humd;
  int t_temp = (int)temp;
  if (abs(temp - oldtemp) >= tempThreshold) {
    send(msg_temp.set(temp, 1));
    oldtemp = temp;
    if (set_led == 1) {
      digitalWrite(led_pin, ON);
      wait(50);
      digitalWrite(led_pin, OFF);
    }
  }
  wait(100);
  if (abs(humd - oldhumd) >= humThreshold) {
    send(msg_hum.set(humd, 1));
    oldhumd = humd;
    if (set_led == 1) {
      digitalWrite(led_pin, ON);
      wait(50);
      digitalWrite(led_pin, OFF);
    }
  }
  TRANSPORT_DEBUG(PSTR("MyS: DATA - TEMPERATURE: %d, HUMIDITY %d\n"), t_temp, t_humd);
}


void readBatLev() {
  ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX0);
  wait(100);
  RF24_startListening();
  wait(200);
  ADCSRA |= _BV(ADSC);
  while (bit_is_set(ADCSRA, ADSC));
  uint8_t low  = ADCL;
  uint8_t high = ADCH;
  long temp = (high << 8) | low;
  float vcc = temp * 1.1 / 1023 * BAT_COOF * 100;
  battery = map((int)vcc, BAT_MIN, BAT_MAX, 0, 100);
  if (battery < 0) {
    battery = 0;
  }
  if (battery > 100) {
    battery = 100;
  }
  TRANSPORT_DEBUG(PSTR("MyS: BATTERY LEVEL: %d, PREVIUS BATTERY LEVEL: %d\n"), battery, old_battery);
  TRANSPORT_DEBUG(PSTR("MyS: BATTERY LEVEL ADC: %d\n"), temp);

  /*
    if (old_battery != battery) {
      if (battery < old_battery) {
        old_battery = battery;
        wait(100);
        sendBatteryLevel(battery);
        wait(100);
        send(powerMsg.set(temp));
        TRANSPORT_DEBUG(PSTR("MyS: SEND BATTERY LEVEL\n"));
      } else {
        battery = old_battery;
      }
    }
  */
  wait(100);
  sendBatteryLevel(battery);
  wait(100);
  send(powerMsg.set(temp));
  TRANSPORT_DEBUG(PSTR("MyS: SEND BATTERY LEVEL\n"));
}



На видео показан тест работы датчика:


Работа датчика с Мажордомо:


Контролером умного дома является Мажордомо(думаю многим известная система), написан модуль Mysensors(пожалуй одна из лучших реализаций поддержки протокола Mysensors в контролерах)


Проект естественно открытый и рекомендованный к повторению. Все детали разработки, файлы плат, прошивка, 3d модели корпуса выложены на сайте www.openhardware.io

На все вопросы по данной разработке, помощь в освоении MySensors обращайтесь в чат @mysensors_rus
Добавить в избранное
+66 +111
свернутьразвернуть
Комментарии (170)
RSS
+
avatar
+8
  • Xylene
  • 17 мая 2019, 10:59
простите, но качеством SLA не впечатлился. Вычеркнул их хотелок
+
avatar
+1
  • berk
  • 17 мая 2019, 11:44
Я бы с радостью попробовал что о еще, но какие варианты?
+
avatar
0
  • Xylene
  • 17 мая 2019, 11:50
я не вижу серьезных преимуществ перед настроенным FDM просто. И там и там неиделаьно, но вполне приемлимо для очень широкого круга задач. Причем у FDM нет недостатков SLA бюджетного как малой области печати и запаха расходников (которые вроде и дороже, точно не знаю)
+
avatar
0
  • berk
  • 17 мая 2019, 11:56
нет, даже очень настроенный FDM не повторит. Я не о фотках корпуса в статье, там принтера настроены не под мелкую печать. Но и на настроенных того не сделать…
+
avatar
+1
А вы пробовали соплом поменьше печатать? 0.2 например
+
avatar
+2
У автора проблема скорее не в SLA, а в самой модели, экспортированной с крупной сеткой. Поэтому результат такой ребристый :)
С другой стороны, использовать SLA для корпусов крупнее пары см — это несколько странно :)
+
avatar
+1
  • berk
  • 17 мая 2019, 11:59
Именно, поначалу делал экспорт с дефолтными настройками из Солид Воркса. Там корпус в районе 4 см, но дело не в размере а в посадочных местах под плату, в прорезях кнопок, мелких сквозных отверстиях, такое недоступно на FDM
+
avatar
0
А всякие фотополимерники для мелких корпусов норм? Довольно аккуратно же должно получиться?
+
avatar
0
Фотополимерники, на мой взгляд, оправданы для создания мастер-моделей для последующего литья, для которых важен внешний вид, или для каких-то единичных художественных миниатюр :)
Хотя, может быть, имеет смысл использовать их и для мелких корпусов типа брелков или часов.
+
avatar
0
Ну если брать первый 3д-принтер мне кажется с ним возни с настройками меньше, а печатает лучше, стоит всего вдвое дороже примерно. Вопрос ещё про прочность…
Всякие панельки для экранчиков или кнопок/датчиков на стену аккуратные.
+
avatar
0
Фотополимерник — для внешнего вида, для небольших дизайнерских вещей :) Потому что возни больше, печатает долго (хотя и не всегда дольше FDM), расходники более дорогие и вредные :)
FDM — для функциональности, для более крупных и/или массовых изделий :)
+
avatar
0
Чем градусник на самом видном месте холодильника не дизайнерская вещь?
Мне печатать много и не надо и пока склоняюсь к такому.
+
avatar
0
Не, ну если в градуснике главное — это дизайн, тогда конечно дизайнерская вещь :)
+
avatar
0
Ну при прочих равных, почему нет. Пока пытаюсь понять какие минусы кроме цены и цены расходников. Если только это, то меня устроит. Просто пока с принтерами дел не имел, но хочу побаловаться.
+
avatar
+1
Минусы — малые размеры печатной области, долгая печать, стоимость смолы, ее механические свойства, возня с промывкой/досветкой.
Плюсы — хорошее качество печати, особенно это проявляется на моделях с высокой детализацией.
На самом деле я тоже давно уже поглядываю на тот же Аникубик Фотон-С, но на вопрос своей жабы «И что ты будешь на нем печатать, чего не можешь напечатать на имеющемся FDM?» я пока ответа не нашел :)
+
avatar
0
Механические свойства, хрупкая получается смола?
+
avatar
0
  • berk
  • 18 мая 2019, 01:12
да, смола от аникубик чем то похожа на искуственный мрамор, твердая с малым запасом гибкости, смола ванхао, чем то напоминает прорезининую пластмассу, мне она больше нравится, но на ней труднее печатать, настройку надо полностью кастомной делать, увеличивать время засветок
+
avatar
0
В основном — да. Говорят, есть смола, близкая по механическим свойствам к ABS, но ее поискать еще, да и цена там уже совсем серьезная :)
Но это я так, по слухам, вычитанным в инете, лучше сами поройтесь по этому вопросу на тематических ресурсах :)
+
avatar
0
  • berk
  • 18 мая 2019, 12:26
смол вообще дофига, есть прям резина, есть такие что по свойствам как карбон получается, прочные, гнутся, хрен поломаешь. но тут засада, засветить такие смолы вообще нереально на китайских принтерах. надо мощьность проектора повышать в разы. или покупать нормальный принтер >300000р
+
avatar
0
Ну да, я же и написал — ее еще поискать, чтобы и работала с таким принтером и свойства имела подходящие :) Ну и цена у нее будет в разы выше обычных ширпотребных смол :)
+
avatar
+1
SLA это и есть «фотополимерник». Просто его возможности как бы избыточны для банальных корпусов. Плюс еще нужно понимать что на бюджетном не сделаешь крупный корпус, не влезет. Дороже расходники, намного более долгая печать. Нужно продумывать модель, что бы не оставалось замкнутых полостей с жидким полимером. Корпус от ТС должен неплохо напечататься на нормальном настроенном FDM принтере, я модельки посмотрел в Куре. Прорези для него не являются чем то фантастическим. Но, смотря какие были запросы у ТС.
+
avatar
+7
  • Corvax
  • 17 мая 2019, 11:02
Это реклама некоего mysensors? Или рассказ о трудностях печати корпуса? Причем качество для SLA действительно не впечатляет. И листинг в полобзора впечатлил…
комментарий скрыт
+
avatar
+3
  • Corvax
  • 17 мая 2019, 11:12
Мда…
+
avatar
-6
  • berk
  • 17 мая 2019, 11:17
+
avatar
+2
  • Xylene
  • 17 мая 2019, 11:18
есть тэг спойлера и есть тэг кода
Дополнительная информация

int main () {
 return 0;
}

работает в основном тексте обзора. В комментариях нет
mysku.club/blog/aliexpress/72638.html

О, вроде и в комментарии сработало
+
avatar
+3
  • berk
  • 17 мая 2019, 11:20
ок, щас буду разбиратся
+
avatar
+4
  • berk
  • 17 мая 2019, 11:32
Спасибо за наводку, убрал в спойлер
+
avatar
+9
  • Corvax
  • 17 мая 2019, 11:20
Зато запилить «обзор», где через слово и на всех картинках мелькает mysensors сумели, чо.
+
avatar
0
  • berk
  • 17 мая 2019, 11:21
спасибо
+
avatar
+2
Mysensors того стоит, это действительно отличный проект
+
avatar
+1
Интересно, минусаторы вообще понимают, о чем речь :-)
+
avatar
+1
Судя по всему нет. Видимо считают что это реклама какая-то. А правда в том, что это открытый проект с очень низким порогом входа, позволяющий легко организовывать управление беспроводными устройствами.
+
avatar
0
У него крайне непонятный и запутанный сайт.
+
avatar
+1
Нормальный и логичный сайт. То что нет новомодных html5 и котиков не переводит его в раздел запутанных. Вся информация разбита по разделам, это ардуина, это датчики, это шлюз на малинке. Юзаю mysensors на двух датчиках: давления и освещенности, под которые не было готового проекта. Запилены через Flprog, и третий месяц вполне себе стабильно живут.
+
avatar
0
Не-не-не, я скорее против этих html5 и js, я про что куда и зачем и как резонно спросил Олег Артамонов, где документация?
Посмотрите на тот же esphome, намного понятнее выглядит, хотя тоже не идеален.
+
avatar
0
  • berk
  • 18 мая 2019, 01:16
я и за еспхоум, но плиз ткните в описание протокола по Олегу Артемову
+
avatar
0
Самая наглядная у тасмоты. Esphome то же пока не очень логичен + есть некоторые ошибки. Но в целом что там что там при желании можно разобраться.
+
avatar
0
mysensors-то проект хороший, много сил люди вложили чтобы все просто работало.
+
avatar
+1
  • berk
  • 17 мая 2019, 11:20
Листинг я хз как свернуть, на других порталах это без проблем, например Хабр. По поводу SLA, что можете предложить из доступного для народа на данный момент? Там я печатал слоем в 100микрон, можно в 25 уйти, но полимер жалко было, тк тогда я только осваивал этот апарат. Ну и детали прям из-под принтера, вообще без обработки. Это сейчас я их уже надфилями обрабатываю(места поддержек)
+
avatar
+9
Ох уж эта мода считать, что телеграм есть у всех…
+
avatar
-2
  • berk
  • 17 мая 2019, 11:22
Просто там быстро решают проблемы, вот классика — mysensors.ru/forum/
вэлкам
+
avatar
+7
Классика, судя по датам последних сообщений, скорее мертва чем жива :)
+
avatar
0
Это русскоязычный форум. На англоязычном постоянно куча народу и помогают в течение часа точно. Вы бы для начала разобрались что такое MySensors, а потом уже сарказмировали.
+
avatar
+3
Вы бы для начала разобрались что такое MySensors
Набор ардуиновских библиотек :)
Кстати, на Хабре один комментатор спросил про описание протокола обмена сообщениями между нодами и центром, оказалось, что такого описания вообще нет :)

:)))
+
avatar
0
Там еще забавная тема с логгингом, вроде логирует много и подробно, но все логи нечитаемые человеком. На сайте есть расшифровщик, но он давно не обновлялся и расшифровывает только часть сообщений, а то что расшифровал, потом дальше ищешь на форуме с комментариями разработчиков, т.к. документации нет. Ну сорцы тоже можно почитать, но это для сильных духом.

Хотя нередко все работает сразу и по инструкциям, которых у них все же полно.
+
avatar
0
Ну, в принципе, ситуация не такая уж редкая для любительских проектов :)
+
avatar
+1
У вас в телеге такая скорость шитпостинга, что я через час отписался нафиг.
+
avatar
0
  • berk
  • 17 мая 2019, 16:44
сочувствую Вам, когда я пришел в этот чат, то просто отключил уведомления ;). шитнешитпостинг это субъективизм, люди спрашивают, им отвечают, это главное.
+
avatar
+2
Уведомления у меня отключены принципиально. Но заходить и листать вникать что там настрочили на 1000 постов просто не имеет никакого смысла. В основном заметил там именно шитпостинг не относящийся к теме.
+
avatar
0
а что поставить нельзя?
+
avatar
0
Я пользуюсь только ватсапом :)
+
avatar
0
  • berk
  • 17 мая 2019, 21:26
видимо это хорошая новость :)
+
avatar
+5
Это просто констатация факта :) Бывают такие люди, которые не пользуются соц.сетями, не заводят десяток мессенджеров. Я как раз из таких :)
+
avatar
0
А не надо десяток, заведите только телеграм, он лучше :-)
Хотя окружение диктует, конечно, но бороться можно, я вот всю родню от вайбера отвадил…
+
avatar
0
заведите только телеграм
А зачем? :) Если меня Ватсап устраивает :)
+
avatar
+1
  • Parsek
  • 17 мая 2019, 20:30
Не понял чего столько минусов?
Классная тема! Сложновато для меня, но потенциал весьма и весьма
+
avatar
+9
Как бы датчик BME280 получше будет. Да и проще готовую ESP взять и не ваять ничего. Результат получше будет. Но если процесс интересен и руки занять, то в обзоре всё для этого
+
avatar
+1
  • berk
  • 17 мая 2019, 11:14
Это BME280. www.openhardware.io/view/638/EFEKTA-BME280-Sensor/ ESP это не батарейная тема, но сами чипы вполне себе рассматриваю. Мне они нравятся.
+
avatar
+5
Когда наиграешься с поделками на батарейках беспроводных, приходишь к тому что при ремонте делаешь проект и тащишь проводку по хате для питания и данных.
Датчик температуры в комнате весьма условен и сильно зависит от его расположения. А когда делаешь климат, то настраиваешь систему один раз и забываешь про него
+
avatar
0
  • berk
  • 17 мая 2019, 11:26
Именно так у меня это и работает. Поставил и забыл. Отопление, 200 квадратов. С температурниками на батарейках в каждом помещении…
+
avatar
0
Я пошел по аналогичному пути — собрал 10 беспроводных датчиков, раскидал их по помещениям дома + в теплице один. Работает всё хорошо. Правда в малинке, на которой Domotics крутится, последний регулярно падает. хз что ему нужно.
+
avatar
-10
  • 644052
  • 17 мая 2019, 16:12
+
avatar
+8
Это мое хобби. Где я кого-то пытаюсь загрузить этим?
+
avatar
0
  • Parsek
  • 17 мая 2019, 20:33
А для чего Вы пошли в эту тему?
+
avatar
+1
а он во всех темах попердывает и песок сыпет, просто старый ворчун
+
avatar
0
приходишь к тому что при ремонте делаешь проект и тащишь проводку по хате для питания и данных
а по истечении полу года — год, вам захочется поменять место расположение дивана/шкафа/холодильника/телевизора и проводной датчик оказывается «не на своем месте» ((((
+
avatar
+6
Когда делаешь климат, то датчик никуда не двигается, какие данные глубоко пофиг, показометр это для любопытных, пока работает климат смотреть нам нечего.
Если задача понтануться перед пацанами дворовыми, то тут свистелки и перделки с выводом на телефон и эротическим массажем. Вобщем кому что надо :)
+
avatar
0
пока работает климат смотреть нам нечего
свистелки и перделки с выводом на телефон и эротическим массажем
Двумя руками поддержу :)
+
avatar
+3
  • Otard
  • 17 мая 2019, 11:15
ESP с питанием от батареи не лучший выбор.
+
avatar
+1
  • m13ale
  • 17 мая 2019, 11:19
Вот да, wemos mini и bme280 — проще, лучше и дешевле.
+
avatar
+5
  • berk
  • 17 мая 2019, 11:47
не вижу смысла делать температурники массово на bme280/ Один на дом, больше и не надо о давлении знать ничего
+
avatar
+5
Двухъядерный микроконтроллер на 240 МГц с полуметром флэши и оперативки, с жрущим энергию WiFi — только для того чтобы считать с пары датчиков и передать на десяток метров несколько байт? :)
+
avatar
+3
Почему нет? Зато стандартная среда, интеграция в любой менеджер «умного дома», и т. д.
8 ядер, 6-12 гигов памяти, 3-6 камер в сосвременных смартфонах не смущают? Где большинство только смотрит «ленту» ВК и «чатится в чатиках».
+
avatar
0
Нет. не смущает, потому что там это бывает востребовано. Не у всех и не всегда, но бывает.
+
avatar
+3
Так если и тут это востребовано? :)

Почему Вы считаете критерием «востребованности» частоту, объём flash и Wi-Fi?
А не себестоимость, время разработки, поддержки, и т. д.?

Вот я хочу счётчик воды. Казалось бы, импульсы можно на NE555 считать. Удобно это? Нет. Нужен экран. Хочется хороший экран. Нужно иметь возможность считывать данные удалённо и, наоборот, передавать их на сервер. Arduino и «шильды»? Зачем? Всё практически есть в ESPxx.
Можно делать самому, можно просто взять один из множества готовых «конструкторов» и просто реализовать то, что нужно.


Не нужно свои цели, критерии, пути с непоколебимым максимализмом распространять на всех.
+
avatar
+1
Почему Вы считаете критерием «востребованности» частоту, объём flash и Wi-Fi?
А не себестоимость, время разработки, поддержки, и т. д.?
Вот давайте не будет про «разработку». Ардуино — это не разработка, а собирание кубиков, так что существенной разницы между атмегами и ESP в этом отношении нет. Поддержка — то же самое, в 99% ардуиновских «разработках» поддержка выливается в поиск в интернетах ответа на вопрос «почему не работает этот скетч». Опять же — что на атмегах, что на ESP. Себестоимость в единичных экземплярах различается на уровне стоимости бутылки газировки.
Про счетчик воды с красивым экраном даже комментировать не буду :)
+
avatar
+2
А какая разработка это не собирание кубиков? На asm-е?
+
avatar
+1
Та, в которой существенная часть кода пишется и понимается разработчиком.
+
avatar
+4
Почему ардуино не разработка? Написание программы не разработка? Не нравятся именно платы arduino — не проблема, используйте nrf5, stm32, esp8266, esp32. Это просто среда разработки, а то что на практически любой вопрос можно найти ответ и даже готовый код — это же плюс, разве нет?
+
avatar
+1
Почему ардуино не разработка?
Потому что почти никто из ардуиновских «разработчиков» понятия не имеет как там работает все то, что они «разработали» :)
«Скачал скетч NNN, а он не работает, помогите!» — самый распространенный метод отладки в такой «разработке» :)
+
avatar
+3
А кто-то из других программистов в курсе как на разных архитектурах разворачивается их код в машинные команды?
+
avatar
0
В общих чертах — да, в курсе. Речь ведь про программирование микроконтроллеров? :)
Ну и не нужно сравнивать теплое с мягким — знание архитектурных особенностей платформы и знание того что и почему делает программа :)
+
avatar
+1
Ну я как-то хочу показать, что это не двоичное состояние программирует и знает все потроха, до загрузил скетч и не программист. Есть куча градаций и для работы каких-то программ необязательно знать досконально, как не нужно знать, как устроена машина под капотом, чтобы ехать.
+
avatar
+3
до загрузил скетч и не программист
Загрузил скетч, не зная как он работает — не разработчик :) Написал сам или загрузил скетч и разобрался как он работает (чтобы мог исправить/переделать его работу) — уже разработчик :)
не нужно знать, как устроена машина под капотом, чтобы ехать
Правильно, потому что ехать — это шофер. А спроектировать машину — это разработчик, и там уже не получится не знать как устроена машина :)
+
avatar
0
Не спроектировать машину (это уровень написания компилятора скорее или описания hdl процессора), а заставить её ехать по нужной траектории (написать программу для черепашки LOGO), aka выполнить коду функции.
+
avatar
+1
Ну не используйте что они там наразрабатывали, пишите свое с нуля, чем ардуино само по себе то не угодило? :) Это просто ide. Никто не мешает на уровне регистров фигачить :-) Вот тоже ардуино, как и положено код частично нагуглен :)
void activateLpComp() {
  NRF_LPCOMP->PSEL = LPCOMP_PSEL_PSEL_AnalogInput0; // monitor AIN0 (i.e. pin P0.02 on nRF52832).
  while (!(NRF_LPCOMP->PSEL == LPCOMP_PSEL_PSEL_AnalogInput0)) {} 
  NRF_LPCOMP->REFSEL=LPCOMP_REFSEL_REFSEL_Ref4_8Vdd; 
  while (!(NRF_LPCOMP->REFSEL==LPCOMP_REFSEL_REFSEL_Ref4_8Vdd)) {}
  NRF_LPCOMP->HYST = LPCOMP_HYST_HYST_Hyst50mV;
  while (NRF_LPCOMP->HYST != LPCOMP_HYST_HYST_Hyst50mV) {} 
  NRF_LPCOMP->ANADETECT=0;  //detect CROSS events on PIR detection pin
  while (NRF_LPCOMP->ANADETECT!=0) {} 
  NRF_LPCOMP->INTENSET=B1000;  //Enable interrupt for CROSS event
  while (!(((NRF_LPCOMP->INTENSET)&B1000)==B1000))
  NRF_LPCOMP->ENABLE=1;  //Enable LPCOMP
  while (!(NRF_LPCOMP->ENABLE==1)) {} 
  NRF_LPCOMP->TASKS_START=1;  //start the LPCOMP
  while (!(NRF_LPCOMP->EVENTS_READY)) {}  
  
  NVIC_SetPriority(LPCOMP_IRQn, 15);
  NVIC_ClearPendingIRQ(LPCOMP_IRQn);
  NVIC_EnableIRQ(LPCOMP_IRQn);
}
+
avatar
+2
чем ардуино само по себе то не угодило? :)
Ничем, для своей ниши — неплохая вещь :) Печалит только уровень подавляющего большинства ардуинщиков и распространение проектов, сляпанных кое-как без понимания как оно работает :)
Ну, я не знаю… Это как самому сделать в доме отопление: трубы вкривь и вкось, из половины соединений капает вода, батареи стоят на полу на кирпичах… И выставить это в инет «Во, оказывается делать отопление — легко, я за пару дней справился! Вот проект для желающих повторить: ...» :)
+
avatar
+1
Ну может и лучше, чем по чёрному топить в холод)))
+
avatar
+1
Но хвастаться-то нечем, и незачем показывать всем такое «мастерство» :)
+
avatar
-2
  • goto
  • 17 мая 2019, 11:10
Я не являюсь знатоком английского языка.Возможно эти термины, сокращения писать на русском? Переводить на телефоне не очень удобно.
+
avatar
+2
  • berk
  • 17 мая 2019, 11:13
Вы о скетче? С удовольствием дополню, просто не понял о чем/
+
avatar
+2
За труды и продвижение технологий в массы конечно Вам большой плюс, но при наличии готового датчика температуры+влажности+давления от Хлаоми за 10 у.е., такое повторять будет только большой любитель рукоблудия.
+
avatar
+2
  • berk
  • 17 мая 2019, 11:28
:)), наверное Вы правы, тут надо это иметь в виде хобби. Но есть конечно и то чего еще нет в природе ни у ксяоми etc — www.openhardware.io/view/629/EFEKTA-TempandHum-sensorver-nRF52832-E-Ink-display
+
avatar
-1
+
avatar
+2
  • berk
  • 17 мая 2019, 12:45
Смешно, но корпус красивый. Рекомендую ознакомится с тех. возможностями обоих девайсов
+
avatar
0
«Как я данные с BLE-градусника от Xiaomi забирал»
habr.com/ru/post/452558/
+
avatar
+1
Могу ошибаться, но вы отправляете данные каждую минуту. А не часто ли это? Хотя бы раз в 5 минут, или даже 10, ИМХО, хватило бы. Да и расход батарейки был бы меньше.
+
avatar
+1
  • berk
  • 17 мая 2019, 11:34
Это настраиваемо пользователем(обратите внимание на скрин интерфейса в Мажордомо, на датчик можно отправить настройку интервала для данных в минутах, интервала отправки показаний батарейки в часах, включение/отключение индикации светодиодом), стандартно в ПО установлено 2 минуты и только если данные изменились на определенное значение.
+
avatar
+1
Ага, ну тогда ещё ок. У нас (на фирме, где работаю) старые датчики на атмеге, Далласе для температуры и CC1000 на 433мгц. Высылают данные на центральное устройство каждые 15 минут, с коррекцией CRC, подтверждением получения, но без шифрования. Используется батарейка типоразмера АА, но на 3.7В. работает около 5ти лет на одной батареи
+
avatar
+1
Посмотрел проекты, есть весьма интересные. Добавил в закладки ) Есть уже статистика на сколько в рабочем режиме (без экспериментов с перепрошивками) хватает батарейки? Также многие проекты со ссылками на ебай, но везде пустота. Чтонибудь продается или это излишки от заказа плат по 10 штук сдавались. Ну и если в продаже таки чтото появляется то варианты только через ебай? Какбы из Мск в Мск на ебае покупать некомфортно до пупырок )))
Счетчик импульсов заинтересовал люто. Обзор планируется?
+
avatar
0
Счетчик импульсов заинтересовал люто
Что за счетчик импульсов?
+
avatar
0
По ссылке один из проектов ТС
www.openhardware.io/view/658/EFEKTA-Two-channel-Pulse-Counter-or-nRF52
+
avatar
0
Лучше поставить какой-нить микропотребляющий аппаратный счетчик и просто считывать с него значения с нужным периодом :) Тогда не понадобятся такие огромные аккумуляторы :)
+
avatar
+1
  • berk
  • 17 мая 2019, 12:17
Это батарейки, AA/2. Они там потому что там реализовано считывание NAMUR(если вы понмаете о чем я, и не очень хочется на таких датчиках менять батарейки раз в год.
+
avatar
+1
  • berk
  • 17 мая 2019, 12:22
Там далеко не всё выложено, новинки все обсуждаются в чате.
+
avatar
+1
  • vasyna
  • 17 мая 2019, 11:59
Сразу о минусе — пихать в один корпус и плату и датчик температуры… он будет завышать температуру. Только вынос. или термоизоляция.
Из обзора не ясно как дела с автономностью.
+
avatar
+1
Там греться нечему. Если хоть на 0.1 градуса что-то нагреется внутри корпуса — батарейка уже будет мёртвой.
+
avatar
+4
  • berk
  • 17 мая 2019, 12:13
Вы теоретик? я практик. Это не так, завышать не будет. Там нечему грется, это cпяшее устройство и это atmega328. Вот фото девайса на кортексе4, уж он то греется, но опять же если оно спящее, то это снимает проблему. На фото сьем температуры прям с чипа(влагомер почвы посередине). С автономностью все нормально, больше года точно, надеюсь что и больше пары лет будет.
+
avatar
0
  • vasyna
  • 17 мая 2019, 13:13
Вы теоретик? я практик. Это не так, завышать не будет.
Так я тоже не с пустого порожня говорю.
Я сейчас только понял что у вас снял показания отправил и все. У меня просто все в онлайне скажем так, по сему видимо такие отличия.
+
avatar
0
Ссылку на влагомер можно?
+
avatar
+3
  • berk
  • 17 мая 2019, 14:35
а нет еще его в доступе, тесты… пока в горшочке шлют данные, а я собираю. Еще месяц минимум. Потом допилинг ПО.

Инфа о статусе будет в группе…
+
avatar
0
А что за часы на заднем плане?
+
avatar
0
  • berk
  • 18 мая 2019, 01:06
просто:))) часы:))), помоему из Metro… вообще к ним не прикасался :))
+
avatar
0
  • dansar
  • 17 мая 2019, 20:27
А случайно не вы писали где-то на своем блоке/сайте про попытку разработки автономного датчика влажности с передачей по радиоканалу и долгой автономностью? Вроде там питание задумывалось от литиевой таблетки-батарейки.
+
avatar
0
  • Zolg
  • 17 мая 2019, 12:18
512-Kbit, 1.65V SPI Serial Flash Memory — AT25DF512C-SSHN-B — U1
(очень желательно наличие буквы D, просто AT25F512C работает в диапозоне 2.7-3.6v что не очень подходит для желающих обновлятся по воздуху)
Mini NRF24L01 + 2.4GHz 1.27MM RF — nRF24l01 1.27 SMD — U2
ATMEGA328P-MU QFN32 — U3
CRYPTO AUTHENTICATION, 1 WIRE — ATSHA204A-STUCZ-T — U4
Не проще было взять современный nRF5x, где все это (в бОльшем объеме) на борту? Ах, да, arduino )
+
avatar
0
  • berk
  • 17 мая 2019, 12:23
Да, ардуино — www.openhardware.io/view/644/EFEKTA-nRF5-Temperature-and-Humidity-mini-sensor

меня прям печалят индивидуумы, типа кул программеры,… покажите ваши
+
avatar
+4
покажите ваши

Замер датчиков каждую минуту, передача через GSM-канал каждые 15 минут. Без единого скетча :) И обратите внимание на правый нижний график — напряжение батареи. Это при том, что до 15-16 числа станция работала от аккумулятора без подзарядки от солнечной панельки :)
+
avatar
0
  • dansar
  • 17 мая 2019, 20:24
Опишите, пожалуйста, конструкцию.
+
avatar
+3
Это коммерческий заказ, так что приводить схемы не имею права :(
Но в общих чертах так:
— аккумулятор NiMH из трех элементов по 4200 мА*ч (последовательно)
— микроконтроллер серии STM32L с подключенными кварцами 8 МГц для рабочей частоты и 32.768 кГц для часов реального времени (RTC)
— GSM-модем SIM-800
— 10 аналоговых входов
— отдельный вход датчика направления ветра
— 2 цифровых — для импульсов анемометра и датчика дождя
— модуль питания, следящий за зарядом аккумулятора и подключающий или отключающий солнечную панель для подзарядки аккумулятора, все это в аппаратном виде, на компараторах и мосфетах
— счетчик анемометра — отдельная микросхема, ширина счетчика — 32 бит, в ней же пара сотен байт памяти для хранения данных во время спички микроконтроллера
— счетчик дождя — по прерыванию на микроконтроллере
— встроенный (на плате) барометр BMP180
— 4-мегабайтная флэш (AT45DB321) для сохранения измерений
— небольшой OLED-дисплей 128х64 для настройки
— солнечная панель (вроде на 0.2 Ватта)
К аналоговым входам подключаются всевозможные датчики — влажности, температуры, влажности почвы, увлажнения листа и т.п. У всех у них выходное значение — аналоговый сигнал 0-2 В. Питание на все аналоговые датчики коммутируемое, микроконтроллер включает его перед измерением и отключает после считывания показаний.
Большую часть времени микроконтроллер в глубокой спячке с потреблением меньше 1 мкА — отключено все кроме вачдога и RTC, все выводы в третьем состоянии, содержимое памяти теряется (кроме нескольких ячеек RTC). Вообще вся станция в этот период потребляет около 40 мкА, из которых половина — модуль питания со своими компараторами и стабилизаторами, почти все остальное — флэш, барометр, счетчик анемометра. Все это (кроме счетчика) вводится в глубокий сон. Модему, дисплею и аналоговым датчикам питание отрубается.
Через заданный промежуток времени контроллер просыпается по будильнику (RTC), включает питание датчиков, будит барометр и снимает показания. После этого опять все отключает и засыпает. Когда приходит время отправки данных на сервер, включается питание модема, он заводится и данные всех измерений (минимум, максимум, среднее) с последней передачи отправляются серверу. Если не получилось отправить — сохраняются во флэш. Если отправились, то проверяется нет ли во флэш неотправленных данных и если есть — отправляются и они. После чего станция несколько секунд ждет команды от сервера и если команды не поступают, то опять засыпает.
Все параметры могут быть заданы с сервера. Тем же путем может прилететь обновление прошивки станции.
Сама станция (без внешних датчиков) — это одна плата размером примерно 8х12 см (много места занимают разъемы для внешних датчиков).
Вот как-то так :)
+
avatar
0
  • dansar
  • 18 мая 2019, 08:55
Спасибо! Мне интересно ваше мнение, как разработчика на STM32. Я в настоящий момент на начальном уровне разбираюсь в восьмибитных контроллерах STM8, но хочу перейти на STM32. В таких сложных проектах, как вы описали, используются готовые библиотеки типа SPL и LL, или у вас все свое самописное? Использовалась ли какая-нибудь RTOS? Какую среду разработки использовали для написания прошивки?
+
avatar
+1
Я думаю, что перейти будет несложно — документация у них однотипная, а в дебри архитектуры Вам вряд ли придется лезть слишком глубоко :) Я наоборот — хочу для интереса повозиться с STM8, попробовать сделать на них пару вещей для дома, уже приобрел пяток STM8L151 :)
Да, я использую SPL, в основном для настройки переферии. Иначе все равно придется или изобретать свою SPL или запоминать битовые маски в разных регистрах. В критичных ко времени выполнения местах работаю напрямую с регистрами. Пару раз использовал CUBE, но использовал так — создал в CUBE проект, в нем настроил нужную мне периферию, а потом просто выдернул нужный файл исходников из проекта CUBE в свой проект :) Так было, например, когда я делал подключение своего девайса по USB как HID-устройства, без драйверов. Потом мне еще пришлось нормально перелопатить этот кубовский исходник (и информацию по USB HID) чтобы заставить его работать как мне нужно :)
Исходники библиотек я всегда сразу копирую в свой проект, потому что иногда приходится менять в них какие-то моменты. Плюс к этому я копирую в проект файлы настройки линкера и стартовый файл на ассемблере — они в IAR обычно лежат в общих папках среды и по умолчанию среда работает с ними оттуда, не предполагая, что они будут меняться пользователем. У меня — часто меняются :) Например, для бутлодера и для приложения, работающего на контроллере с таким бутлодером.
RTOS — нет, не использую. Пока не было задачи, в которой ее использование было бы оправдано.
Среда разработки — IAR. Понятно, что денег на ее покупку у меня никогда не было и вряд ли когда-то будут, так что… :)
+
avatar
0
  • berk
  • 17 мая 2019, 20:46
красивые картинки, где про эту погодную станцию почитать и фотку глянуть?
У меня тоже куча девайсов и у каждого куча графиков.
+
avatar
0
Это коммерческий проект для агрометеорологов. Мне заказывали написание прошивки для станций, вылившееся еще и в переделку почти всего железа :) Так что увы, видеть эти графики могут только коммерческие пользователи и разработчики :( Картинки рисует сайт, я его не касался, но думаю, что это какие-то библиотечные WEB-графики, не думаю, что веб-программист сам писал их на HTML и CSS :) Хотя кто знает…
+
avatar
0
Во, по-моему эти графики построены вот на этом — nvd3.org/
+
avatar
0
это ж HighCharts, (точнее HighStock) бесплатно для некомерческого пользования. Даёшь ему json в виде [[tm, value],...,[tm, value]] и вот он график, столбиками, линией, с заливкой и т.п.
+
avatar
0
Нет, все же это то, что по моей ссылке :)
+
avatar
-1
  • berk
  • 17 мая 2019, 12:26
Как вам такое ардуино? с нормальной отладкой

+
avatar
+1
  • Xylene
  • 17 мая 2019, 12:37
СлАбо.


Visual Studio еще никто не сделал.
Code — неплохая, но еще игрушечная
В Студии — и под Линукс, и по Виндовс хоть на ++ хоть на C#, и для Андроида, и для iOS и на Phyton и вообще для всего-всего
Да и Ардуина есть с ESP32
+
avatar
0
  • vasyna
  • 17 мая 2019, 13:15
Visual Studio
А она разве не платная?
+
avatar
+1
  • Xylene
  • 17 мая 2019, 13:16
Нет. Платный плагин Visual GDB — но он окупился уже 100 раз. Хотя можно и поискать…
+
avatar
0
  • Corvax
  • 17 мая 2019, 16:00
Спасибо за наводку! Для тех кто будет искать, название без пробела, VisualGDB :)
+
avatar
0
Студия для комьюнити бесплатна, а вот visualgdb триал на 30 дней.
+
avatar
0
atmega328p-mu. Это более «мелкая» версия(абсолютный аналог) изветного всем ардуинщикам процессора atmega328p-au
atmega328p-mu еще кучу лет назад стояли на arduino pro mini от baite на али. У меня таких гора валяется.
+
avatar
0
  • berk
  • 17 мая 2019, 15:53
ну, да, у меня тоже их море, только с сдутыми камнями. но ардуино про мини никогда не выходила на чипах mu ;)
+
avatar
0
Ну, оригинальная не выходила, но…
+
avatar
+3
Главное не забыть написать что сделано в России. И пофиг что оно на 90 сделано иностранцами. И да, где-то я уже это видел.

Но сама работа — в целом хорошо.
+
avatar
+1
И пофиг что оно на 90 сделано иностранцами
Включая программу :))))
+
avatar
+4
Иностранное:
— программа для проектирования платы
— компоненты
— микроконтроллер и радиомодуль
— изготовление платы
— программа для проектирования корпуса
— 3д принтер для изготовления корпуса
— припой/паяльник (наверняка)
— программа для разработки микропрограммы
— 99% кода микропрограммы (библиотека mysensors)
— фотоаппарат
— холодильник (возможно российская сборка около 20%)
— ютюб
— ПК+компоненты/монитор/ОС, использованные для разработки

Российское
— разработка платы/работа (в принципе важный пункт)
— 0.1% кода микропрограммы
— 20% холодильника
— пластик для принтера (вероятно)

Но, естественно, не отменяет того, что автор молодец.
комментарий скрыт
+
avatar
0
Ну а поделу показали бы хотя бы близкое по уровню свое.
Ваш скетч занимает 11 кБ (и это очень неплохой результат для ардуинщика) :) В моем последнем не слишком большом проекте (месяц вместе с отладкой) примерно в 22 раза больше исходного кода, написанного мной. В более раннем проекте — больше 350 кБ исходников. В еще более раннем — 300 кБ исходников на C/C++ и больше 500 кБ исходников на Verilog :)
+
avatar
-1
  • berk
  • 17 мая 2019, 20:02
это просто экземпл, поэтому и 11кб. На самом деле при всех хотелках и той логике работы которая мне нужна там так — Скетч использует 32992 байт. Поэтому все в основном на кортексах в доме
+
avatar
+1
Скетч использует 32992 байт
Из которых процентов 90 приходится на библиотеки? :)
+
avatar
-1
  • berk
  • 17 мая 2019, 20:59
скорее в сторону 50 надо смотреть
при том там не весь мой функционал добавлен


// *************************** master slave mode is not initialized in this version, ..stub *******************************
+
avatar
0
Ок :)
+
avatar
0
  • berk
  • 17 мая 2019, 21:23
конечне не ком.разработки, это слава богу не мой хлеб, но как хобби вполне достаточно килобайт ;) а ваша разработка не ваша ((((… я начинаю Вас понимать
+
avatar
0
На самом деле это и для меня не является хлебом :) Просто предложили шабашку, очень хорошая оплата за месяц довольно простой работы в свободное время :)
У меня есть и мои проекты, которые даже посложнее этого коммерческого. Вот, например, просто из интереса ковырялся с одной штукой:

Выделенные файлы — полностью мои :)
+
avatar
-5
+
avatar
+8
Увы, Norton Commander уже не работает под современными ОС, так что приходится пользоваться Far-ом :( :))))
+
avatar
0
Поиск в нем поудобнее чем то что есть в винде.
+
avatar
+1
Да в нем вообще много удобных моментов по работе с файлами. Ну и привычка, конечно же, еще со времен DOS и Norton Commander :))
+
avatar
0
  • berk
  • 17 мая 2019, 20:05
… и если все так… то не совсем понятен интерес к данной теме…
+
avatar
0
У меня интерес к любой электронике :)
+
avatar
0
Спасибо за доброе слово!
+
avatar
+1
Но, естественно, не отменяет того, что автор молодец.
Бесспорно :) Его уровень ардуинства на голову выше 99% всех остальных — он хотя бы смог сделать нормальную единую плату и нормальный корпус :) Большинству и это недоступно :)
комментарий скрыт
+
avatar
0
Не стоит уподобляться… :))
+
avatar
0
Не смог сдержаться :(
+
avatar
0
  • berk
  • 17 мая 2019, 21:31
разочаровали, я думал вы могли догнать причину и следствие.… а фонарики наверное тоже скоро умными будут делать, так что с меня подписка…
+
avatar
+1
Как ни странно, но диптрейс- отечественный софт:)
+
avatar
+1
Для украинцев — да :))
+
avatar
0
Еще есть компас, но вроде он денег стоит много.
+
avatar
0
Домашняя версия — что-то около 1500 руб в год, не так уж и много :)
+
avatar
+1
Берк — талант. Спасибо за интересный проект. Тот, кто хоть что-то сделал своими руками понимает, насколько это сложно разработать подобное законченное и довольно красивое изделие. Нужны не только глубокие знания, но и воля. Берк, не обращайте внимание на злобные шипения, удачи Вам и дальнейших интересных проектов!
У меня к Вам один вопрос — почему диптрейс, а не easyeda? Попробовал диптрейс — ужас, а не инструмент, в easyeda все гораздо проще.
+
avatar
0
  • berk
  • 17 мая 2019, 20:28
Спасибо за оценку. Я внимание особо на сэмплах не заостряю, но так как и сам любитель иногда потролить то могу и ковырнуть «палкой кучу», чтоб дальше лилось)). Ну а впереди еще куча инфы, так что кому всем г… метам просьба почистить лопаты и приготовится)).
Почему не изидата, хз, я там пробовал, не сложилось у меня с ней, не то что бы не освоил, просто почему то неудобно мне в ней, не моя, а Диптрейс зашел. Вот Альтиум еще ничего… Впринципе по этому и Солид а не Фьюжин например, пробовал второе, тоже не мое.
+
avatar
0
Как с Вами можно связаться для сотрудничества?
+
avatar
0
  • berk
  • 19 мая 2019, 14:57
пишите в личку
+
avatar
0
Интересный и образовательный обзор..-Спасибо!
Тем паче, с полезными ссылками и практическими наглядными примерами. И-своими руками и головой.
+
avatar
0
Господа, а есть еще какая-нибудь система поддерживающая Modbus RTU кроме OpenHab?
Как-то тыкал палочкой MajorDoMo, но он вроде только Modbus TCP умеет.
+
avatar
0
Arduino представила доступные Nano-платы и SIM-карту с глобальным покрытием
4pda.ru/2019/05/20/357569/
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.