Mündəricat:

Ultimate Binary Watch: 12 addım (şəkillərlə)
Ultimate Binary Watch: 12 addım (şəkillərlə)

Video: Ultimate Binary Watch: 12 addım (şəkillərlə)

Video: Ultimate Binary Watch: 12 addım (şəkillərlə)
Video: Binary Addition In Hindi | How To Do Binary Addition 2024, Noyabr
Anonim
Ultimate Binary Watch
Ultimate Binary Watch
Ultimate Binary Watch
Ultimate Binary Watch
Ultimate Binary Watch
Ultimate Binary Watch

Bu yaxınlarda ikili saatlar anlayışı ilə tanış oldum və özüm üçün bir saat qura biləcəyimi öyrənmək üçün araşdırma aparmağa başladım. Ancaq eyni zamanda həm funksional, həm də şık bir dizayn tapa bilmədim. Beləliklə, tamamilə sıfırdan öz dizaynımı yaratmağa qərar verdim!

Təchizat

Bu layihə üçün bütün fayllar:

Arduino kodu üçün kitabxanaları GitHub -dan buradan yükləyə bilərsiniz:

M41T62 RTC Kitabxanası

FastLED Kitabxanası

LowPower Kitabxanası

Addım 1: Fikir

Bu yaxınlarda aşağıdakı videoya rast gəldim:

DIY İkili Qol Saatı

Yuxarıdakı videoda əsas ev istehsalı ikili saat göstərilir. Belə bir şeyin olduğunu heç bir təsəvvürüm yox idi, ancaq ikili saatlar mövzusunda bir az araşdırma apardıqdan sonra orada bir çox fərqli dizayn olduğunu anladım! Özüm üçün tikmək istədim, amma bəyəndiyim bir dizayn tapa bilmədim. Tapdığım ikili saatların bir çox xüsusiyyəti yox idi və xüsusilə də yaxşı görünmürdü. Beləliklə, özümü tamamilə sıfırdan dizayn etmək qərarına gəldim!

İlk addım dizaynımın meyarlarını qurmaq idi. Mənim gəldiyim budur:

  • İkili RGB interfeysi
  • Zaman göstəricisi (çox dəqiq vaxt işləmə ilə)
  • Tarixin göstərilməsi
  • Saniyəölçən funksiyası
  • Siqnal funksiyası
  • Batareya ömrü ən azı 2 həftədir
  • USB şarj
  • İstifadəçi tərəfindən asanlıqla tənzimlənə bilən proqram
  • Təmiz və sadə dizayn

Bu meyarlar bütün layihənin təməli oldu. Növbəti addım, saatın necə işləməsini istədiyimi anlamaq idi!

Addım 2: Bəzi İkili İzləmə Teorisi

Bəzi İkili Saat Teorisi
Bəzi İkili Saat Teorisi

Plan sadə idi. İkili saat, adi bir saat kimi işləyəcək, yalnız interfeys ikili olacaq, xüsusən BCD (İkili Kodlu Ondalık). BCD, hər bir onlu rəqəmin müəyyən sayda bit ilə təmsil olunduğu ikili kodlaşdırma növüdür. 0-9 arasında bir rəqəmi təmsil edə bilmək üçün 4 bitə ehtiyacım var. Və bir standart üçün

ss: mm

vaxt formatı, bu rəqəmlərdən 4 -ə ehtiyacım var. Bu o deməkdir ki, 16 LED ilə təmsil olunacaq cəmi 16 bitə ehtiyacım var.

BCD -də vaxt oxumaq, alışdıqdan sonra olduqca asandır. Saatın altındakı sıra ən az əhəmiyyət kəsb edən biti (1), yuxarıdakı sıra isə ən əhəmiyyətli biti (8) təmsil edir. Hər bir sütun

ss: mm

vaxt formatı. Bir LED yanarsa, bu dəyəri sayırsınız. Bir LED sönərsə, buna məhəl qoymazsınız.

Birinci rəqəmi oxumaq üçün birinci (ən solda) sütundakı bütün aktiv LED -lərin dəyərlərini cəmləyin. Soldan sağa digər rəqəmlər üçün də eyni şeyi edin. İndi BCD -də vaxtı oxudunuz!

Bu prinsip saatın qalan funksiyaları üçün eyni olacaq. RGB LED -lərin istifadəsi fərqli rənglərdən istifadə edərək fərqli funksiyaları və rejimləri fərqləndirməyə kömək edəcək. Rənglər istifadəçi tərəfindən seçilir və istədikləri rəng palitrasına asanlıqla uyğunlaşdırıla bilər. Bu, istifadəçiyə çaşqınlıq yaratmadan funksiyalarda asanlıqla gəzməyə imkan verir.

Növbəti addım bir blok diaqram yaratmaq idi!

Addım 3: işə başlayın

İşə girmək
İşə girmək

Hər hansı bir elektronik layihə kimi, blok diaqramı da dizaynın ilkin mərhələsində vacib bir hissədir. Kriteriyalardan istifadə edərək yuxarıdakı blok diaqramı bir araya gətirməyi bacardım. Diaqramdakı hər bir blok dövrədəki bir funksiyanı təmsil edir və oxlar funksiyaların əlaqəsini göstərir. Blok diaqramı bütövlükdə dövrənin necə işləyəcəyinə yaxşı bir baxış verir.

Növbəti addım, blok sxemindəki hər bir blok üçün fərdi komponentlər haqqında qərar verməyə başlamaq idi!

Addım 4: Komponentlərin seçilməsi

Bu dövrədə kifayət qədər çox komponent olduğu ortaya çıxdı. Aşağıda, ən vaciblərindən bəzilərini niyə seçdiyimi izah edərək seçdim.

LEDlər

İkili interfeys üçün seçim olduqca düz idi. Ekran üçün LED -lərdən istifadə etmək istədiyimi bilirdim və mümkün qədər çox məlumat göstərmək üçün onlardan 16 -na (4 × 4 ölçüdə) ehtiyacım olduğunu anladım. Mükəmməl LED üçün araşdırma apardığım müddətdə APA102 çıxmağa davam etdi. Geniş rəng aralığına malik çox kiçik (2mm x 2mm) ünvanlı LED -dir və kifayət qədər ucuzdur. Daha əvvəl onlarla heç vaxt işləməsəm də, bu layihə üçün mükəmməl uyğun göründülər, buna görə də onlardan istifadə etmək qərarına gəldim.

Mikro nəzarətçi

Mikro nəzarətçi seçimi də olduqca sadə idi. Atmega328P-AU-nu müstəqil tətbiqlərdə istifadə etməklə çox təcrübəm var və xüsusiyyətləri ilə çox yaxından tanış idim. Bu, Arduino Nano lövhələrində istifadə olunan eyni mikro nəzarətçidir. Yəqin ki, istifadə edə biləcəyim daha ucuz bir mikro nəzarətçi olduğunu bilirəm, amma Atmega328 -in bütün Arduino kitabxanaları üçün tam dəstəyə sahib olacağını bilmək bu layihə üçün onu seçməyimizdə böyük bir amil idi.

RTC (Real vaxt saatı)

RTC üçün əsas tələb dəqiqlik idi. Bilirdim ki, saatın heç bir internet bağlantısı olmayacaq və buna görə də internet bağlantısı ilə özünü yenidən kalibr edə bilməyəcək, istifadəçinin onu əl ilə yenidən kalibr etməsi lazım olacaq. Buna görə də, vaxtın tutulmasını mümkün qədər dəqiq etmək istədim. M41T62 RTC, tapa biləcəyim ən yüksək dəqiqliklərdən birinə malikdir (± 2 ppm, ayda ± 5 saniyəyə bərabərdir). Yüksək dəqiqliyi I2C uyğunluğu və son dərəcə aşağı cərəyan istehlakı ilə birləşdirmək, bu RTC -ni bu layihə üçün yaxşı bir seçim etdi.

DC-DC Boost çeviricisi

DC-DC Boost Converter IC-ni seçmək, sadəcə dövrə baxaraq və hansı gərginliklərin və cərəyanların lazım olduğunu anlamaqla edildi. Dövrəni aşağı gərginliklə işlətmək cari istehlakı azaldacaq, amma 4.5V -dən aşağıya keçə bilmədim (16MHz saatlıq mikrokontrolörün minimum gərginliyi) və 4.5V -dən yuxarı keçə bilmədim (RTC -nin maksimum gərginliyi). Bu, komponentləri tövsiyə olunan spesifikasiyalar daxilində işlətmək üçün dövrəni dəqiq 4.5V -də işlətməli olduğumu ifadə edirdi. Dövrənin maksimum cərəyanının 250mA -dan çox olmayacağını hesabladım. Beləliklə, tələblərə cavab verə biləcək bir sürət çeviricisi axtarmağa başladım və tez bir zamanda TPS61220 ilə qarşılaşdım. TPS61220 minimal xarici komponentlərə ehtiyac duyurdu, kifayət qədər ucuz idi və cari və gərginlik tələblərini ödəyə bilirdi.

Batareya

Batareya üçün əsas tələb ölçüsü idi. Batareyanın kifayət qədər kiçik olması lazım idi ki, həcmli görünmədən saatın içərisinə sığa bilsin. Batareyanın 20mm × 35mm × 10mm -dən çox ola bilməyəcəyini anladım. Bu ölçü məhdudiyyətləri və 250mA cari tələbi ilə mənim seçimim LiPo batareyaları ilə məhdudlaşdı. İstifadə etmək qərarına gəldiyim Hobbykingdə "Turnigy nano-tech 300mAh 1S" batareyası tapdım.

Şarj IC

Şarj nəzarətçisinin 1S LiPo batareyası ilə uyğun olması lazım olduğu istisna olmaqla xüsusi bir tələb yox idi. Tək hüceyrəli şarj proqramları üçün hazırlanmış tam inteqrasiya edilmiş bir şarj nəzarətçisi olan MCP73831T tapdım. Xüsusiyyətlərindən biri, bu tətbiqdə olduqca faydalı hesab etdiyim bir xarici rezistor vasitəsilə şarj cərəyanını tənzimləmək qabiliyyətidir.

LiPo qorunması

Batareyanı təhlükəli həddindən artıq yükləmə və həddindən artıq boşalma şəraitindən qorumaq üçün gərginlik və cari monitorinqi daxil etmək istədim. Bu cür xüsusiyyətləri təmin edən məhdud sayda IC var idi və daha ucuz seçimlərdən biri BQ29700 IC idi. Minimum miqdarda xarici komponent tələb olunurdu və tək hüceyrəli LiPo batareyası üçün lazım olan bütün qorunmanı ehtiva edirdi.

İndi komponentlər seçildikdən sonra şematik yaratmaq vaxtı gəldi!

Addım 5: Şematik

Şematik
Şematik

Altium Designer istifadə edərək, komponentin hər bir məlumat cədvəlindəki tövsiyələrdən istifadə edərək yuxarıdakı sxemi bir araya gətirə bildim. Sxem daha oxunaqlı olması üçün müxtəlif bloklara bölünmüşdür. Hər kəsin bu dizaynı yenidən yaratmaq istəməsi halında vacib məlumatlar olan bəzi qeydlər də əlavə etdim.

Növbəti addım, sxemini bir PCB -yə qoymaq idi!

Addım 6: PCB Layout

PCB Layout
PCB Layout
PCB Layout
PCB Layout
PCB Layout
PCB Layout
PCB Layout
PCB Layout

PCB düzeni bu layihənin ən çətin hissəsi oldu. PCB istehsal xərclərini minimuma endirmək üçün 2 qatlı bir PCB istifadə etməyi seçdim. 36mm standart bir saat ölçüsünü seçdim, çünki LED -lərə çox yaxşı uyğun gəlirdi. PCB -ni saat qapağına bağlamaq üçün 1 mm vida delikləri əlavə etdim. Məqsəd, bütün komponentləri (əlbəttə ki, LEDlər istisna olmaqla) alt təbəqəyə yerləşdirərək təmiz və gözəl görünüşlü bir dizayn saxlamaq idi. Üst təbəqədə görünən viyaların olmamasını təmin etmək üçün mütləq minimum sayda vias istifadə etmək istədim. Bu, bütün izləri bir təbəqəyə yönəltməyim lazım olduğunu ifadə edərkən, dövrənin "səs -küylü" hissələrini həssas siqnal izlərindən uzaq tutduğumdan əmin oldum. Həm də bütün izləri mümkün qədər qısa tutduğumdan əmin oldum, bypass kondansatörlərini yükə yaxın qoyaraq, yüksək güc komponentləri üçün daha qalın izlər istifadə edərək PCB dizaynının ümumi yaxşı təcrübələrini izləyin. Marşrutlaşdırma bir az vaxt aldı, amma düşünürəm ki, çox yaxşı alındı.

Növbəti addım saat korpusu üçün 3D model yaratmaq idi!

Addım 7: 3D Dizayn

3D dizayn
3D dizayn
3D dizayn
3D dizayn
3D dizayn
3D dizayn

Saat korpusu Fusion 360 istifadə edərək çox ənənəvi, klassik bir saat dizaynından sonra hazırlanmışdır. Saatı çoxlu digər kayışlarla uyğunlaşdırmaq üçün saat kəməri üçün standart 18 mm aralıq istifadə etdim. PCB üçün kəsik, hər hansı bir istehsal qeyri-dəqiqliyi üçün PCB-dən 0, 4 mm daha böyük dizayn edilmişdir. PCB -ni quraşdırmaq üçün bir neçə vida dirəyi və PCB -nin qoyulması üçün kiçik bir kənar daxil etdim. LED -lərin iti kənarlarının paltarlara yapışmaması üçün PCB -ni yuxarıdan bir millimetr yuxarıya endirdiyimə əmin oldum. Qutunun hündürlüyü yalnız batareyanın qalınlığı ilə müəyyən edilir. Qalan hissə, yuvarlaq kənarları və cilalanmış küncləri ilə yaxşı görünmək üçün hazırlanmışdır. Dizaynı 3D çapa uyğun saxlamaq məcburiyyətində qaldım ki, heç bir dəstək materialı olmadan evdə 3D çap edə bilərəm.

İndi hardware bitdikdən sonra proqram üzərində işləməyə başlamağın vaxtı gəldi!

Addım 8: Kod

Kod
Kod

Məcəlləyə bütün lazımi kitabxanaları daxil etməklə başladım. Bura RTC ilə əlaqə qurmaq və LEDləri idarə etmək üçün kitabxana daxildir. Bundan sonra hər mod üçün ayrı -ayrı funksiyalar yaratdım. İstifadəçi bir düyməni basaraq rejimi dəyişdikdə, proqram həmin rejimə uyğun funksiyanı çağırır. İstifadəçi müəyyən bir müddət ərzində bir düyməni basmazsa, saat yuxuya gedir.

Yuxu rejimi bütün LEDlər tamamilə sönənə qədər sönür. Yuxu rejiminin istifadəsi batareyanın ömrünü xeyli artırır və LED -lər istifadə edilmədikdə söndürülür. İstifadəçi yuxarı düyməni basaraq saatı oyada bilər. Yuxudan oyandıqda saat şarj edilməməsini təmin etmək üçün batareyanın səviyyəsini yoxlayacaq. Şarj tələb olunarsa, LEDlər saatı göstərməzdən əvvəl bir neçə dəfə qırmızı yanıb -sönəcək. Batareya kritik səviyyədən aşağıdırsa, heç açılmayacaq.

Qalan vaxt proqramlaşdırma digər modları mümkün qədər intuitiv hala gətirməyə başladı. Bütün modlarda eyni funksiyadan məsul olan eyni düymənin ən asan olduğunu düşündüm. Bir az sınaqdan sonra, gəldiyim düymə konfiqurasiyası budur:

  • Üst Düymə Basın: "Göstərmə vaxtı", "Göstərilmə tarixi", "Saniyəölçən" və "Siqnal" rejimi arasında oyan / dövr et.
  • Üst düyməni basıb saxlayın: "Vaxtı Ayarla", "Tarixi Ayarla", "Saniyəölçənə Başla" və ya "Siqnal Ayarla" rejiminə daxil ol.
  • Alt Düymə Basın: Parlaqlığı Artırın.
  • Alt düyməni basıb saxlayın: "Rəng Seç" rejiminə daxil olun.

Alt düymə həmişə hansı rejimdə olmağınızdan asılı olmayaraq parlaqlıq və rəng tənzimləmələrindən məsuldur. İstifadəçi "Rəng Seç" rejiminə daxil olduqda, LEDlər mümkün olan RGB rənglərinin hamısını keçməyə başlayır. İstifadəçi animasiyanı dayandıra və xüsusi rejim üçün istədiyi rəngi seçə bilər (Göstərmə vaxtı qırmızı, Göstərmə tarixi mavi və s.). Rənglər, istifadəçi tərəfindən fərqli rejimləri fərqləndirməyə kömək etmək üçün asanlıqla fərdiləşdirilə bilər.

Kod bitdikdən sonra onu mikro nəzarətçiyə yükləmək vaxtı gəldi!

Addım 9: Proqramlaşdırma

Proqramlaşdırma
Proqramlaşdırma

Demək olar ki, lehimləmə və yığma vaxtı idi, amma bundan əvvəl mikro nəzarətçini proqramlaşdırmalıydım. Bu təlimatı izlədim

Yükləyicini ATmega328P-AU SMD-yə yandırın

Proqramçı olaraq adi bir Arduino Uno istifadə edərək bir önyükleyicinin necə yandırılacağı və mikrokontrolörün proqramlaşdırılması haqqında.

İlk addım "ArduinoISP" nümunə kodunu yükləyərək Arduino Uno -nu ISP -ə çevirmək idi. Bir proqramlaşdırma yuvası ilə birlikdə bir çörək taxtası istifadə etdim və dərsdən sxemini bağladım. Bundan sonra, Arduino IDE -də yalnız "Burn Bootloader" düyməsini basaraq yükləyicini mikro nəzarətçiyə yandıra bildim.

Mikro nəzarətçi bir yükləyiciyə sahib olduqdan sonra, sadəcə mövcud mikro nəzarətçini Arduino Uno -dan çıxardım və kodu proqramlaşdırma yuvasındakı mikro nəzarətçiyə yükləmək üçün Arduino Uno lövhəsini USB -dən Serial Adapterə istifadə etdim. Yükləmə tamamlandıqdan sonra lehimləmə prosesinə başlaya bilərəm.

Növbəti addım bütün komponentləri toplamaq və birlikdə lehimləmək idi!

Addım 10: Lehimləmə

Lehimləmə
Lehimləmə
Lehimləmə
Lehimləmə
Lehimləmə
Lehimləmə
Lehimləmə
Lehimləmə

Lehimləmə prosesi iki hissəyə bölündü. Əvvəlcə alt təbəqəni, sonra üst qatını lehimləmək lazımdır.

Saat PCB -ni lent istifadə edərək bir neçə prototip lövhəsi arasında bağladım. Bu, PCB -nin lehimləmə zamanı hərəkət etməməsini təmin etdi, bu çox vacibdir. Sonra lehimləmə şablonunu PCB üzərinə qoydum və lehim yastiqciqlərinin hamısını örtmək üçün bol miqdarda lehim pastası istifadə etdim. Bütün komponentləri uyğun yastıqlarına yerləşdirmək üçün nazik bir cımbız istifadə etməyə başladım. Daha sonra bütün komponentləri yerində yenidən lehimləmək üçün istilik silahı istifadə etdim.

Alt təbəqə lehimləndikdə, lehimləmənin müvəffəqiyyətli olduğundan əmin olmaq üçün ona tez bir vizual yoxlama verdim. Sonra lövhəni çevirdim və digər tərəfdən lehimləmə prosesini təkrarladım, bu dəfə bütün LED -lərlə. Üst təbəqəni lehimləyərkən lövhəni çox qızdırmamaq çox vacib idi, çünki altdakı bütün komponentlər düşmə riski altındadır. Şükürlər olsun ki, bütün komponentlər yerində qaldı və düymələri adi bir lehimləmə dəmirindən istifadə edərək lehimlədikdən sonra PCB bitdi!

Artıq son yığıncağın vaxtı idi!

Addım 11: Quraşdırma

Məclis
Məclis

Quraşdırma çox sadə idi. Batareyanı PCB -yə bağladım və batareyanı və PCB -ni 3D çaplı korpusun içinə qoydum. PCB -nin hər küncündəki montaj deliklərində dörd vidayı vidaladım. Bundan sonra, 18 mm yay çubuqlarından istifadə edərək saat kayışlarını bağladım və saat tamamlandı!

Addım 12: Nəticə və təkmilləşdirmələr

Nəticə və təkmilləşdirmələr
Nəticə və təkmilləşdirmələr
Nəticə və təkmilləşdirmələr
Nəticə və təkmilləşdirmələr

Saat gözlənildiyi kimi işləyir və bunun necə baş verdiyindən çox məmnunam. Bu günə qədər heç bir problem yaşamamışam və bir həftə istifadə edildikdən sonra batareya demək olar ki, tam doldurulmuş vəziyyətdə qalır.

Gələcəkdə saata başqa xüsusiyyətlər də əlavə edə bilərəm. USB portu mikro nəzarətçiyə qoşulduğundan, proqram təminatı istənilən vaxt yeni xüsusiyyətlərlə yenilənə bilər. Hələlik, saatın bu versiyasını istifadə etməyə davam edəcəyəm və uzun müddət istifadədən sonra necə dayandığını görəcəyəm.

Bu layihə ilə bağlı fikirləriniz, şərhləriniz və ya suallarınız varsa, bunları aşağıda buraxın. Onları [email protected] ünvanına da göndərə bilərsiniz.

Saat Müsabiqəsi
Saat Müsabiqəsi
Saat Müsabiqəsi
Saat Müsabiqəsi

Saat Yarışmasında Birinci Mükafat

Tövsiyə: