Click to order
Cart
Ваша корзина
Total: 
ФИО
Для транспортных компаний - полностью
Ваш e-mail
Ваш телефон
Комментарий
Промокод
Подписаться на новости
Согласие на обработку персональных данных
Payment method
ЦИФРОВОЙ USB ТЕРМОДАТЧИК
ODTEMP-1W (TOIC)
Миниатюрный программируемый термометр с USB подключением
Как это работает?
USB термодатчик ODTEMP-1W является более продвинутой версией датчика ODTEMP-1U и позволяет пользователю модифицировать встроенную в устройство программу. В устройстве работает язык программирования для IoT устройств - TOIC.
Для чего нужен программируемый USB термометр
Возможность изменить встроенную программу позволяет значительно расширить возможности применения такого устройства
1
Корректировка значений
Корректировка, фильтрация, сглаживание: множество действий может понадобиться при работе с показаниями термодатчика. Например, при необходимости учитывать влияние внешних факторов в разное время суток и т.п.
2
Логи
Возможность записать крайние значения сразу в датчик - может оказаться критически важной возможностью устройства для определения причин в нештатных ситуациях.
3
Дополнительный функционал
Отправка управляющей команды на ПК по перегреву, по времени или любой другой произвольный код: всё в руках программиста.
Характеристики
1. Интерфейс подключения: USB
2. Шаг измерения температуры: 0.5С
3. Габариты: 13х18х58 мм
4. Работает в Win7/Linux/macOS и других ОС
5. Встроенный язык программирования TOIC для написания своих программ в датчике.

Установка USB термометра ODTEMP-1
1. Термодатчик устанавливается в USB разъём управляющего ПК.
2. При выборе места установки следует избегать способов подключения, при которых сам датчик нагревается от материнской платы ПК, т.к. это может негативно сказаться на точности показаний.
3. Для работы с устройством мы предлагаем open-source демонстрационное ПО. Пользователь может самостоятельно реализовать дополнительный функционал общения с устройством.
Программа-монитор ODTEMP-1W
Кроссплатформенная графическая
программа-монитор
Программа под Windows/Linux/macOs подключается к устройству через последовательный порт и обеспечивает следующий функционал:
  • чтение текущей температуры
  • чтение истории последних значений (лог)
  • чтение граничных значений: минимум-максимум-текущая температура
Консольная программа-монитор ODTEMP-1W
Консольная программа-монитор на Python3
odtemp-1w.py
Так как USB ODTEMP-1W очень гибкий термометр, мы решили сделать простую консольную программу с открытым исходным кодом для демонстрации возможностей.
Маленький однофайловый проект поможет быстро запустить или модифицировать задачу под себя.

Пример запуска:
Linux: python3 odtemp-1w.py /dev/ttyACM0
Windows: python3 odtemp-1w.py COM3

Доступные команды:
Порт устройства - обязательный параметр.
--period - период отправки команды, что ПК не повис. По-умолчанию 5 секунд.
--log_period - период отправки команды на показ лога устройства. По-умолчанию значение 0 - отключено.
--temp_period - период отправки команды на показ температуры. По-умолчанию значение 0 - отключено.
--sum_period - период отправки команды на показ суммарной информации: текущая температура и время, минимальная температура и время, максимальная температура и время. По-умолчанию значение 0 - отключено.
--sync_period - период отправки пакета синхронизации времени от ПК. Нужно при включенном --log_period для того, чтобы в логе было корректное время.
--logfile - указать в какой файл программе-монитору писать лог. По-умолчанию - консоль.
--hide_timemark - отключить временные метки в логе. По-умолчанию метки включены.

Пример запуска с параметрами:
python3 odtemp-1w.py /dev/ttyACM0 --log_period=10 --hide_timemark --sync_period=600 --sum_period=300
usage: odtemp-1w.py [-h] [--period PERIOD] [--log_period LOG_PERIOD] [--sync_period SYNC_PERIOD] [--sum_period SUM_PERIOD] [--hide_timemark] [--logfile LOGFILE] port

USB ODTEMP-1W Monitor

positional arguments:
  port                  Serial port

optional arguments:
  -h, --help            show this help message and exit
  --period PERIOD       Get temperature every X second
  --log_period LOG_PERIOD
                        Show log every X second. 0 - if disabled
  --sync_period SYNC_PERIOD
                        Send timesync every X second. 0 - if disabled
  --sum_period SUM_PERIOD
                        Show summary every X second. 0 - if disabled
  --hide_timemark       Hide log timemark
  --logfile LOGFILE     Set file to logging
Внутренний лог устройства
Устройство хранит 9 последних событий в формате: время + температура.

Пример запуска: python3 odtemp-1w.py /dev/ttyACM0 --log_period 600 --hide_timemark
С такими параметрами программа каждые 600 секунд будет выводить лог на экран.

Прим.:
1. Рекомендуется для ведения лога использовать мощности управляющего ПК.
2. Устройство хранит лог в оперативной памяти, поэтому при потере питания лог будет сброшен.
---------LOG---------
07/18/2020 18:27:22 26.2
07/18/2020 18:27:27 26.2
07/18/2020 18:27:32 26.7
07/18/2020 18:27:37 26.7
07/18/2020 18:27:43 26.7
07/18/2020 18:27:48 26.7
07/18/2020 18:27:53 26.2
07/18/2020 18:27:58 26.2
07/18/2020 18:28:03 26.2
Температура
По запросу можно смотреть температуру устройства. Можно модифицировать программу так, чтобы устройство отправляло посылки и без запроса: по таймеру или событию (превышению и т.п.)

Пример запуска: python3 odtemp-1w.py /dev/ttyACM0 --temp_period 10
С такими параметрами программа каждые 10 секунд будет выводить температуру на экран.
06/16/2020 16:33:10 Temperature: 26.2
06/16/2020 16:33:21 Temperature: 26.2
06/16/2020 16:33:23 Temperature: 26.2
06/16/2020 16:33:34 Temperature: 26.2
06/16/2020 16:33:36 Temperature: 26.2
Упрощённый пример считывания температуры на Python3
Пример получения данных с термодатчика. Это упрощённый код для понимания принципов работы. Не используйте его в реальных проектах.
from time import sleep
import serial

port = '/dev/tty.usbmodem14101'
ser = serial.Serial(port, timeout=0.05)

while True:
    ser.write(b'\xc0\x00\x02\xff\xff\xff\xffTR\xc0')
    ser_data = ser.readall()
    if ser_data and ser_data.startswith(b'\xc0'):
        k = int(ser_data[7:11].decode())/10
        c = k - 273
        print('Read from serial: {0}'.format(c))
    sleep(3)
Программируем сами
Модификация встроенного ПО
Сердцем устройства является микроязык TOIC, который позволяет легко модифицировать встроенное программное обеспечение устройства.
Код, работающий в устройстве по-умолчанию.
Код, который работает в устройстве по-умолчанию.
//Main settings
#define DELAY_MS 300000
#define LOG_SIZE 54

//global vars
var max_temp;
var min_temp;
var max_temp_ts;
var min_temp_ts;
var mem_start;
var mem_ptr;
var temp;

var reset()
{
    memset(mem_start, 0, LOG_SIZE);
    min_temp = 4000;
    max_temp = 0;
    min_temp_ts = max_temp_ts = 0;
    mem_ptr = 0;
}

var get_temp()
{
    DS18.VALUE = 1;
    delay(100);
    return DS18.VALUE;
}

var logger() {
    sprintf(mem_start + mem_ptr, "%p%r", *TIME.EPOCH, &temp, 2);
    mem_ptr = ((mem_ptr+6) % LOG_SIZE);
}

var _msg() {
    var c = stoi(MSG.RX, 'c');
    switch (c) {
        case 'T': // get_temp
            sprintf(PC.TX, "T%p", temp);
            break;
        case 'L': // get_log
            sprintf(PC.TX, "L%r", mem_start, LOG_SIZE);
            break;
        case 'S':  // summary
            sprintf(PC.TX, "S%p%p%p%p%p%p", *TIME.EPOCH, temp, min_temp_ts, min_temp, max_temp_ts, max_temp);
            break;
        case 'R': // reset
             sprintf(PC.TX, "R");
             reset();
             break;
        default:
             break;          
    }

}

var main() {
    mem_start = SYS.RAM;
    DS18.INIT = DS18_PORT_B|8;

    reset();

    while(1)
    {
        temp = get_temp();
        if (temp < min_temp) { min_temp = temp; min_temp_ts = TIME.EPOCH; }
        if (temp > max_temp) { max_temp = temp; max_temp_ts = TIME.EPOCH; }
        logger();
        delay(DELAY_MS);
    }
    return 0;
}