Logger temperatury Arduino

Logger temperatury Arduino

Chciałem przedstawić prosty projekt który tak naprawdę potrzebowałem zrobić szybko i łatwo.  Co nam będzie potrzebne do zrobienia loggera temperatury w moim przypadku logger będzie zapamiętywał temperaturę, pod podłączeniu do komputera będzie wyświetlał w serial monitorze wyniki i następnie nadpisywał od początku wartości w pamięci wewnętrznej od początku. 

Sprzęt potrzebny

  1. Arduino NANO (klon)
  2. Diody 2 szt
  3. Oporniki 3 szt.
  4. Koszyk na dwa ogniwa 18650
  5. Ogniwa 18650 dwie sztuki
  6. Przycisk
  7. Płytka uniwersalna pcb mała(w moim przypadku wykorzystałem płytkę z innego projektu)
  8. Włącznik ON/OFF 
  9. Kabelki
  10. DS18b20 (sensor temperatury, korzystałem z DHT22 ale niestety został uszkodzony i został DS18b20)
  11. Gniazda szpilkowe

Na płytkę PCB najpierw lutuje gniazdka na “szpilki” które pasują do Arduino NANO i DS18bb20 dodatkowo 2 szpilki na zasilanie (VCC i GND), diody (zielona i niebieska), oporniki, przycisk w lutuje bezpośrednio na płytkę, włącznik ON/OFF przykleję do koszyka na ogniwa. 

Koszyk zrobiłem z 2 szt. pojedynczych koszyków na ogniwa skleiłem gorącym klejem i spełnia swoją rolę. Ogniwa połączone szeregowo bez stabilizatora.

Teraz połączenie do samego Arduino :

Diody1 = pin10

Dioda2 = pin11

przycisk = pin12

sensor Ds18b20 = pin2 

Oczywiście do każdego podłączamy VCC i GND. 

Poniżej mamy moduł uzupełniony o diody, oporniki, DS18b20, Arduino NANO. 

 

Program LoggerTemp

Pogram jest prosty, oprócz jednej małej niedogodności a mianowicie w pamięci wewnętrznej(eeprom) nie jest łatwo zapisać temperatury ujemne w moim projekcie wykorzystałem dodawanie do temperatury liczby 100 przy zapisywaniu wartości do eeprom a przy odczycie odejmowaniu liczby 100 w ten sposób udało mi się zapisywać minusowe temp bez problemu. 

To po kolei co robi program : 

  1. Czeka” na przyciśnięcie przycisku. 
  2. Po naciśnięciu przycisku sprawdza czy to pierwszy raz został naciśnięty jeżeli tak to po wykryciu podłączenia SerialMonitora odczytuje wartości w pamięci wewnętrznej.
  3. Po naciśnięciu 2 raz, moduł zaczyna mierzyć i zapisywać temperaturę raz na 30 min w eepromie.

Program nie jest skomplikowany, jest wiele rzeczy które można by było dodać ale w tym projekcie nie było czasu na zabawy moduł potrzebowałem zrobić w 2h i się udało.

//Biblioteki

#include “LowPower.h”
#include <OneWire.h>
#include <DS18B20.h>
#include <EEPROM.h>
//Definicja numerów pinów w Arduino NANO

#define ONEWIRE_PIN 2
#define buttonPin 12
const int LED1 = 10;
const int LED2 = 11;

//Definicja zmiennych
int buttonState = 0;
int LED1Status = LOW;
int LED2Status = LOW;
int clicks = 0; //zmienna zbierająca informacje o ilości wciśnięć przycisku
int i = 0;
float vcc;
byte address[8] = {0x28, 0xFF, 0x78, 0x43, 0x91, 0x16, 0x4, 0xD7};
int eeAdress = 0;

//Aktywacja biblioteki OneWire i dla sensora temperatury
OneWire onewire(ONEWIRE_PIN);
DS18B20 sensors(&onewire);

void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode (buttonPin, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
sensors.begin();
sensors.request(address);
}

void loop() {

buttonState = digitalRead(buttonPin);
if (buttonState == HIGH && clicks == 0 ){
clicks = 1;
buttonState = LOW;
digitalWrite(LED1, HIGH);
delay(1000);
digitalWrite(LED1, LOW);
odczytanie();
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);

}
if (clicks == 1 && buttonState == HIGH){
buttonState = LOW;
while(buttonState == LOW) {
delay(1000);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
if (sensors.available()) {
digitalWrite(LED2, HIGH);
delay(1000);
digitalWrite(LED2, LOW);
Serial.begin(9600);
sensors.request(address);
int temperature = sensors.readTemperature(address);
int temp100 = 100;
temperature = temperature + temp100;
Serial.println(temperature);
if (temperature < 0)
{
digitalWrite(LED1, HIGH);
delay(1000);
digitalWrite(LED1, LOW);
Serial.println(temperature);
}
EEPROM.write(eeAdress, temperature);
for(int i =0; i<=225;i++) {
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
i++; }
eeAdress++;
}
}
clicks = 0;

}

}

void odczytanie () {
int address = 0;
int value;
Serial.begin(9600);
while (!Serial) {
}
for (int i = 0 ; i < EEPROM.length() ; i++) {
value = EEPROM.read(i);
digitalWrite(LED1, HIGH);
Serial.print(i);
Serial.print(“\t”);
if (value >= 50) {
value = value – 100;
}
Serial.print(value, DEC);
Serial.println();
digitalWrite(LED1, LOW);
//Poniżej if STOP gdy jest temperatura pusta nie ma sensu w warunkach zimowych uruchamiać.
// if (value == 0) {
// i = 1024;
// }
}
}

I tyle teraz po co komu LoggerTemp, w starym domu chciałem zobaczyć jak bardzo spadnie temp. w piwnicy gdy było zimno. Urządzenie spełnia swoją rolę. 

Ocena: 4/5 (głosów: 18)

Podobne posty

11 komentarzy do “Logger temperatury Arduino

  • Jak zostało wykonane zasilanie dwoma ogniwami 18650 czy połączono w szereg i zastosowano stabilizator typu 7805 czy też równolegle i przez przetwornicę bo z spisu części to nie wynika?

    Odpowiedz
  • Pamięć EEPROM ma ograniczoną żywotność, chyba 100 000 cykli odczyt/zapis. Może wydawać się to dużo, ale wykonując często pomiary lepiej użyć np karty pamięci żeby wydłużyć żywotność EEPROMU :) Ale zrealizowałeś co chciałeś więc dobrze :) Doczepiłbym się do zasilania, 18650 powinny być zabezpieczone przed mocnym rozładowaniem jeśli nie mają być jednorazowe ;) 4/5

    Odpowiedz
    • Jak zrealizować szybko i tanio takie zabezpieczenie?
      Na Alliexpress są chyba małe i niedrogie moduły do ładowania akumulatorków przez złącze USB z zabezpieczeniem przeładowania (i mam nadzieję rozładowania też). Może coś takiego?

      Odpowiedz
      • Można też kupić samo zabezpieczenie, jeżeli nie chcemy zostawiać niepotrzebnie ładowarki w układzie.
        https://www.aliexpress.com/wholesale?SearchText=protection+board+“1S”
        Bądź odpowiednio 2S/3S w razie potrzeby.
        Takie zabezpieczenia odcinają baterię jeżeli spróbujemy ją przeładować, za mocno rozładować, czy zewrzeć, ale niestety działają dość późno. Np. przy rozładowaniu zadziałają koło 2.5V. Dobrze jest okresowo mierzyć napięcie baterii z mikrokontrolera i jak spadnie poniżej np. 3V uśpić na stałe. Oczywiście, to zakłada że nie ma jakichś układów, które zużywają energię poza mikrokontrolerem (np. LED zasilania, stabilizator napięcia).

        Odpowiedz
  • Nie ma żadnego sensu montować osobny układ do kontroli ogniwa. Wystarczy do tego celu wykorzystać mikrokontroler. Będzie najtaniej i bezproblemowo.

    Odpowiedz
  • Jeśli dobrze zrozumiałem to ten logger wyświetla tylko jedną , ostatnią zmierzoną temperaturę czy jej zmiany w jakimś dłuższym okresie?

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?