Skocz do zawartości

Julek

Użytkownicy
  • Zawartość

    12
  • Rejestracja

  • Ostatnio

Reputacja

4 Neutralna

O Julek

  • Ranga
    2/10
  • Urodziny 20.01.2006

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Ostrołęka
  • Języki programowania
    C/C++ Arduino

Ostatnio na profilu byli

148 wyświetleń profilu
  1. Julek

    Zaawansowany zegar

    Dziękuje @Belferek masz rację jest dokładniejszy ale na wiele różnych sposobów próbowałem zrobić możliwość ustawiania czasu ale nie mogłem. Pracowałem długo nad tym modułem i nic nie wykombinowałem. Pozdrawiam!
  2. Julek

    Zaawansowany zegar

    @lukaszd82 Dzięki
  3. To mam pytanie. Zrobiłem projekt opublikowałem i zgłosiłem godzinę temu i nie jestem pewien czy się nada. Jest to budzik mierzący temperaturę i ma możliwość sterowania przekaźnikiem przez podczerwień. Ma możliwość zmieniania jasności podświetlenia. Z budowany na arduino nano. Niestety nie mogę wstawić zdjęć, ponieważ wyskakuje mi błąd.
  4. Julek

    Zaawansowany zegar

    Witam! Na wstępie chcę zaznaczyć, że mam 13 lat. Chciał bym zaprezentować mój projekt. Jest nim zegar, który oprócz czasu pokazuje temperaturę z dwóch czujników oraz sterownie podczerwienią przekaźnik. Potrzebne części: Płytka Arduino (ja użyłem nano ale inne też się sprawdzą) Zegar czasu rzeczywistego DS3231 RTC Dwa czujnik temperatury DS18B20 Przekaźnik 1-kanałowy Czujnik podczerwieni z serii TSOP (używałem TSOP2238) Przycisk (np. tact swich) Wyświetlacz 16x2 z konwerterem I2C Potencjometr 10k Rezystor 4,7k Niestety nie mam możliwości dodać schematu. Podłączenie elementów do Arduino: Wszystkie GND i VCC należy podłączyć do GND i +5V SCL (Zegar + wyświetlacz) - A5 SDA (Zegar + wyświetlacz)-A4 Pin sygnałowy przekaźnika - 10 Przycisk - GND i 6 Dwa sygnały z czujników temperatury - A0 Sygnał czujnika podczerwieni - 11 Potencjometr należy przyczepić na konwerterze I2C ekranu zamiast zworki( dwa piny połączone zworką) Uwaga! Należy wstawić rezystor 4,7k pomiędzy pin sygnałowy a VCC czujników temperatury. Jego brak może uniemożliwić pomiar temperatury. Wystarczy umieścić jeden na oba czujniki. Kod zegara: #include <RTClib.h>//Dodawanie bibliotek #include <OneWire.h> #include <DallasTemperature.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <IRremote.h> #define irPin 11 IRrecv irrecv(irPin); decode_results results; #define prz 10 int przStatus = LOW; OneWire oneWire(A0); //Podłączenie do A0 DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki DateTime now;//Now to jest data i czas char daysOfTheWeek[7][12] = {"Ndz", "Pon", "Wt", "Sr", "Czw", "Pt", "Sob"}; RTC_DS3231 rtc; LiquidCrystal_I2C lcd(0x3F, 16, 2); //Ustawianie wyswietlacza lcd void showDate(void);//Ustawianie dayt czasu i dnia void showTime(void); void showDay(void); int przycisk = 6;//Przycisk do wyswietlania temperatury void setup () { Serial.begin(9600);// Ustawianie transmisji UART pinMode(przycisk, INPUT_PULLUP);//Ustawianie przycisku jako wejscie lcd.begin();//Wloczenie lcd lcd.backlight();//Wloczenie podswietlenia lcd sensors.begin();//Wloczenie czujnikow irrecv.enableIRIn(); pinMode(prz, OUTPUT);//Ustawienie if (! rtc.begin()) //Jesli nie moze znalesc RTC wyswietl { Serial.println("Nie moge znalesc RTC"); while (1); } if (rtc.lostPower()) //Jesli RTC nie ma zasilania to wyswietl { Serial.println("RTc nie ma zasilania ustaw godzine!"); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } void loop () { if (irrecv.decode(&results)) { //Jesli czujnik odbirze sygnał switch (results.value) { case 0xFF21DE: przStatus = ~przStatus; digitalWrite(prz, przStatus); delay(250); break; } irrecv.resume(); } if(digitalRead(przycisk)== LOW)//Jesli przycisk jest wcisniety { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Temp(W)"); lcd.setCursor(9, 0); lcd.print("Temp(Z)"); sensors.requestTemperatures(); lcd.setCursor(1, 1); lcd.print(sensors.getTempCByIndex(0)); lcd.setCursor(10, 1); lcd.print(sensors.getTempCByIndex(1)); delay(4000); lcd.clear(); } now = rtc.now();//Ustawianie pętli showDate(); showDay(); showTime(); } void showDate()//Kod petli showDate { lcd.setCursor(0,0); lcd.print(now.day()); lcd.print('-'); lcd.print(now.month()); lcd.print('-'); lcd.print(now.year()); } void showDay()//Kod petli showDay { lcd.setCursor(11,0); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); } void showTime()//Kod petli showTime { lcd.setCursor(4,1); lcd.print(now.hour()); lcd.print(':'); lcd.print(now.minute()); lcd.print(':'); lcd.print(now.second()); lcd.print(" "); } Po kliknięciu przycisku na wyświetlaczu pojawia się temperatura wewnątrz i zewnątrz. Czujnik najlepiej dobrać do własnych potrzeb. Ja wybrałem DS18B20 ponieważ jest on dokładny oraz występuje w wygodnej wodoodpornej osłonce oraz bez niej . Jeśli wszystko działa to przy pomocy potencjometru powinna zmieniać się jasność wyświetlacza. Ja użyłem zegara czasu rzeczywistego DS3231 RTC ale jeśli macie możliwość zakupu DS1307 RTC albo RTC PCF8563 to kupcie jeden z tych dwóch. Ja z mojego nie jestem zadowolony ,ponieważ przysporzył mi wiele problemów. W 65 linijce kodu jest zawarty numer przycisku na pilocie "0xFF21DE". Każdy przycisk na pilocie ma swój indywidualny numer. Program sprawdzający takowy jest taki: #include <IRremote.h> #define irPin 11 IRrecv irrecv(irPin); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { Serial.print("0x"); Serial.println(results.value, HEX); delay(250); irrecv.resume(); } } Po kliknięciu przycisku na pilocie przekaźnik zmieni swój stan. Jest wiele dobrych pilotów. Lecz jest jedna ważna sprawa. Mianowicie używamy tu czujnika działającego na częstotliwości 38kHz więc pilot tego typu działa świetnie ,ponieważ działa na tej samej częstotliwości. Lecz jeśli z jakiegokolwiek powodu nie macie pilota albo czujnika działającego na 38kHz to nie ma się czym przejmować. Sam używam innego pilota i wszystko działa. Wyświetlacz można dobrać dowolnej wielkości. Trzeba tylko zmienić ustawienia wyświetlacza. Pozdrawiam!
×