Большие настенные часы на Arduino
- Войдите на сайт для отправки комментариев
Здравствуйет уважаемые Ардуинщики и им сочувствующие!
С детства любил ковырять различные радиосхемы, а тут появилась такая классная штука как среда Ардуино! Решил попробовать себя в ней! Все проекты были взяты в свободном доступе из Интернета. Коды практически не переписывались, я на них учился. Первый проект был "Бесполезна коробка" (https://youtu.be/LI3wJXQ3-wU). Второй - "6 позиционный переключатель" (https://youtu.be/OEt854Zx7As). Тут насмотрелся на прикольные часы https://youtu.be/sFggpp8It-s и решил собрать себе. С большим трудом нашел скетч. Немного переделал его по себя. Дело в том, что я выбрал себе шрифт "Digital-7", нарезал пенопласт. А когда стал подставлять светодиодную ленту под отверстия, понял что некоторые из сегментов длиннее остальных. И пришлось делать цифру из трех и четырех светодиодных отрезков. Сам скетч.
//http://www.instructables.com/id/Big-auto-dim-room-clock-using-arduino-and-WS2811/?comments=all#CPDXFS0INZGBXU1 #include <DS3232RTC.h> #include <Time.h> #include <Wire.h> #include <FastLED.h> #define NUM_LEDS 108 // 5 by segment + 6 in the middle #define LED_TYPE WS2812 #define COLOR_ORDER GRB // Define color order for your strip #define BRIGHTNESS 150 #define LED_PIN 5 // Data pin for led comunication CRGB leds[NUM_LEDS]; // Define LEDs strip byte digits[10][26] = { { 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } , // Digit 0 { 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 } , // Digit 1 { 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,0,0,0 } , // Digit 2 { 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1 } , // Digit 3 { 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1 } , // Digit 4 { 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1 } , // Digit 5 { 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } , // Digit 6 { 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1 } , // Digit 7 { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 } , // Digit 8 { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1 } }; // Digit 9 | 2D Array for numbers on 7 segment byte firstdigit[2][10] = { { 0,0,0,0,0,0,0,0,0,0 } , // Digit 0 first number { 1,1,1,1,1,1,1,1,1,1 } }; // Digit 1 first number | 2D Array for numbers on 7 segment bool Dot = true; //Dot state bool DST = false; //DST state int last_digit = 0; //long ledColor = CRGB::DarkOrchid; // Color used (in hex) long ledColor = CRGB::MediumVioletRed; long ColorTable[16] = { CRGB::Amethyst, CRGB::Aqua, CRGB::Blue, CRGB::Chartreuse, CRGB::DarkGreen, CRGB::DarkMagenta, CRGB::DarkOrange, CRGB::DeepPink, CRGB::Fuchsia, CRGB::Gold, CRGB::GreenYellow, CRGB::LightCoral, CRGB::Tomato, CRGB::Salmon, CRGB::Red, CRGB::Orchid}; void setup(){ Serial.begin(9600); Wire.begin(); FastLED.addLeds<WS2812B, LED_PIN, RGB>(leds, NUM_LEDS); // FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip ); FastLED.setBrightness( BRIGHTNESS ); pinMode(2, INPUT_PULLUP); // Define DST adjust button pin pinMode(4, INPUT_PULLUP); // Define Minutes adjust button pin // pinMode(5, INPUT_PULLUP); // Define Hours adjust button pin } // Check Light sensor and set brightness accordingly void BrightnessCheck(){ const byte sensorPin = 3; // light sensor pin const byte brightnessLow = 75; // Low brightness value const byte brightnessHigh = 100; // High brightness value int sensorValue = digitalRead(sensorPin); // Read sensor if (sensorValue == 0) { Serial.println("Brightness High"); LEDS.setBrightness(brightnessHigh); } else { Serial.println("Brightness Low"); LEDS.setBrightness(brightnessLow); } }; // Get time in a single number int GetTime(){ tmElements_t Now; RTC.read(Now); //time_t Now = RTC.Now();// Getting the current Time and storing it into a DateTime object int hour=Now.Hour; int minutes=Now.Minute; int second =Now.Second; if (second % 2==0) { Dot = false; } else { Dot = true; }; return (hour*100+minutes); }; void DSTcheck(){ int buttonDST = digitalRead(2); Serial.print("DST is: "); Serial.println(DST); if (buttonDST == LOW){ if (DST){ DST=false; Serial.print("Switching DST to: "); Serial.println(DST); } else if (!DST){ DST=true; Serial.print("Switching DST to: "); Serial.println(DST); }; delay(500); }; } // Convert time to array needet for display void TimeToArray(){ int Now = GetTime(); // Get time int cursor = 108; //116 Serial.print("Time is: "); Serial.println(Now); if (Dot){ leds[52]=ledColor; leds[53]=ledColor; leds[54]=ledColor; leds[55]=ledColor; leds[56]=ledColor; //leds[48]=ledColor; } else { leds[52]=0x000000; leds[53]=0x000000; leds[54]=0x000000; leds[55]=0x000000; leds[56]=0x000000; //leds[48]=0x000000; }; for(int i=1;i<=4;i++){ int digit = Now % 10; // get last digit in time if (i==1){ cursor =82; //82 Serial.print("Digit 4 is : "); Serial.print(digit); Serial.print(", the array is : "); for(int k=0; k<=25;k++){ Serial.print(digits[digit][k]); if (digits[digit][k]== 1){ leds[cursor]=ledColor; } else if (digits[digit][k]==0){ leds[cursor]=0x000000; }; cursor ++; }; // fin for Serial.println(); if (digit != last_digit) { fadefonction(); ledColor = ColorTable[random(16)]; } last_digit = digit; }// fin if else if (i==2){ cursor =56; Serial.print("Digit 3 is : "); Serial.print(digit); Serial.print(", the array is : "); for(int k=0; k<=25;k++){ Serial.print(digits[digit][k]); if (digits[digit][k]== 1){ leds[cursor]=ledColor; } else if (digits[digit][k]==0){ leds[cursor]=0x000000; }; cursor ++; }; Serial.println(); } else if (i==3){ cursor =26; Serial.print("Digit 2 is : "); Serial.print(digit); Serial.print(", the array is : "); for(int k=0; k<=25;k++){ Serial.print(digits[digit][k]); if (digits[digit][k]== 1){ leds[cursor]=ledColor; } else if (digits[digit][k]==0){ leds[cursor]=0x000000; }; cursor ++; }; Serial.println(); } else if (i==4){ cursor =0; Serial.print("Digit 1 is : "); Serial.print(digit); Serial.print(", the array is : "); for(int k=0; k<=25;k++){ Serial.print(digits[digit][k]); if (digits[digit][k]== 1){ leds[cursor]=ledColor; } else if (digits[digit][k]==0){ leds[cursor]=0x000000; }; cursor ++; }; // Serial.println(); }; Now /= 10; }; }; void TimeAdjust(){ int buttonH = digitalRead(5); int buttonM = digitalRead(4); if (buttonH == LOW || buttonM == LOW){ delay(500); tmElements_t Now; RTC.read(Now); int hour=Now.Hour; int minutes=Now.Minute; if (buttonH == LOW){ if (Now.Hour== 24){ Now.Hour=1; } else { Now.Hour += 1; }; } else { if (Now.Minute== 59){ Now.Minute=0; } else { Now.Minute += 1; }; }; RTC.write(Now); } } void fadeall() { for(int m = 0; m < NUM_LEDS; m++) { leds[m].nscale8(250); } } void fadefonction () { static uint8_t hue = 0; // First slide the led in one direction for(int i = 0; i < NUM_LEDS; i++) { // Set the i'th led to red leds[i] = CHSV(hue++, 255, 255); // Show the leds FastLED.show(); // now that we've shown the leds, reset the i'th led to black // leds[i] = CRGB::Black; fadeall(); // Wait a little bit before we loop around and do it again delay(10); } // Now go in the other direction. for(int i = (NUM_LEDS)-1; i >= 0; i--) { // Set the i'th led to red leds[i] = CHSV(hue++, 255, 255); // Show the leds FastLED.show(); // now that we've shown the leds, reset the i'th led to black // leds[i] = CRGB::Black; fadeall(); // Wait a little bit before we loop around and do it again delay(10); } } void loop() // Main loop { /*BrightnessCheck(); // Check brightness DSTcheck(); // Check DST TimeAdjust(); // Check to se if time is geting modified*/ TimeToArray(); // Get leds array with required configuration FastLED.show(); // Display leds array /*float t = RTC.temperature(); float celsius = t / 4.0; Serial.println(); Serial.print("Temp is : "); Serial.print(celsius); Serial.println();*/ }
Получается вот так (https://youtu.be/yhxRfyJSQ50).
И вот теперь, друзья, вопросы.
Что и где добавить в скетче, чтобы с периодичностью 5-7 минут показывалась дата. Год, число и месяц. Сначала год "2016", потом дата "26.06"?
И еще. У меня есть температурный датчик DHT-11. Хотелось бы привязать его к часам. Чтобы они с периодичностью две-три минуты показывали температуру.
Буду очень признателен за советы и подсказки!
Бесполезная коробка, мне нравится) если что скиньте программу)
Шустрости не хватает. Тоже хочу сделать.
вот и все технологии
не совсем так просто! там штук 10-15 разных открываний!
Вот сдесь можно код посмотреть бесполезной коробки! https://drive.google.com/folderview?id=0B5_6QQicLD5fbTU4Q2U5aTMyTjQ&usp=sharing
я такой
библиотеки не знаю. Не исключено, что и дуня не знает. А вот DS3231.h - знаю. И гуголь знает
https://github.com/rodan/ds3231
да, не исключено что имеено в названии библиотеки, но у меня работает и так..
https://github.com/JChristensen/DS3232RTC - возможно, что она.
Когда слышу про часики DS3231, на душе становится очень тепло. Это такая классная микросхемка RTC, которая ходит с очень большой точностью. Сделал себе небольшие астенные часики с этой микросхемкой, установил время и запустил на тестирование. Когда пошло более полутора лет, уход составил чуть более 15 екунд!!!!!!!!!!!!!!!!!!! И это все при том, что раз пять отключали в доме электроэнергию. DS323 - шедевр вражеской электроники!
вот https://yadi.sk/d/TTziQILP3EN4Lv и вот https://yadi.sk/d/quZ6S1S-3EN4Lx глянь мои скетчи, там две версии с температурой и температура+дата только я на ws2811 делал так по проще и темпер брал с ds-ки так как dht тогда не было на руках, но даласа или dht прикрутить не проблема. А тут https://yadi.sk/d/BpuBm1XY33T8Uj скетчи на твоей WS2812 от куда то с инэта уже не помню, может в них чё полезного найдёшь ))
библиотеки есть и DS3232RTC и DS3231RTC в свое время намаялся с ними,могу поделиться если надо )) да и на томже https://github.com/JChristensen/DS3232RTC все есть
Здравствуйте!
А имеется у кого-то готовый скетч для часов на WS2812B с отображением температуры с микросхемы DS3231?
в связи частого брака в последние годы на 2812 не рекомендовал бы делать, лучше тогда делайте на более новой 2813
в связи частого брака в последние годы на 2812 не рекомендовал бы делать, лучше тогда делайте на более новой 2813
А в чем заключается брак? В процессе работы вылетают или не работают сразу?
в связи частого брака в последние годы на 2812 не рекомендовал бы делать, лучше тогда делайте на более новой 2813
А в чем заключается брак? В процессе работы вылетают или не работают сразу?
Восновном вылетают в процессе работы, при чем не заметил какой либо определённой последовательности, может вылететь на третий день после того как закончил поделку =) с их использованием, а могут и через год. но восновном довольно таки быстро после начала использования. по тому киты начали клепать 2813, видимо из за большого колличества жалоб от покупателей. я часы делал на 2811, первая лнта - первые часы уже года два может больше, работают ни каких косяков (причем режим работы переливаются радугой каждую минуту и горят новую минуту новым рандомным цветом). вторые часы - первая вторая цыфры часов из остатков первой ленты, втретья четвертая из новой, мало того что градация цветов немного отличается, на третьец цифре один сегмент (вылетел месяца через три) светит только красным цветом, при том что часы одноцветные зеленые. третьи часы из третьей ленты =) после изготовления и обкатки у меня дома около недели, были подарены другу, через неделю он позвонил и сказал что часы показывают но почти все сегменты горят разными цветами. вывод напрашивается сам собой деградация качества лент на протяжении где то 3х лет. и это только часы и только 2811. А 2812 покупал тоже очень много для разных целей, там история еще печальнее.
Тут писали, что светодиоды в страйпе перестают "вылетать", если их подключать в соответствии с рекомендациями: DIO пускать через ограничивающий резистор и приделывать ёмкий конденсатор параллельно питанию страйпа. Но полет мысли китайского сумрачного гения предугадать невозможно - с этим не поспоришь.
недавно для нового телика брал под очередной Ambilight 2812 она с коробки на тестовом скетче отказалась работать, результат вылет первых трёх диодов, погонял пол часа, опять светомузыка, вылетел еще один диод уже где то в метре от начала ленты =( плюнул заказал, 2813. ждю, буду играться =)
все рекомендации всегда соблюдались, питание чистое, но увы киты есть киты =) "DIN" =) на выход подовать нет смысла =)
вот https://yadi.sk/i/F6S1leM83XuquY эти уже года три маслают все норм, мои первенцы =) а этим https://yadi.sk/i/lWvTtt9q3Xur8L уже так не повезло =) всё руки перепаять этот сегмент не доходят =)
Да, на 28xx лента "DIN" - точно. На других модулях DIO встречается как Digital I/O. Отвлекся, когда писал.
да на 28ХХ D-IN, D-OUT вход-выход =)
заметил еще особенность ну или разныцу в цветовой градации между 2811 и 2812. если их использовать как Ambilight у 2812 цветопередача более четкая, особенно заметно на светлых тонах и очень четкий белый, у 2811 цвета более грубо меняются особенно в динамических сценах где частая смена цвета, и белый то ли желтит, то ли краснит или всё вместе =) всё таки сказывается то что 2811 уже устарела, но и 2812 уже не апельсинка =)
Здравствуйте!
А имеется у кого-то готовый скетч для часов на WS2812B с отображением температуры с микросхемы DS3231?
а в чём проблема добавить? всё в библотеке и примерах для DS3231 есть. вставить пример и задать, целое число тебе нужно или с десятыми после запятэ =)
Цветопередача - это дело субъективное. Я без хорошего рассеивателя вообще не берусь предсказывать результат смешения на светодиоде. Иногда посмотришь под другим углом и всё, как-будто совсем другой цвет видишь. Да и либы замешивают по-разному, думаю. Недавно снова с фастледом экспериментировал, так он в HSV пространстве иногда такие фокусы выкидывает при пересчете...
ограничивающий резистор и приделывать ёмкий конденсатор параллельно питанию
ну с резюком не знаю делал много поделок на этих лентах и с ним и без, он наверно больше не ограничинивающий, что там ограничивать? нули и единицы =) он наверно больше ставится для защиты цыфровой линии от той же статики со входа при монтаже, или каких либо бросков во время включения, собственно как и кондёр, нужен лишь для защиты ленты во время включения от бросков напруги (любит это чудо китайской мысли правильное питание), хотя если использовать нормальное питалово это всё не такая уж обязаловка. конечно лучше что бы было, но не более =)
Здравствуйте!
А имеется у кого-то готовый скетч для часов на WS2812B с отображением температуры с микросхемы DS3231?
а в чём проблема добавить? всё в библотеке и примерах для DS3231 есть. вставить пример и задать, целое число тебе нужно или с десятыми после запятэ =)
Нужно с десятыми после запятой.
Нужно с десятыми после запятой.
ну вот кусок на запрос температуры из ds-ки целого числа, без десятых
вот тут еще можешь почитать по ds-ке http://www.count-zero.ru/2017/rtc/
Нужно с десятыми после запятой.
ну вот кусок на запрос температуры из ds-ки целого числа, без десятых
вот тут еще можешь почитать по ds-ке http://www.count-zero.ru/2017/rtc/
Спасибо, буду пробовать.
Меня тоже накрыла хотелка больших часов, простецких для повторения.
Подготовил статью http://videooko.net/?p=895 с пошаговой сборкой уличного корпуса из "подручных" материалов.
Старался сделать максимально просто.
Меня тоже накрыла хотелка больших часов.......
Меня тоже накрыла хотелка больших часов, простецких для повторения.
Подготовил статью http://videooko.net/?p=895 с пошаговой сборкой уличного корпуса из "подручных" материалов.
Старался сделать максимально просто.
Драйвера для лент какие используете, похоже
Сдвиговый регистр SN74HC595
Ключ ULN2008
Так?
Беда только ULN2008 на али не наблюдаются...
Как насчет TPIC6C595 ?
Ключ ULN2008
Беда только ULN2008 на али не наблюдаются...
мошт надо ULN2803?
Как насчет TPIC6C595 ?
Похоже на регистр сдвига + драйвер вместе...
Плохо в DIP не бывает... отлутить у мня не получится...
А так достойно)))
Все бывает.
TPIC6C595 LED Illumination and Controls - PDIP (16) 19.30 mm × 6.35 mm
Нет на али в DIP только SOP16 сам проверь.
Нет на али в DIP только SOP16 сам проверь.
ну переходных панелек SOP -> DIP и на Али полно, и на любом рынке
мошт надо ULN2803?
Можа и быть я не особо силён в схемотехнике, автор не упомянул ни где...
ULN2008 это контроллер морды микроволновой печи
а ULN2803 - ключи
ULN2008 это контроллер морды микроволновой печи
а ULN2803 - ключи
Короче ставлю в его схему SN74HC595 + ULN2803 и всё заработает.
Так???
Добрый день. Uln2003 и 2803 это ключи. Только в 2003 -7 выходов, а в 2803 - 8 выходов.
Можно ставить оба, в схеме используется 7 выходов.
ULN2008 это контроллер морды микроволновой печи
а ULN2803 - ключи
Короче ставлю в его схему SN74HC595 + ULN2803 и всё заработает.
Так???
Да, заработает.
Спасиба)))
Может кто знает что-нить похожее на TPIC6C595 только в DIP чтоб на али было?
И как называется контактная линейка, которая впаивается в плату и в неё вставляется ардуина мини? А проще наверное ткнуть носом в ссылку)))
20 шт. 2.54 мм 40 Булавки страйт женский однорядные Булавки коннектора Газа печатной платы разъем
https://s.click.aliexpress.com/e/bK87DlZQ
Новый оригинальный SN74HC595N 74HC595N 74HC595 DIP-16
https://s.click.aliexpress.com/e/b0AYHuFW
pinheader она называется.
А МС в дипах - кто хочет, тот находит.
https://www.electronshik.ru/item/TI/TPIC6C595N
https://ru.aliexpress.com/wholesale?SearchText=TPIC6C595N
Спасиба)))
Может кто знает что-нить похожее на TPIC6C595 только в DIP чтоб на али было?
блин, ну открой уже для себя такие панельки! - доллар за десяток
https://ru.aliexpress.com/item/10-TSSOP16-SSOP16-SOP16-DIP16-IC/32862658659.html
sadman41
Первую ссылку убивает доставка.
Вторая не работает... Но догадываюсь что-то около 10шт./700р.
Не нраится(((
Ну, извините. То вам найти, то найти на али, то дешевле рынка. Мошт на дом сразу подвезти?