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

Why TDD is bad practice?

How correctly imitate dependencies?

Software development using Angular 5 with Spring Boot