İçindekiler:
- Gereçler
- 1. Adım: Öykü
- 2. Adım: DONANIM KURULUMU
- 3. Adım: YAZILIM KURULUMU
- Adım 4: Teori ve Metodoloji
- Adım 5: Yerel Saati Alma
- Adım 6: Alarmı Ayarlama
- 7. Adım: Buzzer'ı Ayarlama
- Adım 8: Düğmeleri Ayarlama
- 9. Adım: Sorun Giderme
- Adım 10: Arduino Kodu
Video: Magicbit(Arduino) Kullanan Akıllı Çalar Saat: 10 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Bu eğitim, herhangi bir RTC modülü kullanmadan Magicbit geliştirme kartındaki OLED ekranı kullanarak akıllı bir çalar saatin nasıl yapıldığını gösterir.
Gereçler
- sihirli bit
- USB-A - Mikro USB Kablosu
1. Adım: Öykü
Bu derste Magicbit kullanarak akıllı bir Çalar saat yapmayı öğreneceğiz.
2. Adım: DONANIM KURULUMU
Magicbit'inizi USB kablosunu kullanarak bilgisayara takın.
3. Adım: YAZILIM KURULUMU
Arduino IDE'nizi açın ve kartı Arduino IDE ile kurun. Aşağıdaki bağlantı, bunun nasıl yapılacağına atıfta bulunur. Bu yüzden ilk önce bağlantıya gitmenizi ve Magic bit'i tanımanızı öneririz.
magicbit-arduino.readthedocs.io/en/latest/…
Şimdi doğru kart tipini ve bağlantı noktasını seçin. Bu durumda kart tipi Magicbit'tir. Magicbit kitaplıklarındayken kitaplıklar zaten yüklenmiştir.
Adım 4: Teori ve Metodoloji
İlk videoya bakarsanız, ekranın 2 ekranı olduğunu görebilirsiniz.
- zaman detayını gösteren saat ekranı
- Alarm ayrıntılarını gösteren alarm ekranı
Bu iki ekran arasında geçiş yapmak için Magicbit'te herhangi bir iki buton kullandık. Bu butonlar Magicbit'te ESP32'nin 35(sol tuş) ve 34(sağ tuş) pinlerine bağlanır. Zamanı ve diğer ayrıntıları göstermek için magicbit'te yerleşik OLED ekranı kullandık.
Bu grafik ekranların nasıl çalıştığından bahsedelim.
Saat ekranında analog saat, dijital saat, tarih, ay ve yıl yazıları bulunmaktadır.
Analog saat oluşturmak için Adafriut GFX adlı grafik kitaplığında bulunan bazı grafik işlevlerini kullanıyoruz. Daire fonksiyonunu ve çizgi fonksiyonunu kullanarak analog saat yüzü oluşturuyoruz. Sin ve cos adı verilen basit geometrik fonksiyonlar, saat ibrelerinin konumu için kullanılır. Bu yüzden sadece döndürme ibreleri için zamana karşılık gelen açıyı giriyoruz. bunun için önce zamanı aşağıdaki gibi açıya çeviririz.
- yelkovan açısı=dakika*(360/60)
- saat açısı ibresi=saat*(360/12)
Saat yüzünün merkezi ile saat yüzündeki 12 sayısı arasındaki çizgiye göre ölçülen açı. Sin ve cos fonksiyonlarını kullanarak saat ve dakika sonlarının x ve y koordinatlarını hesaplayabiliriz. Aşağıdaki resimde nasıl olduğu anlatılıyor.
Koordinatlara göre akrep ve yelkovanı çizerek yazdırıyoruz. Adafruit GFX kütüphanesinde text print özelliği de bulunmaktadır. Ekrana diğer detayların (tarih, ay ve saat gösterimi) basılmasına yardımcı olur. Koddaki parametreleri değiştirerek analog saat konumunu ve metin konumlarını değiştirebilirsiniz.
Saat ekranı gibi, OLED ekran üzerinde uygun yerlere numara yazdırmak için Adafruit GFX kitaplığındaki metin yazdırma işlevini kullandık.
Adım 5: Yerel Saati Alma
Saatin en önemli kısmı yerel saati nasıl doğru bir şekilde aldığımızdır. Bu amaçla, Magicbit'te ESP32'de harici RTC saat modülünü veya dahili RC saatini kullanabilirsiniz. Bu projede ikinci yöntemi kullandık. Bu yöntemde, yerel saati internetten almak için NTP (ağ zamanı protocall) istemcisini kullanıyoruz. İnternete erişim için ESP32'de yerleşik WIFI özelliğini kullandık. Bu nedenle ilk aşamada SSID ve şifre sağlayarak internete erişmek için WIFI kullanıyoruz. Ardından gmtOffset ve daylightOffset'i saniye cinsinden değişkenler halinde yapılandırmalıyız. Bu değişkenlerin değerleri dünyada bölgeden bölgeye farklılık göstermektedir. gmtOffset, GMT'den farklı olduğunuz saniye sayısı anlamına gelir.. Çoğu alan için daylightOffset 3600'dür. İnternette bulabilirsiniz. Mevcut yerel saati aldıktan sonra artık WIFI kullanmadık. Çünkü o zaman ESP32'de yerleşik RC saatinden yerel saati hesaplıyoruz. Bu, time.h kitaplığı kullanılarak yapılır. Bunun nasıl çalıştığını daha fazla öğrenmeniz için Arduino'da (Arduino>Örnekler>ESP32>Zaman>simpletime) basit bir örnek var. Ayrıca bu bağlantılar, NTP istemcisi hakkında daha fazla bilgi için kullanabilirsiniz.
- https://dronebotworkshop.com/esp32-intro/
- https://lastminuteengineers.com/esp32-ntp-server-d…
Yerel saati doğru bir şekilde aldıktan sonra her döngüde o saat bilgisine göre zaman gösteren yazılarımızı ve açımızı değiştiriyoruz.
Adım 6: Alarmı Ayarlama
Sol ve sağ butonlara tıklayarak alarm tarih ve saat seçimini değiştirebilirsiniz. Alarm tarih ve saatini değiştirirken alarmı kapattığınızdan emin olun. Tarih ve saati ayarladıktan sonra alarmı açın. Çünkü alarm açıksa ve siz kurarken alarm zamanı sizin saatinize eşitse alarm zili çalacaktır. Ana döngüde her zaman mevcut yerel saat ve alarm bilgilerinin eşit olup olmadığını kontrol eder. Bunlar eşitse, Magicbit'teki sesli uyarı ve yerleşik yeşil LED bir dakika boyunca çalışacaktır.
7. Adım: Buzzer'ı Ayarlama
Kodda analogCwrite() işlevini kullanarak buzzer sesini oluşturmak için PWM darbesi kullanıyoruz. Tüm kütüphane fonksiyonları ESP32 içerisinde olduğundan Magicbit için geçerlidir. Buzzer'ın bip sesini, koddaki frekansını ve PWM değerini değiştirerek değiştirebilirsiniz.
techtutorialsx.com/2017/06/15/esp32-arduin…
Bu sayfada sesli uyarının ESP32 ile nasıl çalıştığı anlatılmaktadır.
Adım 8: Düğmeleri Ayarlama
Tüm durumları değiştirmek için Magicbit'te iki yerleşik buton kullandık. Ana döngü her zaman iki düğmenin durumunu kontrol eder. Dahili olarak çekildikleri için, normal durum yüksek sinyaldir. Yani bu pinlerin dijital okumalarının 1 olduğunu görebilirsiniz. Varsayılan aşamada ekran saat arayüzünü gösterir. Bu sırada iki tuştan herhangi birine basıldığında ekranı alarm ekranına değiştirir. Ayrıca düğmeye en son basıldığı andan itibaren geçen süreyi saniye cinsinden sayarız. Bu sayı önceden tanımlanmış bir süreden daha büyükse, ekran saat ekranını gösterecektir.
Kod, yeni başlayanlar için temel işlevler kullanılarak yazılmıştır. Yani kodun anlaşılması kolaydır ve kodu referans alarak yöntemin nasıl çalıştığını öğrenebilirsiniz.
9. Adım: Sorun Giderme
Bazı zamanlar saat biraz geç başlıyor veya grafikleri düzgün göstermiyor. Aşağıdaki ipuçları durumu çözmeye yardımcı olur.
- Doğru SSID ve şifreyi verdiğinizden emin olun.
- NTP sunucusunu değiştirin (internetten bölgenizle ilgili birçok sunucu bulabilirsiniz).
- İnternet bağlantısını değiştirir. (mobil erişim noktası da mümkün olabilir).
Ayrıca seri monitörü kullanarak her şeyi giderebilirsiniz. OLED ekrana ek olarak seri monitör zaman bilgilerini de gösterir.
Adım 10: Arduino Kodu
//OLED ekran için kitaplıklar
#Dahil etmek
#include #include #define OLED_RESET 4 #include //bağlanmak için wifi kitaplığı #include "time.h"//kullanım için kitaplık RC saati //giriş ve çıkış pin adlarını tanımlayın #define RightButton 34 #define LeftButton 35 #define GreenLED 16 #define Buzzer 25 int preTime = 0; int sayıları = 0; int akımZaman = 0; struct tm zaman bilgisi; const char* ssid = "SSID'İNİZ";//wifi ayrıntıları const char* şifre = "ŞİFRENİZ"; int alarmDateTime[5] = {1, 1, 2020, 0, 0};//alarm değişkenleri int tarihIndex = 0; int zamanIndex = 0; int selectIndex = -1; bool buzzerOn = 0; int rect[6][4] = {{5, 0, 118, 16}, {1, 22, 30, 22}, {37, 22, 30, 22}, {73, 22, 55, 22}, {31, 44, 30, 20}, {67, 44, 30, 20}};//selection rectangle const char* ntpServer = "asia.pool.ntp.org";//server detais const uzun gmtOffset_sec = 19800; const int daylightOffset_sec = 0; Adafruit_SSD1306 display(128, 64);//OLED boyutu tanımlı bayt clockCenterY = (display.height() + 16) / 2;//analog saat yüzü ayrıntıları bayt clockCenterX = (display.height() - 16) / 2; bayt saat Yarıçapı = 23; bool durumu = 0;//ekran açık veya kapalı boolean Alarm = 0;//alarm mevcut durum String alarmState = "Alarm AÇIK";//alarm açık veya kapalı //değişkenler saklanan zaman verisi char günAdı[10]; char gün sayısı[3]; karakter ayı[10]; karakter yılı[5]; char saatleri[3]; karakter dakikaları[3]; char ay numarası[3]; karakter saniye[3]; //düğme değişkenleri bool RightState = 1; bool LeftState = 1; //buzzer değişkenleri int kanal = 0; int Frekans = 2000; int PWM = 200; int çözünürlük = 8; void setup() { //giriş ve çıkışları ayarla pinMode(RightButton, INPUT); pinMode(Sol Düğme, GİRİŞ); pinMode(YeşilLED, ÇIKIŞ); pinMode(Buzzer, OUTPUT); display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//display display.display(); gecikme(3000); display.clearDisplay(); ledcSetup(0, Frekans, çözünürlük);//pwm parametrelerini yapılandır ledcAttachPin(Buzzer, 0); Serial.begin(115200);//seri iletişimi intilize //WiFi'ye bağlan Serial.printf("%s'ye bağlanıyor ", ssid); WiFi.begin(ssid, şifre); while (WiFi.status() != WL_CONNECTED) { gecikme(500); Seri.print("."); } Serial.println(" BAĞLANTILI"); //başlat ve zamanı al configTime(gmtOffset_sec, daylightOffset_sec, ntpServer); getTime(); //Artık gerekmediğinden WiFi bağlantısını kesin WiFi.disconnect(true); WiFi.modu(WIFI_OFF); display.clearDisplay(); } void loop() { getTime();//geçerli zamanı al //sağ ve sol buton durumlarını kaydet RightState = digitalRead(RightButton); LeftState = digitalRead(LeftButton); //butonları kontrol edin eğer (RightState == 0 || LeftState == 0) { ledcWrite(0, 200);//düğmeye basıldığında buzzer bip sesi çıkarır gecikme(100); if (durum == 0) {//alarm ekranı çerçeve durumuna geç = 1;//durumu alarm durumuna değiştir RightState = LeftState = 1;//sadece ekran değişikliğine ihtiyacımız var } sayım = 0;//sayacı sıfırla } ise (durum == 1 && (sayımlar) < 5) {//alarm ekranında ve zaman aşımı yoksa hesaplaAlarm();//alarm bilgilerinin zaman değerlerini hesapla showAlarm();//değerleri göster } else {//saatte ise ekran durumu = 0; display.clearDisplay(); clockFace();//analog saat yüzü printLocalTime();//saat kadranına zamanı yazdır ve diğer detayları yazdır } onAlarm();//alarm saatini yerel saatle karşılaştır ve alarm gecikmesini aç(100);// için gecikme alarm açık ve kapalı } void clockFace() { //caalog clock face display.drawCircle(clockCenterX, clockCenterY, clockRadius, WHITE);//izleme çemberini yazdır for (int digit = 0; digit = 5) { //sadece 5 tane var selctions.so -1'e sıfırlayın(-1= alarm açık veya kapalıdır) selectIndex = -1; } dateAndTimeSelection(selectIndex);//seçimi değiştir } void dateAndTimeSelection(int index) { if (index == -1) { //alarm on or off if (RightState == 0) { //eğer alarm açık ve kapalı arasında geçiş yap (alarmState == "Alarm AÇIK") { alarmState = "Alarm KAPALI"; } else { alarmState = "Alarm AÇIK"; } } } else { if (RightState == 0) { //diğer seçeneklerde dizideki ilgili tarihi veya saati artır alarmDateTime[index] = alarmDateTime[index] + 1; //indeks seçimdir } } int karşılaştırma[4] = {12, 2030, 23, 59}; //tarihlerin ve yılların üst sınırları int karşılaştırma ayı[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //ayların üst limiti int resetValue[4] = {1, 2020, 0, 0}; // için başlangıç değerleri (int i = 1; karşılaştırıyorum[i - 1]) { alarmDateTime = resetValue[i - 1]; } } if (alarmDateTime[0] > Comparemonth[alarmDateTime[1] - 1]) { //aylar limitlerinden büyükse değerleri sıfırla alarmDateTime[0] = 1; } } void showAlarm() { //alarm ayrıntılarını yazdır String alarmDateTime0 = String(alarmDateTime[0]); // sokmaları gösterecek şekilde dönüştür String alarmDateTime1 = String(alarmDateTime[1]); String alarmDateTime2 = String(alarmDateTime[2]); String alarmDateTime3 = String(alarmDateTime[3]); String alarmDateTime4 = String(alarmDateTime[4]); //değerlerin bir 1 rakamı varsa, onlara "0" ekleyin. if (alarmDateTime[0]
Önerilen:
Akıllı Çalar Saat - Intel Edison - Iot RoadShow - São Paulo: 4 Adım
Akıllı Çalar Saat - Intel Edison - Iot RoadShow - São Paulo: Büyük bir şehirde yaşayan veya çalışan herkesin en büyük erdemlerinden biri zaman yönetimidir. Günümüzde yolculuklar sürekli ve trafik ana etkenlerden biri olduğu için.Düşündüm de, Google M ile entegrasyonu kullanan küçük bir uygulama yaptım
WakeupNow – Akıllı Çalar Saat: 8 Adım
WakeupNow – Akıllı Çalar Saat: Herkesin bildiği gibi öğrencilerin hayatı çok zordur, derslerle, ödevlerle uzun bir gün geçirirler ve genel olarak çılgın bir hayatları vardır. Boşa vakitleri var ve onlara güne birkaç saat eklemelerini önerirseniz memnun kalacaklardır. Bilinmeyen
Geri Dönüştürülmüş Çalar Saat Akıllı Işık: 8 Adım (Resimlerle)
Upcycled Alarm Clock Smart Light: Bu projede tamamen bozuk bir kurmalı alarm saatini yükseltiyorum. Saat yüzü, saatin kenarındaki bir LED şerit ile aydınlatılan 12 LED ile değiştirilir. 12 LED saati söyler ve LED şerit bir alarm görevi görecek şekilde programlanmıştır, dönerek
Akıllı Çalar Saat: Raspberry Pi İle Yapılmış Akıllı Çalar Saat: 10 Adımda (Resimlerle)
Akıllı Çalar Saat: Raspberry Pi ile Yapılan Akıllı Çalar Saat: Hiç akıllı saat istediniz mi? Eğer öyleyse tam size göre bir çözüm! Akıllı Çalar Saat yaptım, siteye göre alarm saatini değiştirebileceğiniz bir saat bu. Alarm çaldığında bir ses (buzzer) duyulacak ve 2 ışık yanacaktır
"Bilge Saat 2" Montajı (Birçok Ekstra Özelliği Olan Arduino Tabanlı Çalar Saat): 6 Adım
"Wise Clock 2" Montajı (Birçok Ekstra Özelliğe Sahip Arduino Tabanlı Alarm Clock): Bu eğitim, bir açık kaynak (donanım ve yazılım) projesi olan Wise Clock 2 için kitin nasıl monte edileceğini gösterir. Eksiksiz bir Wise Clock 2 kiti buradan satın alınabilir. Özetle, Wise Clock 2 bunu yapabilir (mevcut açık kaynaklı yazılımla