Ardoino Uno - bo czasami trzeba zrobić coś innego

Dzisiaj chciałbym przedstawić Wam mój mały projekt, na zakurzonym i wyciągniętym z szafy Arduino Uno.

Postanowiłem w ramach odświeżenia wiedzy oraz zrobienia czegoś innego niż na co dzień, utworzyć termometr z zegarkiem.

Projekt

Do utworzenia tego urządzenia chciałem wykorzystać czujniki, które posiadałem. Wyszło więc, że wykorzystam:

  • Arduino Uno
  • Wyświetlacz LCD 2x16 znaków zielony
  • Zegar czasu rzeczywistego - moduł RTC DS1307
  • Czujnik temperatury i wilgotności DHT11 - moduł niebieski
  • Dwa rezystory 4,7 kΩ oraz 220Ω
  • Potencjometr montażowy leżący 20kΩ
  • Płytka stykowa i masę kabelków

Projekt wygląda następująco

Krótka teoria:

Moduł zegara działa na protokole I²C, odpowiednimi pinami na Arduino są analogowe wy/we A4 i A5.

Program

Tutaj arduino.cc mnie bardzo zaskoczyło, mają wersję kompilatora uruchamianą w przeglądarce. Z ciekawości zerknąłem jakie są jej możliwości i jestem pozytywnie zaskoczony (nawet łatwiej dodać biblioteki, niż na desktopowej wersji).

Oprogramowanie mojego zegarka z czujnikiem temperatury oraz wilgotności wygląda:

#include <Time.h>
#include <DS1307RTC.h>
#include <LiquidCrystal.h>
#include "DHT.h"          // biblioteka DHT
 
#define DHTPIN 7          // numer pinu sygnałowego
#define DHTTYPE DHT11     // typ czujnika (DHT11).
 
DHT dht(DHTPIN, DHTTYPE); // definicja czujnika
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {  
    
}

void loop() {
  tmElements_t tm;
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if (!isnan(t) && !isnan(h))
  {
    lcd.begin(16, 2);
    lcd.print("Wilg: ");
    lcd.print(h);
    lcd.print(" %");
    lcd.setCursor(0, 1);
    lcd.print("Temp: ");
    lcd.print(t);
    lcd.print(" *C");
  }
  delay(1000);
  if (RTC.read(tm)) {
    lcd.begin(16, 2);
    print2digits(tm.Day);
    lcd.print('/');
    print2digits(tm.Month);
    lcd.print('/');
    lcd.print(tmYearToCalendar(tm.Year));
    lcd.setCursor(0, 1);
    print2digits(tm.Hour);
    lcd.print(':');
    print2digits(tm.Minute);
    lcd.print(':');
    print2digits(tm.Second);

  }
  delay(1000);
}

void print2digits(int number) {
  if (number >= 0 && number < 10) {
    lcd.print('0');
  }
  lcd.print(number);
}

I tak oto w ciągu 2h zrobiłem coś, co mi się przyda, a na pewno będzie rozświetlać wieczory (wyświetlacz z maksymalnym podświetleniem jest bardzo intensywny).

Chciałbym namówić Was także, na różne odskocznie od zwykłego programowania. Zapraszam do komentowania.

Comments

Popular posts from this blog

How correctly imitate dependencies?

Spring Framework - skąd jego popularność?

Kryptowaluty - blockchain w praktyce