Уже как полтора года назад я купил пару E-Ink экранов с eBay на базе драйвера SSD1606, как раз для метеостанции. И вот 4 месяца назад, перед новыми годом, появился он.
Скажу сразу, что часов в ней нет, поскольку дома часы есть буквально везде! Но умеет он показывать следующее:
- текущую температуру по Цельсию;
- текущую влажность в процентах;
- текущее давление в мм.рт.ст;
- историю давления за последние 15 часов в виде графика;
- напряжение батареи.
Собственно и все. Необходимый минимум и предельная простота!
Принцип работы
Контроллер должен по нажатию кнопки выводить на экран актуальную информацию. Большую часть времени контроллер спит, как и дисплей, находящийся в глубоком сне.
Контроллер периодически просыпается по watchDog и раз в 5 минут делает замеры давления, для построения графика изменения давления.
С графиком вышло очень интересно, так как давление может меняться очень быстро и сильно (погода в северном городе вообще непредсказуема), то в какой-то момент может возникнуть зашкаливание графа. Для этого раз в пару часов происходит перекалибровка средней точки измерений (давление может идти как вверх, так и вниз). Однако благодаря этому, наглядная разница предыдущих значений упрощает чтение графа (пример на КПДВ).
Железо
Основным мозгом является микроконтроллер ATMega328P, в качестве
Это почти тот же экран, что и waveShare epaper 2,7“, только старее (даташиты у них ну очень похожи).
Все это работает на аккумуляторе от
Оптимизация энергопотребления
Крепкий и здоровый сон наше все! Поэтому нужно спать по максимуму!
Поскольку софта для работы с экраном не было, только базовый пример кода с комментариями на языке поднебесной и даташит (экран полтора года назад только появился), то большую часть всего пришлось делать самому, благо уже был опыт работы с разными экранами.
В даташите был найден режим 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:
: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)
tormozedison
20.03.2018 06:29+1Очень даже ничего. И экономичность, и hand made корпус.
polearnik
20.03.2018 11:01Надеюсь это сарказм насчет корпуса.ПРи взгляде на него ощущение что паяльником расплавили какуюто пластмаску и попытались разровнять пальцами.Реально лучше было из фанеры или дощечек склеить и покрасить краской для пола. Вышло бы симпатичнее
DASM
20.03.2018 14:10-2вы издеваетесь или действительно мы все настолько по разному видим мир? Корпус у ТС вышел замечательный. Это не бездушая акриловая коробка, именно что дизайнерское решение.
DASM
20.03.2018 07:19а что такое 132сс во второй строке? Абсолютная влажность? Корпус понравился кстати
Bismuth208 Автор
20.03.2018 08:48Это сырое значение напряжения батареи до преобразования во float.
В коде указано как и каким образом оно вычисляется.
MikeVC
20.03.2018 07:23Пожалуй подскажу как сделать корпус дешево и относительно красиво:
Рисуем макет в кореле и заказываем панели на лазерную резку рекламщикам из акрила. Для прочности можно сделать перекрывающиеся выступы.
Зачищаем и склеиваем цианоакрилатом или эпоксидкой.
Стоит — реально копейки рублей 100-200 за небольшой корпус.
Если хочется эстетики, панель можно загравировать фрезером или лазером и затереть надписи краской.anprs
20.03.2018 08:11Где найти рекламщиков из акрила?
MikeVC
20.03.2018 09:21+1В любом городе есть фирмы которые делают рекламные вывески из пластика.
mishutka.net.ru/1/_DSC8012.JPG
Вот например пульт управления станком я делал.
Это вобще не заморачиваясь. А можно например черный акрил и золотые буковки :)
Bismuth208 Автор
20.03.2018 09:02Или взять те же 100-200 рублей, купить немного пластика и сделать самому. Насчет акрила(но не совсем), акриловые краски отлично ложатся на PLA.
l_o_d
20.03.2018 09:16Я режу корпуса старых устройств из подходящего пластика и клею клеем для моделей (раньше применяли для этого дихлорэтан, сейчас что то другое). Выходит очень дешево и для экологии хорошо. Переработка отходов как никак)
fotofan
20.03.2018 21:47В ЧиД корпуса от 50р. В чем смысл что-то резать-клеить, кроме оригинального кривого hm?
MikeVC
20.03.2018 22:17В том что выбор стандартных корпусов очень ограничен.
И они могут не подойти под проектируемое устройство.
Кроме того эстетика. Можно например сделать корпус из прозрачного акрила а потроха сделать красиво и ледами внутри подсветить. Или панель с надписями или… да много чего отличного от серой коробочки.fotofan
21.03.2018 13:00Если поднять ценник до 500 то выбор стремительно расширяется. Но главная моя мысль в том, что если корпус не является фичей, как в данном проекте, то, по мне, жаль тратить день жизни на то, что гарантировано выйдет криво и мало функционально
GoldJee
20.03.2018 08:22Вот еще идея насчет корпуса. В разных DIY-магазинах продаются деревянные заготовки под шкатулки. Думаю, можно такую приспособить, выпилив в ней отверстия нужных размеров.
mokele
20.03.2018 08:57Также можно отпилить низ у обычного полнотелого белого кирпича, выбрать внутренности буром, отверстие под экран дремелем, заложить начинку и склеить на цемент. Можно даже потом лаком не покрывать, это только придаст брутальности изделию.
MaxxONE
20.03.2018 08:23Товарищи, а почем отдают e-ink приличного качества, большие и маленькие? Появился определенный интерес, по поводу использования в поделках.
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
Bismuth208 Автор
20.03.2018 08:51Да это и есть он, но у меня модульс разведенной рассыпухой и SPI выводом.
papkinv
20.03.2018 09:55С такой стоимостью он совсем не интересен. Непонятно почему у всех у них такая дорогая пересылка.
Хотя вот на e-bay есть более вкусные предложения, и даже 3х цветные с бесплатной пересылкой (e-paper), но все равно надо будет как то к ним коннектор колхозить или покупать.Bismuth208 Автор
20.03.2018 10:00Проблема в том, что сама по себе технология E-Ink дорогая и защищена патентами.
Мой экран имеет 4 градации серого и как писал выше уже имеет все необходимое для внедрения в поделки.
Вот вам готовый модуль за тысячу.
Phil_itch
20.03.2018 08:45Большой респект за то, что собрал в одном проекте многое по энергосбережению на ардуине и сопутствующих элементах!
l_o_d
20.03.2018 08:45Ух ты сколько клея) Сначала подумал что и корпус из термоклея) Кстати сколько пластика уходит на такой корпус? И сколько по стоимости выходит?
Bismuth208 Автор
20.03.2018 08:58У меня ушло несколько мотков филамента от тестового комплекта eSUN.
Самое дорогое само собой экран. Полтора года назад он мне вышел 1,7к рублей.
Все остальное примерно одинаковой стоимости около 150Р.
Я скучаю по термоклею. Китай перестал заливать технику им — слишком дорого.
safari2012
20.03.2018 18:23На самом деле, устройства пистолета термоклея и терморучки отличаются весьма условно. Т.е. наличием/отсутствием моторизованной подачи и толщиной прутка :)
Popadanec
20.03.2018 21:16Там только принцип одинаковый.
В термопистолете нагревательный элемент позистор, чтобы пистолет несжег хатувскипятил термоклей, подаче клея ручная.
В 3D ручке нагревательный элемент спираль, рядом с ней термопара и с помощью электроники стабилизируется/выбирается нужная температура, ну и подача с помощью мотора, что заметно влияет на точность и стабильность подачи. Плюс рисование в третьем измерении, что термопистолет по умолчанию не может.
dmsav
20.03.2018 08:45Конечно, смотрится как дизайнерская разработка, есть свой стиль.
Но с точки зрения простоты, не легче было купить монтажную коробку или готовый пластиковый корпус?)
А так классно получилось.
А можно было бы «дорисовать» крепление на корпусе для плат, чтобы не использовать термоклей? Или с этим могли быть проблемы потом?
И еще, возможно на гладкой бы поверхности типа стекла не было бы прилипания, и не нужно было бы использовать бумагу.Popadanec
20.03.2018 11:51И крепления можно было дорисовать и аккуратней выполнить.
PLA по крайней мере, можно рисовать на чистом стекле, он как остынет легко отстает. И получается ровная блестящая поверхность. Можно перерисовать чертеж маркером прям на стекле, если оно толстое. И рисовать с средней подачей и быстрым передвижением ручки. Получаются тонкие ровные пластины с минимальными щелями. Собирать корпус гладкой поверхностью наружу. Очень не плохо выходит, стоит руку набить.
Это мой опыт, в т.ч. и создания корпусов. Фото не сделал, а поделки забрали все.Bismuth208 Автор
20.03.2018 14:34Благодарю за совет! Думаю PLA с древесной крошкой будет создавать впечатление набитых малых веточек залитых смолой после чего отполированных!
Как насчет прочности таких пластин?Popadanec
20.03.2018 15:42Они не рассыпаются на отдельные волокна и получаются довольно гибкими, но ничего не мешает сделать ребра жесткости. Можно второй слой сделать, либо грубую сетку на быстрой подаче пластика.
Но в этом возникает необходимость при размерах больше 5-7 см на любую сторону.
В случае короба жесткости и так хватает.
P.S. В процессе написания комментов возникла пара идей как избавится от щелей на глянцевой стороне, пойду пробовать. Если не забуду, напишу результаты.
safari2012
20.03.2018 18:24только одно бобина в 1кг будет стоить, как полпринтера :)
spc
20.03.2018 09:18Вообще, отличный самобытный корпус получился. И у меня пара комментариев по функциям. Честно говоря, когда я понял, что давление может скакать больше, чем я могу позволить показывать на экране, то сразу сделал постоянное масштабирование графика, т.е. средняя точка рассчитывается каждый раз при отображении. Возможно, с вашей реализацией это попросту невозможный вариант.
И что касается головных болей. Даже не знаю, повезло вам, или нет, что по барометру близкие понимают, что происходит. У нас тут двоих голова болит в разные моменты времени и мы, как ни старались, не смогли увязать это с давлением.
Пока рабочая версия — комплексное изменение климата, которое, почему-то не всегда сопровождается адекватным изменением давления. К примеру, недавно было довольно высокое давление, однако стало облачно и пошел снег. В общем, как-то все неоднозначно.Bismuth208 Автор
20.03.2018 09:34Динамическое масштабирование имеет свои побочные эффекты:
- уменьшает наглядность силы изменения, создавая впечатление незначительного изменения;
- на перерасчет нужно время и энергия (несмотря на то, что это занимает миллисекунды).
Смена погоды всегда предвещает изменение давления (в городе где я обитаю это так), поэтому нужно смотреть динамику за последние N часов.
l_o_d
20.03.2018 09:29Версию на ионисторах тестировал, при конечной емкости 3мАч работает не более 6 дней (высокий саморазряд). Расчет емкости ионистора делался по формуле C*V/3,6 = X мАч. Думаю, что версия с солнечной батареей и MSP430 будет вообще вечной.
Если не секрет почему отказались от этого варианта? Просто микропотребляющее устройство с литиевым аккумулятором который нужно заряжать раз в год несколько необычно. Или просто воткнули что было? Емкий ионистор и солнечная батарея думаю обеспечат вашу метеостанцию энергией даже без прямых солнечных лучей.Bismuth208 Автор
20.03.2018 09:42Не оказалось под рукой ионисторов с малым саморазрядом, нужным количеством для создания вменяемой емкости, тем самым обеспечив работоспособность около месяца без подзарядки (фух).
Да, соглашусь, что большинство устройств сегодня живут не дольше недели. Более того если туда на вторую боковую стенку поставить плоский аккумулятор на 350мАч, то можно потерять зарядное устройство (ака Xenium).l_o_d
20.03.2018 09:52около месяца без подзарядки
А зачем месяц? На случай ядерной зимы?) Днем (или когда в комнате включен свет) солнечная батарея заряжает ионистор, а ночью схема питается от ионистора. С вашим потреблением наверное даже одной фарады хватит с лихвой. Я от фитнес браслета успеваю зарядник потерять, хотя заряжаю раз в месяц наверное)
alt9773
20.03.2018 10:01Можно было обойтись обыкновенной копеешной фанерой + лобзик, но ведь не зря же тридеручку за многоденег покупали.
Bismuth208 Автор
20.03.2018 10:02У меня нет лобзика за многоденег, но у Вас он есть, ведь не зря же вы его покупали?
alt9773
20.03.2018 10:07Нет, но дойти до ближайшего дома быта и взять его за 200? я в состоянии.
Bismuth208 Автор
20.03.2018 10:11Я в состоянии дойти до жены и взять её 3d ручку и пластик и не заплатить ничего.
hoary
20.03.2018 11:50+1Это уже было в симпсонах:
Гомер получает 63 цента за проданный жир.
Барт: «Пап, но бекон стоил 27 долларов»
Гомер: «Но за него заплатила твоя мама»
Барт: «Но ведь она берёт деньги у тебя»
Гомер: «А я зарабатываю их на жире! В чём проблема?»
andersong
20.03.2018 13:30Как-то мне приспичило сделать корпус для ПК, в кладовке был разобранный бабушкин шифоньер, электролобзик и саморезы. Через пару часов эксклюзивный корпус с нетрадиционным расположением компонентов был готов)))
safari2012
20.03.2018 18:30не было под рукой ни лобзика, ни даже фанеры. вырезал из куска ламината при помощи дрели, ножевки и напильника: www.youtube.com/watch?v=YGBjE0GJ88Y
PS: у меня есть и 3D-ручка и принтер, просто в том месте счел более уместным такой материал.
madf
20.03.2018 11:13Можно стенки корпуса обклеить солнечными панелями и вообще забыть про зарядку раз в 10 месяцев.
Zheleziaka
20.03.2018 11:58Много панелей и не нужно. Калькулятору одной маленькой хватает. Батарея несколько лет живет.
madf
20.03.2018 13:01Потребление калькулятор в разы меньше, не стоит сравнивать муху и слона.
Zheleziaka
20.03.2018 17:06Калькулятор я вспомнил как самый распространенный аппарат с солнечным элементом. А теперь к цифрам: солнечный элемент 50х30 мм даст ~20-30 мА в хороших условиях, 2-3 мА в реальных, автор же добился "… энергопотребления в 10 мкАч в спящем режиме ..." Соотношение сон/работа как я понял ~ 3/300 "… раз в 5 минут делает замеры давления… ", так что должно хватить одного элемента.
madf
20.03.2018 17:47Всё зависит сколько он потребляет в момент работы. В любом случае, только автор проекта, может понять что и сколько ему нужно, основная идея была изложена на тройку вложений выше, остальное флуд.
Zheleziaka
20.03.2018 11:41У меня вопрос к автору и другим владельцам 3D ручек: если сделать подогрев стекла снизу (например феном) можно ли добиться гладкой поверхности? И второе — раз уж к станции приходится подходить, то может сделать индикацию по нажатию кнопки и использовать LCD? И цена ниже и вывод информации симпатичнее.
Popadanec
20.03.2018 11:57Не нужен никакой подогрев. Пластик пока горячий, отлично прилипает к чистому стеклу, легко отлипая когда остынет. Поверхность получается ровная и блестящая, просто автор её оставил внутри корпуса. Единственное, видны линии(микро щели между полосами пластика) рисования.
Zheleziaka
20.03.2018 12:06Вот я как раз про эти щели, уж больно они видны. Наверно сильно быстро застывает пластик из ручки соприкасаясь с холодным стеклом и предыдущим слоем.
Bismuth208 Автор
20.03.2018 12:09Да, все именно так. Прошу заметить, что PLA ведет себя в этом случае куда лучше чем ABS. Это был очень тяжелый выбор между гладкой стороной внутрь или наружу…
Zheleziaka
20.03.2018 12:23OK, а что думаете по второму вопросу, наcчет применения LCD?
Bismuth208 Автор
20.03.2018 12:33Не прижилось, так как на E-Ink все же остается информация длительное время, тогда как на LCD она пропадает. Большинство людей неосознанно смотрят и взаимодействуют со многими вещами. В случае E-Ink вы можете просто проходить мимо и бросить взгляд на экран совершенно непринужденно даже не осознавая этого.
Lando
20.03.2018 18:08так как на E-Ink все же остается информация длительное время
А не может это быть и недостатком? Например аккумулятор закончился. А картинка на бумаге осталось. А что бы понять что данные устарели нужно вчытываться в текущее время/напряжение батареи.
Тут кстати небольшой апдейт можно накатать: при падении напряжения на батарее ниже определенного значения выводить картинку разряда.
Fragster
20.03.2018 11:46Нужна еще концентрация CO2
Bismuth208 Автор
20.03.2018 19:44Для этого проекта потребление у CO2 датчика все равно что требовать питание рельсотрона с атомной силовой установкой! У некоторых датчиков нужно от 12 мА (MBE680) до 50 мА для поддержки накала!
Я бы с удовольствием добавил, это очень полезный показатель, но есть ли экономичные датчики?
Neuromantix
20.03.2018 11:55Имхо, не слишком удачная реализация графика. когда первый раз увидел КПДВ, подумал, что это глюк экрана или что-то похожее.
killla
20.03.2018 14:02Так оно у вас дома живет или на улице?
Bismuth208 Автор
20.03.2018 19:31Обитает оно в теплых, темных и уютных условиях комнаты.
killla
20.03.2018 19:51А не рассматривали вариант еще иметь копию устройства за окном? Насколько изменится элементная база…
Bismuth208 Автор
20.03.2018 20:06Могу подтвердить, что E-ink экраны на морозе «замерзают» напрочь. Тестировал на балконе в -22. Остается только использовать LCD и сегментные индикаторы. Еще нужно использовать другой источник питания (не Li-Ion). Что до пластика? Ну ему сильно все равно на УФ и дождь (непонятно, где там эта биоразлагаемость...).
Popadanec
20.03.2018 21:24Мороз PLA так же не страшен(до -10, ниже не успел проверить), хрупким не становится.
Alexeyslav
20.03.2018 14:22Не хватает одного очень важного показателя — температуры точки росы, чтобы понимать насколько близко состояние внутренней атмосферы к опасности роста грибка на многочисленных «холодных» поверхностях в виде окон и наружных стен температуру которых можно померить. Напрямую зависит только от температуры и влажности, но зависимость нелинейная.
Tomasina
21.03.2018 00:00Что вы все про корпус?
Зачем нужна кнопка обновления? 10-минутной дискретности вполне хватит.
Питание дисплея тоже можно отключать, изображение при этом не пропадает, а запас энергии остаётся для более долгой работы.Bismuth208 Автор
21.03.2018 08:47Есть мнение, что корпус нетипичен для DIY и это вызывает удивление.
Вы говорите про сбережение энергии и хотите выключать экран, но вот только экран во время обновления тратит уйму энергии, а вы хотите делать это целых 144 раза в сутки, когда это нужно от силы раз 5 в день!
Для чего тратить столько энергии? Где тут у Вас экономия?
sanrega
21.03.2018 02:00А мне корпус понравился — выглядит нескучно и самобытно, в отличие от типовых штампованных изделий за 100 руб/пучок.
Irritant
21.03.2018 08:37-1в советское время все корпуса паял из одностороннего стеклотекстолита, получалось вполне прилично, прочно и экранированно.
parserpro
21.03.2018 11:01Корпус людям покоя не дает…
А у меня вопрос по существу — зачем такая точность в температуре, как и где это используется?
boscholeg
21.03.2018 13:10К вопросу о создании корпуса. Очень хорошо подходит вспененный ПВХ.
Материал просто идеален для моделирования с минимумом инструментов под рукой.
Легко режется и сверлится. Отлично клеится и красится. Весьма прочен и не впитывает воду.impetus
21.03.2018 14:44добавлю — очень хорошо красится карандашами, фломастерами, красками и ЛУТом, но плохо то всего отмывается (в т.ч от грязных рук). И — его дым весьма едкий-ядовитый, т.е. паяльником в него лучше случайно не тыкать, и лазером или струной не резать (хотя гнуть на струне можно) Зато фрезером обрабатывается прекрасно:
robert_ayrapetyan
Тьфу, показалось, что прибор так причудливо обледенел после дождя с ветром, а вы его просто таким нарисовали ручкой. Какой-то не очень эстетичный вид, может, из дерева было бы лучше выпилить?
Silverado
Я первую минуту, пока не прочитал теги и не заглянул внутрь поста, был абсолютно убеждён, что это вязаный корпус.
Dioxin
Моя фантазия пошла дальше — термиты. :)
dimanhursky
Мне показалось, что корпус обшит белым мехом, как в жигулях накидки на клесла и руль.
Если будить раз в минуту, то можно и Часы выводить.
badun1
да ладно! Это нано-монтажная пена.
sevg81
На 7й картинке вообще карамель. :)
safari2012
Автор, сделай опрос, кому что показалось на КДПВ :)
Taras-proger
Скучно с вами. Я увидел прибор, вплавленный в кусок чего что.
avs24rus
Один в один, первое впечатление :)
velovich
Ну вы даёте, впервые в истории корпус нарисованный вручную, а им не нравится.
l_o_d
Никто не оспаривает ценность корпуса как культурного объекта)
Ожидаю в скором времени что кто нибудь напишет статью про устройство с вязанным корпусом)
andersong
В начале карьеры ) работал на сборке вязальных машин, и вязать научился, конечно.
Открыть, что-ли стартап по вязанию эээ… конструкционных материалов)))
l_o_d
Если связать и пропитать эпоксидкой получится неплохой композит кстати. И выглядеть будет стильно)
impetus
я так ручки ко всяким топорам-молоткам-кувалдам себе делаю — обматываю верёвкой, пропитанной клеем. Получается вечно, шершаво и ухватисто.
Stepanow
Он выглядит как советская вещь, которую плохо покрасили на заводе, а потом перед каждым праздником красили ещё раз «чтобы было красиво».
Lando
На мой вкус как-то очень похоже должны выглядеть стены в логове чужих)