LED matritsalarida oddiy soat. Arduino uchun tayyor soat

O'z qo'llaringiz bilan elektron soatni yig'ishning ko'plab usullari mavjud: diagrammalar adabiyotda va Internetda keng tarqalgan. Aksariyat zamonaviy dasturlar mikrokontrollerlarga asoslangan. Bunday loyihalarni amalga oshirish ko'pincha elektronika sohasida keng amaliy ko'nikmalar va nazariy bilimlarni talab qiladi: ixtisoslashtirilgan dasturiy ta'minotdan foydalanish, temir xlorid bilan ishlov berishdan foydalangan holda uyda bosilgan elektron platalarni yaratish va yaxshi lehimlash qobiliyati. Bundan tashqari, siz turli xil asboblar va materiallarga ega bo'lishingiz kerak.

Biroq, uyda o'z qo'llaringiz bilan elektron soatni yig'ishning oddiy va arzon usuli mavjud: Arduino platformasidan foydalaning. Bu dasturlash va elektronika asoslarini o'rgatish uchun maxsus ishlab chiqilgan dasturiy-apparat kompleksidir. Arduino yordamida har kim, hatto maxsus tayyorgarliksiz ham, o'z qo'llari bilan elektron soat qurishi mumkin: elektron sxemalar, muhandislik dasturlari va hatto lehim temir kerak emas!

Barcha elektron komponentlarning ulanishi maxsus kontaktli ("lehimsiz") non panelida amalga oshiriladi, bu kuyish, kesish va boshqa jarohatlar xavfini yo'q qiladi - shuning uchun siz Arduino dizayneri bilan bolalar bilan birga ishlashingiz mumkin. Elektr sxemasini taqdim etishning vizual usuli qurilmani yig'ishda xatolikka yo'l qo'ymaslikka yordam beradi.

Qadam 1. Komponentlar ro'yxati

LED matritsalarida oddiy soatni yig'ish uchun sizga bir nechta arzon komponentlar kerak bo'ladi:

  • Arduino platformasi. Eng oddiy modellar qiladi - yoki Micro;
  • kontakt paneli;
  • non paneli uchun ulash simlari;
  • Adafruit DS3231 real vaqtda soat moduli;
  • LED matritsa moduli 32x8 MAX7219;
  • ikkita tugma.

Boshqaruv dasturini xotiraga yuklash uchun sizga shaxsiy kompyuter va USB-mini-USB kabeli ham kerak bo'ladi. Hammasi shu - lehimli temir, izolyatsion chig'anoqlar, yig'ish pichoqlari va boshqa professional asboblar kerak emas: barcha operatsiyalar qo'lda amalga oshiriladi. Ehtimol, ba'zi hollarda cımbızlardan foydalanish qulayroqdir, lekin siz usiz ham qilishingiz mumkin.


Qadam 2. Elektron sxemani yig'ish

Arduino-dan foydalangan holda LED displeyli elektron soat sxemasi hatto tajribasiz radio havaskorlari uchun ham juda oddiy ko'rinadi. Yig'ish uchun faqat bir nechta simlar talab qilinadi. Ulanish jadvali:

Arduino moduli → 32x8 MAX7219 LED matritsasi

Arduino moduli → Adafruit DS3231 real vaqt soati

Arduino moduli → tugmalari

D2 - 1 tugmasi

D3 - tugma 2

Tugmalarning ikkinchi pimi GND ga ulangan.

Siz shunchaki e'tibor berishingiz va non panelidagi aloqa teshiklari bir-biriga qanday bog'langanligini eslab qolishingiz kerak. Quyidagi diagramma kontakt teshiklarining ichki ulanish usulini ko'rsatadi:


Ikkala tomonning ikkita qatori (1 va 4) gorizontal ravishda ulanadi - ular odatda +5V quvvat liniyasi va GND tuproq sifatida ishlatiladi. Barcha ichki kontaktlar (2 va 3) vertikal ravishda yopiladi. Bunday holda, elektron plata ham vertikal, ham gorizontal ravishda bir-biridan mustaqil ikkita nosimmetrik qismga bo'linadi. Bu, masalan, bitta doskada ikki xil qurilmani yig'ish imkonini beradi.

LED ko'rsatkichli elektron soatning diagrammasi, shuningdek elektron platadagi elementlarning joylashishi rasmda ko'rsatilgan:

Barcha ulanishlar ko'rsatilgan diagrammaga mos kelishini diqqat bilan tekshiring. Shuningdek, o'tkazgichlar elektron plataning aloqa teshiklarida yaxshi mahkamlanganligiga ishonch hosil qiling.


3-qadam. Arduino proshivka

Sxemani yig'ish va sinovdan o'tkazish tugallangandan so'ng, siz boshqaruv dasturini (yoki "proshivka") Arduino xotirasiga yuklashni boshlashingiz mumkin.


Buning uchun bepul rasmiy ishlab chiqish muhitini o'rnatishingiz kerak - . Shuningdek, sizga loyihaning manba kodi kerak bo'ladi, uni quyida barcha kutubxonalar va eskiz bilan arxivdan yuklab olishingiz mumkin va agar sizga shunchaki eskiz kerak bo'lsa, uni alohida nusxalashingiz mumkin:

//kutubxonalarni o'z ichiga oladi: #include "LedControl.h" #include // Shriftlar kutubxonasi #include // DS1307 soati #include "RTClib.h" // DS1307 soati #include // Aleksandr Brevig tomonidan tugmalar kutubxonasi // LED Matritsasini sozlash // pin 12 displeydagi DataIn ga ulangan // pin 11 displeydagi CLK ga ulangan // pin 10 displeydagi LOAD ga ulangan LedControl lc = LedControl(6, 5, 4, 4); //3 pinni 12, 11 va 10 qilib o'rnatadi va keyin 4 ta displeyni o'rnatadi (maksimal 8 displey) //global o'zgaruvchilar bayt intensivligi = 7; // Standart intensivlik/yorqinlik (0-15) bayt clock_mode = 0; // Standart soat rejimi. Standart = 0 (basic_mode) bool random_mode = 0; // Tasodifiy rejimni aniqlang - displey turini bir necha soatda o'zgartiradi. Standart = 0 (o'chirilgan) bayt old_mode = clock_mode; // Oldingi soat rejimini saqlaydi, shuning uchun sana yoki boshqasiga o'tsak, keyin qaysi rejimga qaytishni bilamiz. bool ampm = 0; // 12 yoki 24 soatlik vaqtni belgilang. 0 = 24 soat. 1 = 12 soatlik bayt change_mode_time = 0; // Tasodifiy rejimda soat rejimi keyingi o'zgargan soatni ushlab turadi. imzolanmagan uzoq kechikish vaqti = 500; // Biz har doim int rtc displey yangilanishlari orasida biroz kutamiz; // Haqiqiy vaqt soati chiqish char kunlarini ushlab turadi = ( "Quyosh", "Ds.", "Ses", "Chor", "Pers", "Jum", "Sat" ); //kun massivi - slayd, asosiy_rejim va chalkash rejimlarda ishlatiladi (DS1307 hafta kuni uchun 1-7 qiymatni chiqaradi) char daysfull = ( "Yakshanba", "Dushanba", "Seshanba", "Chors", "Payshanba" ","Juma", "Shanba" ); char qo'shimchasi = ("st", "nd", "rd", "th" ); //slayd, basic_mode va chalkash rejimlarda ishlatiladigan sana qo'shimchasi massivi. e,g, 1st 2nd ... //constantalarni aniqlang #NUM_DISPLAY_MODES ni belgilang 3 // Raqamlarni ko'rsatish rejimlari (birinchi rejim sifatida nolni belgilang) #NUM_SETTINGS_MODESni belgilang 4 // Raqamni sozlash rejimlari = 6 (birinchi rejim sifatida nolga teng) # SLIDE_DELAY 20 ni belgilang // Slayd rejimida har bir belgi uchun slayd effekti uchun millisekundlarda vaqt. Sekinroq effekt uchun buni balandroq qiling #define cls clear_display // Displeyni tozalash RTC_DS1307 ds1307; // RTC obyektini yaratish tugmasi tugmasiA = Tugma (2, BUTTON_PULLUP); // O'rnatish tugmasi A (tugma kutubxonasi yordamida) tugma tugmasiB = Tugma (3, BUTTON_PULLUP); // Oʻrnatish tugmasi B (tugma kutubxonasi yordamida) bekor oʻrnatish() ( digitalWrite(2, HIGH); // 2-pindagi tugma uchun tortish rezistorini yoqing digitalWrite(3, HIGH); // PIN tugmasi uchun tortish rezistorini yoqing. 3 digitalWrite(4, HIGH); // 4-pindagi tugma uchun tortish rezistorini yoqing. LedControl int qurilmalari = lc.getDeviceCount();< devices; address++) { /*The MAX72XX is in power-saving mode on startup*/ lc.shutdown(3-address, false); /* Set the brightness to a medium values */ lc.setIntensity(3-address, intensity); /* and clear the display */ lc.clearDisplay(3-address); } //Setup DS1307 RTC #ifdef AVR Wire.begin(); #else Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino #endif ds1307.begin(); //start RTC Clock if (! ds1307.isrunning()) { Serial.println("RTC is NOT running!"); ds1307.adjust(DateTime(__DATE__, __TIME__)); // sets the RTC to the date & time this sketch was compiled } //Show software version & hello message printver(); //enable red led digitalWrite(13, HIGH); } void loop() { //run the clock with whatever mode is set by clock_mode - the default is set at top of code. switch (clock_mode){ case 0: basic_mode(); break; case 1: small_mode(); break; case 2: slide(); break; case 3: word_clock(); break; case 4: setup_menu(); break; } } //plot a point on the display void plot (byte x, byte y, byte val) { //select which matrix depending on the x coord byte address; if (x >= 0 && x<= 7) { address = 3; } if (x >= 8 && x<= 15) { address = 2; x = x - 8; } if (x >= 16 && x<= 23) { address = 1; x = x - 16; } if (x >= 24 && x<= 31) { address = 0; x = x - 24; } if (val == 1) { lc.setLed(address, y, x, true); } else { lc.setLed(address, y, x, false); } } //clear screen void clear_display() { for (byte address = 0; address < 4; address++) { lc.clearDisplay(address); } } //fade screen down void fade_down() { //fade from global intensity to 1 for (byte i = intensity; i >0; i--) ( uchun (bayt manzili = 0; manzil< 4; address++) { lc.setIntensity(address, i); } delay(30); //change this to change fade down speed } clear_display(); //clear display completely (off) //reset intentsity to global val for (byte address = 0; address < 4; address++) { lc.setIntensity(address, intensity); } } //power up led test & display software version number void printver() { byte i = 0; char ver_a = "MADE"; char ver_b = "IN"; char ver_c = "RUSSIA"; //test all leds. for (byte x = 0; x <= 32; x++) { for (byte y = 0; y <= 7; y++) { plot(x, y, 1); } } delay(300); fade_down(); while (ver_a[i]) { puttinychar((i * 4), 1, ver_a[i]); delay(35); i++; } delay(500); fade_down(); i = 0; while (ver_b[i]) { puttinychar((i * 4), 1, ver_b[i]); delay(35); i++; } delay(500); fade_down(); i = 0; while (ver_c[i]) { puttinychar((i * 4), 1, ver_c[i]); delay(35); i++; } delay(500); fade_down(); } // puttinychar // Copy a 3x5 character glyph from the myfont data structure to display memory, with its upper left at the given coordinate // This is unoptimized and simply uses plot() to draw each dot. void puttinychar(byte x, byte y, char c) { byte dots; if (c >= "A" && c<= "Z" || (c >= "a" && c<= "z")) { c &= 0x1F; // A-Z maps to 1-26 } else if (c >= "0" && c<= "9") { c = (c - "0") + 32; } else if (c == " ") { c = 0; // space } else if (c == ".") { c = 27; // full stop } else if (c == ":") { c = 28; // colon } else if (c == "\"") { c = 29; // single quote mark } else if (c == "!") { c = 30; // single quote mark } else if (c == "?") { c = 31; // single quote mark } for (byte col = 0; col < 3; col++) { dots = pgm_read_byte_near(&mytinyfont[c]); for (char row = 0; row < 5; row++) { if (dots & (16 >> qator)) uchastka(x + col, y + qator, 1); else plot(x + col, y + qator, 0); ) ) ) void putnormalchar(bayt x, bayt y, char c) ( bayt nuqta; // if (c >= "A" && c)<= "Z" || (c >= "a" && c<= "z")) { // c &= 0x1F; // A-Z maps to 1-26 // } if (c >= "A" && c<= "Z") { c &= 0x1F; // A-Z maps to 1-26 } else if (c >= "a" && c<= "z") { c = (c - "a") + 41; // A-Z maps to 41-67 } else if (c >= "0" && c<= "9") { c = (c - "0") + 31; } else if (c == " ") { c = 0; // space } else if (c == ".") { c = 27; // full stop } else if (c == "\"") { c = 28; // single quote mark } else if (c == ":") { c = 29; // clock_mode selector arrow } else if (c == ">") ( c = 30; // soat_rejimini tanlash strelkasi ) aks holda (c >= -80 && c<= -67) { c *= -1; } for (char col = 0; col < 5; col++) { dots = pgm_read_byte_near(&myfont[c]); for (char row = 0; row < 7; row++) { //check coords are on screen before trying to plot //if ((x >= 0) && (x<= 31) && (y >= 0) && (y<= 7)){ if (dots & (64 >> qator)) ( // faqat 7 qator. plot(x + col, y + row, 1); ) else ( plot(x + col, y + row, 0); ) //) ) ) ) //kichik_rejim //vaqtni sekundlar bilan kichik 3x5 belgilarda ko'rsatish void small_mode() ( char textchar; // displeydagi 16 belgi bayt mins = 100; //daqiqa bayt sek = rtc; //soniya bayt old_seks = sek; / /eski soniyalar qiymatini ushlab turadi - oxirgi marta yangilangan soniyalar yoki displey - soniyalar o'zgarganligini tekshirish uchun ishlatiladi cls(); //run_mode rost bo'lsa (run_mode()) ( get_time(); / /tugmani tekshiring, agar (buttonA.uniquePress()) ( switch_mode(); return; ) agar (buttonB.uniquePress()) ( display_date(); return; ) //agar soniyalar o‘zgartirilsa, ularni displeyda yangilang soniyalar = rtc; if (secs != old_secs) ( //secs char bufer; itoa(secs, bufer, 10); //tuzatish - aks holda agar numda bosh nolga ega boʻlsa, masalan, “03” sek, itoa buni boʻsh joy bilan qamrab oladi. "3".agar(sek< 10) { buffer = buffer; buffer = "0"; } puttinychar(20, 1, ":"); //seconds colon puttinychar(24, 1, buffer); //seconds puttinychar(28, 1, buffer); //seconds old_secs = secs; } //if minute changes change time if (mins != rtc) { //reset these for comparison next time mins = rtc; byte hours = rtc; if (hours > < 1) { hours = hours + ampm * 12; } //byte dow = rtc; // the DS1307 outputs 0 - 6 where 0 = Sunday0 - 6 where 0 = Sunday. //byte date = rtc; //set characters char buffer; itoa(hours, buffer, 10); //fix - as otherwise if num has leading zero, e.g. "03" hours, itoa coverts this to chars with space "3 ". if (hours < 10) { buffer = buffer; //if we are in 12 hour mode blank the leading zero. if (ampm) { buffer = " "; } else { buffer = "0"; } } //set hours chars textchar = buffer; textchar = buffer; textchar = ":"; itoa (mins, buffer, 10); if (mins < 10) { buffer = buffer; buffer = "0"; } //set mins characters textchar = buffer; textchar = buffer; //do seconds textchar = ":"; buffer; secs = rtc; itoa(secs, buffer, 10); //fix - as otherwise if num has leading zero, e.g. "03" secs, itoa coverts this to chars with space "3 ". if (secs < 10) { buffer = buffer; buffer = "0"; } //set seconds textchar = buffer; textchar = buffer; byte x = 0; byte y = 0; //print each char for (byte x = 0; x < 6 ; x++) { puttinychar(x * 4, 1, textchar[x]); } } delay(50); } fade_down(); } // basic_mode() // show the time in 5x7 characters void basic_mode() { cls(); char buffer; //for int to char conversion to turn rtc values into chars we can print on screen byte offset = 0; //used to offset the x postition of the digits and centre the display when we are in 12 hour mode and the clock shows only 3 digits. e.g. 3:21 byte x, y; //used to draw a clear box over the left hand "1" of the display when we roll from 12:59 ->1:00 12 soat rejimida. //agar ampm 1 bayt soatga o'rnatilgan bo'lsa, 12/24 soatlik konvertatsiya qiling = rtc; agar (soat > 12) (soat = soat - ampm * 12; ) agar (soat)< 1) { hours = hours + ampm * 12; } //do offset conversion if (ampm && hours < 10) { offset = 2; } //set the next minute we show the date at //set_next_date(); // initially set mins to value 100 - so it wll never equal rtc on the first loop of the clock, meaning we draw the clock display when we enter the function byte secs = 100; byte mins = 100; int count = 0; //run clock main loop as long as run_mode returns true while (run_mode()) { //get the time from the clock chip get_time(); //check for button press if (buttonA.uniquePress()) { switch_mode(); return; } if (buttonB.uniquePress()) { display_date(); return; } //check whether it"s time to automatically display the date //check_show_date(); //draw the flashing: as on if the secs have changed. if (secs != rtc) { //update secs with new value secs = rtc; //draw: plot (15 - offset, 2, 1); //top point plot (15 - offset, 5, 1); //bottom point count = 400; } //if count has run out, turn off the: if (count == 0) { plot (15 - offset, 2, 0); //top point plot (15 - offset, 5, 0); //bottom point } else { count--; } //re draw the display if button pressed or if mins != rtc i.e. if the time has changed from what we had stored in mins, (also trigggered on first entering function when mins is 100) if (mins != rtc) { //update mins and hours with the new values mins = rtc; hours = rtc; //adjust hours of ampm set to 12 hour mode if (hours >12) (soat = soat - ampm * 12; ) agar (soat< 1) { hours = hours + ampm * 12; } itoa(hours, buffer, 10); //if hours < 10 the num e.g. "3" hours, itoa coverts this to chars with space "3 " which we dont want if (hours < 10) { buffer = buffer; buffer = "0"; } //print hours //if we in 12 hour mode and hours < 10, then don"t print the leading zero, and set the offset so we centre the display with 3 digits. if (ampm && hours < 10) { offset = 2; //if the time is 1:00am clear the entire display as the offset changes at this time and we need to blank out the old 12:59 if ((hours == 1 && mins == 0)) { cls(); } } else { //else no offset and print hours tens digit offset = 0; //if the time is 10:00am clear the entire display as the offset changes at this time and we need to blank out the old 9:59 if (hours == 10 && mins == 0) { cls(); } putnormalchar(1, 0, buffer); } //print hours ones digit putnormalchar(7 - offset, 0, buffer); //print mins //add leading zero if mins < 10 itoa (mins, buffer, 10); if (mins < 10) { buffer = buffer; buffer = "0"; } //print mins tens and ones digits putnormalchar(19 - offset, 0, buffer); putnormalchar(25 - offset, 0, buffer); } } fade_down(); } //like basic_mode but with slide effect void slide() { byte digits_old = {99, 99, 99, 99}; //old values we store time in. Set to somthing that will never match the time initially so all digits get drawn wnen the mode starts byte digits_new; //new digits time will slide to reveal byte digits_x_pos = {25, 19, 7, 1}; //x pos for which to draw each digit at char old_char; //used when we use itoa to transpose the current digit (type byte) into a char to pass to the animation function char new_char; //used when we use itoa to transpose the new digit (type byte) into a char to pass to the animation function //old_chars - stores the 5 day and date suffix chars on the display. e.g. "mon" and "st". We feed these into the slide animation as the current char when these chars are updated. //We sent them as A initially, which are used when the clocl enters the mode and no last chars are stored. //char old_chars = "AAAAA"; //plot the clock colon on the display cls(); putnormalchar(13, 0, ":"); byte old_secs = rtc; //store seconds in old_secs. We compare secs and old secs. WHen they are different we redraw the display //run clock main loop as long as run_mode returns true while (run_mode()) { get_time(); //check for button press if (buttonA.uniquePress()) { switch_mode(); return; } if (buttonB.uniquePress()) { display_date(); return; } //if secs have changed then update the display if (rtc != old_secs) { old_secs = rtc; //do 12/24 hour conversion if ampm set to 1 byte hours = rtc; if (hours >12) (soat = soat - ampm * 12; ) agar (soat< 1) { hours = hours + ampm * 12; } //split all date and time into individual digits - stick in digits_new array //rtc = secs //array pos and digit stored //digits_new = (rtc%10); //0 - secs ones //digits_new = ((rtc/10)%10); //1 - secs tens //rtc = mins digits_new = (rtc % 10); //2 - mins ones digits_new = ((rtc / 10) % 10); //3 - mins tens //rtc = hours digits_new = (hours % 10); //4 - hour ones digits_new = ((hours / 10) % 10); //5 - hour tens //rtc = date //digits_new = (rtc%10); //6 - date ones //digits_new = ((rtc/10)%10); //7 - date tens //draw initial screen of all chars. After this we just draw the changes. //compare digits 0 to 3 (mins and hours) for (byte i = 0; i <= 3; i++) { //see if digit has changed... if (digits_old[i] != digits_new[i]) { //run 9 step animation sequence for each in turn for (byte seq = 0; seq <= 8 ; seq++) { //convert digit to string itoa(digits_old[i], old_char, 10); itoa(digits_new[i], new_char, 10); //if set to 12 hour mode and we"re on digit 2 (hours tens mode) then check to see if this is a zero. If it is, blank it instead so we get 2.00pm not 02.00pm if (ampm && i == 3) { if (digits_new == 0) { new_char = " "; } if (digits_old == 0) { old_char = " "; } } //draw the animation frame for each digit slideanim(digits_x_pos[i], 0, seq, old_char, new_char); delay(SLIDE_DELAY); } } } /* //compare date digit 6 (ones) and (7) tens - if either of these change we need to update the date line. We compare date tens as say from Jan 31 ->01-fevral, agar ((raqamlar_eski != raqamlar_yangi) || (raqamlar_eski != raqamlar_yangi)) ( //koʻrsatilgan kunni oʻzgartiring. Quyidagi tsikl 3 ta belgining har birini oʻz navbatida oʻtadi, masalan, "MON" uchun. (bayt day_char = 0; day_char<=2 ; day_char++){ //run the anim sequence for each char for (byte seq = 0; seq <=8 ; seq++){ //the day (0 - 6) Read this number into the days char array. the seconds number in the array 0-2 gets the 3 chars of the day name, e.g. m o n slideanim(6*day_char,8,seq,old_chars,days); //6 x day_char gives us the x pos for the char delay(SLIDE_DELAY); } //save the old day chars into the old_chars array at array pos 0-2. We use this next time we change the day and feed it to the animation as the current char. The updated char is fed in as the new char. old_chars = days; } //change the date tens digit (if needed) and ones digit. (the date ones digit wil alwaus change, but putting this in the "if" loop makes it a bit neater code wise.) for (byte i = 7; i >= 6; i--)( agar (raqamlar_eski[i] != raqamlar_yangi[i]) ( uchun (bayt ketma-ketligi = 0; ketma-ketlik)<=8 ; seq++){ itoa(digits_old[i],old_char,10); itoa(digits_new[i],new_char,10); slideanim(digits_x_pos[i],8,seq,old_char,new_char); delay(SLIDE_DELAY); } } } //print the day suffix "nd" "rd" "th" etc. First work out date 2 letter suffix - eg st, nd, rd, th byte s = 3; //the pos to read our suffix array from. byte date = rtc; if(date == 1 || date == 21 || date == 31) { s = 0; } else if (date == 2 || date == 22) { s = 1; } else if (date == 3 || date == 23) { s = 2; } for (byte suffix_char = 0; suffix_char <=1 ; suffix_char++){ for (byte seq = 0; seq <=8 ; seq++){ slideanim((suffix_char*6)+36,8,seq,old_chars,suffix[s]); // we pass in the old_char array char as the current char and the suffix array as the new char delay(SLIDE_DELAY); } //save the suffic char in the old chars array at array pos 3 and 5. We use these chars next time we change the suffix and feed it to the animation as the current char. The updated char is fed in as the new char. old_chars = suffix[s]; } }//end do date line */ //save digita array tol old for comparison next loop for (byte i = 0; i <= 3; i++) { digits_old[i] = digits_new[i]; } }//secs/oldsecs }//while loop fade_down(); } //called by slide //this draws the animation of one char sliding on and the other sliding off. There are 8 steps in the animation, we call the function to draw one of the steps from 0-7 //inputs are are char x and y, animation frame sequence (0-7) and the current and new chars being drawn. void slideanim(byte x, byte y, byte sequence, char current_c, char new_c) { // To slide one char off and another on we need 9 steps or frames in sequence... // seq# 0123456 <-rows of the display // | ||||||| // seq0 0123456 START - all rows of the display 0-6 show the current characters rows 0-6 // seq1 012345 current char moves down one row on the display. We only see it"s rows 0-5. There are at display positions 1-6 There is a blank row inserted at the top // seq2 6 01234 current char moves down 2 rows. we now only see rows 0-4 at display rows 2-6 on the display. Row 1 of the display is blank. Row 0 shows row 6 of the new char // seq3 56 0123 // seq4 456 012 half old / half new char // seq5 3456 01 // seq6 23456 0 // seq7 123456 // seq8 0123456 END - all rows show the new char //from above we can see... //currentchar runs 0-6 then 0-5 then 0-4 all the way to 0. starting Y position increases by 1 row each time. //new char runs 6 then 5-6 then 4-6 then 3-6. starting Y position increases by 1 row each time. //if sequence number is below 7, we need to draw the current char if (sequence < 7) { byte dots; // if (current_c >= "A" && || (joriy_c >= "a" && joriy_c<= "z")) { // current_c &= 0x1F; // A-Z maps to 1-26 // } if (current_c >= "A" && joriy_c<= "Z") { current_c &= 0x1F; // A-Z maps to 1-26 } else if (current_c >= "a" && joriy_c<= "z") { current_c = (current_c - "a") + 41; // A-Z maps to 41-67 } else if (current_c >= "0" && joriy_c<= "9") { current_c = (current_c - "0") + 31; } else if (current_c == " ") { current_c = 0; // space } else if (current_c == ".") { current_c = 27; // full stop } else if (current_c == "\"") { current_c = 28; // single quote mark } else if (current_c == ":") { current_c = 29; //colon } else if (current_c == ">") ( current_c = 30; // clock_rejimni tanlash strelkasi ) bayt curr_char_row_max = 7 - ketma-ketlik; //chiziladigan satrlarning maksimal soni 6 - ketma-ketlik raqami bayt start_y = ketma-ketlik; // boshlash uchun y pozitsiyasi - bir xil ketma-ketlik raqamini qo'shamiz // har bir qatorni maksimal satrgacha (tartib raqamidan hisoblangan) (bayt curr_char_row = 0; curr_char_row).<= curr_char_row_max; curr_char_row++) { for (byte col = 0; col < 5; col++) { dots = pgm_read_byte_near(&myfont); if (dots & (64 >> curr_char_row)) uchastka(x + col, y + start_y, 1); //plot led on else plot(x + col, y + start_y, 0); //else plot led off ) start_y++;//y ga bitta qo'shing, shuning uchun keyingi qatorni pastga tushiramiz) ) //agar ketma-ketlik 1 dan 7 gacha bo'lsa, belgilar orasiga bo'sh chiziq chizamiz. Agar buni qilmasak, biz olamiz joriy belgilarning qoldiqlari displeyda qolgan oxirgi joy if (ketma-ketlik >= 1 && ketma-ketligi<= 8) { for (byte col = 0; col < 5; col++) { plot(x + col, y + (sequence - 1), 0); //the y position to draw the line is equivalent to the sequence number - 1 } } //if sequence is above 2, we also need to start drawing the new char if (sequence >= 2) ( //belgi bayt nuqtalarini ishlab chiqing; //agar (new_c >= "A" && new_c<= "Z" || (new_c >= "a" && new_c<= "z")) { // new_c &= 0x1F; // A-Z maps to 1-26 //} if (new_c >= "A" && new_c<= "Z") { new_c &= 0x1F; // A-Z maps to 1-26 } else if (new_c >= "a" && new_c<= "z") { new_c = (new_c - "a") + 41; // A-Z maps to 41-67 } else if (new_c >= "0" && new_c<= "9") { new_c = (new_c - "0") + 31; } else if (new_c == " ") { new_c = 0; // space } else if (new_c == ".") { new_c = 27; // full stop } else if (new_c == "\"") { new_c = 28; // single quote mark } else if (new_c == ":") { new_c = 29; // clock_mode selector arrow } else if (new_c == ">") ( new_c = 30; // soat_rejimini tanlash o'qi ) bayt newcharrowmin = 6 - (ketma-ketlik - 2); //Yangi belgi uchun chizish uchun minimal satr soni - bu 2-8 ketma-ketlik raqamlari berilganda 6 dan 0 gacha natija hosil qiladi . Bu yangi belgi bayti uchun chizish uchun minimal satr start_y = 0; ) ) uchun 6 gacha (bayt newcharrow = newcharrowmin; newcharrow<= 6; newcharrow++) { for (byte col = 0; col < 5; col++) { dots = pgm_read_byte_near(&myfont); if (dots & (64 >> newcharrow)) uchastka(x + col, y + start_y, 1); //plot led on else plot(x + col, y + start_y, 0); //else plot led off ) start_y++;//y ga bitta qo'shing, shunda biz keyingi qatorni bir pastga chizamiz ) ) ) //soatni raqamlardan ko'ra so'zlardan foydalanib chop etish void word_clock() ( cls(); char numbers = ( "bir" ", "ikki", "uch", "to'rt", "besh", "olti", "etti", "sakkiz", "to'qqiz", "o'n", "o'n bir", "o'n ikki", "o'n uch", "o'n to'rt", "o'n besh", "o'n olti", "o'n etti", "o'n sakkiz", "o'n to'qqiz" raqamlari = ( "o'n", "yigirma", "o'ttiz", "qirq", "ellik" ); //potentsial 3 satr char str_a; //bayt soatlar, mins_y;< 1) { hours = hours + ampm * 12; } get_time(); //get the time from the clock chip byte old_mins = 100; //store mins in old_mins. We compare mins and old mins & when they are different we redraw the display. Set this to 100 initially so display is drawn when mode starts. byte mins; //run clock main loop as long as run_mode returns true while (run_mode()) { //check for button press if (buttonA.uniquePress()) { switch_mode(); return; } if (buttonB.uniquePress()) { display_date(); } get_time(); //get the time from the clock chip mins = rtc; //get mins //if mins is different from old_mins - redraw display if (mins != old_mins) { //update old_mins with current mins value old_mins = mins; //reset these for comparison next time mins = rtc; hours = rtc; //make hours into 12 hour format if (hours >12) ( soat = soat - 12; ) if (soat == 0) (soat = 12; ) //mins qiymatini ikkita alohida raqamga bo'lish int minsdigit = rtc % 10; bayt minsdigitten = (rtc / 10) % 10; //agar min<= 10 , then top line has to read "minsdigti past" and bottom line reads hours if (mins < 10) { strcpy (str_a, numbers); strcpy (str_b, "PAST"); strcpy (str_c, numbers); } //if mins = 10, cant use minsdigit as above, so soecial case to print 10 past /n hour. if (mins == 10) { strcpy (str_a, numbers); strcpy (str_b, " PAST"); strcpy (str_c, numbers); } //if time is not on the hour - i.e. both mins digits are not zero, //then make first line read "hours" and 2 & 3rd lines read "minstens" "mins" e.g. "three /n twenty /n one" else if (minsdigitten != 0 && minsdigit != 0) { strcpy (str_a, numbers); //if mins is in the teens, use teens from the numbers array for the 2nd line, e.g. "fifteen" //if (mins >= 11 && min<= 19) { if (mins <= 19) { strcpy (str_b, numbers); } else { strcpy (str_b, numberstens); strcpy (str_c, numbers); } } // if mins digit is zero, don"t print it. read read "hours" "minstens" e.g. "three /n twenty" else if (minsdigitten != 0 && minsdigit == 0) { strcpy (str_a, numbers); strcpy (str_b, numberstens); strcpy (str_c, ""); } //if both mins are zero, i.e. it is on the hour, the top line reads "hours" and bottom line reads "o"clock" else if (minsdigitten == 0 && minsdigit == 0) { strcpy (str_a, numbers); strcpy (str_b, "O"CLOCK"); strcpy (str_c, ""); } }//end worknig out time //run in a loop //print line a "twelve" byte len = 0; while (str_a) { len++; }; //get length of message byte offset_top = (31 - ((len - 1) * 4)) / 2; // //plot hours line byte i = 0; while (str_a[i]) { puttinychar((i * 4) + offset_top, 1, str_a[i]); i++; } //hold display but check for button presses int counter = 1000; while (counter >0)( //tugmaning bosilishini tekshiring if (buttonA.uniquePress()) ( switch_mode(); return; ) if (buttonB.uniquePress()) ( display_date(); ) kechikish(1); counter--; ) pasayish (); //bosma qatorni b len = 0; while (str_b) (len++; ); //xabar uzunligini oling ofset_top = (31 - ((len - 1) * 4)) / 2; i = 0; while (str_b[i]) ( puttinychar((i * 4) + ofset_top, 1, str_b[i]); i++; ) //displeyni ushlab turing, lekin tugma bosilganligini tekshiring counter = 1000; while (counter > 0)( if (buttonA.uniquePress()) ( switch_mode(); return; ) if (buttonB.uniquePress()) ( display_date(); ) delay(1); counter--; ) fade_down() ; // agar mavjud bo'lsa c qatorini chop eting. len = 0; while (str_c) (len++; ); //xabar uzunligini oling ofset_top = (31 - ((len - 1) * 4)) / 2; i = 0; while (str_c[i]) ( puttinychar((i * 4) + ofset_top, 1, str_c[i]); i++; ) counter = 1000; esa (hisoblagich > 0)( //tugmaning bosilishini tekshiring if (buttonA.uniquePress()) ( switch_mode(); return; ) if (buttonB.uniquePress()) ( display_date(); ) delay(1); counter- -; ) fade_down(); // displeyni bo'sh ushlab turing, lekin qayta boshlashdan oldin tugma bosilganligini tekshiring. hisoblagich = 1000; esa (hisoblagich > 0)( //tugmaning bosilishini tekshiring if (buttonA.uniquePress()) ( switch_mode(); return; ) if (buttonB.uniquePress()) ( display_date(); ) delay(1); counter- -; ) ) fade_down(); ) /// aylantirish xabari - hozir ishlatilmaydi - juda sekin. void scroll() (char message = ("Salom"); cls(); bayt p = 6; //satrdagi joriy pos bayt chara = (0, 1, 2, 3, 4, 5); //belgilar string dan int = (0, 6, 12, 24, 30); ) ( //(bayt c = 0; c) uchun barcha 6 ta belgini chizing< 6; c++) { putnormalchar(x[c],y,message[ chara[c] ]); //draw a line of pixels turned off after each char,otherwise the gaps between the chars have pixels left in them from the previous char for (byte yy = 0 ; yy < 8; yy ++) { plot(x[c] + 5, yy, 0); } //take one off each chars position x[c] = x[c] - 1; } //reset a char if it"s gone off screen for (byte i = 0; i <= 5; i++) { if (x[i] < -5) { x[i] = 31; chara[i] = p; p++; } } } } //display_date - print the day of week, date and month with a flashing cursor effect void display_date() { cls(); //read the date from the DS1307 byte dow = rtc; // day of week 0 = Sunday byte date = rtc; byte month = rtc - 1; //array of month names to print on the display. Some are shortened as we only have 8 characters across to play with char monthnames = { "January", "February", "March", "April", "May", "June", "July", "August", "Sept", "October", "November", "December" }; //print the day name //get length of text in pixels, that way we can centre it on the display by divindin the remaining pixels b2 and using that as an offset byte len = 0; while(daysfull) { len++; }; byte offset = (31 - ((len-1)*4)) / 2; //our offset to centre up the text //print the name int i = 0; while(daysfull[i]) { puttinychar((i*4) + offset , 1, daysfull[i]); i++; } delay(1000); fade_down(); cls(); // print date numerals char buffer; itoa(date,buffer,10); offset = 10; //offset to centre text if 3 chars - e.g. 3rd // first work out date 2 letter suffix - eg st, nd, rd, th etc // char suffix={"st", "nd", "rd", "th" }; is defined at top of code byte s = 3; if(date == 1 || date == 21 || date == 31) { s = 0; } else if (date == 2 || date == 22) { s = 1; } else if (date == 3 || date == 23) { s = 2; } //print the 1st date number puttinychar(0+offset, 1, buffer); //if date is under 10 - then we only have 1 digit so set positions of sufix etc one character nearer byte suffixposx = 4; //if date over 9 then print second number and set xpos of suffix to be 1 char further away if (date >9)( suffixposx = 8; puttinychar(4+offset, 1, bufer); ofset = 8; //agar 4 ta belgidan iborat boʻlsa, matn markaziga ofset ) //2 qoʻshimcha belgisini chop eting puttinychar(suffixposx+offset, 1, suffix[s) ]); puttinychar(suffixposx+4+offset, 1, suffix[s]); kechikish (1000); fade_down(); //oy nomini chop eting //matn uzunligini piksellarda oling, shunda qolgan piksellarni b2 bo'lish orqali uni displeyda markazlashtiramiz va uni ofset sifatida ishlatamiz len = 0; while(oy nomlari) ( len++; ); ofset = (31 - ((len-1)*4)) / 2; //matnni markazlashtirish uchun ofsetimiz i = 0; while(oy nomlari[i]) ( puttinychar((i*4) +ofset, 1, oy nomlari[i]); i++; ) kechikish(1000); fade_down(); ) //soat rejimini o‘zgartirish uchun dislpay menyusi void switch_mode() ( //biz ishlayotganimizni eslab qolish rejimi. Agar sozlamalar rejimiga o‘tsak, biz ushbu qiymatdan foydalanamiz, shuning uchun sozlash rejimidan (6) qaysi rejimga o‘tishimiz mumkin. in. old_mode = clock_mode char* modes = ("Basic", "Small", "Words", "Setup" 1 bayt = 1/tugmachani kutish (taym-out) X rejimiga qaytish; ) uchun (int count = 0; count< 35 ; count++) { //if user hits button, change the clock_mode if (buttonA.uniquePress() || firstrun == 1) { count = 0; cls(); if (firstrun == 0) { clock_mode++; } if (clock_mode >NUM_DISPLAY_MODES + 1) ( clock_mode = 0; ) //birinchi qatorda strelkani va joriy soat_rejimi nomini va ikkinchi qatorda keyingi soat_rejimi nomini chop eting char str_top; //strcpy (str_top, "-"); strcpy (str_top, rejimlar); keyingi_soat_rejimi = soat_rejimi + 1; agar (keyingi_soat_rejimi > NUM_DISPLAY_MODE + 1) (keyingi_soat_rejimi = 0; ) bayt i = 0; while (str_top[i]) ( putnormalchar(i * 6, 0, str_top[i]); i++; ) firstrun = 0; ) kechikish (50); ) ) //run_mode haqiqiy baytni qaytarar ekan, asosiy tsiklni ishga tushiring run_mode() ( //agar tasodifiy rejim yoqilgan boʻlsa... rejimni oʻzgartirganimizda soatni tekshiring. if (tasodifiy_rejim) ( //agar soat qiymatini oʻzgartirish rejimida boʻlsa. vaqt = soat, keyin false = ya'ni chiqish rejimi agar (change_mode_time == rtc) ( //keyingi tasodifiy soat rejimini va uni o'zgartirish uchun vaqtni o'rnating set_next_random(); //joriy rejimdan chiqish. 0; ) ) / else return 1 - bu rejimda ishlashni davom eting return 1 ) //keyingi soatni o'rnating, agar tasodifiy rejimda bo'lsa, soat rejimi o'zgaradi set_next_random() ( //keyingi soatni o'rnating - joriy vaqt plyus; 1 - 4 soat get_time(); change_mode_time = rtc + tasodifiy (1, 5); , 4); // yangi soat rejimini o'rnatish clock_mode = random(0, NUM_DISPLAY_MODES + 1); //soat sozlamalarini o'zgartirish uchun dislpay menyusi void setup_menu() ( char* set_modes = ( " Rndom", "24 Hr", "Set", "Brght", "Chiqish"); agar (ampm == 0) ( set_modes = ("12 Hr"); ) bayt sozlamalari_rejimi = 0; bayt next_setting_mode; bayt birinchi ishga tushirish = 1; //tugmachani kutish davri (X rejimiga qaytish uchun 35 tsikldan so‘ng vaqt tugashi) for(int count=0; count)< 35 ; count++) { //if user hits button, change the clock_mode if(buttonA.uniquePress() || firstrun == 1){ count = 0; cls(); if (firstrun == 0) { setting_mode++; } if (setting_mode >NUM_SETTINGS_MODES) ( settings_mode = 0; ) //birinchi qatorda strelka va joriy soat_rejimi nomini chop eting va ikkinchi qatorda keyingi soat_rejimi nomini str_top belgisini chop eting; strcpy (str_top, set_modes); next_setting_mode = sozlash_rejimi + 1; agar (keyingi_sozlama_rejimi > NUM_SETTINGS_MODLAR) (keyingi_sozlama_rejimi = 0; ) bayt i = 0; while(str_top[i]) ( putnormalchar(i*6, 0, str_top[i]); i++; ) firstrun = 0; ) kechikish (50); ) //rejimni o'zgartirishni tanlang(setting_mode)( 0-holat: set_tasodifiy(); tanaffus; 1-holat: set_ampm(); tanaffus; 2-holat: set_time(); tanaffus; 3-holat: set_intensity(); tanaffus; 4-holat: //menyudan chiqish ) //soatni 6-rejimdan (sozlamalar) clock_mode=old_modedan oldingi holatga o'zgartiring; ) //tasodifiy rejimni almashtirish - har bir necha soatda boshqa soat rejimini tanlang void set_random())( cls(); char text_a = "Off"; char text_b = "On"; bayt i = 0; //agar tasodifiy rejim bo'lsa yoqilgan bo'lsa, uni o'chiring, agar (tasodifiy_rejim)( //tasodifiy rejimni o'chirish random_mode = 0; //displeyda xabarni chop etish while(text_a[i]) ( putnormalchar((i*6), 0, text_a[i] ) ; i++; ) ) else ( //tasodifiy rejimni yoqing. random_mode = 1; //soat rejimi oʻzgaradi set_next_random(); //displeyda xabar chop etish while(text_b[i]) ( putnormalchar((i) * 6), 0, text_b[i]); ) ) kechikish(1500); //xabarni bir soniyagacha qoldiring ) //12 yoki 24 soatlik vaqtni belgilang set_ampm ( // AM/ PM yoki 24 soatlik soat rejimi - bitni aylantiring (ampm rejimi uchun 0 ni 1 ga yoki 1 ni 0 ga aylantiradi) ampm = (ampm ^ 1) //ekran intensivligini o'zgartirish void set_intensity() ( cls(); bayt i = 0); char text = "Bright" while(text[i]) ( puttinychar((i*4)+4, 0, text[i]); i++; ) //tugmacha kiritishni kuting (! buttonA.uniquePress() )) ( daraja paneli (0,6,(intensivlik*2)+2,2); //intensivlik darajasini satr sifatida ko'rsatish paytida (buttonB.isPressed()) ( if(intensity == 15) ( intensivlik = 0; cls (); ) else ( intensivlik++; ) //yangi qiymatni chop eting i = 0; while(text[i]) ( puttinychar((i*4)+4, 0, text[i]); i++; ) //intensivlik darajasini satr sathi sifatida ko‘rsatish (0,6,(intensivlik*2)+ 2,2); // displeydagi yorqinlik sozlamalarini o'zgartiring (bayt manzili = 0; manzil< 4; address++) { lc.setIntensity(address, intensity); } delay(150); } } } // display a horizontal bar on the screen at offset xposr by ypos with height and width of xbar, ybar void levelbar (byte xpos, byte ypos, byte xbar, byte ybar) { for (byte x = 0; x < xbar; x++) { for (byte y = 0; y <= ybar; y++) { plot(x+xpos, y+ypos, 1); } } } //set time and date routine void set_time() { cls(); //fill settings with current clock values read from clock get_time(); byte set_min = rtc; byte set_hr = rtc; byte set_date = rtc; byte set_mnth = rtc; int set_yr = rtc; //Set function - we pass in: which "set" message to show at top, current value, reset value, and rollover limit. set_date = set_value(2, set_date, 1, 31); set_mnth = set_value(3, set_mnth, 1, 12); set_yr = set_value(4, set_yr, 2013, 2099); set_hr = set_value(1, set_hr, 0, 23); set_min = set_value(0, set_min, 0, 59); ds1307.adjust(DateTime(set_yr, set_mnth, set_date, set_hr, set_min)); cls(); } //used to set min, hr, date, month, year values. pass //message = which "set" message to print, //current value = current value of property we are setting //reset_value = what to reset value to if to rolls over. E.g. mins roll from 60 to 0, months from 12 to 1 //rollover limit = when value rolls over int set_value(byte message, int current_value, int reset_value, int rollover_limit){ cls(); char messages = { "Set Mins", "Set Hour", "Set Day", "Set Mnth", "Set Year"}; //Print "set xyz" top line byte i = 0; while(messages[i]) { puttinychar(i*4 , 1, messages[i]); i++; } delay(2000); cls(); //print digits bottom line char buffer = " "; itoa(current_value,buffer,10); puttinychar(0 , 1, buffer); puttinychar(4 , 1, buffer); puttinychar(8 , 1, buffer); puttinychar(12, 1, buffer); delay(300); //wait for button input while (!buttonA.uniquePress()) { while (buttonB.isPressed()){ if(current_value < rollover_limit) { current_value++; } else { current_value = reset_value; } //print the new value itoa(current_value, buffer ,10); puttinychar(0 , 1, buffer); puttinychar(4 , 1, buffer); puttinychar(8 , 1, buffer); puttinychar(12, 1, buffer); delay(150); } } return current_value; } void get_time() { //get time DateTime now = ds1307.now(); //save time to array rtc = now.year(); rtc = now.month(); rtc = now.day(); rtc = now.dayOfWeek(); //returns 0-6 where 0 = Sunday rtc = now.hour(); rtc = now.minute(); rtc = now.second(); //flash arduino led on pin 13 every second //if ((rtc % 2) == 0) { // digitalWrite(13, HIGH); //} //else { // digitalWrite(13, LOW); //} //print the time to the serial port - useful for debuging RTC issues /* Serial.print(rtc); Serial.print(":"); Serial.print(rtc); Serial.print(":"); Serial.println(rtc); */ }

Endi qurilmadagi ishni yakunlash uchun siz faqat bir qator oddiy operatsiyalarni bajarishingiz kerak:


Dastur kodini kompilyatsiya qilish va uni mikrokontroller xotirasiga keyingi yuklash biroz vaqtni oladi, odatda bir daqiqadan ko'p emas. Operatsiyaning muvaffaqiyatli yakunlanganligi haqida Arduino IDE konsolida xabar beriladi. Shundan so'ng, qurilmadagi Reset tugmasi yordamida Arduino-ni qayta ishga tushirish qoladi - LED matritsalarida oddiy soat tayyor!

Arduino uchun tayyor soat

Soat ikkita tugma yordamida o'rnatiladi. Qurilma 12 va 24 soatlik vaqt formatlarini qo'llab-quvvatlaydi, haftaning sanasi va kunini ko'rsatadi va vaqtni soniyali yoki soniyasiz ko'rsatadi. Bundan tashqari, LEDlarning yorqinligini o'zgartirish mumkin.


Ehtimol, kelajakda qo'shimcha funktsiyalarni (masalan, termometr) qo'shishni xohlaysiz yoki qurilmani o'zingizning dizayningizdagi korpusga o'rnatasiz - lazerli kesish mashinalari yordamida yaxshi natijalarga erishish mumkin. Ammo endi ishonch bilan ayta olasizki, siz o'z qo'llaringiz bilan to'liq elektron soatni yig'dingiz!

Soat + radio + meteo + masofadan boshqarish pulti

Men uzoq vaqtdan beri RGB matritsalari yordamida soat yasashni xohlardim. GMT2088 matritsalari topildi va buyurtma qilindi. Ammo ular aytganidek, ishtaha ovqatlanish bilan birga keladi. Hatto rangli soat ham zerikarli bo'lgani uchun, FM-tyuner, ekvalayzer, namlik, harorat va bosim sensorlarini ulashga qaror qilindi. Asosiy tarmoq kuchlanishi yo'qolgan taqdirda ham batareyalardan ishlash mumkin.

Natijada quyidagi soat paydo bo'ldi:




Qizil LEDlarda siz 4 ta yorug'lik nuqtalarini ko'rishingiz mumkin, bu sizning ko'zingizdagi to'rtburchak emas va bu kameraning nosozliklari emas, faqat monitorning LCD matritsasi oldida joylashgan matritsalar oldiga ikkita plyonka kiritilgan; va diodning porlashi 4 qismga bo'linadi. Agar siz filmlarning bir-biriga nisbatan joylashuvi bilan o'ynasangiz, siz juda ko'p turli xil displeylarni olishingiz mumkin. Surat sifati yomon, lekin asosiy narsa ko'rinadi.

Soatni sozlash imkoniyatlari:

1. Qabul qilingan radiostansiyaning displey rangi. Stansiyaning butun va kasr qiymatlari uchun o'zingizning rangingizni o'rnatishingiz mumkin.

2. O'rmalovchi chiziq rangini o'rnatish.

3. Ticker tezligini o'zgartirish.

4. Soat displey rangini moslashtiring. Har bir belgini o'z rangiga o'rnatishingiz mumkin.

5. Radio diapazoni 65 MGts dan 108 MGts gacha. Xotirada 20 tagacha radiostantsiyani saqlaydi.

6. Har bir stansiya uchun ovoz, shuningdek, ekvalayzer sozlamalari alohida saqlanadi.

7. Uyg'otuvchi soatlar 7. Siz yoqilgan vaqtni, o'chirish vaqtini, ovoz balandligini, yoqilgan kunlarni, ovoz kuchayishi yoki ko'tarilmasligini va radio stantsiyani yoki signalni yoqish uchun sozlashingiz mumkin.

8. Past va yuqori chastotalarni sozlash.

9. 8 shriftgacha soatni ko'rsatish uchun shriftni tanlang, siz o'zingizning shriftlaringizni yuklashingiz mumkin.

10. Matritsa yorqinligini avtomatik yoki qo'lda sozlash.

A) Yorug'lik darajasiga qarab to'liq avtomatik

B) Masofadan boshqarish pultidagi tugmalardan yoki soatning o'zidan qo'lda foydalanish

B) Belgilangan vaqtda. Minimal va maksimal yorqinlik uchun yoqish vaqtini o'rnatadi.

11. Soatning zaxira akkumulyatorining zaryadini kuzatish.

12. Masofadan boshqarish pulti yordamida soatni boshqarish. Masofadan boshqarishni o'rganish imkoniyati yaratildi (NEC, RC5, SAMSUNG formatlari)

13. Vaqtni o'zgartirishda ramzni almashtirishning 6 ta varianti tuzildi. (qo'shimcha variantlar keyinroq qo'shiladi)

14. Asosiy ta'minot kuchlanishini nazorat qilish. U yo'qolganda, u zaxira batareyaga o'tadi va paydo bo'lganda, batareyani o'chiradi.

15. Maksimal oraliq 99 minut bo'lgan o'chirish taymeri. Radio ovozini o'chiradi.

16. Yorqinlikning minimal va maksimal chegaralarini o'rnatish.

17. Ichkarida va tashqarisida harorat haqida ma'lumot bilan sudraluvchi chiziqni majburiy ko'rsatish

Dasturiy ta'minot AVR Studio'da to'liq montaj tilida yozilgan. Ehtimol, biror joyda dastur unchalik malakali yozilmagandir, chunki men assemblerni bir yildan ko'proq vaqt davomida o'rganyapman, keyin esa faqat bo'sh vaqtimda, lekin asosiysi u barqaror va tez ishlaydi.

Qurilmaning yuragi 16 MGts chastotali AVR Atmega32 hisoblanadi. Soat ikki doskada yasaladi. Tasma bilan bitta matritsada. Ikkinchisida hamma narsa.

Matritsalarni ustunlar bo'yicha nazorat qilish TSSOP-24 paketidagi STP16CP05 registrlariga beriladi. Ushbu registrlar 16 ta chiqishga ega va har bir chiqishdagi yuk 80 mA gacha. String boshqaruv dekoderi 74HC138. Dekoderning chiqishiga IRF7314 dala effektli tranzistorlar o'rnatilgan.RGB modullari taxtaga lehimlanmagan, lekin ulagichlarga o'rnatilgan.

Bu soat DS3231 real vaqtda soat chipidan foydalanadi. Tanlov unga tashqi kvarts kerak emasligi sababli tushdi, chunki u o'rnatilgan harorat kompensatsiyasiga ega bo'lgan juda aniq kvarts rezonatoriga ega va harorat sensori ham o'rnatilgan.

FM radiosi RDA5807 chipida amalga oshiriladi. Ushbu mikrosxema juda yaxshi sezgirlikka ega.

AM2321 tayyor moduli namlik sensori sifatida ishlatiladi. Bosim sensori sifatida tayyor BMP180 moduli ishlatiladi. Ushbu sensorlarda harorat sensori ham mavjud.

Sensor BMP180:

AM2321 moduli:


TEA6330T chipi ekvalayzer sifatida ishlatiladi. Ovoz balandligini sozlash va bosh va yuqori chastotalarni sozlash uchun javobgardir.

Quvvat kuchaytirgichi PAM8403 yordamida ishlab chiqariladi. Chip kichik, lekin etarli quvvat ishlab chiqaradi. Chiqishga 8 Ohm 2 Vt karnaylar ulangan. 4 ohmli dinamiklarni ham ulashingiz mumkin. 8 ohmda chiqish quvvati taxminan 1,6 Vtni tashkil qiladi. 4 Ohm dinamikda 3 Vt.

Soat akkumulyatordan avtonom ishlashga mo'ljallangan. L12T1P31 markasi 3,7V 3700 mA / soat batareya o'rnatildi.

Tarmoq kuchlanishi ishlamay qolganda, matritsalarning yorqinligi avtomatik ravishda minimal darajaga o'rnatiladi. Agar yorqinlikni avtomatik sozlash rejimi mavjud bo'lsa, u qo'lda bilan almashtiriladi. Tarmoq kuchlanishi bo'lmaganda yorqinlikni sozlash qobiliyati saqlanib qoladi. Avtomatik rejimni ham yoqishingiz mumkin. Tarmoq kuchlanishi tiklanganda, yorqinlik tarmoqdagi kuchlanish muvaffaqiyatsiz tugashidan oldin o'rnatilgan darajaga qaytadi.

Yorqinligi pasaygan soat rejimida batareyadan ishlash vaqti taxminan 15 soatni tashkil qiladi. Maksimal yorqinlik, keng shrift, o'rtacha radio ovozi bilan ishlash vaqti taxminan 5 soat.

Batareya kuchlanishini nazorat qilish amalga oshirildi. Chunki ichki batareya boshqaruvchisi kuchlanish 2,5 V dan past bo'lganida uni o'chiradi va kuchlanish 3,2 V dan pastga tushganda konvertor noto'g'ri ishlay boshlaydi va uning chiqishi faqat 5 V ni tashkil qiladi. Soat cheksiz resetga o'tadi. Shuning uchun konvertor uchun minimal kuchlanishga tushmaslik uchun 3,2V kuchlanish chegarasi tanlangan. Agar kuchlanish 3,2V dan pastga tushsa, soat quvvatsizlanadi.

Kengash BU48xx tipidagi ixtisoslashtirilgan kuchlanishni boshqarish chipini o'rnatish imkoniyatini beradi. Ushbu sxemada BU4832 3,2 V ni boshqaradi.

Batareya zaryadini kuzatish MS TP4056 da yig'ilgan. 3,7V dan 12V gacha bo'lgan kuchlanish konvertori LM3488 da yig'ilgan.

3 va 2 pinli batareyalarni ham o'rnatish mumkin. Agar sizga batareya haroratini nazorat qilish kerak bo'lmasa, unda biz ba'zi elementlarni o'rnatmaymiz (batafsil ma'lumot uchun diagrammaga qarang) barcha taxtali diagrammalar va proshivkalar maqolaning oxirida.

Zaxira akkumulyatorining kuchlanishini boshqarish uchun R13 R14 elementlariga ajratuvchi o'rnatilgan.

Avtomatik rejimda yoritishni boshqarish uchun R1 R10 R11 R12 elementlariga ajratuvchi o'rnatilgan.

Q1 Q2 R19-R22 elementlarida daraja moslamasi yig'iladi, chunki ba'zi ms lar 3V kuchlanishdan, ba'zilari esa 5V dan quvvatlanadi.

Asosiy modul, RGB matritsa moduli va tashqi harorat sensori modulining diagrammasidan boshlash uchun

Tayyor RGB matritsa taxtasining bir nechta fotosuratlari. Ikki tomonlama shisha tolali plitalardan yasalgan taxtalar. Nosozliklarni tuzatish jarayonida ba'zi yaxshilanishlar amalga oshirildi. Shuning uchun, ba'zi fotosuratlar arxivdagi taxtalardan bir oz farq qiladi. Barcha o'zgarishlar arxivda hisobga olinadi.

Kengashning pastki tomoni:


Pastki tomonda 2,4 kOhm rezistorlar oddiygina pinlarga lehimlangan.

O'rnatilgan qoliplarsiz ustki tomoni:


Yon ko'rinish:


Tepadan ko'rinish:


Raqamlarni o'zgartirish effektlari (videoda barcha effektlar ko'rsatilmagan)

Soat boshqaruvi


Soatni birinchi marta yoqqaningizda, uni faqat tugmalar yordamida boshqarishingiz mumkin. Masofadan boshqarish pultini boshqarish uchun masofadan boshqarish pultidagi soat signallarini o'rgatish kerak. Buning uchun boshqaruv tugmalaridan birini bosib ushlab turing va "Qayta tiklash" tugmasini bosing."Masofadan boshqarish pultini o'rnatish" o'tish chizig'i ishga tushadi va biz masofadan boshqarish pultining birinchi formati - NEC ekranini ko'ramiz. Odatiy bo'lib, birinchi NEC protokoli matritsalarda ko'rsatiladi. Soat orqasidagi tugmalardan birini bosib, protokollarni sanab o'ting. Protokollar NEC - Samsung - RC5 aylanasida o'zgaradi.




Yuqorida yozganimdek, NEC protokoli sukut bo'yicha o'rnatiladi. Masofadan boshqarish pultini oling va undagi istalgan tugmani bosing. Agar tanlangan protokol va masofadan boshqarish protokoli mos kelsa, yozuv yashil rangga aylanadi va keyin qurilma masofadan boshqarishni o'rganish rejimiga o'tadi. Agar protokollar mos kelmasa, matritsalarda hech qanday o'zgarishlar bo'lmaydi va yozuv ko'k rangda qoladi. Biz keyingi protokolga o'tamiz va masofadan boshqarish pultidagi istalgan tugmani yana bosamiz.
Protokol ta'rifi masofadan boshqarish tugmachasini birinchi bosgandan boshlab ishlashi kerak. Agar u masofadan boshqarish tugmachasini ikkinchi marta yoki undan ko'p bosganda ishlayotgan bo'lsa, u holda protokollar mos kelmaydi va siz boshqa protokolni tanlashingiz kerak.
NEC va Samsung protokollari biroz o'xshash bo'lgani uchun NEC formatidagi masofadan boshqarish pultini Samsung protokoli rejimida o'rgatish mumkin, lekin siz bir xil tugmani ikki marta bosishingiz kerak bo'ladi. Kelajakda pulsni o'lchash oraliqlarini sozlashga harakat qilaman va ehtimol bu o'chiriladi.

RC5 protokoli eng oddiy hisoblanadi. Ushbu rejimda siz har qanday masofadan boshqarish pultini o'rgatishingiz mumkin, ammo u normal ishlamaydi. Ushbu rejimda faqat RC5 protokoli masofadan boshqarish pulti normal ishlaydi.
Masofadan boshqarish protokollari o'rtasidagi farq haqida ko'plab maqolalar yozilgan va men bu erda hammasini tasvirlamayman.

Protokolni aniqlagandan so'ng, dastur masofadan boshqarish tugmachasini o'rganish rejimiga o'tadi. Matritsalar ko'rsatiladi qaysi tugmani bosish kerak. Kutish rejimida belgining rangi ko'k bo'ladi.


Masofadan boshqarish pultidagi tugmani bosing. Agar ma'lumotlar muvaffaqiyatli qabul qilinsa, belgining rangi yashil rangga aylanadi:


Agar ma'lumotlar xato bilan qabul qilingan bo'lsa, rang bir necha soniya davomida qizil rangga aylanadi, so'ngra qurilma yana tugma bosilishini kutadi.


Oxirgi so'ralgan tugma bosilgandan so'ng. Soat asosiy ish rejimiga o'tadi. Agar sensor yoki real vaqtda chip o'rnatilmagan bo'lsa, "Hech qanday sensor topilmadi" ishlaydigan chiziq doimiy ravishda ko'rsatiladi. Agar siz DS3231-ni o'rnatmasangiz va sensorlardan birortasini o'rnatmasangiz, matritsalarda faqat miltillovchi nuqtalar ko'rsatiladi.

Quyidagi tavsif masofadan boshqarish pulti uchun bo'ladi. Tugmalarni boshqarish uchun alohida tavsif bo'ladi, chunki masofadan boshqarish pultidan foydalanib siz to'g'ridan-to'g'ri kerakli menyuga o'tishingiz mumkin, lekin tugmalar yordamida siz faqat ketma-ket boshidan bir menyuga, keyin boshqasiga va hokazo. doira.

Masofadan boshqarish pultini o'rnatgandan so'ng biz ko'rsatilgan vaqtni ko'ramiz. Ushbu rejimdan siz turli xil menyularga o'tishingiz mumkin. Dastur o'rnatilgan TEA6330 va RDA5807 mikrosxemalarini boshqarishni ta'minlaydi. Agar biron-bir mikrosxema o'rnatilmagan bo'lsa, uning sozlamalari menyusiga o'tish mumkin bo'lmaydi va "Ekvalayzer topilmadi" yoki "Radio topilmadi" tegishli sudraluvchi qator kiritiladi.

Masofadan boshqarish pulti tugmalarining ishlashi tavsifi:

Yoqish / o'chirish tugmasi - yoqish - matritsani o'chirish

Yuqoriga va pastga o'q tugmalari - matritsa yorqinligini sozlash yoki sozlash rejimida ma'lumotlarni o'zgartirish. Ushbu tugmaning yorqinligi barcha menyularda sozlangan.

Chap strelka yoki o'ng strelka tugmasi - vaqtni ko'rsatish rejimida shriftni o'zgartiradi va signalni sozlash rejimida signal pastki menyusi bo'ylab harakatlanadi

"1" tugmasi - "Soat" menyusi

"2" tugmasi - "Radio" menyusi

"3" tugmasi - "Ogohlantirishlar" menyusi

"4" tugmasi - "Ekvalayzer" menyusi

"5" tugmasi - sudraluvchi chiziqni ko'rsatish

A) bir marta bosish barcha sensorlardan olingan ma'lumotlarni ko'rsatadi

B) 3 soniya ichida ikki marta bosish faqat tashqi haroratni ko'rsatadi.

"6" tugmasi - "O'chirish taymer" menyusi

"8" tugmasi - minimal va maksimal yorqinlikni o'rnatish / tiklash

"9" tugmasi - soniyalarni tiklash va Internet orqali vaqtni to'g'rilash

"0" tugmasi - yorqinlikni avtomatik yoki qo'lda sozlash

CH+ va CH tugmalari - FM rejimida radiostansiyalar bo'ylab harakatlanish

Ovoz + va ovoz tugmasi - ovoz balandligini boshqarish

Ovozni yoqish/o'chirish tugmasi - ovozni yoqish/o'chirish

"MENU" tugmasi - vaqt rejimida asosiy sozlamalarga o'ting, radio rejimida radio sozlamalariga va signal rejimida signal sozlamalariga o'ting

"ESC" tugmasi - pastki menyudan chiqish

O'tish qurilma qaysi rejimda ekanligiga bog'liq. Agar siz "Vaqt" rejimida bo'lsangiz, u holda o'tish asosiy sozlamalarga o'tadi. Agar "Radio" rejimida bo'lsa, radio sozlamalariga o'ting. Agar "Signallar" rejimida bo'lsa, u holda signal sozlamalarida

"OK" tugmasi - sozlash rejimlarida o'zgarishlarni tasdiqlash

Soatda vaqtni ko'rsatish uchun 8 ta shrift mavjud. Masofadan boshqarish pultining "Chap" yoki "O'ng" tugmalari yoki soat panelidagi S6 yordamida shriftlar o'rtasida almashinish.

Keng shriftga misol:


Tor shriftga misol:


O'zingizning shriftlaringizni qo'shish

Shriftlar EEpromda saqlanadi. Maksimal 8 ta shriftni yuklab olish mumkin.

Shrift PixelFontEdit-2.7 yordamida yaratilgan
Atmel studuo6.2 uchun shriftning o'zi va Eprom manbasi sahifaning oxiridagi arxivda.
Biz yorliqdan shriftlarni qo'shamiz eeFront1:
Shriftlar soni 8 tadan oshmaydi; Dasturning o'zi yuklab olingan shriftlar sonini aniqlaydi.
Shriftlarning oxirida qator bo'lishi kerak .db "E", "N", "D" shriftlarning oxirini bildiradi.
Xatlar OXIRI katta yoki kichik bo'lishi mumkin, lekin lotincha.
Biz EEprom faylini kompilyatsiya qilamiz va uni flesh qilamiz. Siz darhol barcha qiymatlaringizni har bir satr uchun batafsil sharhlar bilan EEprom-ga kiritishingiz mumkin.
Shrift shuningdek, qaysi nuqtalar soat va daqiqalarni ajratishini ham belgilaydi. Bu faqat har bir shriftning birinchi belgisida o'rnatiladi.
Birinchi belgida, agar birinchi baytning bit0 i o'rnatilgan bo'lsa, u ikki barobar bo'ladi, agar u tozalansa, u bitta bo'ladi.

Sozlamalar vaqtni ko'rsatish rejimida

Ushbu menyuda "Yuqoriga" va "Pastga" tugmalari yordamida parametrlarni o'zgartiring va "OK" tugmasi bilan o'zgarishlarni tasdiqlang. Siz istalgan vaqtda "ESC" tugmasini bosib sozlamalardan chiqishingiz mumkin.

"Menyu" tugmasini bosing va "Asosiy sozlamalar" o'tish chizig'i, keyin esa "Radio rangi" qatori ishga tushadi. FM diapazonining butun qismi miltillaydi, kerakli rangni o'rnatish uchun "Yuqoriga" yoki "Pastga" tugmalaridan foydalaning va "OK" tugmasini bosing. FM diapazonining kasr qismi miltillay boshlaydi. Shuningdek, kerakli rangni o'rnating va "OK" tugmasini bosing.



Agar o'rnatilgan bo'lsa fotosuratda bo'lgani kabi o'rmalovchi chiziq uchun rang varianti:


Keyin, sudraluvchi chiziq ko'rsatilganda, uning rangi har safar yangi bo'ladi.

Keyinchalik, "Soatni o'rnatish" qatori paydo bo'ladi. Soat qiymati miltillay boshlaydi. Joriy soatni belgilash uchun "Yuqoriga" yoki "Pastga" tugmalaridan foydalaning va "OK" tugmasini bosing. Daqiqalar miltillay boshlaydi. Joriy daqiqalarni belgilash uchun "Yuqoriga" yoki "Pastga" tugmalaridan foydalaning va "OK" tugmasini bosing.


Keyinchalik, "Soat rangi" qatori paydo bo'ladi. Ushbu menyuda siz har bir soat belgisi uchun boshqa rangni o'rnatishingiz mumkin. "Yuqoriga" yoki "Pastga" tugmalari yordamida rangni tanlang. Hammasi bo'lib 7 ta rang varianti mavjud. Sakkizinchi variant - o'zgaruvchan ranglar bilan ko'p rangli belgi. Kerakli rangni tanlaganingizdan so'ng, "OK" tugmasini bosing. Keyin, quyidagi belgilar uchun rangni o'rnating va "OK" tugmasini bosing.


Joriy sanani belgilash uchun "Yuqoriga" yoki "Pastga" tugmalaridan foydalaning va "OK" tugmasini bosing.




Keyinchalik, "Hafta kunini belgilash" qatori paydo bo'ladi. Hafta kunlari Sun - Sunday, Sat - Saturday, Fri - Friday va boshqalar qisqartmasida ko'rsatiladi. Haftaning joriy kunini belgilash uchun "Yuqoriga" yoki "Pastga" tugmalaridan foydalaning va "OK" tugmasini bosing. Bu asosiy sozlashni yakunlaydi.


Keyinchalik, sudraluvchi chiziq haftaning joriy kuni, sana, yil, bosim, harorat va namlik bilan ishlaydi. Qurilma vaqtni ko'rsatish rejimiga o'tadi. Ushbu rejimda taxminan 4 daqiqadan so'ng xonadagi harorat, bosim va namlik haqida ma'lumotni aks ettiruvchi o'rmalovchi chiziq paydo bo'ladi. Barcha sensorlar ma'lumotlarini ko'rsatish, masofadan boshqarish pultidagi "5" tugmasi. Har 15 daqiqada tashqaridagi harorat va namlik haqidagi chiziq ko'rsatiladi (kerakli intervalni o'zingiz belgilashingiz mumkin, quyida batafsilroq). yugurish chizig'i. Har uchta sensorda harorat sensori mavjud bo'lganligi sababli, ma'lumotlar o'rnatilgan sensordan o'qiladi. Odatiy bo'lib, harorat DS3221 dan o'qiladi.

Radio rejimi.

Ushbu rejimga o'tish masofadan boshqarish pultidagi "2" tugmasini bosish orqali amalga oshiriladi. Radio diapazoni 65 MGts - 108 MGts.

Ushbu rejimda ticker ham taxminan 4 daqiqadan so'ng ishlaydi.

Quyidagi menyu ko'rsatiladi:


Birinchi to'rtta raqam - qabul qilingan stantsiyaning chastotasi. "M" yoki "C" harfi qabul qilingan signal mono yoki stereo ekanligini bildiradi. Qizil rangdagi harf ostida qabul qilingan signal darajasi ko'rsatilgan. Ovoz balandligi eng quyida ko'rsatiladi "CH+" va "CH-" tugmalari yordamida sozlangan stantsiyalar bo'ylab harakatlaning va "Gr+" va "Gr-" tugmalari yordamida ovoz balandligini sozlang. Ovoz balandligi har bir stantsiya uchun alohida saqlanadi. Shuningdek, HF va LF ekvalayzer sozlamalari har bir stantsiya uchun alohida saqlanadi. Ekvalayzer rejimiga o'tish uchun masofadan boshqarish pultidagi "4" tugmasini bosing (sozlama quyida tavsiflangan).

Radioni sozlash rejimiga o'tish uchun masofadan boshqarish pultidagi "Menyu" tugmasini bosing. "Radio sozlamalari" belgisi ko'rsatiladi.

Stereo yoki Mono belgisi qizil rangga aylanadi. Ijro rejimida u ko'k rangda. Agar 15 soniya ichida hech qanday tugma bosilmasa, qurilma radio tinglash rejimiga o'tadi.


Stansiya chastotasini o'zgartirish masofadan boshqarish pultidagi "CH+" va "CH-" tugmalari va "Chap" "O'ng" tugmalari yordamida amalga oshiriladi.

76-108 MGts oralig'ida "Chap" va "O'ng" tugmachalari diapazonni 1 MGts ga o'zgartiradi va masofadan boshqarish pultidagi "CH-" va "CH+" tugmalari diapazonni 0,1 MGts ga o'zgartiradi.
65-76 MGts oralig'ida "Chap" va "O'ng" tugmachalari diapazonni 0,1 MGts ga, masofadan boshqarish pultidagi "CH-" va "CH+" tugmalari diapazonni 0,01 MGts ga o'zgartiradi.

"Gr+" va "Gr-" tugmalari yordamida ovoz balandligini sozlang. Kerakli chastota va ovoz balandligini tanlagandan so'ng, "OK" tugmasini bosing. Joriy stantsiyani yozish uchun katak ko'rsatiladi. Agar hujayrada allaqachon yozilgan stantsiya mavjud bo'lsa, uning raqami qizil rangda bo'ladi.



Agar hujayra bo'sh bo'lsa, u yashil bo'ladi


"CH+" va "CH-" tugmalari yordamida kerakli katakchani tanlang. Yozish uchun jami 20 ta hujayra mavjud. Kerakli katakchani tanlagandan so'ng, "OK" tugmasini bosing. Stansiya chastotasi va ovoz balandligi hujayrada qayd etiladi. Qurilma sozlash rejimiga qaytadi. O'rnatish rejimidan chiqish uchun "ESC" tugmasini bosing yoki 15 soniya davomida hech narsani bosmang. Qurilma radio tinglash rejimiga kiradi.

Signallarni o'rnatish

Masofadan boshqarish pultidagi "3" tugmasi yordamida signalni sozlash rejimiga o'ting. "Signallar" belgisi ko'rsatiladi. Agar 15 soniya ichida hech qanday tugma bosilmasa, qurilma vaqtni ko'rsatish rejimiga o'tadi.

Signal menyusiga o'tganimizdan so'ng biz quyidagilarni ko'ramiz:


B1 signal raqamini bildiradi. Ularning jami ettitasi bor. Raqamdan keyingi chiziqchalar signal yoqilmaganligini bildiradi. Budilnikni o'zgartirish uchun "Chap" va "O'ng" tugmalaridan foydalaning. Agar budilnik o'chirilgan bo'lsa, budilnikni yoqish uchun "OK" tugmasini bosing signallar yoqilganligini bildiruvchi yonadi va qo'ng'iroq paydo bo'ladi.


Endi siz signal sozlamalarini ko'rishingiz mumkin bo'lsa. Har bir budilnik uchun menyu to'rt qismga bo'lingan. Birinchi qismda ish vaqti va ovoz balandligi sozlanadi. Ikkinchi qismda o'chirish vaqti va ovoz rejimi sozlangan: chiziqli yoki ortib boruvchi. Uchinchi qismda yoqilishi kerak bo'lgan stantsiya sozlangan yoki signal tanlanadi. To'rtinchi qismda siz signalni yoqish uchun kunlarni tanlaysiz. "O'ng" tugmasini bosing va birinchi qism oldimizda paydo bo'ladi.


Bu erda signal vaqti ko'rsatiladi. Pastki o'ng burchakda yoqilgan ovoz balandligi mavjud. Sozlamalarni o'zgartirish uchun "OK" tugmasini bosing. Yoqilgan soat miltillay boshlaydi. Qiymatni o'zgartirish uchun "Chap" va "O'ng" tugmalaridan foydalaning va "OK" tugmasini bosing. Biz barcha to'rtta parametrni shunday sozlaymiz.

Ovoz balandligini sozlagandan so'ng, "OK" tugmasini bosing. Bu budilnikning birinchi qismida sozlashni yakunlaydi.

Ushbu qismda siz o'chirish vaqtini va signal o'chganda yoki chiziqli bo'lganda ortib ketadigan ovoz balandligini belgilashingiz mumkin.

Chiziqli hajm o'ng tomonda to'rtburchaklar shaklida ko'rsatiladi:


Yalpi o'sishImkoniyatlar uchburchak shaklida ko'rsatiladi:


Barcha o'rnatish bosqichlari birinchi qismdagi kabi.

Ovoz balandligi sozlamalari haqida bir oz. Birinchi menyuda biz ovoz balandligini o'rnatdik. Agar chiziqli ovoz balandligi ikkinchi qismda o'rnatilgan bo'lsa, signal o'chganda, maksimal tovush birinchi qismda o'rnatilgan bo'ladi. Agar ovoz balandligini oshirishga o'rnatilgan bo'lsa, signal o'chganda, minimal qiymatdan ovoz balandligi asta-sekin birinchi qismda belgilangan qiymatga oshadi.

Ikkinchi qismni o'rnatgandan so'ng, "O'ng" tugmasini bosing va budilnik sozlamalarining uchinchi qismiga o'ting.


Ushbu qismda biz radio stantsiyani yoqish uchun sozlaymiz yoki BEEP yozuviga o'tish orqali signalni tanlaymiz.


Oldingi qismlardagi kabi bir xil tugmalar yordamida sozlamalar. Stansiyalar faqat "Radio" rejimida sozlanganlardan tanlanadi.

Uchinchi qismni o'rnatgandan so'ng, "O'ng" tugmasini bosing va budilnik sozlamalarining to'rtinchi qismiga o'ting.

Bu erda biz signalni yoqish kunlarini belgilaymiz.


Haftaning kunlari raqamlar bilan ko'rsatilgan. 1 - dushanba, 2 - seshanba, 3 - chorshanba va boshqalar.

"OK" tugmasini bosing va masofadan boshqarish pulti birinchi belgini miltillashni boshlaydi. Haftaning kunini yoqish yoki o'chirish uchun masofadan boshqarish pultidagi "Chap" yoki "O'ng" tugmalaridan foydalaning. Kun davomida yashil rang ishlatiladi, qizil rang ishlatilmaydi. Quyida, faollashtirilgan kun ostida LED yonadi. Haftaning qaysi kuni ishlatilishini ko'rish uchun oddiy LEDlarda soatlarni yig'ganlar uchun yaratilgan.

Sozlagandan so'ng, masofadan boshqarish pultidagi "O'ng" tugmasini bosing va keyingi budilnikga o'ting yoki "ESC" tugmasini bosing va vaqtni ko'rsatish rejimiga chiqing.

Signal o'chganda, LED yonadi. Budilnik ishlayotgan vaqtda "O'chirish" tugmasini bossangiz, masofadan boshqarish pultidagi LED miltillashdan to'xtaydi va o'chirish vaqti yetganda, ya'ni budilnik bekor qilinganda budilnik o'chmaydi.

Ekvalayzer sozlamalari

Masofadan boshqarish pultidagi "4" tugmasini bosib ekvalayzer sozlamalari menyusiga o'ting. “Ekvalayzer” belgisi ishlaydi, bu rejimda past va yuqori chastotalar sozlanadi. Ekvalayzer sozlamalari har bir radiokanal uchun alohida saqlanadi. Agar 15 soniya ichida tugmalardan hech biri bosilmasa, tizim vaqtni ko'rsatish rejimiga o'tadi.

Kerakli chastotalarni sozlash uchun masofadan boshqarish pultidagi "Chap" yoki "O'ng" tugmasini bosing.

Maksimal bosh va yuqori chastotani sozlash:



Past yoki yuqori o'tkazuvchan filtrni o'zgartirish uchun "OK" tugmasini bosing. Chapdagi chiziq miltillay boshlaydi. Qiymatni o'zgartirish uchun "Chap" va "O'ng" tugmalaridan foydalaning. Belgilangan qiymatni saqlash uchun masofadan boshqarish pultidagi “OK” tugmasini bosing. Qiymatga qarab, darajani ko'rsatadigan ko'rsatkichlar va raqamlarning rangi ham o'zgaradi. Maksimal qiymatga yaqinroq ular qizil bo'ladi. Minimal qiymatga yaqinroq ko'k, o'rta diapazonda esa yashil rangga ega.

Past chastotani sozlash minimal:


Bass sozlamalari o'rtacha qiymati:


Minimal yorqinlik chegarasini o'rnatish/o'chirish

Odatiy bo'lib, yorqinlik maksimaldan ko'rsatkichlarni to'liq o'chirishgacha o'rnatiladi. Lekin bu avtomatik rejimda juda qulay emas. To'liq zulmatda ko'rsatkichlar o'chadi va hech narsa ko'rinmaydi. Shuning uchun bu rejim minimal nashrida belgilanganidan past yoki yuqoriga tushmasligi uchun yaratilgan

Yorqinlik chegaralarini o'rnatish menyusiga o'tish uchun masofadan boshqarish pultidagi 8 tugmasini bosing.

Birinchisi minimal yorqinlik chegarasini o'rnatadi.


Masofadan boshqarish pultidagi "Yuqoriga" "Pastga" tugmalaridan foydalanib, kerakli yorqinlikni o'rnating va masofadan boshqarish pultidagi "OK" tugmasini bosing. Uzoq signal bo'ladi signal va minimal yorqinlik chegarasi qayd etiladi.


Masofadan boshqarish pultidagi "Yuqoriga" "Pastga" tugmalaridan foydalanib, kerakli yorqinlikni o'rnating va masofadan boshqarish pultidagi "OK" tugmasini bosing.

Signal uzoq vaqt davomida eshitiladi va minimal yorqinlik chegarasi yoziladi.

Keyingi bo'limda siz minimal yorqinlikni yoqish vaqtini, so'ngra maksimal yorqinlikni yoqish vaqtini o'rnatasiz.

Masofadan boshqarish pultining "ESC" sozlamalari menyusidan chiqing. Endi yorug'likni sozlashda uni belgilangan chegaradan quyuqroq yoki engilroq qilish mumkin bo'lmaydi va avtomatik rejimda yorqinlik belgilanganidan past yoki yuqori bo'lmaydi.

Masofadan boshqarish pultidagi yorqinlikni avtomatik sozlash rejimini faollashtirish uchun avtomatik ish rejimiga o'tish uchun “0” tugmasini bosing. Soatning old tomonidagi LED yonadi.

Haqiqiy vaqtda yorqinlikni sozlash uchun yorug'lik, minimal va maksimal yorqinlikni yoqish vaqtlari teng bo'lishi kerak. Aks holda, yorqinlik tanlangan vaqtga qarab o'rnatiladi. Yorqinlik minimal darajadan maksimal darajaga va aksincha silliq o'zgaradi.

Yorqinlik chegarasini tiklash uchun yorqinlik chegarasi sozlamalari menyusiga yana kiring va barcha chegaralar qayta o'rnatiladi.

Tugmalardan chegarani o'rnatish uchun quyidagi 8-bandni o'qing.

Tugmachani boshqarish

Soatning orqa tomonida S4-S9 tugmalari mavjud. Qaysi menyuda ekanligimizga qarab, tugmalarning vazifasi o'zgaradi.

S8 tugmasi turli menyularga o'tadi. Kerakli menyuga o'tish uchun S8 tugmasini bosing va ushlab turing. Kerakli miqdordagi signaldan so'ng, signalni qo'ying va tanlangan menyuga o'ting. Qo'ng'iroq signallari soni masofadan boshqarish tugmasi soniga mos keladi. Agar 4 ta signal bo'lsa, biz "Ekvalayzer" menyusiga o'tamiz, agar 1 signal bo'lsa, vaqtni ko'rsatish menyusi va hokazo.

1. Soat menyusidagi tugmalar funksiyalari:

S6 shriftini o'zgartirish

S7 soniyalarni qayta o'rnatadi va internet orqali vaqtni yangilaydi

S9 asosiy sozlamalarga o'ting.

S9 tugmasini bosganingizda biz sozlamalar menyusiga o'tamiz. Ushbu menyuda tugmalar S4 va S5 parametrni o'zgartiradi, S6 tugmasi keyingi sozlanishi parametrga o'tadi. Menyudan chiqishning iloji yo'q, siz barcha moslashtirilgan parametrlardan o'tishingiz kerak bo'ladi.

Oxirgi parametrni o'rnatgandan so'ng, ticker ishlaydi va qurilma vaqtni ko'rsatish rejimiga qaytadi.

2. Radio menyusidagi tugmalar funksiyalari:

S4 va S5 ovozini sozlash "+" va "-"

S6 va S7 konfiguratsiya qilingan "+" va "-" kanallari orqali o'tish

S9 radio sozlash rejimiga o'tish

Sozlamalar menyusida tugma amallari:

S4 va S5 ovozini sozlash "+" va "-"

S6 va S7 radio stantsiyasining chastotasini "+" va "-" o'zgartiradi

S9 stansiyani xotiraga yozib olish menyusiga o'tadi. Xotira katak raqamini o'zgartirish uchun S6 va S7 tugmalaridan foydalaning va yozishni tasdiqlash uchun S9 tugmasidan foydalaning.

Sozlamalar menyusidan chiqish - hech qanday tugmani bosmang va chiqish 15-20 soniyadan keyin avtomatik bo'ladi.

3. Signal sozlamalari menyusidagi tugmalar funksiyalari:

S4 va S5 "+" va "-" signallari bo'ylab harakatlanmoqda

S6 va S7 ishlatilmaydi

S9 Signalni yoqing va o'chiring

Budilnik yoqilgan bo'lsa, yoqilgan budilnikning asosiy sozlamalariga o'tish uchun S4 tugmasini bosing. Budilnik S4 va S5 pastki menyusidan o'ting. Parametrni sozlash uchun S9 va S4 tugmasini bosing va S5 parametrni o'zgartiring. S9 ni keyingi bosish keyingi sozlanishi parametrga o'tadi. Qurilma 15 soniya ichida signal sozlamalaridan avtomatik ravishda chiqadi. hech qanday tugma bosilmaydi.

4. Ekvalayzer menyusidagi tugmalarning vazifalari:

S4 va S5 moslashtirilgan parametrlar bo'ylab harakatlanadi.

S6 tanlangan parametrni o'zgartirish rejimiga kiradi. Ushbu rejimda S4 va S5 parametrni o'zgartiradi va S6 o'zgarishni tasdiqlaydi.

S7 ishlatilmaydi.

Hech qanday tugma bosilmasa, rejim 15 soniyadan so'ng avtomatik ravishda o'chadi.

6. Uyqu taymer menyusidagi tugmalar funksiyalari:

S4 va S5 o'chirish vaqt oralig'ini 5 daqiqalik bosqichlarda o'rnatadi. 0 daqiqalik interval taymer o'chirilganligini bildiradi

S6 vaqtni ko'rsatish menyusiga chiqing.

7. Bepul. Ehtimol, u kelajakda qo'llaniladi.

8. Yorqinlik chegarasini sozlash menyusidagi tugmalar funksiyalari:

S4 va S5 yorqinligi o'zgaradi.

Tanlangan yorqinlikni S6 tasdiqlash.

S7 sozlamalaridan chiqish.

9. Bepul. Ehtimol, u kelajakda qo'llaniladi.

Amaldagi qismlar va ularni almashtirish va sozlash haqida bir oz.

Barcha SMD elementlari standart o'lchamdagi 0805. U1 LM317ADJ stabilizatori stabilizatsiya kuchlanishi 3 volt bo'lgan har qanday bilan almashtirilishi mumkin, masalan, ASM1117-30. Bunday holda, R18 ni jumper bilan almashtiring va R17 ni o'rnatmang. 5V U8 LM2576-5 stabilizatori LM2596-5 bilan almashtirilishi mumkin. LEDlar D6 D7 D11 D12 D13 o'lchami 2835. Rezistor R24 ​​signal tovushini o'rnatadi. R44 R45 rezistorlari bilan ishlatiladigan batareya uchun zaryad oqimini o'rnatishni unutmang (diagrammadagi jadvalga qarang). Zaryadlash oqimi yuqori bo'lsa, men TP4056 ga radiator o'rnatishni maslahat beraman. R38 va R49 rezistorlari maksimal hajmni cheklash yoki jumperlar bilan almashtirilishi mumkin. Diagrammada ko'rsatilganidek, C28 C29 C42 C43 kondansatkichlarini TEA6330T jabduqlariga o'rnating. Konteynerdan u yoki bu yo'nalishda uzoqlashish chastotani sozlash diapazonini o'zgartiradi. C28 va C43 LF uchun, C29 va C42 esa HF uchun javobgardir. Men 6.8nF C29 va C42 RF chastotalarini o'rnatishga harakat qildim, deyarli o'zgarmaydi. R28 R33 R31 rezistorlari konvertorning chiqishidagi kuchlanishni o'zgartirishi mumkin. Diagrammada ko'rsatilgan qiymatlarda kuchlanish 11,86V ni tashkil qiladi.

Kuchlanish quyidagi formula bo'yicha hisoblanadi:

Uout=1,26*(1+((R33+R28)/R31))

Schottky diodlari D4 D5 D1 D8 D10 2A oqim uchun har qanday bilan almashtirilishi mumkin. Zener diyot D3 4,3V, 4,7V yoki 5V har qanday stabilizatsiya kuchlanishida to'xtatilishi mumkin.

Yoqib yuborilgan kontrollerlar va sensorlardan xafa bo'lmaslik uchun barcha kuchlanish stabilizatorlarini o'rnatish va ularning funksionalligini tekshirish orqali o'rnatishni boshlash yaxshiroqdir. Keyin konvertorni o'rnatish va LM3488 ning 8-oyog'iga 3,2-5V kuchlanishni qo'llash orqali uni sinab ko'rish yaxshiroqdir. Chiqish taxminan 12 V bo'lishi kerak.

Keyinchalik, batareyani zaryad qilish va batareya kuchlanishini kuzatish va funksionallikni tekshirish uchun elementlarni o'rnatamiz. 2 simli batareya uchun biz R39 ni o'rnatmaymiz va R43 ni jumper bilan almashtiramiz. Batareya haroratini nazorat qilish kerak bo'lmasa, biz 3-sim uchun ham xuddi shunday qilamiz. Batareyaning o'rta terminali osilgan holda qoladi. Agar haroratni nazorat qilish kerak bo'lsa, unda biz barcha elementlarni o'rnatamiz, garchi R43 o'rnatilmasligi mumkin, chunki u akkumulyator termistoriga parallel ravishda ulanadi va ishlashga katta ta'sir qilmaydi.

Batareya kuchlanish regulyatori TL431 va LM358 da yig'ilgan. 2,5 V kuchlanishli mos yozuvlar manbai TL431 da yig'ilgan, bu kuchlanish LM358 ning 2-piniga beriladi va batareyadan kuchlanish R58 R62 bo'luvchisi orqali LM358 ning 3-piniga beriladi. batareyada 3,2 dan past bo'lsa, 3-pinda kuchlanish ham 2,5 voltdan past bo'ladi va 1-pinda 0 bo'ladi Q9 yopiladi. Ijobiy kuchlanish Q8 bazasiga R56 R51 orqali beriladi. Q8 tranzistor Q7.1 ni yopadi va o'chiradi, butun platani quvvatsizlantiradi. O'chirilgandan so'ng, soatni ishga tushirish faqat tashqi quvvat manbai ulanganda mumkin bo'ladi, chunki LM358 tashqi quvvat manbaidan quvvatlanadi.

Agar BU4832 chipi bo'lsa, unda biz TL431 LM358, ularning jabduqlari va R56 ni o'rnatmaymiz. Agar biz TL431 va LM358 da yig'adigan bo'lsak, u holda biz R53 ni o'rnatmaymiz va javob chegarasini R58 R62 bo'luvchi bilan sozlashimiz kerak bo'lishi mumkin. Agar asosiy quvvat mavjud bo'lsa, batareya zaryadlanishi kerak va konvertorning chiqishida kuchlanish bo'lmasligi kerak. Agar akkumulyator kuchlanishi 3,2 voltdan yuqori bo'lsa, u holda Q9 tranzistorining bazasida u taxminan 0,7-0,8 V bo'lishi kerak.

Endi biz zaxira quvvat manbaining ishlashini tekshiramiz. Birinchidan, biz asosiy manbadan kontaktlarning zanglashiga olib boramiz. Keyin biz uni tarmoqdan uzamiz va konvertorning chiqishida 12V paydo bo'lishi kerak. Agar konvertor ishga tushmasa, Q9 ga asoslangan narsaga qarang. Agar u erda kuchlanish 0,7V dan kam bo'lsa va batareya zaryadlangan bo'lsa, biz LM358 ning 2-pinidagi kuchlanishni o'lchaymiz, 2,5V va 3-pinda 2,5V dan yuqori bo'lishi kerak. Har bir narsa normal bo'lsa, u holda LM358 noto'g'ri yoki unga quvvat ulanmagan. O'chirish chegarasi R62 sozlanishi mumkin. Uning reytingi oshishi bilan o'chirish chegarasi oshadi, ya'ni batareyaning chuqurroq zaryadsizlanishi bilan qurilma to'liq quvvatsizlanadi. Denominatsiyaning pasayishi bilan chegara kamayadi.

C6 C11 C21 C20 C37 kondansatkichlari past ESR bilan foydalanish uchun tavsiya etiladi.

Agar hamma narsa ishlayotgan bo'lsa, biz protsessorni o'rnatamiz, uni miltillaymiz va boshqa barcha elementlarni o'rnatamiz.. Mikrodastur qulayligi uchun platada ISP ulagichi uchun kontaktlar mavjud. ISP uchun GND pinini har qanday qulay joyda lehimlaymiz.

LED ko'rsatkichi

LED D11 yonadi, bu avtomatik yorqinlikni sozlash rejimi o'rnatilganligini bildiradi. Qo'lda sozlash ishlamaydi. Rejim masofadan boshqarish pultidagi "0" tugmasi yordamida almashtiriladi.

LED D12 yonadi, ya'ni signallar yoqilgan. Agar u miltillasa, signal o'chdi.

LED D13 yonadi, ya'ni soat zaxira batareyasini almashtirish kerak. Batareyani olib tashlasangiz ham, vaqt qayta o'rnatilmaydi, chunki kondansatkichlarning zaryadlanishi tufayli DS3231 bir muncha vaqt quvvatlanadi. Shunday qilib, batareyani almashtirish uchun taxminan 5 daqiqa vaqtingiz bor.

LED D6 yonadi, ya'ni batareya zaryadlanmoqda

LED D7 yonadi, ya'ni batareya zaryadlangan.

Agar ikkala LED D6 va D7 yonmasa, bu soat ichki batareyada ishlayotganligini anglatadi.

Biz bosilgan elektron platalarni (PCB) ishlab chiqaramiz

Dinamiklarni ulashda kichik hisob-kitoblar bor edi, men kerak bo'lgandan ko'ra ko'proq kesiklar qildim va ularni qanday ulashni qiyinlashtirdim. Arxiv kengashga kiritilgan barcha o'zgarishlarni hisobga oladi.

WI-FI bilan plataning versiyasi.



Men salbiy fotorezist yordamida bosilgan elektron platalar qilaman. Men Epson L800 inkjet printer yordamida plyonkada shablonni chop etamansalbiy tarzda. Men ish qismini Pemolux kukuni yordamida tozalayman. Men nam ish qismiga plyonkali fotorezistni qo'llayman. Orqada tanqisligi Men laminatorni 1-bo'limga o'rnatilgan dazmol bilan dazmollayman. Men shablonni qo'llayman va uni har biri 20 Vt bo'lgan uchta UV chiroq bilan 1 daqiqa 10 soniya davomida yoritaman. Keyinchalik, yana dazmollang, so'ngra tozalanmagan joylarni yuving va laklang. Men tashqi aloqa yostiqchalarida bir nechta teshiklarni burg'ulayman va shablonning bir xil joylarida ponksiyonlar qilaman. Kengash va shablon ignalar yordamida birlashtiriladi. Ikkinchi tomoni chizilgan. Birinchisi lenta bilan yopishtirilgan.

Biz teshiklarni burg'ulaymiz. Men odatda 0,4 mm diametrli o'tish teshiklarini burg'ulash va ularga lehim simlarini burg'ulash. Biz elementlarni lehimlaymiz.

WI-FI bilan tayyor taxtaning fotosurati



Keyinchalik nima uchun ishlamayotganini izlamaslik uchun biz o'rnatishga ko'proq e'tibor beramiz. Ba'zi chiqish elementlarini ikkala tomondan lehimlash kerak. Ushbu elementlarning xulosalari vitesga o'xshaydi. Yo'llar bilan aloqa qilmaslik yoki uni Atmega32 tomoniga lehimlash uchun taxtadagi kvarts ostida yopishqoq lenta yoki elektr tasmasini yopishtirishingiz kerak.

Korpus 4 mm yumshoq plastmassadan qilingan. Foydali pichoq bilan mukammal kesiladi. LEDlar chuqur joylashganligi sababli, yorug'lik qo'llanmalari kerak. Avtomobil lampalaridan qutining qopqog'i yorug'lik qo'llanmasi sifatida ishlatilgan. Korpus CorelDRAW-da chizilgan, oddiy qog'ozga bosilgan va ikki tomonlama lenta yordamida plastmassaga mahkamlangan va kesilgan. Biz hamma narsani qutiga yashiramiz va antennani vidalaymiz:


Sensorlar yuqoridan chiqib turadi:


Bu normal ko'rinishi va datchiklar shunchaki tanadan chiqib ketmasligi uchun avtomobil do'konida davlat raqamini biriktirish uchun to'plam sotib olindi va kuzovning tepasiga aks ettiruvchi qopqoqlar yopishtirilgan.

Bu shunday chiqdi:


Hammasi shu kabi ko'rinadi. Biz RDS dan ma'lumot chiqarish qobiliyatini qo'shishni rejalashtirmoqdamiz. Kodlovchilar uchun boshqa variantni ham qiling.

ESP8266 moduli uchun dastur yozilgan. Atmega32 uchun proshivka ham o'zgartirildi, arxivda hamma narsa yangilandi. Sxemaga ham o'zgartirishlar kiritildi. Atmega-dan ESP8266-ga TX RX signallari to'g'ri ulanmagan. Bu erda tasvirlangan barcha o'zgarishlar arxivdagi diagrammada hisobga olinadi.

Sxemaga kichik o'zgartirishlar kiritildi. Birlashtirilgan Atmega va ESP8266 Reset signallari. Lekin buning uchun siz kuchlanish signallariga mos kelishingiz kerak. Reset Atmega va GND o'rtasida 9,1 kOhm rezistor qo'shildi. Reset ESP8266 va 3V avtobus o'rtasidagi 10kOhm qarshilik olib tashlandi. Qayta tiklash pinidagi kuchlanish 3V-3,3V oralig'ida bo'lishi kerak.

TX RX darajasi mosligi qo'shildi. Garchi siz usiz qila olsangiz ham, men buni qoidalarga ko'ra shunday qildim.

ESP8266 modulini miltillash uchun sizga kerak:

1. Arduino IDE-ni saytdan tashqaridan yuklab oling (agar o'rnatilmagan bo'lsa)https://www.arduino.cc/en/Main/Software), o'rnatish.

2. Keyin Arduino IDE ni ishga tushiringFayl - Sozlamalar- dalada Kengashlar menejerining qo'shimcha URL manzillarihavolani barqaror versiyaga joylashtiringhttp://arduino.esp8266.com/package_esp8266com_index.json

4.B Kengashlar menejerifiltr maydoniga esp8266 kiriting yoki ro'yxatni qo'lda aylantiring va ESP8266 jamoat forumi tomonidan ESP8266 ni bosing.
O'rnatish tugmasini bosing va yuklab olish tugashini kuting (taxminan 130 megabayt).
Agar yuklab olish juda tez bo'lsa, siz ESP8266 uchun Arduino IDE-ni allaqachon o'rnatgan bo'lishingiz mumkin va Boards Manager keshini tozalashingiz kerak bo'ladi, aks holda siz hali ham eski versiyani o'rnatasiz. Avval eski versiyani o'chirib tashlashingiz kerak, keyin esa kesh fayllarini o'chirishingiz kerak. Win7 x64 uchun C:UsersUserAppDataRoamingArduino15 jildidan fayllarni o'chiring va 2-bosqichdan boshlab hamma narsani takrorlang.
Kengashlar menejerini yoping va Asboblar menyusidan Board - General ESP8266-ni tanlang

Karta ulangan ketma-ket portni tanlang. Mikrodastur faylini oching.

Men modulni miltillash uchun PL2303 dan foydalanardim. Quyidagi arxivdagi drayverlar Win 8.1 da ishlaydi. Biz drayverni qo'lda o'rnatamiz.

Siz har qanday USB-COM adapteridan foydalanishingiz mumkin.

Biz ESP 8266 modulini taxtaga lehimlaymiz. Biz modulni USB-COM adapteri bilan ulaymizTX RX signal ulanishlarikesib o'tish ya'ni TX ESP8266 dan RX ga USB-COM va RX ESP8266 dan TX USB-COMga. Jumperni XP10 ga o'rnatamiz va XP11 va XP12 jumperlarini olib tashlaymiz. Qayta tiklash-ni bosing.

Soatdagi modul uchun proshivkaga o'zgartirish kiritish kerak.

Mikrodasturda biz WI-FI tarmog'imiz nomini va uning parolini kiritamiz.

"O'ng o'q" belgisini bosing va modulning dasturiy ta'minoti boshlanadi.

Mikrodasturni tugatgandan so'ng, XP10 jumperini olib tashlang va XP11 va XP12 ni qayta o'rnating.

Kompyuteringizda va routeringizda 123 portlari ochiqligini tekshirishni tavsiya etaman.
Buni kompyuterda qilish osonroq, vaqt sozlamalarida Internet vaqti - Sozlamalarni o'zgartirish yorlig'i. Biz dalaga boramiztime.nist.govva "Hozir yangilash" tugmasini bosing. Agar vaqt muvaffaqiyatli yangilangan deb aytilsa, portlaringiz ochiq. Agar xato bo'lsa, routerdagi portlarni oching.
Mening uyimda Pomidor proshivkali ASUS RT16 routerida hamma narsa sukut bo'yicha yaxshi ishladi.
Mahalliy dasturiy ta'minotga ega Zuxel Keenetic Giga II routerida ishlayotganda, men portlarni ochishim kerak edi, garchi marshrutizatordagi vaqt Internetdan yangilangan bo'lsa ham.

Vaqt masofadan boshqarish pultidagi "9" tugmasini bosish orqali yangilanadi. Vaqtni yangilashda e'tiborga olish kerak bo'lgan yagona narsa, agar Internetga kirish imkoni bo'lmasa, soniyalarning barchasi nolga qaytariladi.
Soatni yoqqaningizdan yoki "Qayta tiklash" tugmasini bosgandan so'ng, Internet orqali vaqtni yangilash uchun siz 30 soniya kutishingiz kerak, bu vaqt modul tarmoqqa ulanishi yoki ulanish bo'lmasa, xatoni qaytarishi uchun kerak. Agar siz masofadan boshqarish pultidagi "9" tugmasini avvalroq bossangiz, hech narsa bo'lmaydi. Vaqtni sinxronlashtirish vaqtida matritsalar 1-2 soniya davomida o'chiriladi.
Agar Internetga kirish imkoni bo'lmasa, chiziq ko'rsatiladi"Op, tarmoq yo'q".
Agar tarmoqqa kirish mavjud bo'lsa, lekin aniq vaqt serveriga kirish imkoni bo'lmasa, u holda chiziq ko'rsatiladi"Vaqt serveriga kirish imkoni yo'q"

Shuningdek, "Datchik" nomi bilan yangi tarmoq paydo bo'ladi, siz uning nomini Arduino-da istalganiga o'zgartirishingiz va uning parolini o'zgartirishingiz mumkin. Ushbu tarmoqqa ko'cha sensorlari bo'lgan ikkinchi modul ulanadi.

PS. Men avtomatik sinxronizatsiyadan voz kechishga qaror qildim, chunki DS3231-ga texnik xizmat ko'rsatish juda oz vaqt va sinxronlash oyiga bir martadan ko'p bo'lmagan vaqt talab etiladi, keyin esa texnik xizmat ko'rsatish bir necha soniya davom etadi. Shuning uchun uni qo'lda qilish osonroq.

Matritsali test dasturi yozildi. Asosiy proshivka uchun sigortalar.
Hamma narsa vizual tarzda nazorat qilinadi.

Zaxira batareya holati, signalni yoqish va yorug'likni avtomatik sozlash uchun LEDlar yonishi kerak. Ovoz jim bo'lishi kerak.

1.Birinchi sinov barcha matritsali LEDlarni yoqadi. Sinov barcha ranglarda ishlaydi. Vizual ravishda siz qaysi LEDlar yoqilmasligini yoki ularning rangi boshqalardan farq qilishini aniqlashingiz mumkin, ya'ni u biron bir joyda yo'qolmagan. Sinov butunlay o'chirilgan matritsalar bilan boshlanadi.

2. Sinovning ikkinchi qismi faqat bitta LEDni yoritadi va uni R G va B uchta rangdagi barcha chiziqlar bo'ylab o'tkazadi. Faqat bitta LED yonishi kerak. Agar ikkita LED yoniq bo'lsa, bu matritsa registrlarining chiqishlarida biron bir joyda qisqa tutashuv mavjudligini anglatadi.

Elektr ta'minoti sinov rejimida kamida 2A oqimni ta'minlashi kerak, chunki yorqinlikni sozlash yo'q va iste'mol juda katta (ayniqsa rang oq bo'lsa). Agar qurilma bunday oqimni ta'minlay olmasa, sinov boshlanmaydi, ya'ni ishga tushirishga urinishlar bo'ladi va keyin qayta tiklash sodir bo'ladi.

Tashqi harorat sensori moduli.

Tashqi harorat sensori moduli ESP8266 da ishlab chiqariladi va sensor sifatida AM2321 ishlatiladi. Ushbu modulda xona harorati sensori ham mavjud. Bu, agar bir nechta bir xil soatlar yig'ilsa, ular bitta moduldan ma'lumot olishlari uchun qilingan. Tashqi modulda batareya uchun o'rnatilgan USB zaryadlash, shuningdek, batareya kuchlanishini kuzatish mavjud. Batareya kuchlanishi 3,2 voltdan pastga tushganda, LED yonadi.

Vizual xatolar nazorati ham qo'shildi.

1. Sensor AM2321 yashil LED yoniq emas

2. Sensor BME280 qizil LED yoniq emas

3. WI-FI tarmog'iga ulanish muvaffaqiyatsiz tugadi, ko'k LED yonadi



Mikrodastur soatdagi modul bilan bir xil tarzda amalga oshiriladi. Bitta narsa shundaki, dasturda ba'zi qatorlarni o'zgartirish kerak.

Harorat sensori so'rov vaqtini o'rnating. Standart 900 sek = 15 min
Qatordagi qiymatlarni o'zgartiring:

ESP.deepSleep (900*1000000, WAKE_RFCAL);// vaqt 900 soniya = 15 daqiqa
Uni o'zingizning qiymatingizga o'zgartiring. Saqlash va miltillash.

Mening modulim 1000 mA batareyadan quvvat oladi.

LED matritsalarida oddiy soat. Ko'pgina radio havaskorlari, yangi boshlanuvchilar va boshqalar "g'ildirakni qayta ixtiro qilishni" yaxshi ko'radilar - o'zlarining elektron soatlarini qurishadi. Bu taqdir meni ham ayamadi. Bugungi kunda, albatta, Internetda juda ko'p soat dizaynlari mavjud, ammo negadir ular orasida LED matritsalarida bir nechta soatlar mavjud. Rus tilida so'zlashuvchi Internetda men faqat bitta to'liq bajarilgan va tavsiflangan dizaynni topdim. Shu bilan birga, LED matritsalari endi ancha arzonlashdi va ularning narxi bir xil o'lchamdagi etti segmentli ko'rsatkichlardan yuqori emas, hatto undan ham past emas. Misol uchun, men 60x60 mm o'lchamdagi GNM23881AD 1,5 evroga sotib olingan (3 indikator 4,5 evro turadi), bu pulga siz bir xil o'lchamdagi etti segmentli to'rtta ko'rsatkichni deyarli sotib olmaysiz. Ammo matritsa ko'rsatkichiga ko'proq ma'lumot joylashtirilishi mumkin. Raqamlarga qo'shimcha ravishda ular har qanday harflarni, belgilarni va o'rmalovchi chiziq yordamida matnni ham ko'rsatishi mumkin.

Shunga asoslanib, LED matritsalarida soat qurish istagi paydo bo'ldi, ammo sxema etti segmentlilardan ko'ra murakkabroq bo'lmasligi uchun. Men ham bu juda funktsional bo'lishini va boshqalarga o'xshamasligini xohlardim. Shunday qilib, quyidagi sxema tug'ildi.

Soatning funksionalligi quyidagicha:

  • Ortga hisoblash, kalendar, haftaning kuni. (kabisa yillari hisobga olinadi, yoz/qish vaqtiga o'tish amalga oshirilmaydi).
  • Tashqi quvvat yo'qolgan taqdirda soatning saqlanishi (iste'moli 15 mikron).
  • Qon tomirlarini tuzatish + - 59,9 sek / kun, 0,1 sek. 9 signal. Ulardan 3 tasi "bir martalik" va 6 tasi "doimiy", haftaning kuniga qarab individual ravishda sozlanishi.
  • Har bir signal uchun ovozli signalning individual sozlanishi davomiyligi (1-15 daqiqa).
  • Tugmani bosishning ovozli tasdiqlanishi (o'chirilishi mumkin).
  • Soatlik signal (o'chirib qo'yish mumkin).
  • 00-00 dan 08-00 gacha signal yo'q.
  • 1 yoki 2 harorat sensori (ko'cha va uy).
  • Barcha ma'lumotlar ko'rsatiladigan moslashtirilgan ticker (vaqtdan tashqari)
  • Zaxira quvvati yo'qolsa ham, zarbani tuzatish qiymati va "ishlaydigan chiziq" sozlamalari saqlanadi.

AtMega16A soatning “yuragi” sifatida uning mavjudligi, arzonligi va “qonuniyligi” tufayli tanlandi. Men sxemani iloji boricha soddalashtirmoqchi bo'ldim, shuning uchun mumkin bo'lgan hamma narsa kontrollerga topshirildi. Natijada, biz faqat ikkita mikrosxema, kontroller va TPIC6B595 registrlari bilan ishlashga muvaffaq bo'ldik. Agar TPIC6B595 kimdir uchun mavjud bo'lmasa, uni 74HC595 + ULN2803 bilan almashtirishingiz mumkin. Ikkala variant ham sinab ko'rildi. Siz TPIC6C595 dan ham foydalanishga urinib ko'rishingiz mumkin, u biroz zaif va biroz qizib ketdi, lekin umuman olganda u barqaror ishladi. Vaqt asenkron vaqt yordamida hisoblanadi - T2. Elektr uzilishi bo'lsa ham soat ishlashda davom etadi. Bu vaqtda kontaktlarning zanglashiga olib keladigan qismi quvvatsizlanadi va boshqaruvchi batareya, akkumulyator yoki ionistordan quvvat oladi. Men ionistor bilan "o'ynashga" qiziqdim, shuning uchun men undan foydalandim. Kutish rejimida soatlar uchun joriy iste'mol 15 mikronni tashkil qiladi. 1F ionistori tomonidan quvvatlanganda soat to'rt kun davomida "davom qildi". Bu elektr uzilishlari paytida tezlikni saqlab qolish uchun etarli. Agar siz CR2032 batareyasidan foydalansangiz, nazariy jihatdan hisob-kitoblarga ko'ra, zaryad 1,5 yil davomida etarli bo'lishi kerak. Tekshirish moslamasi PB.3 pin orqali tarmoq kuchlanishining mavjudligini "tinglaydi". R2-R3 bo'linuvchisi orqali besleme kuchlanishi PB.3 piniga beriladi va normal holatda taxminan 1,5V ni tashkil qiladi. Agar tashqi kuchlanish 4,1 voltdan pastga tushsa, u holda RV.3 pinidagi kuchlanish 1,23 voltdan past bo'ladi va komparatordan uzilish hosil bo'ladi va uzilishni qayta ishlash moslamasida kontrollerning barcha "qo'shimcha" tugunlari aylantiriladi. o'chiriladi va boshqaruvchining o'zi uyqu rejimiga o'tadi. Ushbu rejimda faqat T2 taymeri ishlashda davom etadi. Tashqi quvvat paydo bo'lganda, RV.3 dagi kuchlanish yana 1,23V dan oshadi, boshqaruvchi buni "ko'rgan" barcha tugunlarni ish holatiga keltiradi. Agar ionistor o'rniga CR2032 batareyasi ishlatilsa, u diod orqali ulanishi kerak (afzalroq Schottky diodi). Diyotning anodi + batareyaga, katod esa VD1 katodiga ulangan. Oddiy rejimda ekran vaqtni soat-daqiqa formatida ko'rsatadi. Ticker bir daqiqalik interval bilan ishlay boshlaydi. Ishlayotgan chiziq haftaning kunini, sanasini, yilini, tempini ko'rsatadi. uyda va harorat. ko'chada. Ticker sozlanishi mumkin, ya'ni. Har qanday elementlarning ekranini yoqish/o'chirish mumkin. (masalan, men har doim yil ekranini o'chirib qo'yaman). Barcha elementlar o'chirilganda, belgi ishga tushmaydi va soat doimiy ravishda joriy vaqtni ko'rsatadi. 9 ta budilnik 3 ta bir martalik va 6 ta qayta foydalanishga bo'lingan. 1-3 signallarni yoqsangiz, ular faqat bir marta eshitiladi. Ular qayta ishlashi uchun ularni yana qo'lda yoqish kerak. Va budilniklar 4-9 qayta ishlatilishi mumkin, ya'ni. ular har kuni belgilangan vaqtda ishlaydi. Bundan tashqari, bu signallarni faqat haftaning ma'lum kunlarida o'chirish uchun sozlash mumkin. Bu, masalan, dam olish kunida signal sizni uyg'otishni istamasangiz, qulay. Yoki, masalan, ish kunlari soat 7-00 da, payshanba kuni esa 8-00 da uyg'onishingiz kerak, dam olish kunlari esa budilnik kerak emas. Keyin dushanba-chorshanba va juma kunlari soat 7-00 da, ikkinchisini payshanba kuni soat 8-00 da o'rnatamiz..... Bundan tashqari, barcha uyg'otuvchi soatlarda signal davomiyligi sozlamalari mavjud va agar siz, tartibda uyg'onish uchun, 1 daqiqa uchun etarli signal yo'q , keyin siz uni 1 dan 15 daqiqagacha oshirishingiz mumkin. Kurs kuniga bir marta, soat 00-00 da tuzatiladi. Agar soat tez bo'lsa, masalan, kuniga 5 soniya, keyin 00-00-00 da vaqt 23-59-55 ga o'rnatiladi, lekin agar soat sekin bo'lsa, u holda 00-00-00 da vaqt. 00-00-05 gacha o'rnatiladi. Tuzatish bosqichi - 0,1 sek. Maksimal tuzatish - 59,9 sek / kun. Ishlaydigan kvarts bilan sizga ko'proq kerak bo'lmaydi. Batareyadan quvvat olgan holda, tuzatish kutish rejimida ham amalga oshiriladi. LED matritsalari umumiy katodli har qanday 8 * 8 LEDni ishlatishi mumkin. Yuqorida aytib o'tilganidek, men GNM23881AD dan foydalanardim. Asos sifatida, siz alohida LEDlardan matritsani "yig'ishingiz" mumkin. AtMega16a mikrokontrolleri L harfi bilan "eski" AtMega16 bilan almashtirilishi mumkin. Shu bilan birga, nazariy jihatdan, batareyadan oqim iste'moli biroz oshishi kerak. Ehtimol, faqat AtMega16 ishlaydi, lekin batareya quvvati bilan ishlashda muammolar paydo bo'lishi mumkin. D1 diodi - tercihen har qanday Schottky diodi. U oddiy rektifikator bilan ham ishlaydi, lekin kontaktlarning zanglashiga olib keladigan qismi "dioddan oldin" va "dioddan keyin" bir qismi kuchlanish bilan quvvatlanishi bilan bog'liq turli xil nosozliklardan o'zingizni himoya qilish uchun uni izlash yaxshiroqdir. Shottki kuchlanishi. Transistor VT1 - har qanday n-p-n. Soat ikkita tugma bilan boshqariladi. Ularning sonini tugmalarning o'zidan tashqari boshqa komponentlar qo'shmasdan 8 donagacha oshirish mumkin edi, lekin men ikkitasi bilan "tashqariga chiqishga" harakat qilmoqchi edim. Tugmalar shartli ravishda "OK" va "STEP" deb nomlanadi. "QADAM" tugmasi odatda keyingi menyu bandiga o'tadi va "OK" tugmasi joriy menyuning parametrlarini o'zgartiradi. Qo'zg'atilgan signal signalini "OK" yoki "STEP" tugmalari yordamida ham o'chirish mumkin. Signal jiringlayotgan vaqtda istalgan tugmani bosish uni o'chiradi. Nazorat sxemasi quyidagicha chiqdi:

Hammasi qanday ishlashi haqida video!

Ko'pgina radio havaskorlari, yangi boshlanuvchilar va boshqalar "g'ildirakni qayta ixtiro qilishni" yaxshi ko'radilar - o'zlarining elektron soatlarini qurishadi. Bu taqdir meni ham ayamadi. Bugungi kunda, albatta, Internetda juda ko'p soat dizaynlari mavjud, ammo negadir ular orasida LED matritsalarida bir nechta soatlar mavjud. Rus tilida so'zlashuvchi Internetda men faqat bitta to'liq bajarilgan va tavsiflangan dizaynni topdim. Shu bilan birga, LED matritsalari endi ancha arzonlashdi va ularning narxi bir xil o'lchamdagi etti segmentli ko'rsatkichlardan yuqori emas, hatto undan ham past emas. Misol uchun, men 60x60 mm o'lchamdagi GNM23881AD 1,5 evroga sotib olingan (3 indikator 4,5 evro turadi), bu pulga siz bir xil o'lchamdagi etti segmentli to'rtta ko'rsatkichni deyarli sotib olmaysiz. Ammo matritsa ko'rsatkichiga ko'proq ma'lumot joylashtirilishi mumkin. Raqamlarga qo'shimcha ravishda ular har qanday harflarni, belgilarni va o'rmalovchi chiziq yordamida matnni ham ko'rsatishi mumkin. Shunga asoslanib, LED matritsalarida soat qurish istagi paydo bo'ldi, ammo sxema etti segmentlilardan ko'ra murakkabroq bo'lmasligi uchun. Men ham bu juda funktsional bo'lishini va boshqalarga o'xshamasligini xohlardim. Shunday qilib, quyidagi sxema tug'ildi.

Soatning funksionalligi quyidagicha:

Ortga hisoblash, kalendar, haftaning kuni. (kabisa yillari hisobga olinadi, yoz/qish vaqtiga o'tish amalga oshirilmaydi).

Tashqi quvvat yo'qolgan taqdirda soatning saqlanishi (iste'moli 15 mikron).

Qon tomirlarini tuzatish + - 59,9 sek / kun, 0,1 sek.

9 signal. Ulardan 3 tasi "bir martalik" va 6 tasi "doimiy", haftaning kuniga qarab individual ravishda sozlanishi.

Har bir signal uchun ovozli signalning individual sozlanishi davomiyligi (1-15 daqiqa).

Tugmani bosishning ovozli tasdiqlanishi (o'chirilishi mumkin).

Soatlik signal (o'chirib qo'yish mumkin). 00-00 dan 08-00 gacha signal yo'q.

1 yoki 2 harorat sensori (ko'cha va uy).

Barcha ma'lumotlar ko'rsatiladigan moslashtirilgan ticker (vaqtdan tashqari)

Zaxira quvvati yo'qolsa ham, zarbani tuzatish qiymati va "ishlaydigan chiziq" sozlamalari saqlanadi.

AtMega16A soatning “yuragi” sifatida uning mavjudligi, arzonligi va “qonuniyligi” tufayli tanlandi. Men sxemani iloji boricha soddalashtirmoqchi bo'ldim, shuning uchun mumkin bo'lgan hamma narsa kontrollerga topshirildi. Natijada, biz faqat ikkita mikrosxema, kontroller va TPIC6B595 registrlari bilan ishlashga muvaffaq bo'ldik. Agar TPIC6B595 kimdir uchun mavjud bo'lmasa, uni 74HC595 + ULN2803 bilan almashtirishingiz mumkin. Ikkala variant ham sinab ko'rildi. Siz TPIC6C595 dan ham foydalanishga urinib ko'rishingiz mumkin, u biroz zaif va biroz qizib ketdi, lekin umuman olganda u barqaror ishladi. Vaqt asenkron vaqt yordamida hisoblanadi - T2. Elektr uzilishi bo'lsa ham soat ishlashda davom etadi. Bu vaqtda kontaktlarning zanglashiga olib keladigan qismi quvvatsizlanadi va boshqaruvchi batareya, akkumulyator yoki ionistordan quvvat oladi. Men ionistor bilan "o'ynashga" qiziqdim, shuning uchun men undan foydalandim. Kutish rejimida soatlar uchun joriy iste'mol 15 mikronni tashkil qiladi. 1F ionistori tomonidan quvvatlanganda soat to'rt kun davomida "davom qildi". Bu elektr uzilishlari paytida tezlikni saqlab qolish uchun etarli. Agar siz CR2032 batareyasidan foydalansangiz, nazariy jihatdan hisob-kitoblarga ko'ra, zaryad 1,5 yil davomida etarli bo'lishi kerak. Tekshirish moslamasi PB.3 pin orqali tarmoq kuchlanishining mavjudligini "tinglaydi". R2-R3 bo'linuvchisi orqali besleme kuchlanishi PB.3 piniga beriladi va normal holatda taxminan 1,5V ni tashkil qiladi. Agar tashqi kuchlanish 4,1 voltdan pastga tushsa, u holda RV.3 pinidagi kuchlanish 1,23 voltdan past bo'ladi va komparatordan uzilish hosil bo'ladi va uzilishni qayta ishlash moslamasida kontrollerning barcha "qo'shimcha" tugunlari aylantiriladi. o'chiriladi va boshqaruvchining o'zi uyqu rejimiga o'tadi. Ushbu rejimda faqat T2 taymeri ishlashda davom etadi. Tashqi quvvat paydo bo'lganda, RV.3 dagi kuchlanish yana 1,23V dan oshadi, boshqaruvchi buni "ko'rgan" barcha tugunlarni ish holatiga keltiradi. Agar ionistor o'rniga CR2032 batareyasi ishlatilsa, u diod orqali ulanishi kerak (afzalroq Schottky diodi). Diyotning anodi + batareyaga, katod esa VD1 katodiga ulangan.

Oddiy rejimda ekran vaqtni soat-daqiqa formatida ko'rsatadi. Ticker bir daqiqalik interval bilan ishlay boshlaydi. Ishlayotgan chiziq haftaning kunini, sanasini, yilini, tempini ko'rsatadi. uyda va harorat. ko'chada. Ticker sozlanishi mumkin, ya'ni. Har qanday elementlarning ekranini yoqish/o'chirish mumkin. (masalan, men har doim yil ekranini o'chirib qo'yaman). Barcha elementlar o'chirilganda, belgi ishga tushmaydi va soat doimiy ravishda joriy vaqtni ko'rsatadi.

9 ta budilnik 3 ta bir martalik va 6 ta qayta foydalanishga bo'lingan. 1-3 signallarni yoqsangiz, ular faqat bir marta eshitiladi. Ular qayta ishlashi uchun ularni yana qo'lda yoqish kerak. Va budilniklar 4-9 qayta ishlatilishi mumkin, ya'ni. ular har kuni belgilangan vaqtda ishlaydi. Bundan tashqari, bu signallarni faqat haftaning ma'lum kunlarida o'chirish uchun sozlash mumkin. Bu, masalan, dam olish kunida signal sizni uyg'otishni istamasangiz, qulay. Yoki, masalan, ish kunlari soat 7-00 da, payshanba kuni esa 8-00 da uyg'onishingiz kerak, dam olish kunlari esa budilnik kerak emas. Keyin dushanba-chorshanba va juma kunlari soat 7-00 da, ikkinchisini payshanba kuni soat 8-00 da o'rnatamiz..... Bundan tashqari, barcha uyg'otuvchi soatlarda signal davomiyligi sozlamalari mavjud va agar siz, tartibda uyg'onish uchun, 1 daqiqa uchun etarli signal yo'q , keyin siz uni 1 dan 15 daqiqagacha oshirishingiz mumkin.

Kurs kuniga bir marta, soat 00-00 da tuzatiladi. Agar soat tez bo'lsa, masalan, kuniga 5 soniya, keyin 00-00-00 da vaqt 23-59-55 ga o'rnatiladi, lekin agar soat sekin bo'lsa, u holda 00-00-00 da vaqt. 00-00-05 gacha o'rnatiladi. Tuzatish bosqichi - 0,1 sek. Maksimal tuzatish - 59,9 sek / kun. Ishlaydigan kvarts bilan sizga ko'proq kerak bo'lmaydi. Batareyadan quvvat olgan holda, tuzatish kutish rejimida ham amalga oshiriladi.

LED matritsalari umumiy katodli har qanday 8 * 8 LEDni ishlatishi mumkin. Yuqorida aytib o'tilganidek, men GNM23881AD dan foydalanardim. Asos sifatida, siz alohida LEDlardan matritsani "yig'ishingiz" mumkin. AtMega16a mikrokontrolleri L harfi bilan "eski" AtMega16 bilan almashtirilishi mumkin. Shu bilan birga, nazariy jihatdan, batareyadan oqim iste'moli biroz oshishi kerak. Ehtimol, faqat AtMega16 ishlaydi, lekin batareya quvvati bilan ishlashda muammolar paydo bo'lishi mumkin. D1 diodi - tercihen har qanday Schottky diodi. U oddiy rektifikator bilan ham ishlaydi, lekin kontaktlarning zanglashiga olib keladigan qismi "dioddan oldin" va "dioddan keyin" bir qismi kuchlanish bilan quvvatlanishi bilan bog'liq turli xil nosozliklardan o'zingizni himoya qilish uchun uni izlash yaxshiroqdir. Shottki kuchlanishi. Transistor VT1 - har qanday n-p-n.

Soat ikkita tugma bilan boshqariladi. Ularning sonini tugmalarning o'zidan tashqari boshqa komponentlar qo'shmasdan 8 donagacha oshirish mumkin edi, lekin men ikkitasi bilan "tashqariga chiqishga" harakat qilmoqchi edim. Tugmalar shartli ravishda "OK" va "STEP" deb nomlanadi. "QADAM" tugmasi odatda keyingi menyu bandiga o'tadi va "OK" tugmasi joriy menyuning parametrlarini o'zgartiradi. Qo'zg'atilgan signal signalini "OK" yoki "STEP" tugmalari yordamida ham o'chirish mumkin. Signal jiringlayotgan vaqtda istalgan tugmani bosish uni o'chiradi. Nazorat sxemasi quyidagicha chiqdi:

Strukturaviy ravishda, soat bitta PCBda ishlab chiqariladi. PPning o'lchami ko'rsatkichlar hajmiga mos keladi. PP yo'llarining minimal kengligi 0,4 mm, ular orasidagi masofa 0,4 mm. Shunday qilib, LUTni sevuvchilar osongina taxtani o'zlari qilishlari mumkin.

Internetda har xil turdagi elektron soatlar kam emas. Matritsa ko'rsatkichlari bo'lgan soat qattiq ko'rinadi, masalan, radio mushukining taniqli sxemasi, lekin men uning nafaqat soat va daqiqalarni, balki soniyalarni ham ko'rsatishini xohlardim. Men boshqa funktsiyalarni qo'shib, bunday soatni yaratishga qaror qildim.

Bu yerda taqdim etilgan elektron soat xona haroratini ham o‘lchash imkonini beradi. To'rtta mustaqil budilnik, shuningdek, yubiley, tug'ilgan kun va boshqalar kabi voqealar boshlanishini bildiruvchi taqvim voqealari ko'rsatkichi mavjud. Yorqinlikni qo'lda va avtomatik ravishda o'zgartirishga imkon beradi, bu esa qorong'uda idrok qilish qulayligini keskin yaxshilaydi. , va nihoyat, ular har qanday ARB masofadan boshqarish pulti yoki mahalliy tugmalar tomonidan boshqariladi.

Asosiy xususiyatlar:

  • Ta'minot kuchlanishi (V) ………… .…………………… 5
  • Joriy iste'mol (mA) …………………………………. 100 - 200
  • Matritsaning umumiy hajmi (piksel) …………………… 8 x 40
  • O'lchangan harorat chegaralari (daraja) …….…. -40 - +99,5
  • Haroratni o'lchash aniqligi (daraja)………..0.5
  • Kundalik tezlikni tuzatish chegaralari (sekundlar) …………. -9,9 - +9,9
  • Yorqinlikning o'zgarishi gradatsiyalari soni ………………………… 31 + "avtomatik" rejim
  • Signallar soni………………………………. 4
  • Har bir budilnik matnining hajmi (belgilar)……….. 11
  • Voqea ko'rsatkichlari soni…………………….. 14
  • Har bir voqea (belgilar) uchun matn miqdori ............ 15
  • Rejimlarni boshqarish………………………………… Tugmalar/har qanday masofadan boshqarish pulti orqali

Soatning sxematik diagrammasi shartli ravishda quyidagi rasmlarda ko'rsatilgan indikator va "nazoratchi" qismlarga bo'linadi. Elementlarning raqamlanishi bir xil va bundan keyin tavsiflash paytida biz sxemani bir butun sifatida ko'rib chiqamiz.

Displey sxemasi

Boshqarish sxemasi

Registrlarni haqiqiy boshqarish mikrokontroller (MK) DD7 ning uchta porti orqali, TMR0 taymeridan 2 ms oraliqdagi uzilishlarda amalga oshiriladi, bu umumiy ma'lumotni o'zgartirish chastotasi 63 Gts ni ta'minlaydi. Bundan tashqari, ko'rsatkichlarning yorqinligini o'zgartirish uchun MK dan DD6 ning 9-piniga (chiqishlarni yoqish / o'chirish) PWM signali yuboriladi. DD7 MK PIC16F88 tipidagi bo'lib, u mashhur PIC16F628A dan ADC mavjudligi va dastur xotirasining ikki barobar ko'p sig'imi bilan farq qiladi. MK ichki osilatordan 8 MGts chastotada ishlaydi (628A dan boshqa farq).

Qurilma DS1307 real vaqt rejimidagi soat chipidan foydalanadi, u soniyalar, daqiqalar, soatlar, haftaning kuni, sana (jumladan, 0 dan 99 gacha bo'lgan yilni) hisoblash va saqlashni ta'minlaydi. Dastlabki ishga tushirish vaqtida DS1307 MK ning RB0 kirishiga beriladigan 7-pinda 1 Gts chastotali kvadrat to'lqin mavjud bo'lgan rejimga sozlangan. Ushbu kirish soniyada bir marta maxsus bayroq o'rnatilgan uzilishni ta'minlaydi. Asosiy dasturda ushbu bayroq yordamida asosiy harakatlar soniyada bir marta amalga oshiriladi: DS1307-dan ma'lumotlarni o'qish, vaqtni ko'rsatish, signallar va hodisa ko'rsatkichlarining mos kelishini tekshirish, avtomatik rejimda yorqinlikni o'rnatish. BAT1 qo'shimcha batareyasi deyarli cheksiz vaqt davomida qurilmaga quvvat manbai bo'lmaganda ma'lumotlarni tejash imkonini beradi. MK DS1307 ni RB1, RB2 portlari bilan I2C avtobusi orqali boshqaradi. Harorat sensori, DS1621 mikrosxema ham I2C orqali boshqariladi.

Qurilma RA4, RA2 MK portlariga ulangan S1 va S2 tugmalari yordamida boshqariladi. S1 tugmachasining funktsiyalari TSOP48 tipidagi DA1 qabul qilgichidagi sxema va D-flip-flop DD8.1 va C8, R47 va D1 elementlarida bir martalik o'qni ishlatib, BRA-dan istalgan masofadan boshqarish pulti yordamida amalga oshirilishi mumkin. Bir martalik signalning davomiyligi 0,2 s ni tashkil qiladi, bu DA1 chiqishidagi qisqa impulslarning portlashlarini qisqa bosilganda shu vaqtdagi impulslarga va masofadan boshqarish pultidagi istalgan tugmani bosib turganda uzluksiz signalga aylanishini ta'minlaydi. D2 diodi orqali tetikning teskari chiqishidan signal S1 tugmachasini takrorlaydi. R48, HL6 elementlaridan foydalanib, ushbu faktning ko'rsatkichi tashkil etilgan.

DD8.2 mikrosxemasining ikkinchi triggeri va LS1 piezokeramik emitteri budilnik yoki hodisa indikatori ishga tushirilganda ovozli signalizatsiya sxemasini yig'ish uchun ishlatiladi. Triggerning hisoblash kirishi 8 kHz chastotali MK chiqishidan PWM signalini oladi. Triggerning R va S birlashgan kirishlarida mantiqiy 1 signal mavjud bo'lsa, mantiq 1 ikkala chiqishda ham mavjud va ovoz yo'q. Ko'rsatkich hodisasi sodir bo'lganda, 1 Gts chastotali MK ushbu kirishlarda darajani o'zgartiradi va bu chastotali tetik chiqishlarida 4000 Gts chastotali antifazali impulslar paydo bo'ladi. Ushbu chastota ma'lum bir emitent uchun rezonansli bo'lganligi sababli, baland ovozli intervalgacha signal paydo bo'ladi. Haddan tashqari yorqinlik qiymatlarida ham PWM pulsini saqlab qolish uchun dasturiy ta'minot choralari ko'rildi.

Yorug'lik sensori FR1, R45 va C6 elementlariga yig'ilgan. O'rnatilgan ADC yordamida MK ushbu ajratgichdan yorug'likka bog'liq kuchlanishni o'qiydi va PWM signalining tegishli ish aylanishini o'rnatadi.

Qurilma J1 konnektoriga beriladigan +5V kuchlanishdan quvvatlanadi, so'ngra R41C3C4, R42C5, C7R46 filtr zanjirlari orqali elektron elementlarga ulanadi. R49 D3 sxemasi qurilmani haddan tashqari yoki teskari kuchlanishning tasodifiy ulanishidan himoya qiladi. IP sifatida 5 voltlik smartfon zaryadlovchi qurilmasidan foydalanish qulay.

Qurilma 60 mm dan 170 mm gacha bo'lgan bir tomonlama metallizatsiyalangan shisha tolali bosilgan elektron plataga yig'ilgan.

DD1-DD5 SO16 korpusida, DD6 - SOIC20 korpusida ishlatiladi. DD8 DIP paketida ishlatiladi. Uni mahalliy K561TM2 bilan almashtirish mumkin. DD9, DD10 - SO8 korpuslarida. Deyarli barcha SMD rezistorlari va kondansatkichlari 0805 o'lchamli, C1, C7, C3, C5 o'lchami 1206. Eski anakartdan kvarts rezonatorini lehimdan ajratish yaxshiroqdir - ular odatda barqarorroq. Fotorezistor FR1, boshqasi bilan almashtirilganda, taxminan 1 - 2 MOhm qorong'i qarshilikka ega bo'lishi kerak. BAT1 CR2032 batareyasi standart ushlagichga o'rnatilgan. Uni har qanday mos o'lchamdagi 3V kuchlanish bilan almashtirish mumkin. Piezo emitentni boshqasiga almashtirishda rezonans chastotasi 4000 Gts ga yaqin bo'lishi juda ma'qul. Fotodetektorni eski televizordan olib tashlash mumkin. LED - har qanday yorqin, qizil chiroq. Diyotlarni KD521, KD522 bilan almashtirish mumkin. Zener diodi - kuchlanish 5,6V va tercihen kamida 1 Vt quvvatga ega. Amaldagi matritsa ko'rsatkichlari umumiy anodga ega bo'lganligi sababli, taxtani ishlab chiqishda ularni 90 graduslik aylanish bilan o'rnatish va qatorlarni ustunlar va aksincha ishlatish kerak edi. Umumiy katodli ko'rsatkichlar bilan almashtirilganda, masalan, 1088AS, ulanish sxemasini butunlay o'zgartirishingiz kerak bo'ladi. Tugmalar - har qanday xushmuomalalik, burchakli. Old ko'rsatkichlarni rangli plexiglass bilan qoplashda noto'g'ri signallar kuzatildiD.A. 1 indikatorlardan aks ettirilgan yorqinlik signali. Ushbu effekt indikator va fotodetektor o'rtasida qora qog'oz ekranni yopishtirish orqali osongina yo'q qilinadi.

To'g'ri yig'ilgan qurilma odatda sozlashni talab qilmaydi. Biroq, agar siz yorug'lik va avtomatik rejimda indikatorning mos keladigan yorqinligi o'rtasidagi mavjud munosabatlardan qoniqmasangiz, R45 rezistorining qiymatini tanlashingiz kerak. Bunday holda, past qarshilik ma'lum bir yoritishda past yorqinlikka mos keladi.

Yig'ilgan taxtaning ko'rinishi fotosuratlarda ko'rsatilgan.

Juda yaxshi lehimlanmagan oqim cheklovchi rezistorlarning sababi shundaki, taxtani ishlab chiqargandan so'ng, ularning turi ko'rsatkichi 0805 emas, balki 1206 ekanligi ma'lum bo'ldi. Men uni qandaydir tarzda lehimlashim kerak edi ...

Tekshirgichni boshqarish dasturi C tilida yozilgan va MikroC uchun PIC muhitiga tarjima qilingan. Konfiguratsiya so'zi proshivkada mavjud va avtomatik ravishda kiritiladi. Muallifning soat yo'nalishi - matritsa tepada, bu DD9, DD10 mikrosxemalarining haroratiga kontaktlarning zanglashiga olib kelishi mumkin bo'lgan ta'sirini kamaytiradi. Ammo, agar kimdir matritsalarni pastga tushirgan holda soatlarning joylashishini yoqtirsa, dasturni translyatsiya qilishdan oldin "watch.c" faylining birinchi qatoridagi parametr qiymatini sharhga ko'ra 1 dan 0 ga o'zgartirishi kerak. Mikrodastur ikkala holat uchun ham kiritilgan. Bundan tashqari, raqamlarning shriftini harflarga o'xshash ingichkaga (sukut bo'yicha qalin) o'zgartirish mumkin (bu, aytmoqchi, asl rejimda joriy iste'molni biroz kamaytiradi). Buning uchun "font.c" faylidagi birinchi qatorda "font_2" parametrining qiymatini 1 dan 0 ga o'zgartirishingiz kerak.

Endi soat rejimlarining tavsifiga va ular bilan qanday ishlashga o'tamiz.

Yoqilganda soat darhol asosiy rejimga o'tadi - vaqt ko'rsatkichi. Shu bilan birga, soat va daqiqa raqamlari 8 piksel balandlikda, soniyalar esa 7 piksel balandlikda (umuman, har bir raqam yoki harf 5x8 pikselli maydonda tasvirlangan, soniya raqamlari 5x7). S1 tugmachasini yoki masofadan boshqarish pultidagi biron bir tugmani bosganingizda (bu harakatlar ekvivalentdir va biz S1 tugmachasini bosish haqida gapirganda, masofadan boshqarish pultidan signal berilganda ham xuddi shunday bo'lishini yodda tutamiz), joriy to'liq sana va haftaning kuni sudraluvchi chiziq yordamida ko'rsatiladi. Agar boshqa chora ko'rmasangiz, 16 soniyadan keyin. qurilma asl holatiga qaytadi - vaqt ko'rsatkichi. Sana ko'rsatish vaqtida S1 tugmasini yana bir marta bossangiz, harorat ko'rsatkichi ham 16 soniya davomida o'rmalovchi chiziq orqali boshlanadi. (tugmani yana bosish darhol asl holatiga qaytadi).

S1 tugmasini 9 soniya davomida uzluksiz bosish orqali soat tegishli yozuv bilan ko'rsatilganidek, "MENU" rejimiga o'tadi. Masofadan boshqarish pultidan normal foydalanish paytida (aslida maishiy texnikani boshqarish uchun) tasodifiy menyuga kirish ehtimolini kamaytirish uchun bunday uzoq bosish shu maqsadda tanlangan.

Keyinchalik kichik bir chetga chiqish keladi - keling, umuman tugmalar bilan qanday ishlashni tushuntiramiz. Soat shunday boshqariladiki, u bilan barcha harakatlar faqat S1 tugmasi (yoki masofadan boshqarish pulti) yordamida amalga oshirilishi mumkin. Axir, soat devorga baland osib qo'yilishi mumkin va kirish faqat S1 tugmachasiga bo'ladi (masofadan boshqarish pulti orqali). Shunday qilib, menyu bandlarini sanash, shuningdek, signallar yoki hodisalar ro'yxatidan sanab o'tish S1 tugmachasini qisqa (3 soniyagacha) bosish orqali amalga oshiriladi va tanlangan elementga o'tish uzoq (3 soniyadan ortiq) bosish orqali amalga oshiriladi. 15-30 soniya davomida ta'siri yo'q. (muayyan rejimga qarab) - asl holatiga qaytish. Ba'zi parametrlarning qiymati o'zgargan joyda, qisqa bosish 1 ga emas, balki 2 soniyadan ko'proq ushlab turish orqali qiymatni oshiradi. - qiymat avtomatik ravishda sekundiga taxminan 3 marta ortadi. Bu erda ma'lum bir konfiguratsiya qilinadigan vaqt uchun ta'sirning yo'qligi (5 dan 8 soniyagacha) joriy parametrni saqlashda keyingi parametrga o'tishga olib keladi. Bu erda siz S2 tugmasidan foydalanishingiz mumkin - parametrni saqlash va kutmasdan, darhol keyingisiga o'tish. Shunday qilib, qo'lingizda soatni ushlab turish bunday manipulyatsiyani sezilarli darajada tezlashtirishi mumkin.

Keling, "MENU" bandiga qaytaylik. Bu erda beshta nuqta mavjud: O'RNATISH, TUZATISH, ALARM, VOQEALAR, SOZLAMALAR. Keling, har biri haqida tartibda gaplashaylik.

O‘RNATISH. Bu erda siz joriy sana va vaqtni belgilashingiz mumkin. O'zgartirilayotgan parametr birinchi navbatda inversiya bilan ta'kidlanadi, u o'zgarishlar boshlanganda yo'qoladi. Qiymatlar faqat yuqoriga qarab o'zgaradi, maksimal qiymatdan (uga erishilganda) minimal darajaga va keyin aylana bo'ylab o'tadi. Eng oxirida, sana, soat va daqiqalar o'rnatilganda, soniyalar o'rnida teskari nollar bo'ladi. Bu yerda, mos yozuvlar sekundlarini tiklash vaqtida S1 tugmasini bosing va soat o'zgartirilgan sana va vaqt bilan asl holatiga qaytadi.

TUZATISH. Vaqt o'tishi bilan soat vaqtini belgilashda muqarrar ravishda xatolik yuz beradi. Bu nuqta uni tuzatish uchun ishlatiladi. Avval siz soatning "yo'qolishi" ni 10 kun davomida o'lchashingiz kerak. Aytaylik, soat 58 soniyaga tez. Keyin biz ushbu rejimga kiramiz, buni "10 kun ichida parvarish qilish" qatori tasdiqlaydi. S1 tugmachasini bosganingizda, chiziq statik yozuv bilan almashtiriladi "XX sek", bu erda XX - joriy tuzatish qiymati, 31 deb faraz qilaylik. Soat shoshilayotgani uchun biz ushbu qiymatdan 58 soniyamizni ayiramiz. (agar ular orqada qolsa, biz qo'shamiz). Qabul qilingan (-27) soniyani yig'amiz. Chiqishdan keyin bu qiymat EEPROMda saqlanadi. Kirish qiymatlari diapazoni -99 dan 99 gacha, belgi 0 dan o'tganda o'zgaradi. Tuzatish har kuni soat 00:00:19 da sodir bo'ladi, buning uchun tuzatish qiymatining butun o'ndan bir qismi (bizning holatda (-2)) ) joriy vaqtga qo'shiladi va qolgan (bizda (-7)) EEPROMda saqlanadi va keyingi safar qayta ishlashdan oldin koeffitsientga qo'shiladi. Ya'ni, bir kundan keyin 3 soniya vaqtdan ayiriladi va saqlanadi (-4) (-27-7 = -34).

ALARM. Ushbu elementni kiritganingizda, ekranda quyidagi qator paydo bo'ladi: raqam (1-4), yoqish / o'chirish belgisi ("+" yoki "-"), javob vaqti, signal nomi (11 belgidan iborat matn). Odatiy bo'lib, masalan, ikkinchi budilnikda ma'lumotlar bo'ladi: “2. – 12:00 Budilnik-2.” Qisqa bosish bilan siz bir budilnikdan ikkinchisiga o'tishingiz mumkin, uzoq bosish bilan siz joriy uyg'otuvchi soatga o'tasiz, u erda siz ma'lumotlarni o'zgartirishingiz, uni yoqishingiz yoki o'chirishingiz, haftaning har bir kuni uchun faoliyatni tanlashingiz, ishga tushirish vaqti, har bir pozitsiyaning belgilarini sanab, matn nomini o'zgartiring. To'rtta budilnik haqidagi barcha ma'lumotlar DS1307 chipining bo'sh xotirasida (56 bayt) saqlanadi. Agar joriy vaqt haftaning o'sha kuni yoqilgan va faol bo'lgan har qanday uyg'otuvchi soatga to'g'ri kelsa, bu budilnik haqidagi ma'lumotlarga ega bo'lgan chiziq ko'rsatiladi, bir daqiqa davomida intervalgacha ovozli signal beriladi. S1 tugmachasini bosish orqali signalni "erta" to'xtatish mumkin.

VOQEALAR. Ushbu elementni kiritishda tugmani qisqa bosish bilan indikatorda faol hodisalar va "YANGI QO'SHISH" bandi navbatma-navbat o'tadi. Odatiy bo'lib, faol hodisalar mavjud emas, shuning uchun faqat yangi tadbir qo'shish taklifi bo'ladi. Faol hodisa formati: "<дата> <текст из 16 знаков>" Barcha 14 hodisa faol bo'lsa, "YANGI QO'SHISH" bandi ko'rsatilmaydi va faqat mavjudlarining o'rniga yangi hodisa qo'shilishi mumkin. Voqeani tahrirlash rejimiga o'tish uchun uzoq bosing. Bu erda siz uni yoqishingiz yoki o'chirishingiz, sanani o'zgartirishingiz, shuningdek, ushbu hodisaga mos keladigan o'zingizning matningizni yozishingiz mumkin. Barcha o'zgarishlar MK (EEPROM) ning doimiy xotirasida saqlanadi.

Joriy sana har kuni soat 8:00 da voqea sanalari bilan mos kelishi tekshiriladi va agar mos keladigan bo'lsa, joriy sana va voqea matni bir daqiqa davomida intervalgacha ovozli signal bilan ko'rsatiladi. Ushbu signal tugma bilan to'xtatilmagan bo'lsa, har soatda soat 19:00 gacha eshitiladi. Tugma bilan uzilgan signal endi takrorlanmaydi.

SOZLAMALAR. Ushbu rejimga kirganingizda, ekranda "BRIGHT.XX" kabi xabar ko'rsatiladi, bu erda "XX" joriy yorqinlikdir. S1 tugmachasini bosish orqali bu qiymat 1 dan 31 gacha o'zgartirilishi yoki "AV" ga o'rnatilishi mumkin, bu "avtomatik" degan ma'noni anglatadi. Yorqinlik qiymatini o'zgartirsangiz, indikatorning haqiqiy yorqinligi darhol vizual ravishda o'zgaradi. Agar avtomatik rejim saqlanib qolsa, soat displeyining yorqinligi xonadagi yorug'lik darajasiga qarab, aralashuvsiz o'zgaradi. Bunday holda, biz o'zimizni avtomatik rejim uchun minimal yorqinlikni o'rnatish nuqtasida topamiz ("MIN.XX" ko'rsatiladi). Ushbu qiymatni minimal kutilgan yorug'lik sharoitida o'rnatish yaxshiroqdir. Agar oldingi xatboshida ma'lum bir raqamli yorqinlik qiymati o'rnatilgan bo'lsa, bu paragraf o'tkazib yuboriladi.

Keyingi sozlash elementi turli xil o'zgaruvchan parametrlarning qiymatlarini 5 dan 8 soniyagacha saqlashdan oldin kutish vaqtini sozlashdir. Ushbu parametrning minimal qiymati bilan, maksimal qiymat bilan noto'g'ri qiymatlarni saqlash xavfi mavjud, masofadan boshqarish pultidan ma'lumotlarni kiritish uchun umumiy vaqt ortadi; Foydalanuvchi o'zi uchun qulay bo'lgan qiymatni tanlaydi.

Barcha sozlamalar MK ning EEPROM xotirasida saqlanadi va quvvat yo'qolganda yo'qolmaydi.

Ilovada manba kodi va proshivkadan tashqari Proteus modeli va Lay6 formatidagi plata mavjud.

Radioelementlar ro'yxati

Belgilash Turi Denominatsiya Miqdori EslatmaDo'konMening bloknotim
DD7 MK PIC 8-bit

PIC16F88

1 Bloknot uchun
DD1-DD5 Shift registri74HC5955 SOP-16 Bloknot uchun
DD8 Ikki tomonlama D-triggerCD40131 K561TM2 Bloknot uchun
DD9 Real vaqt soati (RTC)

DS1307

1 Bloknot uchun
DD10 harorat sensori

DS1821

1 Bloknot uchun
DA1 FotodetektorTSOP481 Bloknot uchun
DD6 Kuchli siljish registriTPIC6B5951 Bloknot uchun
LS1 Piezo emitentXCFT-14A1 Bloknot uchun
HL1-HL5 LED matritsasi1088BS5 Bloknot uchun
HL6 Yorug'lik chiqaradigan diodARL-35141 qizil Bloknot uchun
X1 Kvarts rezonatori32768 Gts1 Bloknot uchun
BAT1 Lityum batareyaCR20321 3 V Bloknot uchun
D1-D2 Diyot1N47482 Bloknot uchun
D3 Zener diyot

1N4734A

1 Bloknot uchun
S1, S2 Takt tugmasiburchak2 Bloknot uchun
FR1 FotorezistorNCL-49521 Bloknot uchun
R1-R40 Rezistor

220 Ohm

40 0805