Мазмұны:

POV анимациясы бар фонарь: 7 қадам
POV анимациясы бар фонарь: 7 қадам

Бейне: POV анимациясы бар фонарь: 7 қадам

Бейне: POV анимациясы бар фонарь: 7 қадам
Бейне: ВЕЛО-ФОНК (АНИМАЦИЯ) 2024, Шілде
Anonim
Image
Image

Көру тұрақтылығы (POV) жобалары біраз уақытқа созылады, қарапайым және арзан DIY жиынтықтары тіпті онлайн сатып алуға болады. POV оптикалық иллюзияға негізделген, онда объект аз уақытқа болса да жарықтандырылмағаннан кейін жарықтандырылған заттарды көреміз. Дәстүрлі POV жобаларында осы принципке негізделген суреттер немесе ең көп жұмыс істейтін сағаттар бар. Дегенмен, жеткілікті жылдамдықтағы ақылды RGB светодиоды микроконтроллерлер көмегімен анимацияны жобалауға ештеңе кедергі болмайды. Бұл ерекше анимация - Advent безендіруге арналған Рождестволық сүйреп апаратын, оны веб -шолғышы бар кез келген WiFi қосылған мобильді құрылғы арқылы қашықтан басқаруға болады. Шам Arduino отбасының Wemos ESP8266 D1 Mini микроконтроллерімен жұмыс істейді. Дарынды график-суретші Ричард Феньоға 8-биттік бұғы антеннасы үшін анимациялық кадрлар беріледі.

1 -қадам: бөлшектер тізімі

Ассамблеяның қадамдары
Ассамблеяның қадамдары

Бұл жобаға сізге айналмалы қондырғыны аудармай -ақ орнында ұстауға жеткілікті ауыр корпус қажет болады. Ескі PSU корпусы өте жақсы, бөлшектеу алдында конденсаторлардың ағып кетуіне мұқият болыңыз. Тұрақты ток қозғалтқышты қосу үшін сізге 5В-12В қуат көзінің кез келген түрі қажет болады. Шын мәнінде 500 мА және одан жоғары кез келген ампер мұны жасайды.

Қажетті бөлшектер төменде веб -дүкен сілтемелерімен және ағымдағы бағалармен көрсетілген.

  • 2 дана 18650 батареясы, 4, 78 доллар
  • Батарея ұстағышы 2х18650, АҚШ доллары 0, 63
  • Wemos D1 Mini, 2, 14 доллар
  • Қара сабан, АҚШ доллары 0, 10
  • Инфрақызыл шағылыстырғыш сенсор, USD 0, 38
  • 250В қуатты рокер қосқышы, USD 0, 10
  • Слайдты ауыстыру, USD 0, 02
  • 6-900 айн / мин тұрақты ток қозғалтқышы, 3 доллар, 99 доллар
  • Adafruit Neopixel WS2812 8-разряд, USD 1, 01

Жалпы құны 15 доллардан аз, бірақ сізге қолмен жұмыс жасайтын құралдар, бұрғылау, ыстық желім, дәнекерлеу жабдығы мен дағдылар қажет.

2 -қадам: Ассамблеяның қадамдары

Құрылғыны осы қадамдарды орындау арқылы толық жинауға болады.

  1. Стационарлық база тұрақты ток қозғалтқышы мен қосқышпен салынған.
  2. Неопиксельдер дәнекерленген және сабан білігіне бекітілген.
  3. Айналмалы қондырғы микроконтроллермен, сырғытқышпен, инфра датчигімен және сабан білігімен салынған.
  4. Сымдар электр бөлшектерінің қосқыштарына дәнекерленген
  5. Arduino коды Wemos микроконтроллеріне жүктеледі.

3 -қадам: 1. Тұрақты ток қозғалтқышы бар стационарлық база

1. Тұрақты ток қозғалтқышы бар стационарлық база
1. Тұрақты ток қозғалтқышы бар стационарлық база
1. Тұрақты ток қозғалтқышы бар стационарлық база
1. Тұрақты ток қозғалтқышы бар стационарлық база
1. Тұрақты ток қозғалтқышы бар стационарлық база
1. Тұрақты ток қозғалтқышы бар стационарлық база
  1. Корпуста тесік бұрғылаңыз және білік жоғары қарайтындай тұрақты ток қозғалтқышын бекітіңіз.
  2. Төмендегі сымдар схемасына сәйкес рокерлік қуат қосқышы мен 5В-12В тұрақты қуат адаптерін дәнекерлеңіз.
  3. Белгіленген тұрақты ток қозғалтқышы 12 В шамасында шамамен 800 айналу жиілігінде (минутына айналу) айналады, нәтижесінде сабан білігінің желдің нақты қарсылығына байланысты соңғы қондырғыда шамамен 10 FPS (секундына кадрлар) айналады.
  4. Қуат көзінің адаптерін розеткаға қосыңыз (110 немесе 220 В).
  5. Рокерді қосыңыз және тұрақты ток қозғалтқышының жұмысын тексеріңіз.

Содан кейін айналмалы қондырғы жиналып, негіздің тұрақты қозғалтқыш білігіне бекітіледі.

4 -қадам: 2. Неопиксельді бекіту

2. Неопиксельді бекіту
2. Неопиксельді бекіту
2. Неопиксельді бекіту
2. Неопиксельді бекіту
  1. Сабанның ұшын қарама -қарсы екі жағынан бір жағынан шамамен 1,5 см етіп кесіңіз.
  2. Сабанға ұзынырақ үш сымды байлаңыз. Олар Neopixel түйреуіштерін қондырғыдағы Wemos порттарына қосады.
  3. Үш сымды GND, 5V және D-IN Neopixel түйреуіштеріне дәнекерлеңіз.
  4. Ыстық желім неопикселден дәнекерленген сымдарды жарықдиодты жолақтың дәл ортасына дейін созады.
  5. Сабанның кесілген қанаттарын тартыңыз және ыстық желіммен жарық диодты жолақтың ортасына дәл симметриялы түрде желімдеңіз (бір жағынан сымдардың үстіне).
  6. Сымдар сәйкес келетін Wemos порттарына жету үшін сабанның ішінен қондырғыға дейін өтеді.

5 -қадам: 3. Айналмалы қондырғыны құрастыру

3. Айналмалы қондырғы қондырғысы
3. Айналмалы қондырғы қондырғысы

Тұрақты ток қозғалтқыш білігіне бекітпес бұрын барлық қондырғы толық жиналуы керек. Себебі бекіту нүктесі теңдестірілген болуы керек, осылайша айналу ешқандай тербеліссіз тамаша орталықта болады.

  1. Wemos D1 Mini микроконтроллері мен слайд қосқышы суретте көрсетілгендей батарея ұстағышының бір жағына ыстық желіммен жабыстырылады.
  2. Батарея ұстағышының екінші жағына инфрақызыл рефлексия датчигін ыстық желіммен жабыстырыңыз.
  3. Батареяларды ұстағышқа салыңыз.
  4. Сабанның екінші ұшын батареялардың үстіне қойыңыз және бекітіңіз. Кішкене бұранда немесе резеңке сақина мұны жасайды. Бұрғылау қондырғысы 10 айн / мин айнала бастаған кезде оның жоғалмайтынына көз жеткізіңіз.
  5. Төменгі жағында бұрғылау қондырғыларының бүкіл ауырлық орталығын табыңыз. Оны саусақтың ұшымен теңестіру мұны жасайды.
  6. Батарея ұстағышының төменгі жағындағы дәл жерде кішкене тесік жасаңыз.
  7. Ыстық желімді қолданып, қозғалтқыш білігін сол тесікке бекітіңіз. Ыстық желім қозғалтқыш корпусына түспейтініне көз жеткізіңіз. Желім құрғағанша оны тұрақты күйде ұстаңыз.
  8. Ақ қағаздың кішкене бөлігін кесіңіз де, инфрақызыл шағылыстырғыш сенсор дәл сол қағазға айналатындай етіп оны тұрақты негізге жабыстырыңыз. Бұл анимация кадрларының әр айналымда дәл орынға түсуіне әкеледі. Суретте негіздің төменгі сол жақ бұрышындағы бұл шағылысу бөлігі көрсетілген.

6 -қадам: 4. Электр компоненттерінің сымдары

4. Электр компоненттерінің сымдары
4. Электр компоненттерінің сымдары

Электр сымдарының схемасына сәйкес, электр компоненттерін келесі қадамдармен дәнекерлеңіз. Wemos D1 Mini микроконтроллерінің бір порты бірнеше түрлі сымдармен бірнеше рет дәнекерленетінін ескеріңіз. Бұл біраз тәжірибені қажет етеді немесе Wemos портына дәнекерлеу алдында осы сымдарды дайындыққа қосыңыз.

  1. Үш сым (GND, 5V және D-IN) тиісінше Wemos G, 5V және D3 порттарына дәнекерленген.
  2. Инфрақызыл шағылыстыру датчигінің екі сымы (VCC, GND, OUT) сәйкесінше 5V, G және D2 порттарына дәнекерленген.
  3. Батарея ұстағышының (қара) сымы Wemos G портына дәнекерленген.
  4. Батарея ұстағышының оң (қызыл) сымы сырғытпаның ең жақын түйреуішіне дәнекерленген.
  5. Wemos 5V порты сырғытпаның басқа түйреуішіне дәнекерленген.

7 -қадам: 5. Arduino коды

5. Arduino коды
5. Arduino коды

Бұл нақты код POV Lantern -дің 24 биттік нұсқасына арналған, оны кез келген мобильді құрылғылар веб -браузерлермен басқара алады және World Map, Matrix Animation Effect және Reindeer Sleight анимациясы сияқты визуалды эффектілерге ие. Бастапқы кодтағы пиксельдер санын, эффект параметрлерін немесе WiFi қашықтағы интерфейсін қажеттіліктеріңізге қарай реттеңіз.

// 24 бит POV шамы - 2019 Питер Цургай

#ESP8266WiFiMulti.h қосыңыз

#WiFiClient.h қосу #ESP8266WebServer.h қосу #WebSocketsServer.h қосу #Adafruit_NeoPixel.h қосу

#ЖЕҢІЛДІКТІ анықтау

Жолдық мәтін [3] = {«НҰСҚАУЛАР», «ARDUINO», «БАЙҚАУ»};

const uint8_t палитрасы [8] [3] = {

{0, 0, 0}, // 0 - мөлдір {0, 0, 127}, // 1 - көк {127, 0, 0}, // 2 - қызыл {127, 127, 0}, // 3 - Сары {0, 127, 0}, // 4 - Жасыл {127, 24, 0}, // 5 - Қызғылт {127, 0, 127}, // 6 - Қызғылт {127, 127, 127} // 7 - ақ};

const unsigned char әлемі [24] [42] PROGMEM =

{ { 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 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, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 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, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

const unsigned char бұрыш [24] [8+31] PROGMEM =

{ { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 0, 1, 1, 0, 1, 1, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, { 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, { 0, 4, 0, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 0, 1, 1, 0, 1, 1, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0, 4, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, 4, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0, 4, 4, 4, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 4, 4, 0, 4, 0, 0, 4, 0 }, { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

const unsigned char abc [8] [27*5] PROGMEM = {

{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };

const unsigned char santa [4] [8] [41] PROGMEM = {

{ { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } }, { { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } }, { { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0 }, { 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 } } };

#INFRATRIGGER_PIN D2 анықтаңыз

#NEOPIXELS_PIN D3 анықтау #NEO_NUMPIXELS 24 анықтау

Adafruit_NeoPixel пиксельдері = Adafruit_NeoPixel (NEO_NUMPIXELS, NEOPIXELS_PIN, NEO_GRB + NEO_KHZ800);

IPAddress localIPaddress;

IPAddress apIPadress; WiFiServer сервері (80); WebSocketsServer webSocket = WebSocketsServer (81); uint8_t кенеп [24] [65]; uint8_t co = 0; uint8_t көрініс = 0; uint8_t numScenes = 5; Жолдық сахналар [6] = {«ӘЛЕМ», «САНТА», «ҚАНЫР», «ТЕКС», «MATRIX»}; uint8_t бұру = 1; uint8_t numGreens = 0; // MATRIX түсетін жолдардың саны uint8_t greens [64] [2]; // MATRIX кездейсоқ pos x және y түсетін сызықтар

жарамсыз орнату () {

if (DEBUG) {Serial.begin (9600); Serial.println («Бастау …»); } кешіктіру (3000);

ESP8266WiFiMulti wifiMulti;

wifiMulti.addAP («wifissid», «pwd»); wifiMulti.addAP («мобильді байланыс», «pwd»); wifiMulti.addAP («ноутбуксид», «pwd»); if (DEBUG) Serial.print («Станцияны қосу»); while (wifiMulti.run ()! = WL_CONNECTED) {кешігу (1000); if (DEBUG) Serial.print («.»); } if (DEBUG) Serial.println («»); if (DEBUG) Serial.print («WiFi қосылған: SSID =»); if (DEBUG) Serial.println (WiFi. SSID ()); localIPaddress = WiFi.localIP (); if (DEBUG) Serial.print («Жергілікті станцияның IP мекенжайы:»); if (DEBUG) Serial.println (localIPaddress);

server.begin ();

if (DEBUG) Serial.println («Сервер (80) басталды»); webSocket.begin (); webSocket.onEvent (webSocketEvent); if (DEBUG) Serial.println («WebSocket (81) басталды»); uint8_t coli = 0; for (int i = 0; i <24; i ++) {for (int j = 0; j <64; j ++) {кенеп [j] = coli ++; coli = coli % 7; } кенеп [64] = 0; } pinMode (INFRATRIGGER_PIN, INPUT); attachInterrupt (digitalPinToInterrupt (INFRATRIGGER_PIN), бояу, RISING); piksel.begin (); пиксель.шоу (); if (DEBUG) {Serial.print («Неопиксель басталды, NUMPIXELS:»); Serial.println (piksel.numPixels ()); }}

жарамсыз webSocketEvent (uint8_t num, WStype_t түрі, uint8_t * пайдалы жүктеме, size_t ұзындығы) {

if (type == WStype_TEXT) {String req = Жол ((const char *) пайдалы жүктеме); if (DEBUG) {Serial.print («81 Req:»); Serial.println (талап); } processReq (талап); }}

String rip2 (String s) {

String res; int i = 0; while (s ! = '/') i ++; i ++; while (s ! = '/') i ++; i ++; while (s ! = '/' && s ! = '' && s ! = '\ r' && s ! = '\ n') res+= s [i ++]; қайтару; }

жарамсыз processReq (String req) {

if (req.indexOf («/rotate»)! = -1) {rotate = 1; } else if (req.indexOf («/көрініс»)! = -1) {бұру = 0; Жол sc = rip2 (req); if (isDigit (sc [0])) көрініс = sc.toInt (); else {көрініс = 0; үшін (int i = 0; i

void loop () {

webSocket.loop (); WiFiClient клиенті = server.available (); if (! клиент) {қайтару; } Жол req = client.readStringUntil ('\ r'); if (DEBUG) {Serial.print («80 Req:»); Serial.println (талап); } processReq (талап);

client.flush ();

Жол s = «HTTP/1.1 200 OK / r / nМазмұн түрі: text/html; charset = UTF-8 / r / nҚату-бақылау-рұқсат ету-тақырыптары: мазмұн түрі / r / nҚату-бақылау-рұқсат ету-шығу: *\ r / nБайланыс: жабу / r / n / r / n «; s + = «localIP:» + ipToString (localIPaddress) + «»; s + = «apIP:» + ipToString (apIPaddress) + «»; client.print (s); кешіктіру (100); client.stop (); }

бос бояу () {

for (int i = 0; i <65; i ++) {for (int j = 0; j <24; j ++) {unsigned char ind = canvas [j] ; pixel.setPixelColor (j, pixel. Color (бояғыш [ind] [0], бояғыш [ind] [1], бояғыш [ind] [2])); } пиксель.шоу (); кешіктіруМикросекундтар (10); } co = (co + 1) % 40; if (бұру) {if (co == 0) {көрініс = (көрініс+1) % numScenes; if (DEBUG) {Serial.print («Сахна:»); Serial.println (көрініс); }} if (co == 0) loadCanvas (көріністер [сахна]); } if (көріністер [сахна].indexOf («SANTA»)! = -1) {for (int i = 0; i <8; i ++) for (int j = 0; j = co && j

void loadCanvas (String what) {

clearCanvas (); if (DEBUG) {Serial.print («loadCanvas:»); Serial.println (не); } if (what.indexOf («TEXT»)! = -1) {for (int l = 0; l <3; l ++) for (int n = 0; n = 12 && j <51) кенеп [j] = pgm_read_byte_near (бұрыш +j-12); } else if (what.indexOf («ӘЛЕМ»)! = -1) {for (int i = 0; i <24; i ++) for (int j = 0; j = 11 && j <53) кенеп [j] = pgm_read_byte_near (әлем +j-11); }}

жарамсыз clearCanvas () {

if (DEBUG) Serial.println («clearCanvas»); үшін (int i = 0; i <24; i ++) үшін (int j = 0; j <65; j ++) кенеп [j] = 0; }

Жол ipToString (IPAddress ip) {

Жол s = «»; for (int i = 0; i <4; i ++) s+= i? «.» + Жол (ip ): Жол (ip ); қайтару с; }

Ұсынылған: