Уже как полтора года назад я купил пару E-Ink экранов с eBay на базе драйвера SSD1606, как раз для метеостанции. И вот 4 месяца назад, перед новыми годом, появился он.

Скажу сразу, что часов в ней нет, поскольку дома часы есть буквально везде! Но умеет он показывать следующее:

  • текущую температуру по Цельсию;
  • текущую влажность в процентах;
  • текущее давление в мм.рт.ст;
  • историю давления за последние 15 часов в виде графика;
  • напряжение батареи.

Собственно и все. Необходимый минимум и предельная простота!

Даже нет вот такого GUI


Принцип работы


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

Контроллер периодически просыпается по watchDog и раз в 5 минут делает замеры давления, для построения графика изменения давления.

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

Железо


Основным мозгом является микроконтроллер ATMega328P, в качестве всеметра барометра используется BME280, а для экрана уже описанный ранее E-Ink второй ревизии на базе SSD1606 от Smart-Prototyping.

Это почти тот же экран, что и waveShare epaper 2,7“, только старее (даташиты у них ну очень похожи).

Все это работает на аккумуляторе от игрушечного вертолета на 120 мАч. Заряжается аккумулятор при помощи модуля с защитой от глубокого разряда и перезаряда на базе TP4056 с установленным резистором на 47 кОм для зарядки током около 20мА.

Оптимизация энергопотребления


Крепкий и здоровый сон наше все! Поэтому нужно спать по максимуму!

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

В даташите был найден режим DeepSleep, в нем экран потребляет всего ничего — 1.6мкА!

Барометр имеет режим замера по требованию (ака standby), в нем датчик потребляет минимум энергии, при этом предоставляя достаточную точность для простой индикации изменений (в даташите указано, что он как раз для метеостанций). Включение этого режима дало потребление на уровне 6,2 мкА. Далее на модуле был перепаян LDO регулятор с LM6206N3 (а может и XC6206, они оба маскируются как 662k) на MCP1700.



Это дало выигрыш еше на 2 мкА.

Поскольку нужно добиться минимального энергопотребления, то была использована библиотека LowPower. В ней есть удобная работа с watchDog, на основе чего и сделан сон атмеги. Однако, сам по себе он потребляет около 4мкА. Решение этой проблемы мне видится использованием внешнего таймера на основе Texas Instruments TPL5010 или аналогичным.

Таже для уменьшения энергопотребления нужно было прошить атмегу другими FUSE битами и загрузчиком, что и было успешно сделано с USBasp, а в файл boards.txt был добавлен

Следующий текст:
## Arduino Pro or Pro Mini (1.8V, 1 MHz Int.) w/ ATmega328p
## internal osc div8, also now watchdog, no LED on boot
## bootloader size: 402 bytes
## http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik
## http://homes-smart.ru/fusecalc/?prog=avrstudio&part=ATmega328P
## http://www.engbedded.com/fusecalc
## -------------------------------------------------
pro.menu.cpu.1MHzIntatmega328=ATmega328 (1.8V, 1 MHz Int., BOD off)

pro.menu.cpu.1MHzIntatmega328.upload.maximum_size=32256
pro.menu.cpu.1MHzIntatmega328.upload.maximum_data_size=2048
pro.menu.cpu.1MHzIntatmega328.upload.speed=9600

pro.menu.cpu.1MHzIntatmega328.bootloader.low_fuses=0x62
pro.menu.cpu.1MHzIntatmega328.bootloader.high_fuses=0xD6
pro.menu.cpu.1MHzIntatmega328.bootloader.extended_fuses=0x07
pro.menu.cpu.1MHzIntatmega328.bootloader.file=atmega/a328p_1MHz_62_d6_5.hex

pro.menu.cpu.1MHzIntatmega328.build.mcu=atmega328p
pro.menu.cpu.1MHzIntatmega328.build.f_cpu=1000000L


Также положить в папку «bootloaders/atmega/» загрузчик собранный из optiboot:

a328p_1MHz_62_d6_5.hex
:107E0000F894112484B714BE81FFDDD082E0809302
:107E1000C00088E18093C10086E08093C2008CE0BE
:107E20008093C4008EE0B9D0CC24DD2488248394D0
:107E3000B5E0AB2EA1E19A2EF3E0BF2EA2D08134A3
:107E400061F49FD0082FAFD0023811F0013811F43F
:107E500084E001C083E08DD089C0823411F484E1D4
:107E600003C0853419F485E0A6D080C0853579F447
:107E700088D0E82EFF2485D0082F10E0102F00278F
:107E80000E291F29000F111F8ED068016FC0863583
:107E900021F484E090D080E0DECF843609F040C049
:107EA00070D06FD0082F6DD080E0C81680E7D8065C
:107EB00018F4F601B7BEE895C0E0D1E062D089932E
:107EC0000C17E1F7F0E0CF16F0E7DF0618F0F60147
:107ED000B7BEE89568D007B600FCFDCFA601A0E0CC
:107EE000B1E02C9130E011968C91119790E0982F91
:107EF0008827822B932B1296FA010C0187BEE895F6
:107F000011244E5F5F4FF1E0A038BF0751F7F60133
:107F1000A7BEE89507B600FCFDCF97BEE89526C042
:107F20008437B1F42ED02DD0F82E2BD03CD0F601D2
:107F3000EF2C8F010F5F1F4F84911BD0EA94F80143
:107F4000C1F70894C11CD11CFA94CF0CD11C0EC0EF
:107F5000853739F428D08EE10CD085E90AD08FE03E
:107F60007ACF813511F488E018D01DD080E101D09E
:107F700065CF982F8091C00085FFFCCF9093C600FD
:107F800008958091C00087FFFCCF8091C00084FDE0
:107F900001C0A8958091C6000895E0E6F0E098E160
:107FA000908380830895EDDF803219F088E0F5DF5B
:107FB000FFCF84E1DECF1F93182FE3DF1150E9F7E5
:107FC000F2DF1F91089580E0E8DFEE27FF27099494
:0400000300007E007B
:00000001FF


Собственно как вы, скорее всего, догадались, все это делалось на базе Arduino, а именно pro mini на 8МГц 3.3В. С этой платы был выпаян LDO-регулятор mic5203 (слишком прожорлив при малых токах) и отпаян резистор светодиода для индикации питания.

В итоге удалось добиться энергопотребления в 10 мкАч в спящем режиме, что дает около 462,96 дней работы. От этого числа смело можно вычесть треть, получив тем самым около 10 месяцев, что пока соответствует реальности.

Версию на ионисторах тестировал, при конечной емкости 3мАч работает не более 6 дней (высокий саморазряд). Расчет емкости ионистора делался по формуле C*V/3,6 = X мАч. Думаю, что версия с солнечной батареей и MSP430 будет вообще вечной.

Объявления:
#include <SPI.h>
#include <Wire.h>
#include <ssd1606.h>
#include <Adafruit_BME280.h>
//#include <BME280_2.h> // local optimisation
#include <LowPower.h>

#include <avr/sleep.h>
#include <avr/power.h>

#define TIME_X_POS 0
#define TIME_Y_POS 12

#define DATE_X_POS 2
#define DATE_Y_POS 9

#define WEECK_X_POS 65
#define WEECK_Y_POS 9

// ====================================== //
#define TEMP_X_POS 105
#define TEMP_Y_POS 15

#define PRESURE_X_POS 105
#define PRESURE_Y_POS 12

#define HUMIDITY_X_POS 105
#define HUMIDITY_Y_POS 9
// ====================================== //

#define BATT_X_POS 65
#define BATT_Y_POS 15

#define ONE_PASCAL 133.322

// ==== for presure history in graph ==== //
#define MAX_MESURES 171
#define BAR_GRAPH_X_POS 0
#define BAR_GRAPH_Y_POS 0
#define PRESURE_PRECISION_RANGE 4.0 // -/+ 4 mm
#define PRESURE_GRAPH_MIN 30 // vertical line graph for every N minutes
#define PRESURE_PRECISION_VAL 10 // max val 100
#define PRESURE_CONST_VALUE 700.0 // const val what unneed in graph calculations
#define PRESURE_ERROR -1000 // calibrated value
// ====================================== //

#define VCC_CALIBRATED_VAL 0.027085714285714 // == 3.792 V / 140 (real / mesured)
//#define VCC_CALIBRATED_VAL 0.024975369458128 // == 5.070 V / 203 (real / mesured)
#define VCC_MIN_VALUE 2.95 // min value to refresh screen
#define CALIBRATE_VCC 1 // need for battery mesure calibration

// 37 ~296 sec or 5 min * MAX_MESURES = 14,33(3) hours for full screen
#define SLEEP_SIZE 37

#ifdef BME280_ADDRESS
#undef BME280_ADDRESS
#define BME280_ADDRESS 0x76
#endif

#define ISR_PIN 3 // other mega328-based 2, 3
#define POWER_OFF_PIN 4 // also DONEPIN

#define E_CS 6 // CS ~ D6
#define E_DC 5 // D/C ~ D5
#define E_BSY 7 // BUSY ~ D7
#define E_RST 2 // RST ~ D2
#define E_BS 8 // BS ~ D8

/*
MOSI ~ D11
MISO ~ D12
CLK ~ D13
*/
EPD_SSD1606 Eink(E_CS, E_DC, E_BSY, E_RST);
Adafruit_BME280 bme;

volatile bool adcDone;
bool updateSreen = true;
bool normalWakeup = false;

float battVal =0;
uint8_t battValcV =0;

uint8_t timeToSleep = 0;

float presure =0;
float temperature =0;
float humidity =0;
float presure_mmHg =0;

unsigned long presureMin =0;
unsigned long presureMax =0;

uint8_t currentMesure = MAX_MESURES;
uint8_t presureValHistoryArr[MAX_MESURES] = {0};

typedef struct {
uint8_t *pData;
uint8_t pos;
uint8_t size;
unsigned long valMax;
unsigned long valMin;
} history_t;


Инициализация:
void setup()
{
saveExtraPower();
Eink.begin();

initBME();

// https://www.arduino.cc/en/Reference/attachInterrupt
pinMode(ISR_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(ISR_PIN), ISRwakeupPin, RISING);

//drawDefaultGUI();
drawDefaultScreen();

// tiiiiny fix....
checkBME280();
updatePresureHistory();
}

void saveExtraPower(void)
{
power_timer1_disable();
power_timer2_disable();

// Disable digital input buffers:
DIDR0 = 0x3F; // on ADC0-ADC5 pins
DIDR1 = (1 << AIN1D) | (1 << AIN0D); // on AIN1/0
}

void initBME(void)
{
bme.begin(BME280_ADDRESS); // I2C addr

LowPower.powerDown(SLEEP_250MS, ADC_OFF, BOD_OFF); // wait for chip to wake up.
while(bme.isReadingCalibration()) { // if chip is still reading calibration, delay
LowPower.powerDown(SLEEP_120MS, ADC_OFF, BOD_OFF);
}
bme.readCoefficients();

bme.setSampling(Adafruit_BME280::MODE_FORCED,
Adafruit_BME280::SAMPLING_X1, // temperature
Adafruit_BME280::SAMPLING_X1, // pressure
Adafruit_BME280::SAMPLING_X1, // humidity
Adafruit_BME280::FILTER_OFF);
}


Основной код:
void loop()
{
for(;;) { // i hate func jumps when it's unneed!
checkVCC();
if(normalWakeup) {
checkBME280();
updatePresureHistory();
} else {
normalWakeup = true;
}

updateEinkData();
enterSleep();
}
}

// func to exec in pin ISR
void ISRwakeupPin(void)
{
// Keep this as short as possible. Possibly avoid using function calls
normalWakeup = false;
updateSreen = true;
timeToSleep = 1;
}

ISR(ADC_vect)
{
adcDone = true;
}

void debounceFix(void)
{
normalWakeup = true;
updateSreen = false;
}

//https://github.com/jcw/jeelib/blob/master/examples/Ports/bandgap/bandgap.ino
uint8_t vccRead(void)
{
uint8_t count = 4;
set_sleep_mode(SLEEP_MODE_ADC);
ADMUX = bit(REFS0) | 14; // use VCC and internal bandgap
bitSet(ADCSRA, ADIE);
do {
adcDone = false;
while(!adcDone) sleep_mode();
} while (--count);
bitClear(ADCSRA, ADIE);
// convert ADC readings to fit in one byte, i.e. 20 mV steps:
// 1.0V = 0, 1.8V = 40, 3.3V = 115, 5.0V = 200, 6.0V = 250
return (55U * 1023U) / (ADC + 1) - 50;
}

unsigned long getHiPrecision(double number)
{
// what if presure will be more 800 or less 700? ...
number -= PRESURE_CONST_VALUE; // remove constant value
number *= PRESURE_PRECISION_VAL; // increase precision by PRESURE_PRECISION_VAL
return (unsigned long)number; // Extract the integer part of the number
}

void checkVCC(void)
{
// reconstruct human readable value
battValcV = vccRead();
battVal = battValcV * VCC_CALIBRATED_VAL;

if(battVal <= VCC_MIN_VALUE) { // not enought power to drive E-Ink or work propetly
detachInterrupt(digitalPinToInterrupt(ISR_PIN));
// to prevent full discharge: just sleep
bme.setSampling(Adafruit_BME280::MODE_SLEEP);
LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF);
Eink.sleep(true);
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
}
}

void checkBME280(void)
{
bme.takeForcedMeasurement(); // wakeup, make new mesure and sleep
temperature = bme.readTemperature();
humidity = bme.readHumidity();
presure = bme.readPressure();
}

void updatePresureHistory(void)
{
// convert Pa to mmHg; 1 mmHg == 133.322 Pa
presure_mmHg = (presure + PRESURE_ERROR)/ONE_PASCAL;

// === calc presure history in graph === //
if((++currentMesure) >= (MAX_MESURES/3)) { // each 4,75 hours
currentMesure =0;
presureMin = getHiPrecision(presure_mmHg - PRESURE_PRECISION_RANGE);
presureMax = getHiPrecision(presure_mmHg + PRESURE_PRECISION_RANGE);
}

// 36 == 4 pixels in sector * 9 sectors
presureValHistoryArr[MAX_MESURES-1] = map(getHiPrecision(presure_mmHg), presureMin, presureMax, 0, 35);

for(uint8_t i=0; i < MAX_MESURES; i++) {
presureValHistoryArr[i] = presureValHistoryArr[i+1];
}
}

void updateEinkData(void)
{
if(updateSreen) {
updateSreen = false;
Eink.sleep(false);

// bar history
Eink.fillRect(BAR_GRAPH_X_POS, BAR_GRAPH_Y_POS, MAX_MESURES, 9, COLOR_WHITE);

for(uint8_t i=1; i <= (MAX_MESURES/PRESURE_GRAPH_MIN); i++) {
Eink.drawVLine(BAR_GRAPH_X_POS+i*PRESURE_GRAPH_MIN, BAR_GRAPH_Y_POS, 35, COLOR_DARKGREY);
}

for(uint8_t i=0; i <= MAX_MESURES; i++) {
Eink.drawPixel(i, BAR_GRAPH_Y_POS+presureValHistoryArr[i], COLOR_BLACK);
}

#if CALIBRATE_VCC
Eink.setCursor(BATT_X_POS, BATT_Y_POS);
Eink.print(battVal);

Eink.setCursor(BATT_X_POS, BATT_Y_POS-3);
Eink.print(battValcV);
#endif

Eink.setCursor(TEMP_X_POS, TEMP_Y_POS);
Eink.print(temperature);

Eink.setCursor(PRESURE_X_POS, PRESURE_Y_POS);
Eink.print(presure_mmHg);

Eink.setCursor(HUMIDITY_X_POS, HUMIDITY_Y_POS);
Eink.print(humidity);

updateEinkSreen();
Eink.sleep(true);
}
}

void updateEinkSreen(void)
{
Eink.display(); // update Eink RAM to screen
LowPower.idle(SLEEP_15MS, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);

Eink.closeChargePump();
// as Eink display acts not like in DS, then just sleep for 2 seconds
LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF);
}

void effectiveIdle(void)
{
LowPower.idle(SLEEP_30MS, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
}

void drawDefaultScreen(void)
{
Eink.fillScreen(COLOR_WHITE);

Eink.printAt(TEMP_X_POS, TEMP_Y_POS, F("00.00 C"));
Eink.printAt(PRESURE_X_POS, PRESURE_Y_POS, F("000.00 mm"));
Eink.printAt(HUMIDITY_X_POS, HUMIDITY_Y_POS, F("00.00 %"));

#if CALIBRATE_VCC
Eink.printAt(BATT_X_POS, BATT_Y_POS, F("0.00V"));
// just show speed in some kart racing game in mushr... kingdom \(^_^ )/
Eink.printAt(BATT_X_POS, BATT_Y_POS-3, F("000cc"));
#endif
}

void drawDefaultGUI(void)
{
Eink.drawHLine(0, 60, 171, COLOR_BLACK); // split 2 areas

// draw window
Eink.drawRect(0, 0, 171, 71, COLOR_BLACK);

// frame for text
Eink.drawRect(BATT_X_POS, BATT_Y_POS, 102, 32, COLOR_BLACK);
}

void snooze(void)
{
do {
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
} while(--timeToSleep);
}

void disablePower(void)
{
digitalWrite(POWER_OFF_PIN, HIGH);
delay(1);
digitalWrite(POWER_OFF_PIN, LOW);
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
}

void enterSleep(void)
{
// wakeup after ISR signal;
timeToSleep = SLEEP_SIZE;
debounceFix();
snooze();
}


Корпус


Поскольку 3D принтера не имею, но имею 3D ручку MyRiwell RP800A. Оказалось, что делать планарные и ровные структуры ей не так-то просто. Рисовалось все PLA пластиком, который был на тот момент, поэтому корпус вышел разноцветным, что в прочем придает некий шарм (потом переделаю под дерево, когда приедет пластик с древесной крошкой).

Первые части рисовались напрямую на бумаге, после чего отрывались. Это оставляло следы на пластике. Более того детали были кривыми и их было нужно как-то выпрямлять!



Решение оказалось до банального простым — рисовать на стекле, а под него положить «чертежи» нужных элементов корпуса.

И вот что вышло:



Кнопка обновления экрана просто обязана была быть красной на белом фоне!



Задняя стенка сделана с простейшим узором, создавая тем самым вентиляционные отверстия.



Кнопка была закреплена на горизонтальной распорке внутри (желтым цветом) так же сделанной ручкой.



Сама кнопка взята от старого компьютерного корпуса (у нее приятный звук).



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



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

Заключение


Прошло 4 месяца, а после не полной зарядки (до 4В) напряжение на батарее село всего до 3.58В, что гарантирует еще долгий срок службы до следующей зарядки.

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

Ссылки на репозитории:

> библиотека для экрана
> библиотека для lowPower
> библиотека для BME280

Обновлено:

В связи с повышенным интересом к корпусу выложил еще изображения. Экран Smart-Prototyping второй ревизии. Аналог ему на Али здесь.

Нажми меня:




P.S. КПДВ было сделано вечером, как итог сегодня ночью выпало очень, очень много снега в Санкт-Петербурге.
P.P.S Синюю изоленту известным причинам добавлять в опрос не стал.

Комментарии (103)


  1. robert_ayrapetyan
    20.03.2018 02:59
    +2

    Тьфу, показалось, что прибор так причудливо обледенел после дождя с ветром, а вы его просто таким нарисовали ручкой. Какой-то не очень эстетичный вид, может, из дерева было бы лучше выпилить?


    1. Silverado
      20.03.2018 08:26
      +1

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


      1. Dioxin
        20.03.2018 09:09

        Моя фантазия пошла дальше — термиты. :)


        1. dimanhursky
          20.03.2018 09:54

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


          1. badun1
            20.03.2018 10:15

            да ладно! Это нано-монтажная пена.


            1. sevg81
              20.03.2018 16:16

              На 7й картинке вообще карамель. :)


              1. safari2012
                20.03.2018 18:33

                Автор, сделай опрос, кому что показалось на КДПВ :)


        1. Taras-proger
          21.03.2018 13:11

          Скучно с вами. Я увидел прибор, вплавленный в кусок чего что.


      1. avs24rus
        21.03.2018 04:31

        Один в один, первое впечатление :)


    1. velovich
      20.03.2018 09:26
      +2

      Ну вы даёте, впервые в истории корпус нарисованный вручную, а им не нравится.


      1. l_o_d
        20.03.2018 09:32

        Никто не оспаривает ценность корпуса как культурного объекта)

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

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


        1. andersong
          20.03.2018 13:18

          В начале карьеры ) работал на сборке вязальных машин, и вязать научился, конечно.
          Открыть, что-ли стартап по вязанию эээ… конструкционных материалов)))


          1. l_o_d
            20.03.2018 13:26

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


            1. impetus
              20.03.2018 20:38

              я так ручки ко всяким топорам-молоткам-кувалдам себе делаю — обматываю верёвкой, пропитанной клеем. Получается вечно, шершаво и ухватисто.


      1. Stepanow
        20.03.2018 14:36
        +1

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


        1. Lando
          20.03.2018 17:53

          На мой вкус как-то очень похоже должны выглядеть стены в логове чужих)


  1. Tiamon
    20.03.2018 02:59
    +1

    Вы не могли бы дать ссылку на дисплей, или полное название?


    1. Bismuth208 Автор
      20.03.2018 10:59

      Ответ на ваш запрос оставил в конце статьи.


  1. tormozedison
    20.03.2018 06:29
    +1

    Очень даже ничего. И экономичность, и hand made корпус.


    1. polearnik
      20.03.2018 11:01

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


      1. DASM
        20.03.2018 14:10
        -2

        вы издеваетесь или действительно мы все настолько по разному видим мир? Корпус у ТС вышел замечательный. Это не бездушая акриловая коробка, именно что дизайнерское решение.


      1. tormozedison
        20.03.2018 20:38
        +1

        Никакого сарказма, действительно понравилось.


  1. DASM
    20.03.2018 07:19

    а что такое 132сс во второй строке? Абсолютная влажность? Корпус понравился кстати


    1. Bismuth208 Автор
      20.03.2018 08:48

      Это сырое значение напряжения батареи до преобразования во float.
      В коде указано как и каким образом оно вычисляется.


  1. MikeVC
    20.03.2018 07:23

    Пожалуй подскажу как сделать корпус дешево и относительно красиво:

    Рисуем макет в кореле и заказываем панели на лазерную резку рекламщикам из акрила. Для прочности можно сделать перекрывающиеся выступы.
    Зачищаем и склеиваем цианоакрилатом или эпоксидкой.
    Стоит — реально копейки рублей 100-200 за небольшой корпус.
    Если хочется эстетики, панель можно загравировать фрезером или лазером и затереть надписи краской.


    1. anprs
      20.03.2018 08:11

      Где найти рекламщиков из акрила?


      1. r00tGER
        20.03.2018 08:48

        В Гугле


      1. MikeVC
        20.03.2018 09:21
        +1

        В любом городе есть фирмы которые делают рекламные вывески из пластика.
        mishutka.net.ru/1/_DSC8012.JPG
        Вот например пульт управления станком я делал.
        Это вобще не заморачиваясь. А можно например черный акрил и золотые буковки :)


        1. Norno
          20.03.2018 12:58

          Не хватает аварийного грибка) или он в чуть другом месте?


    1. Bismuth208 Автор
      20.03.2018 09:02

      Или взять те же 100-200 рублей, купить немного пластика и сделать самому. Насчет акрила(но не совсем), акриловые краски отлично ложатся на PLA.


      1. l_o_d
        20.03.2018 09:16

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


    1. fotofan
      20.03.2018 21:47

      В ЧиД корпуса от 50р. В чем смысл что-то резать-клеить, кроме оригинального кривого hm?


      1. MikeVC
        20.03.2018 22:17

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


        1. fotofan
          21.03.2018 13:00

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


          1. Popadanec
            21.03.2018 17:02

            Какой день, такого качества и точности корпус делается за час максимум.


  1. GoldJee
    20.03.2018 08:22

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


    1. mokele
      20.03.2018 08:57

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


      1. l_o_d
        20.03.2018 09:21

        Напомнило гиперионский кирпич для предсказания погоды)


  1. MaxxONE
    20.03.2018 08:23

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


    1. nik_vr
      20.03.2018 08:32

      Не знаю, как насчёт качества, но вот на Али экран как у автора: https://ru.aliexpress.com/store/product/2-04-inch-24PIN-FPC-E-Paper-E-ink-Screen-SSD1606-Controller-172-72-FH12-24S/1110377_32345889735.html


      1. Bismuth208 Автор
        20.03.2018 08:51

        Да это и есть он, но у меня модульс разведенной рассыпухой и SPI выводом.


      1. papkinv
        20.03.2018 09:55

        С такой стоимостью он совсем не интересен. Непонятно почему у всех у них такая дорогая пересылка.
        Хотя вот на e-bay есть более вкусные предложения, и даже 3х цветные с бесплатной пересылкой (e-paper), но все равно надо будет как то к ним коннектор колхозить или покупать.


        1. Bismuth208 Автор
          20.03.2018 10:00

          Проблема в том, что сама по себе технология E-Ink дорогая и защищена патентами.
          Мой экран имеет 4 градации серого и как писал выше уже имеет все необходимое для внедрения в поделки.
          Вот вам готовый модуль за тысячу.


    1. hoary
      20.03.2018 11:40

      Терраэлектроника недавно присылала предложения по чернилам. Цены схожи с али/ибэй, хотя конечно дороже.


  1. Phil_itch
    20.03.2018 08:45

    Большой респект за то, что собрал в одном проекте многое по энергосбережению на ардуине и сопутствующих элементах!


  1. l_o_d
    20.03.2018 08:45

    Ух ты сколько клея) Сначала подумал что и корпус из термоклея) Кстати сколько пластика уходит на такой корпус? И сколько по стоимости выходит?


    1. Bismuth208 Автор
      20.03.2018 08:58

      У меня ушло несколько мотков филамента от тестового комплекта eSUN.
      Самое дорогое само собой экран. Полтора года назад он мне вышел 1,7к рублей.
      Все остальное примерно одинаковой стоимости около 150Р.
      Я скучаю по термоклею. Китай перестал заливать технику им — слишком дорого.


      1. l_o_d
        20.03.2018 09:12

        Термоклей и молярный скотч это основа китайской ширпотребной промышленности)


        1. shumsky93
          20.03.2018 10:04

          молярный скотч — это что-то из химии?:)


          1. Bismuth208 Автор
            20.03.2018 10:04

            Один моль малярного скотча есть термоклей.


          1. oisee
            20.03.2018 14:53
            +1

            Стоматологии.


    1. safari2012
      20.03.2018 18:23

      На самом деле, устройства пистолета термоклея и терморучки отличаются весьма условно. Т.е. наличием/отсутствием моторизованной подачи и толщиной прутка :)


      1. Popadanec
        20.03.2018 21:16

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


  1. dmsav
    20.03.2018 08:45

    Конечно, смотрится как дизайнерская разработка, есть свой стиль.
    Но с точки зрения простоты, не легче было купить монтажную коробку или готовый пластиковый корпус?)
    А так классно получилось.
    А можно было бы «дорисовать» крепление на корпусе для плат, чтобы не использовать термоклей? Или с этим могли быть проблемы потом?
    И еще, возможно на гладкой бы поверхности типа стекла не было бы прилипания, и не нужно было бы использовать бумагу.


    1. Popadanec
      20.03.2018 11:51

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


      1. Bismuth208 Автор
        20.03.2018 14:34

        Благодарю за совет! Думаю PLA с древесной крошкой будет создавать впечатление набитых малых веточек залитых смолой после чего отполированных!
        Как насчет прочности таких пластин?


        1. Popadanec
          20.03.2018 15:42

          Они не рассыпаются на отдельные волокна и получаются довольно гибкими, но ничего не мешает сделать ребра жесткости. Можно второй слой сделать, либо грубую сетку на быстрой подаче пластика.
          Но в этом возникает необходимость при размерах больше 5-7 см на любую сторону.
          В случае короба жесткости и так хватает.
          P.S. В процессе написания комментов возникла пара идей как избавится от щелей на глянцевой стороне, пойду пробовать. Если не забуду, напишу результаты.


        1. safari2012
          20.03.2018 18:24

          только одно бобина в 1кг будет стоить, как полпринтера :)


          1. Popadanec
            20.03.2018 21:08

            1650р. за 450гр.
            За обычный той же фирмы 1к руб. за 1 кило PLA 1.75мм.


            1. safari2012
              21.03.2018 17:22

              посмотрел на али, подешевело раза в два за пару лет.


  1. spc
    20.03.2018 09:18

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

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

    Пока рабочая версия — комплексное изменение климата, которое, почему-то не всегда сопровождается адекватным изменением давления. К примеру, недавно было довольно высокое давление, однако стало облачно и пошел снег. В общем, как-то все неоднозначно.


    1. Bismuth208 Автор
      20.03.2018 09:34

      Динамическое масштабирование имеет свои побочные эффекты:

      • уменьшает наглядность силы изменения, создавая впечатление незначительного изменения;
      • на перерасчет нужно время и энергия (несмотря на то, что это занимает миллисекунды).

      Смена погоды всегда предвещает изменение давления (в городе где я обитаю это так), поэтому нужно смотреть динамику за последние N часов.


  1. l_o_d
    20.03.2018 09:29

    Версию на ионисторах тестировал, при конечной емкости 3мАч работает не более 6 дней (высокий саморазряд). Расчет емкости ионистора делался по формуле C*V/3,6 = X мАч. Думаю, что версия с солнечной батареей и MSP430 будет вообще вечной.

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


    1. Bismuth208 Автор
      20.03.2018 09:42

      Не оказалось под рукой ионисторов с малым саморазрядом, нужным количеством для создания вменяемой емкости, тем самым обеспечив работоспособность около месяца без подзарядки (фух).
      Да, соглашусь, что большинство устройств сегодня живут не дольше недели. Более того если туда на вторую боковую стенку поставить плоский аккумулятор на 350мАч, то можно потерять зарядное устройство (ака Xenium).


      1. l_o_d
        20.03.2018 09:52

        около месяца без подзарядки

        А зачем месяц? На случай ядерной зимы?) Днем (или когда в комнате включен свет) солнечная батарея заряжает ионистор, а ночью схема питается от ионистора. С вашим потреблением наверное даже одной фарады хватит с лихвой. Я от фитнес браслета успеваю зарядник потерять, хотя заряжаю раз в месяц наверное)


  1. alt9773
    20.03.2018 10:01

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


    1. Bismuth208 Автор
      20.03.2018 10:02

      У меня нет лобзика за многоденег, но у Вас он есть, ведь не зря же вы его покупали?


      1. alt9773
        20.03.2018 10:07

        Нет, но дойти до ближайшего дома быта и взять его за 200? я в состоянии.


        1. Bismuth208 Автор
          20.03.2018 10:11

          Я в состоянии дойти до жены и взять её 3d ручку и пластик и не заплатить ничего.


          1. hoary
            20.03.2018 11:50
            +1

            Это уже было в симпсонах:
            Гомер получает 63 цента за проданный жир.
            Барт: «Пап, но бекон стоил 27 долларов»
            Гомер: «Но за него заплатила твоя мама»
            Барт: «Но ведь она берёт деньги у тебя»
            Гомер: «А я зарабатываю их на жире! В чём проблема?»


    1. andersong
      20.03.2018 13:30

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


    1. safari2012
      20.03.2018 18:30

      не было под рукой ни лобзика, ни даже фанеры. вырезал из куска ламината при помощи дрели, ножевки и напильника: www.youtube.com/watch?v=YGBjE0GJ88Y
      PS: у меня есть и 3D-ручка и принтер, просто в том месте счел более уместным такой материал.


  1. madf
    20.03.2018 11:13

    Можно стенки корпуса обклеить солнечными панелями и вообще забыть про зарядку раз в 10 месяцев.


    1. Zheleziaka
      20.03.2018 11:58

      Много панелей и не нужно. Калькулятору одной маленькой хватает. Батарея несколько лет живет.


      1. madf
        20.03.2018 13:01

        Потребление калькулятор в разы меньше, не стоит сравнивать муху и слона.


        1. Zheleziaka
          20.03.2018 17:06

          Калькулятор я вспомнил как самый распространенный аппарат с солнечным элементом. А теперь к цифрам: солнечный элемент 50х30 мм даст ~20-30 мА в хороших условиях, 2-3 мА в реальных, автор же добился "… энергопотребления в 10 мкАч в спящем режиме ..." Соотношение сон/работа как я понял ~ 3/300 "… раз в 5 минут делает замеры давления… ", так что должно хватить одного элемента.


          1. madf
            20.03.2018 17:47

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


  1. Zheleziaka
    20.03.2018 11:41

    У меня вопрос к автору и другим владельцам 3D ручек: если сделать подогрев стекла снизу (например феном) можно ли добиться гладкой поверхности? И второе — раз уж к станции приходится подходить, то может сделать индикацию по нажатию кнопки и использовать LCD? И цена ниже и вывод информации симпатичнее.


    1. Popadanec
      20.03.2018 11:57

      Не нужен никакой подогрев. Пластик пока горячий, отлично прилипает к чистому стеклу, легко отлипая когда остынет. Поверхность получается ровная и блестящая, просто автор её оставил внутри корпуса. Единственное, видны линии(микро щели между полосами пластика) рисования.


      1. Zheleziaka
        20.03.2018 12:06

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


        1. Popadanec
          20.03.2018 12:59

          Выше я описал технологию. Щели получаются практически не заметные.
          Либо можно рисовать давя на пред идущую линию, тогда щелей вообще нет, но сложно на больших объектах выдержать равномерное давление.
          Еще как вариант делать узор из щелей.


      1. Bismuth208 Автор
        20.03.2018 12:09

        Да, все именно так. Прошу заметить, что PLA ведет себя в этом случае куда лучше чем ABS. Это был очень тяжелый выбор между гладкой стороной внутрь или наружу…


        1. Zheleziaka
          20.03.2018 12:23

          OK, а что думаете по второму вопросу, наcчет применения LCD?


          1. Bismuth208 Автор
            20.03.2018 12:33

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


            1. Lando
              20.03.2018 18:08

              так как на E-Ink все же остается информация длительное время

              А не может это быть и недостатком? Например аккумулятор закончился. А картинка на бумаге осталось. А что бы понять что данные устарели нужно вчытываться в текущее время/напряжение батареи.
              Тут кстати небольшой апдейт можно накатать: при падении напряжения на батарее ниже определенного значения выводить картинку разряда.


  1. Fragster
    20.03.2018 11:46

    Нужна еще концентрация CO2


    1. Bismuth208 Автор
      20.03.2018 19:44

      Для этого проекта потребление у CO2 датчика все равно что требовать питание рельсотрона с атомной силовой установкой! У некоторых датчиков нужно от 12 мА (MBE680) до 50 мА для поддержки накала!
      Я бы с удовольствием добавил, это очень полезный показатель, но есть ли экономичные датчики?


  1. Neuromantix
    20.03.2018 11:55

    Имхо, не слишком удачная реализация графика. когда первый раз увидел КПДВ, подумал, что это глюк экрана или что-то похожее.


    1. anprs
      20.03.2018 14:15

      Реализация графика отличная, вопрос в частоте дискретизации


  1. elmm
    20.03.2018 13:28

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


  1. killla
    20.03.2018 14:02

    Так оно у вас дома живет или на улице?


    1. Bismuth208 Автор
      20.03.2018 19:31

      Обитает оно в теплых, темных и уютных условиях комнаты.


      1. killla
        20.03.2018 19:51

        А не рассматривали вариант еще иметь копию устройства за окном? Насколько изменится элементная база…


        1. Bismuth208 Автор
          20.03.2018 20:06

          Могу подтвердить, что E-ink экраны на морозе «замерзают» напрочь. Тестировал на балконе в -22. Остается только использовать LCD и сегментные индикаторы. Еще нужно использовать другой источник питания (не Li-Ion). Что до пластика? Ну ему сильно все равно на УФ и дождь (непонятно, где там эта биоразлагаемость...).


          1. Popadanec
            20.03.2018 21:24

            Мороз PLA так же не страшен(до -10, ниже не успел проверить), хрупким не становится.


  1. Alexeyslav
    20.03.2018 14:22

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


  1. Tomasina
    21.03.2018 00:00

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


    1. Bismuth208 Автор
      21.03.2018 08:47

      Есть мнение, что корпус нетипичен для DIY и это вызывает удивление.
      Вы говорите про сбережение энергии и хотите выключать экран, но вот только экран во время обновления тратит уйму энергии, а вы хотите делать это целых 144 раза в сутки, когда это нужно от силы раз 5 в день!
      Для чего тратить столько энергии? Где тут у Вас экономия?


  1. sanrega
    21.03.2018 02:00

    А мне корпус понравился — выглядит нескучно и самобытно, в отличие от типовых штампованных изделий за 100 руб/пучок.


  1. Irritant
    21.03.2018 08:37
    -1

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


  1. parserpro
    21.03.2018 11:01

    Корпус людям покоя не дает…
    А у меня вопрос по существу — зачем такая точность в температуре, как и где это используется?


  1. boscholeg
    21.03.2018 13:10

    К вопросу о создании корпуса. Очень хорошо подходит вспененный ПВХ.
    Материал просто идеален для моделирования с минимумом инструментов под рукой.
    Легко режется и сверлится. Отлично клеится и красится. Весьма прочен и не впитывает воду.


    1. impetus
      21.03.2018 14:44

      добавлю — очень хорошо красится карандашами, фломастерами, красками и ЛУТом, но плохо то всего отмывается (в т.ч от грязных рук). И — его дым весьма едкий-ядовитый, т.е. паяльником в него лучше случайно не тыкать, и лазером или струной не резать (хотя гнуть на струне можно) Зато фрезером обрабатывается прекрасно: