Помечено: Arduino nano часы схема
- В этой теме 115 ответов, 39 участников, последнее обновление 2 года, 3 месяца назад сделано
Alexnev.
-
АвторСообщения
-
14.10.2018 в 21:23 #837
Stas_09rus
УчастникЗдравствуйте. У вас лучшая схема на часов на гри и самая легко повторимая, за что вам отдельное спасибо. Не знаете случайно почему греется транзистор? Греется так что палец не терпит и потом выключаются индикаторы, катушку индуктивности делал сам. Спасибо
14.10.2018 в 22:39 #838Железняков Андрей
ХранительЗдравствуйте. У вас лучшая схема на часов на гри и самая легко повторимая, за что вам отдельное спасибо. Не знаете случайно почему греется транзистор? Греется так что палец не терпит и потом выключаются индикаторы, катушку индуктивности делал сам. Спасибо
Скорее всего индуктивность катушки маленькая получилась и сопротивление низкое. Через транзистор течет большой ток. Либо, как вариант, транзистор по какой — то причине неполностью открывается.
16.10.2018 в 08:04 #839ksv2109
УчастникВыглядит как то так 🙂
Arduino123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594#include <DS3231.h>#include <Wire.h>#include <EEPROM.h>// выводы для катодовint out1 = 3;int out2 = 5;int out3 = 7;int out4 = 13;int out5 = 10;int out6 = 11;int out7 = 12;int out8 = 8;int out9 = 6;int out0 = 4;// выводы для анодовint key1 = A1;int key2 = A0;int key3 = A2;int key4 = A3;// вывод точки секундint led1 = 2;// пин для клавиатурыint keyb = A7;// пин пищалкиint buzz = 1;int sec;int v = 0; // счетчик времени после отпускания кнопкиint alr; // срабатывание будильникаint alrhour;//часы будильникаint alrminute;//минуты будильникаint pwalr; // вкл выкл будильникаint pwbo; //почасовой сигнал вкл выклint keynum = 0; //номер нажатой кнопкиint mode = 0; //менюbool blinkflag = 0; // флаг для мигания цифр при установке времениbool timeout = false; // таймаут после нажатия кнопкиunsigned long startTime; //для мигания пиканья :)unsigned long startTime2; // для опроса нажатых кнопокDS3231 Clock;// переменные для работы ds3231bool Century = false;bool h12;bool PM;int second, minute, hour, date, month, year, temperature;void setup(){// задаем частоту ШИМ на 9 выводе 30кГцTCCR1B = TCCR1B & 0b11111000 | 0x01;analogWrite(9, 178);Wire.begin();//задаем режим работы выходов микроконтроллераpinMode(out1, OUTPUT);pinMode(out2, OUTPUT);pinMode(out3, OUTPUT);pinMode(out4, OUTPUT);pinMode(out5, OUTPUT);pinMode(out6, OUTPUT);pinMode(out7, OUTPUT);pinMode(out8, OUTPUT);pinMode(out9, OUTPUT);pinMode(out0, OUTPUT);pinMode(key1, OUTPUT);pinMode(key2, OUTPUT);pinMode(key3, OUTPUT);pinMode(key4, OUTPUT);pinMode(led1, OUTPUT);pinMode(buzz, OUTPUT);digitalWrite(buzz, LOW);startTime = millis();startTime2 = startTime;sec = 0;alrhour = EEPROM.read(1); //считываем ячейки памятиalrminute = EEPROM.read(2);pwalr = EEPROM.read(3);pwbo = EEPROM.read(4);// считываем текущее вермяReadDS3231();}void ReadDS3231() //функция считывает в глобальные переменные minute и hour//текущие значения{minute = Clock.getMinute();hour = Clock.getHour(h12, PM);second = Clock.getSecond();}//----------------------------------------------------void loop(){if (minute == 59 && second == 59) //раз в час// (hour==23 && minute==59 )//раз в день в течении минуты//( second==59)//раз в минуту{scroll (250);}show();}//пебора всех цифрvoid scroll(int pause){for (int i = 0; i < 9; i++){int a[] = {i, i, i, i};show(a);delay(2);show(a);}}//---------------------------------------------------void show(){int digits[3]; // массив для текущего значения времени на четыре цифрыint keyval = analogRead(keyb); // считываем значение с клавиатурыunsigned long currentTime = millis(); //текущее время с момента запуска рограммыif (currentTime >= (startTime2 + 200)) // если прошло 200мс{timeout = false;if (alr == 1){if ((keynum == 1 ) || (keynum == 2 ) || (keynum == 3)){pwalr = 0;}}else{if (keynum == 2) // кнопка переключения между меню{timeout = true; // запрещаем считывать нажатия кнопокif (mode == 0) mode = 1;//настр минутelse if (mode == 1) mode = 2;//настр часовelse if (mode == 2) mode = 3;//вкл выкл будильникelse if (mode == 3) mode = 4;//вкл выкл бойelse if (mode == 4) mode = 5;//настр мин будelse if (mode == 5) mode = 6;//настр час будelse if (mode == 6) mode = 0;v = 0;}if (keynum == 3) // кнопка увеличения количества{startTime = millis();timeout = true; // запрещаем считывать нажатия кнопокif (mode == 1){minute++;if (minute > 59){minute = 0;}Clock.setMinute(minute);Clock.setSecond(0);v = 0;}if (mode == 2){hour++;if (hour > 23){hour = 0;}Clock.setHour(hour);v = 0;}if (mode == 3){pwalr++;if (pwalr > 1){pwalr = 0;}EEPROM.write(3, pwalr);v = 0;}if (mode == 4){pwbo++;if (pwbo > 1){pwbo = 0;}EEPROM.write(4, pwbo);v = 0;}if (mode == 5){alrminute++;if (alrminute > 59){alrminute = 0;}EEPROM.write(2, alrminute);v = 0;}if (mode == 6){alrhour++;if (alrhour > 23){alrhour = 0;}EEPROM.write(1, alrhour);v = 0;}}if (keynum == 1 )// кнопка уменьшения количества{startTime = millis();timeout = true; // запрещаем считывать нажатия кнопокif (mode == 1){minute--;if (minute < 0){minute = 59;}Clock.setMinute(minute);Clock.setSecond(0);v = 0;}if (mode == 2){hour--;if (hour < 0){hour = 23;}Clock.setHour(hour);v = 0;}if (mode == 3){pwalr--;if (pwalr < 0){pwalr = 1;}EEPROM.write(3, pwalr);v = 0;}if (mode == 4){pwbo--;if (pwbo < 0){pwbo = 1;}EEPROM.write(4, pwbo);v = 0;}if (mode == 5){alrminute--;if (alrminute < 0){alrminute = 59;}EEPROM.write(2, alrminute);v = 0;}if (mode == 6){alrhour--;if (alrhour < 0){alrhour = 23;}EEPROM.write(1, alrhour);v = 0;}}}v++;//сброс в 0 меню после нажатие кнопкиif (v >= 60){mode = 0;v = 0;}keynum = 0;startTime2 = millis();}//будильник-------------------------------------if (mode == 0 && pwalr == 1 && alrhour == hour && alrminute == minute){// для зп-22if (sec < 1){tone(1, 2500);}if (sec >= 1){noTone(1);}alr = 1;}else{noTone(1);alr = 0;}//для активного бузера через транзистор/*if(sec<1){digitalWrite(buzz,HIGH);Serial.println(blinkflag);}if(sec>=1){digitalWrite(buzz,LOW);}alr=1;}else {digitalWrite(buzz,LOW);alr=0;}*///сигнал с 9 до 21-----------------------------if ( hour >= 9 && hour <= 21 && minute == 00 && second == 00 && pwbo == 1)// для зп-22if (sec < 1){tone(1, 2500);}if (sec >= 1){noTone(1);}//для активного бузера через транзистор/*if(sec<1){digitalWrite(buzz,HIGH);Serial.println(blinkflag);}if(sec>=1){digitalWrite(buzz,LOW);}*///---------------------------------------------if (currentTime >= (startTime + 500)) // если прошло 500мс{blinkflag = !blinkflag; // инвертируем флаг мигающей цифрыif (sec < 1) // светодиоды не горят{// зажечь светодиодыdigitalWrite(led1, HIGH);Serial.println(blinkflag);}if (sec >= 1) // светодиоды горят{// потушить светодиодыdigitalWrite(led1, LOW);}startTime = currentTime;ReadDS3231();sec = (sec + 1);if (sec >= 2) sec = 0;}//вывод на индикаторы--------------------------------if ((mode == 0) || (mode == 1) || (mode == 2)){digits[0] = hour / 10;digits[1] = hour % 10;digits[2] = minute / 10;digits[3] = minute % 10;}if (mode == 3){digits[0] = 0;digits[1] = 1;digits[2] = 0;digits[3] = pwalr;}if (mode == 4){ digits[0] = 0;digits[1] = 2;digits[2] = 0;digits[3] = pwbo;}if ((mode == 5) || (mode == 6)){digits[0] = alrhour / 10;digits[1] = alrhour % 10;digits[2] = alrminute / 10;digits[3] = alrminute % 10;}show(digits); // вывести цифры на дисплей//проверяем нажатые кнопки от0 до 1024 соответствует от 0 до 5 вольтif (!timeout) //если разрешено, считываем нажатую кнопку{if (keyval > 50 && keyval < 300) keynum = 1;if (keyval > 550 && keyval < 800) keynum = 2;if (keyval > 970) keynum = 3;}}void show(int a[]){setNumber(a[0]);//выведем цифру a[] на индикаторif ((mode == 3) || (mode == 4) || (mode == 1) || (mode == 5)){digitalWrite(key1 , LOW);}else{digitalWrite(key1, HIGH);delay(2);//потушим первый индикаторdigitalWrite(key1, LOW);delay(1);}//цифра a[1] на второй индикаторsetNumber(a[1]);if ((mode == 1) || (mode == 5)){digitalWrite(key2 , LOW);}else{digitalWrite(key2, HIGH);delay(2);//потушим второй индикаторdigitalWrite(key2, LOW);delay(1);}//цифра a[2] на третий индикаторsetNumber(a[2]);if ((mode == 3) || (mode == 4) || (mode == 6) || (mode == 2)){digitalWrite(key3 , LOW);}else{digitalWrite(key3, HIGH);delay(2);//потушим третий индикаторdigitalWrite(key3, LOW);delay(1);}//выведем цифру a[3] на четвертый индикаторsetNumber(a[3]);if ((mode == 6) || (mode == 2)){digitalWrite(key4 , LOW);}else{digitalWrite(key4, HIGH);delay(2);//потушим четвертый индикаторdigitalWrite(key4, LOW);delay(1);}}// передача цифры на катодыvoid setNumber(int num){switch (num){case 0:digitalWrite (out1, LOW);digitalWrite (out2, LOW);digitalWrite (out3, LOW);digitalWrite (out4, LOW);digitalWrite (out5, LOW);digitalWrite (out6, LOW);digitalWrite (out7, LOW);digitalWrite (out8, LOW);digitalWrite (out9, LOW);digitalWrite (out0, HIGH);break;case 1:digitalWrite (out1, HIGH);digitalWrite (out2, LOW);digitalWrite (out3, LOW);digitalWrite (out4, LOW);digitalWrite (out5, LOW);digitalWrite (out6, LOW);digitalWrite (out7, LOW);digitalWrite (out8, LOW);digitalWrite (out9, LOW);digitalWrite (out0, LOW);break;case 2:digitalWrite (out1, LOW);digitalWrite (out2, HIGH);digitalWrite (out3, LOW);digitalWrite (out4, LOW);digitalWrite (out5, LOW);digitalWrite (out6, LOW);digitalWrite (out7, LOW);digitalWrite (out8, LOW);digitalWrite (out9, LOW);digitalWrite (out0, LOW);break;case 3:digitalWrite (out1, LOW);digitalWrite (out2, LOW);digitalWrite (out3, HIGH);digitalWrite (out4, LOW);digitalWrite (out5, LOW);digitalWrite (out6, LOW);digitalWrite (out7, LOW);digitalWrite (out8, LOW);digitalWrite (out9, LOW);digitalWrite (out0, LOW);break;case 4:digitalWrite (out1, LOW);digitalWrite (out2, LOW);digitalWrite (out3, LOW);digitalWrite (out4, HIGH);digitalWrite (out5, LOW);digitalWrite (out6, LOW);digitalWrite (out7, LOW);digitalWrite (out8, LOW);digitalWrite (out9, LOW);digitalWrite (out0, LOW);break;case 5:digitalWrite (out1, LOW);digitalWrite (out2, LOW);digitalWrite (out3, LOW);digitalWrite (out4, LOW);digitalWrite (out5, HIGH);digitalWrite (out6, LOW);digitalWrite (out7, LOW);digitalWrite (out8, LOW);digitalWrite (out9, LOW);digitalWrite (out0, LOW);break;case 6:digitalWrite (out1, LOW);digitalWrite (out2, LOW);digitalWrite (out3, LOW);digitalWrite (out4, LOW);digitalWrite (out5, LOW);digitalWrite (out6, HIGH);digitalWrite (out7, LOW);digitalWrite (out8, LOW);digitalWrite (out9, LOW);digitalWrite (out0, LOW);break;case 7:digitalWrite (out1, LOW);digitalWrite (out2, LOW);digitalWrite (out3, LOW);digitalWrite (out4, LOW);digitalWrite (out5, LOW);digitalWrite (out6, LOW);digitalWrite (out7, HIGH);digitalWrite (out8, LOW);digitalWrite (out9, LOW);digitalWrite (out0, LOW);break;case 8:digitalWrite (out1, LOW);digitalWrite (out2, LOW);digitalWrite (out3, LOW);digitalWrite (out4, LOW);digitalWrite (out5, LOW);digitalWrite (out6, LOW);digitalWrite (out7, LOW);digitalWrite (out8, HIGH);digitalWrite (out9, LOW);digitalWrite (out0, LOW);break;case 9:digitalWrite (out1, LOW);digitalWrite (out2, LOW);digitalWrite (out3, LOW);digitalWrite (out4, LOW);digitalWrite (out5, LOW);digitalWrite (out6, LOW);digitalWrite (out7, LOW);digitalWrite (out8, LOW);digitalWrite (out9, HIGH);digitalWrite (out0, LOW);break;}}PS только почемуто вместо знаков <> появились буквы 🙁 (Исправил)
-
Ответ изменён 4 года, 3 месяца назад пользователем
ksv2109.
-
Ответ изменён 4 года, 3 месяца назад пользователем
Железняков Андрей.
17.10.2018 в 11:51 #843Durino
УчастникВсем привет,
ksv2109, из коду видно, вы убрали дешифратор ИД1, а что в замену поставили, если это не секрет?
Транзисторные ключи? Инверторы/буфера? Или…19.10.2018 в 10:51 #844Durino
Участник.. а если это секрет)), то в таком варианте, лучше всего ставить ключи на транзисторах.
А еще лучше, поставить ULN2003/ULN2803 если нужно сделать это компактно.19.10.2018 в 16:32 #845ksv2109
УчастникСекрета нет.
ставил и транзисторы и ULN2003
на качество работы не влияет
удобней ставить ULN200323.10.2018 в 06:06 #846Anathema
УчастникДобрый день! Если я запитываю высоковольтный преобразователь от 12 вольт, а не от 5, мне нужно изменить значение 130 в строке analogWrite(9,130); ? На какое?
23.10.2018 в 08:58 #847Железняков Андрей
ХранительДобрый день! Если я запитываю высоковольтный преобразователь от 12 вольт, а не от 5, мне нужно изменить значение 130 в строке analogWrite(9,130); ? На какое?
Определить можно только методом подбора с подсоединенной нагрузкой в виде лампы. Начать лучше с малых значений и, постепенно увеличивая значения, добиться напряжения 180 вольт.
26.10.2018 в 13:13 #849Vladimir
УчастникДобрый день!Народ кто-нибудь запитывал ардуинку ровно от 12 вольт?были ли какие проблемы?меняли что в коде, либо в конструкции?
26.10.2018 в 14:42 #850Anathema
УчастникНичего менять не нужно, подайте напряжение на VIN pin, он поддерживает 7-12 вольт. Сам чип ардуине, при этом, будет питаться от линейного стабилизатора 5 в. который установлен на плате ардуины
02.11.2018 в 19:08 #860Vladimir
УчастникКто-нибудь дописывал код для того чтобы спикер срабатывал каждый час в определенный период времени?что дописать нужно,может кто подскажет?
02.11.2018 в 19:17 #861Vladimir
УчастникИ будильник реально добавить без изменения конструкции?
02.11.2018 в 21:25 #862ksv2109
Участникvladimir Вы наверное плохо читаете обсуждение 🙂
если б это была тема https://radiokot.ru/forum/viewtopic.php?f=3&t=3210
на 2178 страницах я бы Вас понял.
выше на странице есть скетч, там все подробно описано03.11.2018 в 09:55 #863Vladimir
УчастникДа вот не пойму что поменять надо в коде выше или дописать в исходнике(((только изучать стал данный микроконтроллер
05.11.2018 в 08:01 #891ksv2109
УчастникВсе там есть , и будильник, и почасовой сигнал в определенный период времени с 9-00 до 21-00,
и описание основных строчек на русском языке, и менять ни чего не надо -
Ответ изменён 4 года, 3 месяца назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.