Ежедневный радиожурнал со звуком. Иногда с юмором. Всегда с картинками

26.02.2019

Конструкция послевыходного дня:-)

Продолжение. Начало смотри "Измеритель мощности"
    Или понедельник день тяжёлый:-)  Как я и описывал в "Конструкция выходного дня - КСВ метр на Ардуино" с часами оказалось не всё так легко как хотелось бы.  Модуль, на самом деле полный аналог авторскому, ттолько не распаян датчик температуры%-(, но это не единственная проблема. В видео никак не описывается установка времени, так  что поначалу я даже успел подумать что либо модуль неисправен, либо библиотека не та...  Но к счастью, и модуль был исправен и библиотека та. Повозившись минут 40 пришёл к выводу что нужно модуль запустить в отрыве от скетча, сам по себе.   И тогда он (модуль) мне сказал, что показывает всякую ерунду потому что ему никто времени не ссообщил. При отсутствии конкретных инструкций установка даты и времени оказалась не такой уж и лёгкой.  Лобовая попытка задать время в формате количества секунд с 1 января 1970 года потерпела фиаско. Как бы я не высчитывал,  то год получится 2099, то время суток 28 часов 92 минуты :-)   Прописать прямую команду setTime тоже не вышло так как родная библиотека DS1307RTC.h использует всё тот же невразумительный стандарт установки времени. Возился со скетчем libryries/RTC/examples/SetTime/SsetTime. Для тех, кто надумает повторить этот  в общем приятный проект, совет. Используйте способ при котором время устанавливается текстом кода в скетче - http://zelectro.cc/RTC_DS1307_arduino Потом эти строчки в коде закомментируйте до следующего раза :-) Вышло легко и непринуждённо. В доме появились еще одни часы :-) Теперь разве что не запаянный датчик температуры огорчает указанием в нижней строке 127 градусов по Цельсию. Как то надо будет запаять :-)
Точно так же не до конца порадовал распаянный баззер, который при превышении КСВ уровня 3 выдаёт звуковой сигнал протяжённостью в полсекунды. В принципе фишка удобная, только кажется из-за импульсной помехи он время от времени неожиданно "вскрикивает" дурным голосом, хотя КСВ никак не меняется. Даже передатчик не включен. После просмотра кода понял, что это "бой часов" каждые пол часа :-)
 И еще модуль собственно измерителя практически не описан. Ну я попробовал сделать, вроде печатная плата есть, прикупил SMD деталей, намотал, спаял. Но результат плохой. Точнее никакой. Видимо перепутал фазировку обмоток трансформаторов тока. Не работает.
Завтра, если внучка даст, попробую собрать чего-нибудь проверенное. Или это доведу до ума. А уже потом можно будет пробовать оформить в настенную конструкцию. Ну, раз часы есть :-)

P.S.  Так как у меня модуль часов не DS3231 а обычный  DS1307, пришлось съездить в Чернигов, в офис интернет магазина NIKOM.BIZ, где давно присмотрел  енкодер 60 имп/оборот и купил вместе с ним датчик температуры DS18B20, который запаял в плату часов. Дело в том, что в в DS3231 датчик температуры встроен в кварцевый генератор для повышения стабильности и читать температуру оттуда можно напрямую. В DS1307 датчик устанавливается (опционально) и на плату Ардуино значение температуры надо подавать отдельно по OneWire протоколу.  При этом DS сигнал датчика температуры с модуля проволочкой соединяем с пином D2 Ардуино Нано. Подгружаем библиотеку OneWire.h, в описательной части скетча вносим добавки:

#include OneWire
ds(2);  //  Создали объект общения по однопроводному протоколу

Далее по тексту идём до места где температура берётся из модуля DS3231 и туда вставляется участок который берёт градусы из нашего свежевклеенного датчика DS18B20

********Температура часов DS3231***************
float get3231Temp() {

  //******temp SD18B20    // Определяем температуру от датчика DS18b20
  byte data[8]; // Место для значения температуры
  ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
  ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу и читать сразу 0хСС. 
  ds.write(0x44); // Даем датчику DS18b20 команду измерить температуру. 
  delay(1000); // Микросхема измеряет температуру, а мы ждем.
  ds.reset(); // Теперь готовимся получить значение измеренной температуры
  ds.write(0xCC);
  ds.write(0xBE); // Просим передать нам значение регистров со значением температуры
  data[0] = ds.read(); // Читаем младший байт значения температуры
  data[1] = ds.read(); // А теперь старший
  float temperature =  ((data[1] << 8) | data[0]) * 0.0625;  // Формируем итоговое значение:  "склеиваем"

Затем подменяем значение  my_temp у автора, нашим temperature и заодно меняем цвет

 char bufT[4]; byte lenT = 4;                                            //назначаем массив данных
    //  dtostrf(my_temp,lenT,1,bufT);                                  //конвертируем в строку
    dtostrf(temperature, lenT, 1, bufT);
    bufT[lenT] = '" "C'; bufT[lenT + 2] = 0;                   //добавляем символ "С"
    tft.drawText(82, 140, bufT, COLOR_ORANGE);

Кому лень возится с кодом, вот ссылка на модифицированный скетч. Не забудьте подгрузить OneWire. Теперь у нас честный градусник. У меня и правда жарко в кабинете, кто у меня бывал, не даст соврать:-)

Продолжение - "Как сделать КСВ метр"
       Давайте дружить. Добавьте этот сайт в избранное                                         
© Copyright 2011-2019 UY2RA, UN7FGO   All rights reserved.    Все права защищены.    Пожалуйста уважайте их.
Использование материалов c этого сайта разрешается только с указанием АКТИВНОЙ ссылки на этот сайт.

FREE & OPEN UKRAINIAN HAM  RADIO  BANNERS NET