Spisu treści:
Wideo: Precyzyjny zegar: 3 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:28
Wszyscy potrzebujemy zegarów, więc dlaczego nie stworzyć własnego w tym instruktażowym, pokażę ci, jak zrobić precyzyjny zegar po ustawieniu, automatycznie śledzi aktualny czas w tle wszystkiego. Chociaż potrzebuje tylko bardzo mało materiałów eksploatacyjnych i zerowego lutowania.
Kieszonkowe dzieci
Najpierw będziesz potrzebować Arduino, ale każde Arduino będzie działać
Następnie będziesz potrzebować asortymentu ogólnych przewodów połączeniowych.
2 12mm przełączniki przyciskowe Sparkfun
Tradycyjna deska do krojenia chleba
i 16-pinowy wyświetlacz LCD 1602
Krok 1: Okablowanie
Aby ten zegar działał, musisz go podłączyć w bardzo specyficzny sposób, w przeciwnym razie na ekranie pojawi się kilka losowych liczb, a nie czas.
Krok 2: Kodeks
Ponieważ nie używamy RTC, kod będzie trochę długi, ale na szczęście wykonałem dla ciebie całą ciężką pracę i dostarczyłem go tutaj.
Po prostu skopiuj i wklej to do Arduino IDE lub edytora internetowego.
#include "LiquidCrystal.h"
// Definiuje okablowanie LCD do pinów CYFROWYCH const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// ustawienie kontrastu cyfrowego LCD int cs=9;// pin 9 dla kontrastu PWM const int contrast = 100;// domyślny kontrast
// początkowy wyświetlany czas to 12:59:45 PM int h=12; intm=59; int s=45; int flaga=1; //PO POŁUDNIU
// Przyciski ustawiania czasu int button1; wewn przycisk2;
// Definicja pinów dla przycisków ustawiania czasu int hs=0;// pin 0 dla ustawiania godzin int ms=1;// pin 1 dla ustawiania minut
// Limit czasu podświetlenia const int Time_light=150; int bl_TO=Czas_podświetlenia;// Limit czasu podświetlenia int bl=10; // Pin podświetlenia const int backlight=120; // nie więcej niż 7mA !!!
// Aby uzyskać dokładny odczyt czasu, użyj Arduino Real Time Clock, a nie tylko delay() static uint32_t last_time, now = 0; // RTC
void setup() { lcd.begin(16, 2); pinMode(hs, INPUT_PULLUP);// unikaj zewnętrznych rezystorów Pullup dla przycisku 1 pinMode(ms, INPUT_PULLUP);// i przycisku 2 analogWrite(cs, kontrast);// Ustaw kontrast VO analogWrite(bl, podświetlenie);// Włącz wł. podświetlenie teraz=millis(); // odczytaj wartość początkową RTC }
void loop() { lcd.begin(16, 2);// co sekundę // Aktualizacja wyświetlacza LCD // Wydruk CZASU w godzinach, minutach, sekundach + AM/PM lcd.setCursor(0, 0); lcd.print("Czas"); if(h<10)lcd.print("0");// zawsze 2 cyfry lcd.print(h); lcd.print(":"); if(m<10)lcd.print("0"); lcd.print(m); lcd.print(":"); if(s<10)lcd.print("0"); lcd.print(y);
if(flaga==0) lcd.print("AM"); if(flaga==1) lcd.print("PM"); lcd.setCursor(0, 1);// dla wiersza 2 lcd.print("Zegar precyzyjny");
// poprawiono zastąpienie opóźnienia(1000) // Dużo lepsza dokładność, koniec z zależnością od czasu wykonania pętli
for (int i=0;i<5;i++)// wykonaj 5-krotną pętlę 200ms, dla szybszej odpowiedzi przycisku {
while ((teraz-ostatni_czas)<200) //delay200ms { now=millis(); } // wewnętrzna pętla 200ms last_time=now; // przygotuj się na następną pętlę
// przyciski odczytu ustawień button1=digitalRead(hs);// przyciski odczytu button2=digitalRead(ms);
//Czas podświetlenia bl_TO--; if(bl_TO==0) { analogWrite(bl, 0);// Podświetlenie wyłączone bl_TO++; } // Naciśnij dowolny, aby aktywować podświetlenie if(((button1==0)|(button2==0)) & (bl_TO==1)) { bl_TO=Time_light; analogZapis(bl, podświetlenie); // poczekaj, aż przycisk zostanie zwolniony ((przycisk1==0)|(przycisk2==0)) { button1=digitalRead(hs);// Read Buttons button2=digitalRead(ms); } } else // Przetwarzaj przycisk 1 lub przycisk 2 po naciśnięciu przy włączonym podświetleniu { if(button1==0){ h=h+1; bl_TO=Światło_czasu; analogZapis(bl, podświetlenie); }
if(przycisk2==0){ s=0; m=m+1; bl_TO=Światło_czasu; analogZapis(bl, podświetlenie); }
/* ---- zarządzaj sekundami, minutami, godzinami przepełnienie am/pm ----*/ if(s==60){ s=0; m=m+1; } jeśli(m==60) { m=0; h=h+1; } jeśli(h==13) {h=1; flaga=flaga+1; jeśli(flaga==2)flaga=0; }
if((button1==0)|(button2==0))// Aktualizuj wyświetlacz po naciśnięciu przycisku ustawiania czasu { // Aktualizuj wyświetlacz LCD // Drukuj CZAS w godz., min., sek. + AM/PM lcd.setCursor(0, 0); lcd.print("Czas"); if(h<10)lcd.print("0");// zawsze 2 cyfry lcd.print(h); lcd.print(":"); if(m<10)lcd.print("0"); lcd.print(m); lcd.print(":"); if(s<10)lcd.print("0"); lcd.print(y);
if(flaga==0) lcd.print("AM"); if(flaga==1) lcd.print("PM"); lcd.setCursor(0, 1);// dla wiersza 2 lcd.print("Zegar precyzyjny"); }
} // koniec jeśli inaczej }// koniec dla
// zewnętrzna pętla 1000ms
s=s+1; //przyrost sek. liczenie // ---- zarządzaj sekundami, minutami, godzinami przepełnienie am/pm ---- if(s==60){ s=0; m=m+1; } jeśli(m==60) { m=0; h=h+1; } jeśli(h==13) {h=1; flaga=flaga+1; jeśli(flaga==2)flaga=0; }
// Koniec pętli }
Krok 3: Schemat (to naprawdę nie jest krok)
Jeśli ktoś, kto to czyta, jest nerdem technicznym, tutaj jest również schematem, na który możesz patrzeć, jak szaleje.
Ciesz się i baw, a przede wszystkim bądź świeży.
Zalecana:
Waveshare E-ink Display Precyzyjny woltomierz (0-90 V DC) z Arduino Nano: 3 kroki
Waveshare E-ink Display Precyzyjny woltomierz (0-90 V DC) Z Arduino Nano: W tej instrukcji używam 2,9-calowego wyświetlacza Waveshare E-Paper z Arduino Nano, dzielnikiem napięcia i ADS1115 do wyświetlania precyzyjnych napięć do 90 woltów DC na wyświetlaczu E-Paper. Ta instrukcja łączy te dwa poprzednie projekty: - Ardui
Arduino Precyzyjny i dokładny woltomierz (0-90 V DC): 3 kroki
Dokładny i dokładny woltomierz Arduino (0-90 V DC): W tym instruktażowym zbudowałem woltomierz do pomiaru wysokich napięć DC (0-90 V) ze względną precyzją i dokładnością za pomocą Arduino Nano. Wykonane przeze mnie pomiary testowe były wystarczająco dokładne, głównie w granicach 0,3 V rzeczywistego napięcia mierzonego
ESP8266 Zegar sieciowy bez zegara RTC - Nodemcu NTP Zegar bez RTC - PROJEKT ZEGAR INTERNETOWY: 4 kroki
ESP8266 Zegar sieciowy bez zegara RTC | Nodemcu NTP Zegar bez RTC | PROJEKT ZEGARA INTERNETOWEGO: W projekcie będzie wykonywany projekt zegara bez RTC, będzie pobierał czas z internetu za pomocą wifi i wyświetli go na wyświetlaczu st7735
Raspberry Pi - MPL3115A2 Precyzyjny czujnik wysokościomierza Samouczek Java: 4 kroki
Raspberry Pi - MPL3115A2 Precyzyjny czujnik wysokościomierza Samouczek Java: MPL3115A2 wykorzystuje czujnik ciśnienia MEMS z interfejsem I2C, aby zapewnić dokładne dane dotyczące ciśnienia / wysokości i temperatury. Wyjścia czujnika są digitalizowane przez 24-bitowy przetwornik ADC o wysokiej rozdzielczości. Przetwarzanie wewnętrzne usuwa zadania kompensacyjne z
Precyzyjny ściągacz izolacji - nowe łącza wideo: 3 kroki
Precyzyjny ściągacz izolacji - nowe linki wideo: Ręczny obrotowy ściągacz izolacji z długopisu Bic, śrubokręta i żyletki. Niedawno kupiłem szpulę drutu teflonowego 30AWG. Pomyślałem, że świetnie nada się do prototypowania, ponieważ gorąca lutownica nie stopi izolacji. Cóż, to trochę nie