Click to order
Ваша корзина
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-1W
1. Термодатчик устанавливается в USB разъём управляющего ПК.
2. При выборе места установки следует избегать способов подключения, при которых сам датчик нагревается от материнской платы ПК, т.к. это может негативно сказаться на точности показаний.
3. Для работы с устройством мы предлагаем open-source демонстрационное ПО. Пользователь может самостоятельно реализовать дополнительный функционал общения с устройством.
Программа-монитор ODTEMP-1W
Кроссплатформенная графическая
программа-монитор
Программа под Windows/Linux/macOs подключается к устройству через последовательный порт и обеспечивает следующий функционал:
  • чтение текущей температуры
  • чтение истории последних значений (лог)
  • чтение граничных значений: минимум-максимум-текущая температура
Внутренний лог устройства
Устройство хранит 9 последних событий в формате: время + температура.


Прим.:
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
Температура
По запросу можно получать температуру устройства. Можно модифицировать программу так, чтобы устройство отправляло посылки и без запроса: по таймеру или событию (превышению и т.п.)
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
Пример получения данных с термодатчика.
#!/usr/bin/python3
'''
Example:
python3 ./odtemp-test.py
'''
from time import sleep
import serial


def run():
    port = '/dev/ttyACM0'
    ser = serial.Serial(port)
    while True:
        ser.write(b'~G')
        ser_data = ser.readline()
        if ser_data:
            data = ser_data.decode("utf-8")
            print('Read from serial (repl to ~G): {0}'.format(data.strip()))
            if data.startswith('~G'):
                print('Temperature is {0}'.format(float(data[2:])))
        else:
            print('sensor error')
        sleep(1)


if __name__ == "__main__":
    run()
Программируем сами
Модификация встроенного ПО
Сердцем устройства является микроязык 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;
}