Satura rādītājs:
- 1. darbība: detaļu saraksts
- 2. solis: montāžas soļi
- 3. solis: 1. Stacionāra bāze ar līdzstrāvas motoru
- 4. solis: 2. Neopikselu piestiprināšana
- 5. solis: 3. Rotējošās iekārtas montāža
- 6. solis: 4. Elektrisko komponentu savienošana
- 7. solis: 5. Arduino kods
Video: Adventes laterna ar POV animāciju: 7 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
Vision (POV) projektu pastāvība pastāv jau ilgu laiku, vienkārši un lēti DIY komplekti ir pieejami pat tiešsaistē. POV pamatā ir optiska ilūzija, kurā mēs redzam apgaismotus objektus pēc tam, kad objekts vairs nav apgaismots, pat ja tikai īsu brīdi. Tradicionālajos POV projektos ir nekustīgi attēli, kuru pamatā ir šis princips, vai ne vairāk kā pulksteņi. Tomēr nekas neliedz projicēt animācijas, izmantojot pietiekama pulksteņa ātruma mikrokontrolleri un viedās RGB gaismas diodes. Šī konkrētā animācija ir saistīta ar ziemeļbriežu vilktu Ziemassvētku mīklu Adventes dekorēšanai, ko var attālināti vadīt ar jebkuru mobilo ierīci, kurā iespējota WiFi ar tīmekļa pārlūkprogrammu. Lukturi darbina Arduino ģimenes mikrokontrolleris Wemos ESP8266 D1 Mini. Kredīts par animētiem 8 bitu ziemeļbriežu kamanu rāmjiem pienākas talantīgam grafiķim Ričardam Fenjo.
1. darbība: detaļu saraksts
Šim projektam jums būs nepieciešams pietiekami smags futrālis, lai rotējošā iekārta paliktu vietā, neapgāžoties. Vecs PSU korpuss ir ideāls, tikai uzmanieties, lai kondensatori izlādētos pirms demontāžas. Jums būs nepieciešams arī jebkāda veida 5V-12V barošanas adapteris līdzstrāvas motora barošanai. Patiešām, jebkura strāva no 500 mA un vairāk to darīs.
Nepieciešamās detaļas ir norādītas zemāk ar interneta veikala saitēm un pašreizējām cenām.
- 2 gab. 18650 akumulators, USD 4, 78
- Akumulatora turētājs 2x18650, USD 0, 63
- Wemos D1 Mini, USD 2, 14
- Melnie salmi, USD 0, 10
- Infrasarkano atstarojošais sensors, USD 0, 38
- 250 V strāvas svirslēdzis, USD 0, 10
- Pārslēgt slīdni, USD 0, 02
- 6–900 apgr./min līdzstrāvas motors, USD 3, 99
- Adafruit Neopixel WS2812 8 bitu, USD 1, 01
Kopējās izmaksas ir mazākas par USD 15, bet jums būs nepieciešami arī daži rokas instrumenti, urbšana, karstā līme, kā arī lodēšanas aprīkojums un prasmes.
2. solis: montāžas soļi
Iekārtu var pilnībā salikt, veicot šīs darbības.
- Stacionārā bāze ir veidota ar līdzstrāvas motoru un slēdzi.
- Neopikseļi ir pielodēti un piestiprināti pie salmu vārpstas.
- Rotējošā iekārta ir veidota ar mikrokontrolleru, bīdāmo slēdzi, infrasensoru un salmu vārpstu.
- Elektroinstalācija ir pielodēta pie elektrisko detaļu savienotājiem
- Arduino kods tiek augšupielādēts Wemos mikrokontrollerī.
3. solis: 1. Stacionāra bāze ar līdzstrāvas motoru
- Izurbiet caurumu korpusā un nostipriniet līdzstrāvas motoru tā, lai vārpsta būtu vērsta uz augšu.
- Lodējiet svārsta strāvas slēdzi un parasto 5V-12V barošanas bloku, ievērojot zemāk esošo elektroinstalācijas shēmu.
- Norādītais līdzstrāvas motors griežas pie aptuveni 800 apgr./min (apgriezieni minūtē) pie 12 V sprieguma, kā rezultātā galīgajā iestatījumā ir aptuveni 10 kadri sekundē (kadri sekundē) atkarībā no salmu vārpstas faktiskās pretestības vējam.
- Pievienojiet strāvas padeves adapteri kontaktligzdai (110 vai 220V).
- Ieslēdziet svirslēdzi un pārbaudiet līdzstrāvas motora darbību.
Pēc tam rotējošā iekārta tiks samontēta un piestiprināta pie pamatnes līdzstrāvas motora vārpstas.
4. solis: 2. Neopikselu piestiprināšana
- Izgrieziet salmu galu divās pretējās pusēs vienā galā apmēram 1,5 cm, kā parādīts attēlā.
- Salmi salieciet trīs garākus vadus. Tie savienos Neopixel tapas ar platformas Wemos portiem.
- Lodējiet trīs vadus uz Neopixel tapām GND, 5V un D-IN.
- Karsti pielīmējiet vadus kārtīgi un kārtīgi no Neopixels pielodētā gala līdz pat LED joslas vidum.
- Izvelciet salmu sagrieztos spārnus un karsti pielīmējiet tos precīzā simetrijā uz LED joslas centra (vadu augšpusē vienā pusē).
- Vadi stiepjas cauri salmiem līdz platformai, lai sasniegtu atbilstošās Wemos pieslēgvietas.
5. solis: 3. Rotējošās iekārtas montāža
Visai iekārtai jābūt pilnībā samontētai, pirms tā tiek piestiprināta pie līdzstrāvas motora vārpstas. Tas ir tāpēc, ka fiksācijas vietai jābūt līdzsvarotai, lai rotācija būtu perfekti centrēta bez svārstībām.
- Karsti pielīmējiet Wemos D1 Mini mikrokontrolleru un bīdāmo slēdzi vienā akumulatora turētāja pusē, kā parādīts attēlā.
- Karsti pielīmējiet infrasarkano staru sensoru akumulatora turētāja otrā pusē.
- Ievietojiet baterijas turētājā.
- Novietojiet un nostipriniet salmu otru galu uz baterijām. To darīs neliela skrūve vai gumijas gredzens. Pārliecinieties, ka tas nepazudīs, kad iekārta sāks griezties pie 10 apgriezieniem minūtē.
- Atrodiet visu platformu smaguma centru apakšā. Izlīdzinot to uz pirksta gala, tas izdosies.
- Akumulatora turētāja apakšā izveidojiet nelielu caurumu.
- Uzklājiet karstu līmi un nostipriniet motora vārpstu šajā caurumā. Pārliecinieties, ka karstā līme neietilpst motora korpusā. Turiet to vienmērīgi, līdz līme izžūst.
- Izgrieziet nelielu balta papīra gabalu un uzlīmējiet to uz stacionāras pamatnes tā, lai atstarojošais infrasarkanais sensors grieztos tieši šī papīra tuvumā. Tas aktivizēs animācijas rāmju zīmēšanu katrā rotācijas vietā. Attēlā redzams šis atstarojuma gabals pamatnes kreisajā apakšējā stūrī.
6. solis: 4. Elektrisko komponentu savienošana
Ievērojot elektroinstalācijas shēmu, lodējiet elektriskās sastāvdaļas šādās darbībās. Ņemiet vērā, ka tas pats Wemos D1 Mini mikrokontrollera ports tiks pielodēts vairākas reizes ar vairākiem dažādiem vadiem. Tas prasa zināmu praksi, vai arī savienojiet šos vadus pirms lodēšanas uz Wemos porta.
- Trīs vadi (GND, 5V un D-IN) ir pielodēti attiecīgi Wemos G, 5V un D3 portos.
- Divi vadi no infrasarkanā atstarojošā sensora (VCC, GND, OUT) ir pielodēti attiecīgi Wemos portos 5V, G un D2.
- Akumulatora turētāja iezemētais (melnais) vads ir pielodēts Wemos G ostā.
- Akumulatora turētāja pozitīvais (sarkanais) vads ir pielodēts uz slīdņa slēdža tuvākās tapas.
- Wemos 5V ports ir pielodēts uz slīdņa slēdža citas tapas.
7. solis: 5. Arduino kods
Šis īpašais kods ir paredzēts POV Lantern 24 bitu versijai, un to var attālināti vadīt no jebkuras mobilās ierīces ar tīmekļa pārlūkprogrammām, un tam ir vizuālie efekti, piemēram, Pasaules karte, Matricas animācijas efekts un Ziemeļbriežu Sleight animācija. Jūtieties brīvi pielāgot pikseļu skaitu, efektu parametrus vai WiFi attālo saskarni savām vajadzībām avota kodā.
// 24 biti POV Lantern - 2019 Peter Csurgay
#include ESP8266WiFiMulti.h
#include WiFiClient.h #include ESP8266WebServer.h #include WebSocketsServer.h #include Adafruit_NeoPixel.h
#define DEBUG 1
Virknes teksts [3] = {"INSTRUCTABLES", "ARDUINO", "CONSEST"};
const uint8_t palete [8] [3] = {
{0, 0, 0}, // 0 - caurspīdīgs {0, 0, 127}, // 1 - zils {127, 0, 0}, // 2 - sarkans {127, 127, 0}, // 3 - dzeltena {0, 127, 0}, // 4 - zaļa {127, 24, 0}, // 5 - oranža {127, 0, 127}, // 6 - fuksīna {127, 127, 127} // 7 - balts};
const unsigned char world [24] [42] PROGMĒMA =
{ { 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 pepper [24] [8+31] PROGMĒMA =
{ { 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] PROGMĒMA = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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] PROGMĒMA = {
{ { 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 } } };
#define INFRATRIGGER_PIN D2
#definēt NEOPIXELS_PIN D3 #define NEO_NUMPIXELS 24
Adafruit_NeoPixel pikseļi = Adafruit_NeoPixel (NEO_NUMPIXELS, NEOPIXELS_PIN, NEO_GRB + NEO_KHZ800);
IPAddress localIPaddress;
IPAddress apIPaddress; WiFi servera serveris (80); WebSocketsServer webSocket = WebSocketsServer (81); uint8_t audekls [24] [65]; uint8_t co = 0; uint8_t aina = 0; uint8_t numScenes = 5; Stīgu ainas [6] = {"PASAULE", "SANTA", "PEPPER", "TEXT", "MATRIX"}; uint8_t rotēt = 1; uint8_t numGreens = 0; // MATRIX krītošo līniju skaits uint8_t greens [64] [2]; // MATRIX nejauša krītošo līniju po x un y
void setup () {
ja (DEBUG) {Serial.begin (9600); Serial.println ("Sākt …"); } kavēšanās (3000);
ESP8266WiFiMulti wifiMulti;
wifiMulti.addAP ("wifissid", "pwd"); wifiMulti.addAP ("mobilessid", "pwd"); wifiMulti.addAP ("laptopssid", "pwd"); ja (DEBUG) Serial.print ("Savienojuma stacija ar"); while (wifiMulti.run ()! = WL_CONNECTED) {kavēšanās (1000); ja (DEBUG) Serial.print ("."); } ja (DEBUG) Serial.println (""); ja (DEBUG) Serial.print ("WiFi pieslēgts: SSID ="); ja (DEBUG) Serial.println (WiFi. SSID ()); localIPaddress = WiFi.localIP (); if (DEBUG) Serial.print ("Vietējās stacijas IP adrese:"); ja (DEBUG) Serial.println (localIPaddress);
server.begin ();
ja (DEBUG) Serial.println ("Serveris (80) sākts"); webSocket.begin (); webSocket.onEvent (webSocketEvent); ja (DEBUG) Serial.println ("WebSocket (81) sākās"); uint8_t coli = 0; par (int i = 0; i <24; i ++) {par (int j = 0; j <64; j ++) {audekls [j] = koli ++; koli = koli % 7; } audekls [64] = 0; } pinMode (INFRATRIGGER_PIN, INPUT); attachInterrupt (digitalPinToInterrupt (INFRATRIGGER_PIN), paint, RISING); pikseļi.sākas (); pikseļi.parādīt (); if (DEBUG) {Serial.print ("Neopikselis sākts, NUMPIXELS:"); Serial.println (pixels.numPixels ()); }}
void webSocketEvent (uint8_t numurs, WStype_t tips, uint8_t * lietderīgā slodze, size_t garums) {
if (type == WStype_TEXT) {String req = String ((const char *) lietderīgā slodze); ja (DEBUG) {Serial.print ("81 Req:"); Serial.println (req); } processReq (req); }}
String rip2 (String s) {
Stīgu res; int i = 0; kamēr (s ! = '/') i ++; i ++; kamēr (s ! = '/') i ++; i ++; kamēr (s ! = '/' && s ! = '' && s ! = '\ r' && s ! = '\ n') res+= s [i ++]; atgriezties res; }
void processReq (String req) {
ja (req.indexOf ("/rotate")! = -1) {rotate = 1; } cits ja (req.indexOf ("/aina")! = -1) {rotēt = 0; String sc = rip2 (req); ja (isDigit (sc [0])) aina = sc.toInt (); cits {aina = 0; par (int i = 0; i
void loop () {
webSocket.loop (); WiFiClient klients = server.available (); ja (! klients) {return; } String req = client.readStringUntil ('\ r'); ja (DEBUG) {Serial.print ("80 Req:"); Serial.println (req); } processReq (req);
client.flush ();
String s = "HTTP/1.1 200 OK / r / nContent-Type: text/html; charset = UTF-8 / r / nAccess-Control-Allow-Headers: Content-Type / r / nAccess-Control-Allow-Origin: *\ r / nSavienojums: aizvērt / r / n / r / n "; s + = "localIP:" + ipToString (localIPaddress) + ""; s + = "apIP:" + ipToString (apIPadrese) + ""; client.print (s); kavēšanās (100); client.stop (); }
tukša krāsa () {
par (int i = 0; i <65; i ++) {par (int j = 0; j <24; j ++) {unsigned char ind = canvas [j] ; pixels.setPixelColor (j, pixels. Color (palete [ind] [0], palete [ind] [1], palete [ind] [2])); } pixels.show (); delayMikrosekundes (10); } co = (co + 1) % 40; ja (pagriezt) {ja (co == 0) {aina = (aina+1) % numScenes; ja (DEBUG) {Serial.print ("Scene:"); Serial.println (aina); }} if (co == 0) loadCanvas (ainas [aina]); } ja (ainas [aina].indexOf ("SANTA")! = -1) {for (int i = 0; i <8; i ++) for (int j = 0; j = co && j
void loadCanvas (virkne) {
clearCanvas (); if (DEBUG) {Serial.print ("loadCanvas:"); Serial.println (kas); } ja (what.indexOf ("TEXT")! = -1) {for (int l = 0; l <3; l ++) for (int n = 0; n = 12 && j <51) audekls [j] = pgm_read_byte_near (pipari +j-12); } cits if (what.indexOf ("WORLD")! = -1) {for (int i = 0; i <24; i ++) for (int j = 0; j = 11 && j <53) audekls [j] = pgm_read_byte_near (pasaule +j-11); }}
void clearCanvas () {
ja (DEBUG) Serial.println ("clearCanvas"); par (int i = 0; i <24; i ++) par (int j = 0; j <65; j ++) audekls [j] = 0; }
String ipToString (IPAddress ip) {
String s = ""; par (int i = 0; i <4; i ++) s+= i? "". + Stīga (ip ): virkne (ip ); atgriezties s; }
Ieteicams:
DIY LED Adventes kalendārs: 3 soļi
DIY LED Adventes kalendārs: Es aprakstīšu, kā mēs izveidojām šo analogo pulksteni, kas dubultā darbojas kā adventes kalendārs. Visu diennakti aplī ir 24 ws2811 gaismas diodes, un katra no tām iedegas zaļā krāsā līdz dienām pirms Ziemassvētkiem. Ziemassvētku dienā visas gaismas iedegas
DIY automobiļu pagrieziena signāls ar animāciju: 7 soļi
DIY Automotive pagrieziena signāls ar animāciju: Nesen animēti indikatora priekšējie un aizmugurējie LED modeļi ir kļuvuši par normu automobiļu rūpniecībā. Šie darbojošie LED modeļi bieži ir automobiļu ražotāju preču zīme un tiek izmantoti arī vizuālai estētikai. Animācijas
RGB LED kubs ar Bluetooth lietotni un animāciju Izveidotājs: 14 soļi (ar attēliem)
RGB LED kubs ar Bluetooth lietotni + AnimationCreator: tas ir pamācība, kā izveidot 6x6x6 RGB LED (kopējo anodu) kubu, ko kontrolē Bluetooth lietotne, izmantojot Arduino Nano. Visa konstrukcija ir viegli pielāgojama, piemēram, 4x4x4 vai 8x8x8 kubam. Šo projektu iedvesmojis GreatScott. Es nolēmu
Kā izveidot vieglu animāciju, izmantojot digitālo planšetdatoru: 6 soļi
Kā izveidot vieglu animāciju, izmantojot digitālo planšetdatoru: šovasar ar vecāku palīdzību man izdevās iegūt Wacom Intous Pro mazo. Es iemācījos fotoattēlu rediģēšanu, zīmēšanu un karikatūru skicēšanu utt. Es pēc tam nolēmu izveidot Instructable. Galu galā es nolēmu izveidot īsu un jautru animāciju
Kā izveidot animāciju Gimp: 4 soļi
Kā veikt animāciju vietnē Gimp: tas māca animācijas procesu vietnē gimp. Tas ir nedaudz sarežģīti, bet, ja jūs uzmanīgi lasāt, es domāju, ka ikviens to var izdarīt