Точный датчик температуры Si7051, делаем "с нуля".
Всем привет!
Хочу поделиться длинной историей разработки и заказа платы под данный датчик. Полный цикл DIY-проекта, на простеньком примере.
Для своей домашней пивоварни у меня собрана простенькая «метеостанция» с выкладкой данных онлайн на различные сервисы. В качестве датчиков использовались популярные DS18B20. Но вот случайно наткнулся на датчики от Silicon Labs, серии Si705X, и захотелось мне попробовать задействовать их. А конкретно Si7051 — цифровой (I2C) датчик к точностью ±0.1°C и временем конвертации данных с максимальным разрешением 14 бит всего 7 мс (сравните с 750 мс у DS18B20). Не то, чтобы мне нужна была такая точность и скорость на пивоварне, просто захотелось «пообщаться» с новым датчиком. :)
Датчик был настолько новый, что готовых сборок его обнаружено не было. Дело в том, что в отличии от DS18B20, этот датчик идет в корпусе только для поверхностного монтажа — DFN 3x3 мм. Так даже интереснее было — я получил практику сразу многих вещей, включая пайку такой мелкой детали (обычным паяльником). Сейчас кстати появилась в продаже готовая плата от ClosedCube за $8.95. Когда я начинал, их еще не было. Поэтому делал я все с нуля.
Для начала читаем даташит от Si705X. Смотрим типовую схему включения, всё довольно-таки просто, обвязка минимальна:
Помимо самого датчика надо всего пару резисторов и конденсатор:
Такие же номиналы и типоразмеры 0603 и будем использовать. «Нарисовать» всё это дело я решил на EasyEDA. Бесплатно и ничего кроме браузера не требует. Буквально за 15-20 минут набросал схему, аналогичную тому, что в даташите, только добавил коннектор, стандартный штырьковый. Ах да, еще самой микросхемы датчика в базе данных EasyEDA конечно же не было, надо было создать свой компонент. На DIYModules я нашел символы для Si70xx (там не было именно 7051, но были аналоги с точно такой же распиновкой) и Footprint (размещение контактных площадок на плате) для этого DFN-6 3x3 под Eagle. Удачно импортнул их в EasyEDA и теперь они все там есть. Вот такая схемка получилась:
Можно было бы еще компактнее или сенсор на угол сместить.
Плата маленькая 13x12 мм. Поэтому заказать изготовить её у OSHPark получилось ооочень дешево. Смешные $1.15 за 3 платы с доставкой, сделанные в США. Да, у них просто по размеру печатают и в небольшом количестве (от 3 штук) мелкие платы у них выгодно заказывать. Я просто экспортировал Gerber из EasyEDA и загрузил его в OSHPark. Всё принялось на ура и без косяков сразу. Разве что на реальных платах шелк обводки вокруг датчика почему-то не был сделан. Хотя на превью был. Но это фигня. Вот так выглядело превью у них:
На перевернутую подпись C1 не обращайте внимания. Не помню почему так вышло ) Да и пофиг, делалось на скорую руку.
Платы обычной почтой, без трека. А по приходу ко мне получал я их как мелкий пакет с треком RBxxxxxxxxxRU — т. е. наши трек наклеили внутренний, но узнать его до получения пакета я никак не мог. Но получил их в итоге к счастью, извещение принесли. Вот так выглядели платы:
Пока платы готовились и отправлялись, я заказывал компоненты. Сначала поискал по нашим сервисам, типа ChipFind. Что-то на тот момент когда искал, датчики возило всего пару компаний и дорого. Сейчас уже возят нормально, можно найти. Я сначала заказал в Mouser (их российской версии сайта), у которых было заявлено, что в цену «включена» доставка уже. После прислали счет от российской компании, где сверху была стоимость доставки до моего города еще. Не дорого, но как-то это не хорошо говорить одно, а делать по другому. Поэтому я на них забил и заказал в американском DigiKey. С доставкой через посредника Shipito (давно пользуюсь для всякого-разного, адрес виртуальный в США есть). Датчики у них всего по $1.97 были. Еще взял сразу резисторы Panasonic и конденсаторы Murata, с такими же параметрами, как в даташите от Silicon Labs, по 10 шт (от 10 там цена копеечная получается). Добро это дома было, но нонэйм китайский с Али, решил взять «брендовые». Ну и в довесок себе еще мелочевки всякой набрал там. Датчики стоили $5.97, но со всем остальным вышло вот так:
Your total cost is $15.61 in U.S. currency, including $4.11 postage.
На следующий день мне пришло от них письмо с вопросом об адресе получателя. Я при покупке честно выбрал что платежный адрес — мой адрес в России, адрес доставки — адрес Shipito в США. Спрашивали что за компания находится по адресу получатели и является ли это компанией-пересыльщиком. Думал приехали, не станут на форвардера отправлять. Тем более при покупке было уведомление, что один или несколько позиций в заказе подлежат экспортному контролю (заказывал там демо-плату с МК еще, она «мэйд ин ЮСА»). Ответил честно, да, адрес — компания Shipito и указал их «реквизиты» с сайта. Те ответили «ок» и выслали посылку. :) Через пару дней получил на адрес в Шипито и переслал себе через Shipito Economy Airmail. Еще около $10 вышла доставка в РФ. С таможней/доставкой проблем никаких не было.
Все компоненты в посылке разложены по отдельным пакетикам, некоторые даже в двойных и т. д. Ну осталось дело за малым. Спаять это всё. Компоненты мекие. Вот для сравнения как выглядит один датчик:
На последней фотке под увеличительным стеклом изображение. Слегка кривовато припаял конечно. Да и фиг с ним, главное, что работает. Это был вообще мой второй в жизни опыт пайки чего-то меньше стандартных штырей коннекторов (header pins). Потренироваться паять SMD, 0603 в т.ч., я взял на Ali вот такую платку за доллар. Не так уж сложно на самом деле, даже с недорогим паяльником с того же Али, только припой и флюс нормальный надо — китайский припой только Mechanic более-менее, остальные даже не берите, ими хрен что спаяешь в принципе. Плату с датчиком я паял Felder'ом, флюс с Китая псевдо-Kingbo RMA-218 (вполне норм). Отмывал бензином «Калоша», потом водой с мылом.
Пока все заказы пришли ко мне домой уже появилась готовая сборка от ClosedCube, о который я писал выше и их простенькая библиотека для Arduino. Я взял Arduino Mini Pro и подрубил к нему. Простенький скетч из примера библиотеки и результат с датчика выдается без проблем:
Самое главное! На плате преобразователь уровней напряжения я не разводил! Датчику нужно питание 3.3В. Не подавайте на него питание от Arduino с 5В. У меня Mini Pro питается от 3.3В источника, работает на 16MHz нормально вполне с таким питанием, поэтому уровни согласовывать мне надо, везде 3.3В.
PS: На Ali можно найти недорогие готовые платки с датчиком Si7021. У него точность температуры ±0.4°C, зато он еще и влажность измеряет в пределах ±3% RH. Распиновка у него 1 в 1.