sobota, 29 kwietnia 2017

Pomiar temperatury na zewnątrz + zapamiętywanie skrajnych wartości + usypianie ATMEGA328

Większość ludzi jako pierwszy projekt na arduino buduje termometr.
Tak też będzie i na tym blogu, jako że to pierwszy prawdziwy wpis.

Jednak całość zbudowana jest nie do testów lecz jako działający na co dzień termometr.

Pomiar temperatury jest ważny w każdej dziedzinie. Warto znać aktualną wartość temperatury gdy mamy wyjść z domu. Wprowadzając się do nowego mieszkania z moją kochaną Narzeczoną brakowało nam termometru który wskazywałby temperaturę na zewnątrz.

Ale ja nie dam rady ? Potrzymaj mi piwo ! 
Zmajstrowałem termometr z tego co miałem pod ręką. Dodałem kilka bajerów i działa!






Ale co dokładnie wyróżnia go na tle pozostałych ? 
-Wyświetlanie skrajnych wartości temperatury i zapis do pamięci EEPROM(nieulotna po zaniku zasilania)
-Zasilanie bateryjne
-Pomiar dokonuje się co 2 minuty i Atmega przechodzi w stan uśpienia
-Podświetlenie ekranu jest odizolowane od mikroprocesora i może być załączone podczas uśpienia

Co będziemy potrzebowali aby zbudować taki sam :
-Arduino pro mini
-Czujnik temperatury DS18B20 z wodoodporną końcówką
-Wyświetlacz z Nokii 5110
-Przycisk
-Przełącznik ON/OFF
-Rezystory 4,7k i 1k
-Ogniwa LiIon 18650
-Układ do ładowania ogniw wraz z zabezpieczeniem
-Przetwornica podwyższająca napięcie (step-up) 5V
-Płytka uniwersalna i przewody.


Rys.1 Schemat połączeń
Rys.2 Połączenie Ogniwa z ładowarką




Wyjścia OUT+ i OUT- łączymy analogicznie z + i - wejścia przetwornicy podwyższającej napięcie (5V) , wyjścia zaś do Vcc i Gnd Arduino.




Całość została zamontowana w obudowie kupionej w casto za 4zł :)
6 akumulatorów 18650 pochodzą z odzysku z starych baterii laptopowych.

Pobór prądu :

  • podczas pomiaru  16mA (za przetwornicą), 30,05mA (przed przetwornicą) 
  • podczas uśpienia  225µA (za przetwornicą), 93µA (przed przetwornicą)

Aby zaoszczędzić trochę energii wylutowałem z płytki arduino pro mini diodę sygnalizującą zasilanie.

Jeżeli ktoś chciałby uczynić termometr bardziej energooszczędnym to można:
  • uruchomić atmegę na wbudowanym kwarcu (8mhz)
  • pominąć przetwornicę stepup i zasilić całość od 2,7 do 4,2V z ogniw 18650

Najwyższy i najniższy pomiar jest zapisywany do pamięci EEPROM tak żeby po wyłączeniu zasilania, znane były ostatnie skrajne wartości.

Kod programu :

//deklaracja potrzebnych bibliotek 
#include <LCD5110_Graph.h> 
#include <OneWire.h>
#include <DallasTemperature.h>
#include "LowPower.h"
#include <EEPROM.h>

//deklaracja pinu do którego podłączony jest czujnik ds18b20
#define ONE_WIRE_BUS 3 

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

LCD5110 lcd(9,8,7,5,6); // deklaracja wyświetlacza i pinów
extern uint8_t PO[];
extern uint8_t tempicon[];
extern uint8_t SmallFont[];
extern unsigned char TinyFont[];
extern unsigned char BigNumbers[];

double odczyt;
double maks ;
double mini ;
char miniT[6];
char maksT[6];
char temp[6];

void setup() {
sensors.begin();
lcd.InitLCD();
lcd.clrScr();
lcd.drawBitmap(0,0,PO,84,48);
lcd.update();
//EEPROM.write(4, 8); //Pierwsze wpisanie "maksymalnej" wartosci
//EEPROM.write(3, 0); //Pierwsze wpisanie "minimalnej" wartosci
maks = EEPROM.read(4); //odczytanie z eeprom maksymalnej wart
mini = EEPROM.read(3);
if(mini!=0){ 
mini=mini*(-1);
}
delay(3000);
}

void loop() {
//if(millis() % 10000 == 0){
sensors.requestTemperatures();
odczyt=sensors.getTempCByIndex(0); 

if(odczyt<mini){mini=odczyt;EEPROM.write(3, odczyt);}
if(odczyt>maks){maks=odczyt;EEPROM.write(4, odczyt);}

dtostrf(mini, 3, 1, miniT);
dtostrf(maks, 3, 1, maksT);
dtostrf(odczyt, 3, 1, temp);

lcd.clrScr();
lcd.drawBitmap(-2,0,tempicon,39,48);
lcd.setFont(TinyFont);
lcd.print("min :",40,0);
lcd.print(miniT,62,0);
lcd.setFont(BigNumbers);
lcd.print(temp,28,10);
lcd.setFont(TinyFont);
lcd.print("max :",40,40);
lcd.print(maksT,62,40);
lcd.update();

sleepForTwoMinutes();

}
void sleepForTwoMinutes()
{
  for(int i=0;i<15;i++)
    LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}

Aby wszystko działało prawidłowo, należy w folderze załączyć plik z grafikami. Gdyż wyświetlacz pokazuje ikonkę termometru.Wszystkie pliki i biblioteki załączone są na dole posta.

Jeśli miałbym coś zmienić w kolejnej wersji projektu to dodałbym :
  • panel słoneczny do ładowania ogniw 
  • pomiar aktualnego napięcia na ogniwach i wyświetlanie go





Mam nadzieję że projekt się spodobał i został opisany dość zrozumiale. Pytania proszę zadawać w komentarzach !

Pliki i biblioteki

Brak komentarzy:

Prześlij komentarz