Проект термометра на LCD Nokia 5110

svetozar161
Offline
Зарегистрирован: 09.03.2016

Здравствуйте уважаемые любители программирования и профессионалы конечно))

Понадобился мне термометр на экране от Nokia. Нашел вот этот проект http://www.youtube.com/watch?v=ga_1dqGjsbo

Решил собрать все на своей Pro Mini

Собрал все на монтажной плате используя стабилизатор на 3.3в для питания дисплея, подсоединил датчик используя прямое питание (по 3 проводам), сопротивление на 4.7 к, длина кабеля около 6 метров(датчик на улице).

Залил скетч. Все работало на первый взгляд, но утром обнаружил, что температура зависла на одном месте(рядом стоит еще один контроллер и по нему сверялся с новым датчиком). Нажал на сброс - температура обновилась.

По прошествии определенного времени снова зависло все. Снова нужно жать на сброс. Что это может быть?

Да и еще. При касании кварца, ардуина тоже перезагружается(наводки?)

Спасибо за любую помощь.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Шесть метров - очень длинная антенна. Она Вам там радио-шансон не проигрывает заодно? :)

svetozar161
Offline
Зарегистрирован: 09.03.2016

Честно говоря незнаю. Рядом висит nm8036 с 4мя датчиками по 15 метров витой пары и все нормально. Вопрос почему не исполняется цикл и зависает контроллер? Неужели из-за большой длины кабеля?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Какой цикл? Не было никакого цикла (как и скетча вообще) в этом топике. Какой Вы хотите помощи, если ничего не рассказываете?

Какой датчик? Чем читаете температуру? Ничего ведь неизвестно.

А 60 метров - линия сильно зашумлена - чего туда только не валится. 

svetozar161
Offline
Зарегистрирован: 09.03.2016

Да, я понял. Код вот этот

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LCD5110_Graph.h>

#define ONE_WIRE_BUS 7

LCD5110 lcd(8,9,10,12,11);

extern unsigned char SmallFont[];
extern unsigned char BigNumbers[];
extern uint8_t temperatureIcon[];

char temperatureF[6];

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

float tempC = 0;
float tempF = 0;

void setup(void)
{
  lcd.InitLCD();
  lcd.setContrast(65);
  lcd.setFont(BigNumbers);
  sensors.begin();
  sensors.setResolution(9);//9-12 бит
}

void loop(void)
{ 

  lcd.clrScr();
  lcd.drawBitmap(0, 0, temperatureIcon, 84, 48);
  
  sensors.requestTemperatures();
  
  tempC = sensors.getTempCByIndex(0);
  tempF = sensors.toFahrenheit(tempC);
  
    //convertToString(tempF);
  
convertToString(tempC);  //Uncomment this for degrees Celsius
 
  lcd.print(temperatureF,25,11);
  
  lcd.update();  
  delay(3000);
}

void convertToString(float number)
{
   dtostrf(number, 3, 1, temperatureF);
}

Датчик о котором идет речь (18b20) никак не связан с теми 4мя датчиками - он сидит на своей ардуине, 4 датчика сидят на своем контроллере. Я просто привел пример.

bwn
Offline
Зарегистрирован: 25.08.2014

Питание, оно такое питание.

Гриша
Offline
Зарегистрирован: 27.04.2014
  1. Как определили, что завис датчик температуры, а не дисплей или ардуино?
  2. Есть ли  конденсатор по питанию на датчике для подавления помех?
  3. На дисплеи встречал много жалоб – зависают. Поищите пример кода и аппаратного решения по периодическому сбросу дисплея, на форуме читал, давно, не помню топик.