Термометр на SHT21

В виду нехватки в хозяйстве термометров и в виду избытка халявных термодатчиков и еще кое-валяющихся без дела деталек, решил сбацать себе этот девайс. Как известно из прошлого поста, датчик измеряет не только температуру но и влажность. Для меня практическая польза от этой фичи сомнительна, но поскольку кому-то возможно пригодится — решил задействовать и её. Кстати это пожалуй один из самых моих долгих проектов: софт писался месяц(!). Разработка затянулась главным образом из-за нехватки свободного времени и глючности кое-какого компилятора от кое-какой фирмы. Но обо всём по-порядку.

Термометр на SHT21

Ни каких экзотический возможностей у термометра нет — просто показывает температуру с влажностью и индикатор заряда батареи.  Отображение данных происходить на экране от телефона сименс. О том как его подключить к микроконтроллеру я писал ранее. Я выбрал этот дисплей как наиболее экономичный из всех у меня имеющихся + он очень тонкий и им легко управлять при помощи микроконтроллера. Единственный недостаток: при напряжении ниже 2-х вольт на нем уже ничего не разобрать (хотя контроллер стабильно работает и при 1.8 в). Именно поэтому при разряде батареи примерно до 2 вольт на экране будет показан индикатор полного разряда батареи. Я не пожалел времени для того чтобы нарисовать (а точнее срисовать!) большие красивые циферки для отображения температуры и маленькие строгие циферки для отображения влажности. Что из этого получилось хорошо видно на первой картинке и на картинке ниже

Термометр на SHT21

Печатная плата ? Не, не слышал. Да и зачем она тут если деталек то раз, два и обчелся. Хороший монтаж + качественный корпус и ничего этому девайсу не страшно. Тем более в футбол я им играть не планирую.  Все детальки соединены МГТФом 0.07 мм — самым лучшим монтажным проводом на свете. Только зачищать его сложновато, но это всего лишь единственный его минус. Ни какого держателя для батарейки у меня не предусмотрено (в виду ограниченности места в корпусе) поэтому провода припаивались напрямую. В качестве флюса использовал паяльную кислоту, ибо с канифолью припаиваться не хотело при относительно низкой температуре паяльника, а перегревать батарейку я не решился. Все открытые контакты были тщательно заизолированы скотчем перед тем как засунуть все это дело в корпус. Лишние ноги контроллеру я откусил (за исключением тех которые нужны для прошивки), а сам корпус приклеил суперклеем. Дисплей кстати тоже держится на нем. В итоге снаружи девайс выглядит гораздо красивей чем изнутри :-) Еще важно не забыть проделать отверстие в корпусе для датчика, если мы хотим измерять температуру не внутри корпуса устройства. Сам корпус называется G1906 (~2$), а вот так он выглядел в самом начале моих издевательств над ним:

Термометр на SHT21

Самое сложное тут это проделать вот такую вот прямоугольную дыру. Я делал так: сначала нарисовав прямоугольник а потом по контуру делал дырки обычным сверлом которым сверлю платы. После высверливания 100500 дырок, прямоугольник выламывается, а края зачищаются напильником. Кстати это пожалуй самая ровная дыра из всех что мне доводилось делать :-) Теперь перейдем к схеме:

Термометр на SHT21

Всё достаточно просто и банально кроме небольшой изюминки управления электропитанием. Её я подсмотрел в каком то журнале: Замыкаем кнопку, девайс стартует, выставляет на ноге логическую единицу тем самым поддерживая транзистор в открытом состоянии, а через пять секунд на ноге появляется логический ноль и транзистор закрывается отрубая питания всего устройства. Все гениально и просто. Перед использованием нужно покрутить резистор R4 таким образом чтоб при трёх вольтах питающего напряжения на его щётке подключенной к PC0 было напряжение 1.1 вольта. Иначе уровень зарядки будет отображаться не верно. Лучше всего использовать многооборотный резистор. им проще подстроить десятые доли вольта. Микроконтроллер работает на частоте 8 мгц от внутреннего генератора. Всего девайс потребляет 5 мА, а это значит что батарейки (CR2032) должно хватить надолго.

И вот мы добрались до самой интересной части проекта: до софта. Пользуясь случаем хотелось бы излить тонны ненависти на создателей компилятора  микропаскаль. Подобной кривизны я еще не видел.  После того как моя программа стала занимать более ~10кб флеш памяти начались необъяснимые глюки, которые я мастерски преодолевал при помощи запихивания разнообразных костылей. В моей программе можно найти не нужную инициализацию UART (без нее не работает), настройку портов через ассемблерные вставки а также некоторые другие интереснейшие вещи! Больше на микропаскале я не пишу чего и вам желаю.

Скачать исходник

Термометр на SHT21: 36 комментариев

  1. Лол. Я себе за окно термометр сделал — развел плату, пару дорог пустил через МГТФ, одну орел не развел (не законнектил), тоже МГТФ.
    Плату в корпус (тини2313+3разрядный светодиодный семисегментник+ds18b20+стаб на 5в). Питалово решил просто — купил батарейку для брелоков на 12в, напаял на нее провода.
    Дополнительно в корпусе высверлил дыру под кнопку тактовую (на питание). Плату закрыл картонкой от упаковки батарейки, залепил соплеметом по углам. Вложил батарейку — соплемет туда же) Ну и кнопку им приклеил.
    Единственный минус — надо было разьем под батарейку, чтоб потом без паяльника менять

    1. И как сопли кнопку держат? Не отваливается? Может у тебя какие-то суперсопли конечно, но мои не удерживают (или просто из-за того что я клей не пистолетом нагреваю а зажигалкой)

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

    1. Потребляет такой экран в районе 1ма. Это много для батарейки типа CR2032, так что кнопка тут как раз в тему. я сначала тоже хотел чтоб он всё время картинку показывал но померив ток потребления передумал. А корпус на самом деле не такой уж и большой, из подручных источников питания способных влезть туда, была только эта батарейка.

  3. Пользуясь случаем хотелось бы излить тонны ненависти на создателей компилятора микропаскаль. Подобной кривизны я еще не видел. … Больше на микропаскале я не пишу чего и вам желаю.

    :)

    Именно поэтому я не отношусь серьезно к компиляторам Pascal, Basic, etc. для МК. Эмбед — царство ассемблера и С, все остальное — игрушки. :)

    Да, когда-то я тоже очень любил Паскаль. Эх, детство, детство…

      1. Ну так а смысл в языке без компилятора? :)

        Сам по себе Паскаль — язык как язык, для прикладного программирования на x86 вполне, вспомнить хоть тот же Delphi, на котором GUI Скайпа написан.

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

  4. расскажи как мереется заряд батареи?
    всмысле и программную и аппаратную часть. я так понял что ацп через резистор к минусу батареи подключается?

    1. Заряд батареи меряется при помощи АЦП :)
      Переменный резистор играет роль делителя напряжения, он нужен для того, чтоб при максимальном заряде батареи (3 вольта) на вход поступало напряжение 1.1 в. (1.1 вольта — опорное напряжение для АЦП выдаваемое встроенным источником опорного напряжения)
      Программная часть простая: Запускаем измерение, и потом анализируем что нам выдал АЦП и рисуем нужное количество палок батареи.

  5. я делал некоторые несложные прошивки типа передачи значений ацп на uart, энкодер подключал итд. вроде все нормально работало.

    насчет ненужной инициализации uarta: ты как я заметил использовал разные библиотеки идущие в комплекте с микропаскалем (например для работы с twi и spi)- может это в них какието ошибки или глюки что без уарта не работают? есть ли смысл попробовать «вручную» использовать эти модули?
    я имею ввиду что например тотже уарт можно включить используя функцию UART1_Init из библиотеки вкомплекте, а можно по даташиту записывать чтото в UCSRA,UCSRB,UBRRL итд.

    и еще такой вопрос про ацп: если при REFS1=0 и REFS0=1 в качестве опорного напряжения используется напряжение источника питания, то зачем нужна ножка AVCC?

    1. нету в библиотеках глюков. Если программу укоротить по размеру то всё работать начинает. Юзай Си и будет тебе щастье )
      AVCC это питание АЦП. Он отдельно от контроллера питается. По даташиту рекомендуется подводить к нему питание через дроссель. Ну и конденсатор между AVCC и землей.

  6. а где вы такой корпус взяли? МГТФ я зачищаю китайской зажигалкой, очень удобно, единственное что — после обжига лужу при помощи ф-64. Получается вообще отлично. Дыма совсем нет после этого, и запаха кстати тоже

  7. Под впечатлением вашей фразы » в виду избытка халявных термодатчиков «, хочу приобрести у вас один SHT21 по Украине, оплата карточкой, посылка Новой почтой или как будет вам удобно за мой счёт.

      1. кейген ко всем версиям подходит. тот который вроде как для версии 4.6 вобще для версии 2.1 сделан. седне лично поставил с ним 5.4 — все работает

      2. кстати для любителей C есть компилятор mikroC от тойже фирмы. скачал щас посмотреть — с виду от микропаскаля не отличается ничем (даже примеры теже). кейген от mikroC 2.1 подошел

          1. мне winavr не нравится( какойто он муторный. хотябы из-за мэйкфайла. тогда уж лучше codevisionavr помойму.
            кстати ради интереса скачал микроси и микропаскаль и для авр и для пик — всем подошел один и тотже файл активации (сгенерированый кейгеном для микропаскаля 2.1). просто его нужно переименовать))

  8. Имеется Siemens C45. Вскрыл — на дисплее есть обозначение V41 (Siemens так любит эту буквовку V), после этого идёт 10025Р02 и 0247CS. Подключен ленточным кабелем к специальному разъёму на плате. Идентичен ли этот дисплей дисплею от С55, применённому Вами в вышеописанном измерителе температуры и влажности?

Добавить комментарий