Projekt elektronička meta – Monitor


Projekt ELEKTRONIČKA META

 

 


 

 

Obrada i prikaz podataka na monitoru strijelca

 

Na prijemnoj strani svakako želimo neki displej na kojem će biti prikazana meta, pogoci i druge informacije. Pretraživanjem Interneta u uži izbor su ušle dvije MCU razvojne platforme sa 7-inčnim LCD displejima osjetljivim na dodir: Waveshare ESP32-S4-Touch-LCD-7″ i Elecrow CrowPanel ESP32-S4-Touch-LCD-7″ Display.

 

CrowPanel Advanced sa ESP32-P4 i 7″ zaslonom razlučivosti 1024×600 piksela (model DHE04107D)

 

CrowPanel Advanced sa 7″ zaslonom razlučivosti 1024×600 piksela, pogonjem mikrokontrolerom ESP32-P4 (Espressif Systems) je trenutno vodeći proizvod tvrtke Elecrow, što se tiče razvojnih MCU platformi sa displejom. Potpuno isti MCU sustav, osim sa displejom od  7“, dobavljiv je i sa displejima od 9“ ili 10,1“ iste razlučivosti.

 

 

Zašto CrowPanel, koje su alternative?

U osnovi, što se tiče ovakvih kompletnih mikrokontrolerskih sustava sa displejima, imate izbor između Elecrow CrowPanela, gotovo identičnih Waveshare ploča, te Raspberry Pi i Arduino Mega sustava.

Arduino Mega (s čipom ATmega 2560) je prastari, bazični 8-bitni mikrokontroler koji radi na svega 16 MHz. Dobra je stvar što se lako programira i uglavnom sve radi iz prve. Međutim, Arduino Mega jedva gura male ekrane rezolucije 320×240 piksela, malo složeniji kod će vidno usporiti osvježavanje ekrana i RAM memorija jednostavno nije dovoljna za bilo kakav napredniji projekt.

Raspberry Pi (4 ili 5) je u osnovi minijaturno računalo koje u pozadini vrti operacijski sustav (najčešće Linux/Raspbian). Na ovakvom sustavu se bez puno muke rješavaju napredna grafička sučelja, obrađuju video i audio datoteke te stvaraju napredna sučelja. Rezolucija ekrana može biti i puna 4K. Međutim, kao i svako drugo računalo, kod paljenja se čeka na podizanje sustava (boot traje između 20 i 40 sekundi) i potrošnja struje je velika (5V, 5A). To je vrlo ograničavajući faktor za prijenosni terenski uređaj. Što je najgore, Linux nije operacijski sustav u realnom vremenu (Real-Time). Ako operacijski sustav u pozadini odluči primjerice raditi ažuriranje memorije, može potisnuti primanje podataka o pogotku sa mete preko LoRa sustava. Cijena ovakvih platformi može biti prilično visoka, nekoliko stotina eura.

CrowPanel sa ESP32-P4 je takozvani napredni mikrokontroler vrlo moćnom grafikom i negdje je u sredini između ATmega i Raspberry sustava. Radi izravno na hardveru preko FreeRTOS-a, bez ikakvog operacijskog sustava u pozadini. Stoga se sustav podiže vrlo brzo (praktički trenutno kad se uključi napajanje), a potrošnja struje je vrlo mala. CrowPanel ESP32-P4 sa 7″ zaslonom košta oko 75 eura, a sa 10″ zaslonom je nešto preko 100 eura. Za projekt elektroničke mete ovo je optimalan izbor glede cijene i performansi. Arduino Mega je prespor i preslabih specifikacija za bilo kakav ozbiljniji projekt, a Raspberry Pi je računalo kod kojeg su tromost, kašnjenja, velika potrošnja i zagrijavanje veći nedostatak od prednosti sirove snage.

Waveshare ploče su hardverski identične CrowPanel pločama i možete birati koje procesore, ekrane, periferije i komunikacijske portove želite imati na ploči. Razlika je jedino što ćete morati prilagođavati programiranje (bibiloteke) Elecrow ili Waveshare specifikacijama, pa je dobro izabrati ploču za koju pronađete više praktičnih primjera i dokumentacije.

 

Tehničke specifikacije CrowPanel Advanced sa ESP32-P4

Tehničke specifikacije ovog panela su prilično visoke:

  • SoC : Espressif ESP32-P4 (dvojezgreni RISC-V @360 MHz + LP-jezgra @40 MHz)
  • ESP32-C6: poseban mikrokontroler samo za bežičnu komunikaciju (WiFi 6, Bluetooth 5.4, podrška za Zigbee/Thread/Matter)
  • Memorija : 32 MB PSRAM, 16 MB NOR Flash
  • Zaslon : 7-inčni IPS panel (1024 x 600 piksela, 400 cd/m²), kapacitivni dodirni (GT911)
  • Sučelja : MIPI-DSI (2 trake) za zaslon i MIPI-CSI (2 trake) za kameru
  • Periferni uređaji : 1x USB 2.0 (OTG), 1x USB-UART, utor za microSD karticu, priključak i kontroler punjenja za LiPo bateriju, razni GPIO-i (I2C , UART), utor za bežične module, mikrofon, stereo zvučnici sa pojačalom

Pojasnimo malo ove specifikacije kroz sam projekt elektroničke mete.

 

ESP32-P4 RISC-V

 

Kada je Espressif lansirao ESP32-P4 čip, napravio je ogroman tehnološki skok u odnosu na starije generacije (poput klasičnog ESP32 na 240 MHz). Podignuli su brzinu na 360 MHz (na obje jezgre) i ugradili potpuno novu, moderniju arhitekturu procesora pod nazivom RISC-V.

RISC-V (izgovara se “risk-five”) je otvorena i besplatna arhitektura (ISA – Instruction Set Architecture) za dizajn čipova. Za razliku od ARM-a ili Intela gdje tvrtke moraju plaćati velike iznose za korištenje njihove arhitekture, s RISC-V arhitekturom bilo tko može dizajnirati i proizvesti vlastiti čip bez plaćanja naknada (royalty-free).

Kratica RISC inače stoji za Reduced Instruction Set Computer (računalo s reduciranom skupom instrukcija). Ideja je da procesor koristi vrlo jednostavne i brze naredbe. Umjesto jedne komplicirane instrukcije, on izvršava nekoliko malih, ali iznimno brzo i uz malu potrošnju energije. ESP32-P4 je jedan od najnaprednijih čipova tvrtke Espressif temeljen upravo na RISC-V arhitekturi. Budući da je arhitektura otvorena, inženjeri mogu dodavati vlastite “naredbe” za ubrzanje specifičnih zadataka, poput obrade slike s kamere ili grafike na ekranu.

 

FreeRTOS

ESP32-P4 koristi FreeRTOS (Free Real-Time Operating System). To je minijaturni operacijski sustav ugrađen u sam ESP32-P4 koji mu omogućava obavljanje više zadataka odjednom (Task). FreeRTOS je dakle samostalan komad programskog koda koji se unutar procesora izvršava paralelno i neovisno o drugim dijelovima programa.

U običnom Arduinu procesor radi strogo odozgo prema dolje, liniju po liniju. Ako primjerice moj kôd uđe u petlju koja čita BME280 senzor ili piše po SD kartici, ostatak sustava za to vrijeme stoji i čeka. To može uzrokovati prekide u radu ostalih sustava što se primjerice manifestira kao „trzanje“ osvježavanja grafike ekrana ili reprodukcije zvuka, a može doći i do nereagiranja na neke događaje koji se u tom trenutku mogu dogoditi u pozadini.  Stoga se u FreeRTOS-u kôd razbije na nekoliko neovisnih cjelina (niti) i svakoj se dodijeli određeni prioritet. Na primjer:

  • Nit 1 (Prioritet 5 – Najviši): Sluša DIO1 pin na LoRa komunikaciji i čeka signal pogotka sa mete.
  • Nit 2 (Prioritet 2 – Srednji): Vrti LVGL grafiku i osvježava gumbe na ekranu.
  • Nit 3 (Prioritet 1 – Niski): Čita temperaturu s BME280 senzora svake 2 sekunde.

ESP32-P4 ima dvije procesorske jezgre (Core 0 i Core 1). FreeRTOS raspoređuje zadatke po jezgrama (Multicore) tako da dva prioritetna zadatka ne moraju čekati jedan drugoga. Naredbom xTaskCreatePinnedToCore doslovno u kodu definirate da se primjerice grafika vrti na jezgri 1, a brza radijska LoRa komunikacija a jezgri 0. Time grafika više fizički ne može usporiti ili blokirati pakete sa podacima koji dolaze od mete.

Naravno, čak i moj sustav ima više paralelnih zadataka i ne može se za svaki imati zasebna jezgra procesora. Uvijek na jednoj jezgri mora biti više niti i cilj je da se one izvršavaju što brže, bez da jedna drugu ometaju. Stoga kada više niti radi na istoj jezgri, FreeRTOS dijeli vrijeme na tisuće sićušnih isječaka (milisekundi). On u letu prebacuje jezgru s jedne niti na drugu toliko brzo da ljudskom oku izgleda kao da uređaj radi sve odjednom. Ako se primjerice u stotinki sekunde dok tipkam po touch ekranu (Nit 2) dogodi prekid na LoRa anteni, FreeRTOS će trenutno i nasilno pauzirati grafiku i prepustiti procesor radijskoj niti (Nit 1) da u mikrosekundi spasi koordinate pogotka, i nakon toga vratiti grafiku točno tamo gdje je stala.

U mojem konkretnom projektu elektroničke mete jedna jezgra je zadužena za LGVL grafiku, rendersko crtanje linija koje predstavljaju stvarne optičke senzore na meti, crtanje balističkih tablica i višejezičnu podršku (prebacivanje 4 europska jezika u RAM-u). Druga jezgra istovremeno, bez ikakvog kašnjenja, vrti FreeRTOS niti, obradu LoRa paketa koji pristižu s mete i balističku matematiku pada zrna. Frekvencija od 360 MHz znači da svaka od ove dvije jezgre može izvršiti 360 milijuna operacija u jednoj jedinoj sekundi.

 

Pomoćna LP-jezgra na 40 MHz

Kratica LP označava Low-Power (niska potrošnja). To je treća, minijaturna i neovisna jezgra unutar istog ESP32-P4 čipa. Njezin jedini posao je da podržava sustav u stanju mirovanja (Sleep mod). Tada se dvije glavne jezgre od 360 MHz potpuno ugase kako ne bi trošile bateriju. Ova mala LP-jezgra na 40 MHz ostaje aktivna, troši mikroskopske količine struje i samo čeka pritisak na gumb ili radijski LoRa signal da u stotinki sekunde “probudi” glavne jezgre.

 

Dva mikrokontrolera ESP32-P4 i ESP32-C6

CrowPanel dolazi sa dva odvojena mikrokontrolera, glavni ESP32-P4 i pomoćni ESP32-C6. Budući da je Espressif dizajnirao ESP32-P4 sa primarnim naglaskom na grafiku, on nema ugrađenu Wi-Fi, Bluetooth ili neku drugu radijsku komunikaciju. Stoga je dodan ESP32-C6 koji služi kao bežični koprocesor (modem). Njegov jedini posao na pločici je upravljanje radio komunikacijom. On u sebi drži ultra-moderni hardver za Wi-Fi 6, Bluetooth 5.4 te protokole male potrošnje za pametne uređaje (Zigbee / Thread / Matter).

Ovakav dual-čip sustav omogućava potpuni “Real-Time” rad. Uobičajeni problem kod standardnih ESP32 čipova je taj što Wi-Fi protokol u pozadini troši jako puno procesorskog vremena. Kada čip održava mrežnu vezu, on na nekoliko milisekundi mora pauzirati izvršavanje kôda. Kod ove arhitekture sa zasebnim radijskim procesorom, mrežni rad na ESP32-C6 čipu fizički ne može usporiti glavni ESP32-P4 procesor, tako da on može biti potpuno posvećen računanju, grafici i drugim procesima na ekranu.

Podrška za Thread i Zigbee na ESP32-C6 čipu u teoriji omogućuje da na strelištu stvorim takozvanu Mesh (mrežastu) topologiju. To znači da ako postavim 5 meta u nizu na različite daljine (npr. na 100, 200, 300 metara), mete mogu bežično komunicirati jedna kroz drugu i prenositi signal do CrowPanela.

 

32 MB PSRAM i 16 MB NOR Flash memorije

PSRAM (Pseudo-Static Random Access Memory) je privremena (radna) memorija, ekvivalent RAM memoriji u klasičnom računalu. Riječ “Pseudo” znači da je ona unutra konstruirana kao jeftini DRAM (koji troši malo struje), ali se prema procesoru ponaša kao super-brzi SRAM.

CrowPanel ima 32 MB PSRAM memorije i u mojem projektu LVGL unutar nje stvara prozore u realnom vremenu, vrti se balistička matematika, teku FreeRTOS niti radija i zvuka, te se stvara unutrašnji LCD Frame Buffer (spremnik piksela) koji prenosi sliku na sam ekran. PSRAM se briše prekidom napajanja.

NOR Flash označava specifičnu vrstu postojane memorije (eng. Non-Volatile Memory) koja omogućuje izravno i brzo čitanje svakog pojedinačnog bajta u memoriji (tzv. Random Access). Može se zamisliti kao tvrdi disk sustava. Naziv “NOR” dolazi od vrste unutrašnjih logičkih vrata (NILI vrata) koja omogućuju procesoru da brzo čita podatke izravno s ovog čipa bez potrebe da ih prvo kopira u RAM. Unutar 16 MB NOR Flasha trajno je zapisan cjelokupni programski kôd.

Kombinacija od 32 MB PSRAM-a i 16 MB NOR Flasha je prilično dobra memorijska podloga za mikrokontrolere i svakako zaslužna da se čitav moj program vrti bez ikakvog trzanja ili usporavanja zaslona, zvuka i ostalog.

 

MIPI-DSI (2 trake) za zaslon i MIPI-CSI (2 trake) za kameru

Kratica MIPI (Mobile Industry Processor Interface) predstavlja najmoderniji standard za brzi prijenos slike, koji je preuzet iz svijeta pametnih telefona. Riječ Traka (eng. Lane) označava ultra-brze diferencijalne parove bakrenih linija na pločici kroz koje digitalni podaci teku brzinom od nekoliko stotina megabita u sekundi.

MIPI-DSI (Display Serial Interface) s 2 trake služi da bi zaslon od 1024×600 piksela mogao imati savršenih 60 sličica u sekundi i glatke LVGL animacije bez ikakvog trzanja.

MIPI-CSI (Camera Serial Interface) s 2 trake na istoj toj ploči služi da bi sirovi podaci s 2 MP senzora mogli stizati u procesor u realnom vremenu. U CrowPanel se isporučuje kamera AS-AG638A32M1-25, MIPI-CSI modul s 2 MP senzorom. Namijenjena je za napredna HMI (Human-Machine Interface) sučelja i AI projekte poput prepoznavanja lica (uz opcionalnu kameru).

 

Zvuk i SD kartica

CrowPanel za zvuk koristi I2S (Inter-IC Sound) digitalni protokol. ESP32-P4 šalje digitalni signal u audio dekoder/pojačalo na ploči, koji ih pretvara u analogni signal za zvučnike. Ugrađeno stereo audio pojačalo i originalni minijaturni zvučnici zapravo daju vrlo jak i čist zvuk. Za čitanje datoteka koristi se SDMMC (brzi paralelni pristup SD kartici).

 

GPIO pinovi i komunikacijski protokoli

Sam ESP32-P4 čip ima ukupno 55 GPIO pinova, no velik dio njih je interno zauzet za upravljanje 7“ zaslonom (putem MIPI-DSI sučelja), kamerom (MIPI-CSI), audio sustavom i memorijom. Međutim, zahvaljujući MIPI-DSI tehnologiji koju koristi ovaj model, zaslon zauzima vrlo malo pinova, ostavljajući korisniku puno više slobodnih resursa za projekte u usporedbi s prethodnim ESP32-S3 modelima. Moj CrowPanel tako ima na raspolaganju:

  • UART-0 (USB-C): USB-to-UART priključak koji primarno služi za programiranje (upload koda) flashanje i debugging (serijski monitor) putem računala. Također napaja uređaj (5V).
  • USB 2.0 (USB-C): Nativni USB port ESP32-P4 čipa koji podržava velike brzine (do 480 Mbit/s). Može se koristiti kao USB OTG (On-The-Go), odnosno omogućuje spajanje perifernih uređaja poput tipkovnice, miša ili USB memorije (sticka) izravno na zaslon. Port može služiti i za emulaciju raznih USB uređaja, kontrolera i vanjskih memorija kada je spojen na računalo.
  • 24-pinski GPIO header: Glavni priključak za senzore i aktuatore koji nudi najširi raspon slobodnih pinova. Priključak ima izvedenih 11 GPIO pinova, ostalo su pinovi za napajanje (3,3 V ili 5 V) i masu.
  • UART-1 i UART3-IN: Priključci za serijsku komunikaciju s drugim mikrokontrolerima.
  • I2C-1: Namijenjen za povezivanje raznih senzora (temperatura, vlaga, pritisak) ili OLED ekrana koji podržavaju I2C protokol.
  • TF Card Slot: Utor za MicroSD karticu.
  • CSI-CAM (MIPI-CSI): FPC priključak za spajanje kamere (OV2640 ili slične). Zahvaljujući ESP32-P4 čipu, ovaj port omogućuje lokalno prepoznavanje lica i AI analizu slike bez potrebe za Internetom.
  • LCD-TP (MIPI-DSI): Interni priključak koji povezuje sam 7-inčni zaslon i kapacitivni dodirni panel na procesor.
  • Wireless module: 2×7 pinski header za priključivanje raznih bežičnih komunikacijskih modula koje nudi Elecrow (LoRa, Zigbee, nRF24L01).

 

 

Programiranje CrowPanela

Moderni hardver i softver je danas postao nevjerojatno složen. Za razvoj grafičkog sučelja na CrowPanel Advanced 7″ potrebno je prilično napredno poznavanje programiranja. Dodatni problem je što je sam  CrowPanel baziran na relativno novom čipu ESP32-P4 i na Internetu nema baš puno informacija za rješavanje problema oko programiranja ovog uređaja.

Čak i za iskusne programere, ESP32-P4 je trenutno zahtjevan procesor jer je toliko nov da se dokumentacija i biblioteke mijenjaju iz tjedna u tjedan. Naravno, AI tu služi kao onaj kolega koji je već pročitao sve skrivene forume i “zakrpe” koje još nisu ušle u službene upute, međutim, čak i sa takvim pomoćnikom programiranje ide vrlo nesigurno, a vrlo često, kad se i dođe do nekog nivoa, lako se slijedećim potezom opet sve sruši na nulu.

Može li totalni početnik u programiranju, uz pomoć AI, razviti složeni kod za CrowPanel? Odgovor je, da, može. Međutim, potrebno je puno truda, vremena, koncentracije, učenja i upornosti da bi se došlo do rezultata. Utrošio sam oko 100 sati rada da bi uz pomoć AI programirao stabilan i pouzdan displej za elektroničku metu.

 

Dokumentacija i podrška

Sve provjereno što možete naći o programiranju ESP32-P4-Elecrow-Advance nalazi se u Elecrow paketu „CrowPanel-Advanced-7inch-ESP32-P4-HMI-AI-Display-1024×600-IPS-Touch-Screen-master“ kojeg možete skinuti sa GitHub-a. Tu su upute u pdf-u, sve biblioteke koje provjereno rade sa ovim displejom, a dobiti ćete i 14 osnovnih Arduino lekcija za upravljanje pojedinim segmentima CrowPanela (touch-screen, serijski port, USB, SD kartica, zvučna kartica, bežični moduli). Ovdje možete naći koji pinovi su dodijeljeni kojim funkcijama i ostalo specifično za programiranje displeja.

Budući da imam CrowPanel model SKU:DHE04107D, važno je da koristim upravo taj GitHub repozitorij jer on sadrži ispravne Board definicije za ESP32-P4. Ovaj čip koristi drugačiji način upravljanja memorijom za ekran od ranijih S3 modela, pa “standardni” primjeri često rezultiraju crnim ekranom ili nepredviđenim rušenjima sustava. To sam tijekom programiranja iskusio više puta. ESP32-P4 svakako ne koristi obične Arduino drivere, već industrijske protokole koji traže specifične biblioteke iz Elecrow paketa.

 

Iskustva tijekom programiranja

Moje iskustvo u programiranju mikrokontrolera ESP32-P4 je na početku bilo ravno nuli. Imamo sam tek nekoliko malih projekata na ATmega 2560 i ESP32-VROOM-32D razvojnim pločicama.

Prve informacije koje sam našao na Internetu upućivale su me na korištenje programa  SquareLine Studio koji služi za vizualno (Drag-and-Drop) crtanje grafika i kontrola za ovakve i druge (touch) displeje. Program, u teoriji, omogućuje da se vidi kako će sučelje izgledati na ekranu bez pisanja ijedne linije koda. Ima ugrađen Play gumb (simulator) gdje se mogu testirati klikovi mišem kao da je to dodir prstom.

Tu je onda i nezaobilazni LVGL (Light and Versatile Graphics Library), besplatna knjižnica otvorenog koda koja iscrtava ono što ste dizajnirali u SquareLine-u. Instalira se unutar Arduino IDE-a preko Library Managera (lvgl). SquareLine Studio će izvesti (Export) gotov C++ kod koji koristi LVGL funkcije. Taj kod se zatim učita u ESP32 na CrowPanelu.

Ovo u teoriji zvuči super, međutim, u praksi, proveo sam sate i sate (dane) boreći se sa MIPI-DSI protokolima, LDO regulatorima napona, PSRAM memorijom i višeslojnim grafičkim bibliotekama poput LVGL-a, odnosno sa stvarima za koje sam ovdje čuo prvi put. Crtanje gumbi, stvaranje labela i grafika je zapravo u cijeloj priči najmanji problem i ovo je najbolje i najbrže radilo izravnim pisanjem koda.

 

CrowPanel hardver

CrowPanel dolazi kao prilično cjelovito rješenje, no kao i svako drugo računalo, tako i CrowPanel za punu namjensku funkcionalnost treba nadograditi određenim vanjskim modulima, te oživjeti ugrađene periferije. Od vanjskih modula ugradio sam RTC DS3231 (realni sat za vrijeme i datum), LoRa SX1262 (850-930 MHz) za long-range komunikaciju meta-strijelac i senzor BME280 (temperatura, tlak i vlaga zraka). Od ugrađenog hardvera trebalo je pokrenuti touch-displej, zvuk i SD karticu.

Ništa od ovoga nije prošlo glatko ni brzo. Uz CrowPanel sam dobio LoRa modul za koji, kako to kod Kineza biva, nigdje ne piše na kojoj frekvenciji radi, niti piše naziv modela, niti se mogu vidjeti oznake na čipu. Sam čip je inače SX1262 i oni obično rade na dva opsega: 430-470 MHz ili 850-930 MHz.

Stoga sam prvo aktivirao LoRa modul jednostavnim programom tako da na analizatoru spektra uopće vidim na kojem frekvencijskom pojasu radi. Ispostavilo se da moj LoRa SX1262 radi na 915 MHz što znači da nije kompatibilan sa LoRa SX1278 (Ra-2) modulom kojeg imam na meti (TX) i koji radi na 410-525 MHz. Dva različita čipa bi se još mogla upariti, no potpuno različite frekvencije je nemoguće softverski ispraviti. Naručio sam stoga još jedan LoRa SX1262 na 915 MHz za TX.

LoRa preko SX1262 čipa koristi SPI sabirnicu za komunikaciju s procesorom. Budući da je ESP32-P4 baziran na RISC-V arhitekturi, starije biblioteke često ne rade. Ključna biblioteka je „RadioLib“. To je trenutno najmodernija i najstabilnija biblioteka za SX12xx module. Podržava sve napredne funkcije (SF, frekvencija, sync word) i radi dobro na RISC-V čipovima. Međutim, trebate „pogoditi“ pravu verziju RadioLib biblioteke na kojoj će najbolje raditi određeni LoRa modul.

Pokretanje ostala dva vanjska senzora također nije prošlo glatko. Iako postoje standardne Arduino biblioteke za RTC DS3231  i BME280 kao i za I2C sabirnicu preko koje rade, ove bibilioteke ne rade sa ESP32-P4. Treba koristi poseban Elecrow driver za I2C, a za same senzore mi je AI morala generirati kompletni namjenski kod jer CrowPanel ne radi sa standardnim Arduino bibliotekama. Naravno, ništa ne prolazi iz prve, trebalo je nekoliko desetaka nadogradnji kodova da CrowPanel napokon prepozna i ispravno očitava ove senzore.

Nekoliko desetaka pokušaja je bilo potrebno i prije nego se pronađu ispravni drajveri za displej, zvuk i SD karticu. Zapravo smo AI i ja zajedno proučavali originalne Elecrow librarije, ne bi li iz njih saznali kako su inženjeri osmislili CrowPanel i kako ga treba programirati.

 

Tijekom razvoja softvera RTC DS3231 (sat i datum)  i BME280 (senzor za temperaturu, tlak i vlagu) radili su na zajedničkoj I2C sabirnici. U konektor za bežične module utaknut je LoRa SX1262. Spojeni su i stereo zvučnici te će uz LiPo bateriju ovo biti praktički sav hardver na strani strijelca.

 

 

Što AI može, a što ne može?

Što se tiče generiranja programskih kodova, kratak odgovor na ovo bi bio da AI može gotovo sve. Vjerojatno ne postoji informatički stručnjak na svijetu koji bi vam bio bolji mentor za programiranje od AI.  Na vama je samo da znate postavljati prava pitanja i da tražite precizna objašnjenja za sve što vam nije jasno. AI vam može u sekundi generirati neki jednostavan kod (do 100 linija) za neki popularni mikrokontroler. Točnost će biti praktički 100% i rijetko će trebati popravak koda, eventualno nadogradnja prema vašim daljnjim zahtjevima. Može vam precizno komentirati svaku liniju tako da vam uz malo truda kod bude potpuno jasan.

Međutim, ako razvijate neki kompleksni kod koji povezuje i kontrolira različite hardvere i sadrži tisuće programskih linija, pa još na relativno novoj platformi, onda tu više ne možete očekivati instant rješenja. AI će vam svakako i dalje biti od velike pomoći, ali samo ako sami dobro poznajete strukturu svojeg koda i dobro usmjeravate AI pravim pitanjima. Ne možete joj svaki puta slati tisuće linija koda i tražiti da vam nešto popravi ili izmijeni. To je i fizički nemoguće jer postoje ograničenja u količini teksta koji možete poslati. Ako AI zatrpate slanjem velikih količina kodova u nekoliko dijelova, velika je mogućnost da vam vrati kod koji će imati na kraju više grešaka nego prije. AI također radi „tipfelere“, upisuje naredbe koje ne pripadaju tom programskom jeziku, mijenja ili izbacuje ispravni dio koda. Svaku nadogradnju ili izmjenu je potrebno provjeriti prije implementacije i tek kada vam je promjena dovoljno jasna i logična, onda ju idete isprobati.

AI će vam odgovoriti na svako pitanje koje postavite, najbolje što može. Međutim, ključno je da što detaljnije i što preciznije opišete svaki problem i potkrijepite ga svime čime raspolažete. AI će vam često vraćati relativno velike dijelove kodova za ispravak samo jedne linije, a na vama je da mijenjate samo ono što znate da treba, jer vas slijepi „copy-paste“ neće dovesti nikuda. Ja često nisam ni želio proučavati dijelove kodova koje AI izbaci unaprijed. Prvo sam sročio vrlo precizno pitanje tako da sam detaljno opisao problem, zatim joj kopirao sadržaj svih relevantnih bibilioteka i drajvera, sadržaj svih kompilacijskih grešaka, a zatim je usmjerio na rješavanje točno specifičnog problema.

Ako niste dobar programer, bilo koji kod koji generira AI će vam biti uglavnom nerazumljiv. Ne ustručavajte se tražiti komentar za svaku liniju koda i posebna objašnjenja za sve što vam nije jasno. Često ćete u tim objašnjenjima shvatiti da taj kod zapravo nije smjer u kojem želite ići. Ponavljam, „copy-paste“ nije dobra praksa za kreiranje velikih i kompleksnih programskih kodova. Vi morate biti taj koji prati, vodi i usmjerava proces.

 

Tri nadogradnje koje nisam uspio pokrenuti

Simulacija koda na Windowsima

Nakon puno truda oko programiranja cijelog sustava elektroničke mete, htio sam moj programski kod sa CrowPanela emulirati na Windows ili Android operativnim sustavima.

U teoriji stvar zvuči jednostavno. Teorija se oslanja na činjenicu da je LVGL (Light and Versatile Graphics Library) napisan u čistom, prenosivom ANSI C jeziku. To znači da su svi grafički elementi (gumbi, labele, crteži) zapravo samo matematički opisi objekata u RAM memoriji. LVGL grafičkom motoru je u teoriji potpuno svejedno crta li krug na zaslonu CrowPanela preko SPI sabirnice ili unutar prozora na Windowsima pomoću miša. Sve što mu treba je komad memorije (zaslonski buffer) u koji će upisati RGB boju piksela. Također, teorija pretpostavlja postojanje takozvanog HAL sloja (Hardware Abstraction Layer). To znači da programski kôd na simulatoru ne bi trebao izravno komunicirati s hardverom (što i ne može), nego se sve radi preko “prevoditelja”.

Moderni grafički pokretači poput LVGL-a dakle obećavaju da kôd napisan jednom radi svugdje, međutim, stvarna inženjerska praksa donosi teška i nepredvidiva prilagođavanja. Potrošio sam dvadesetak sati rada u pokušaju prevođenja mojeg koda preko službenog LVGL Win32 simulatora pokrenutog u Visual Studiju. Čim bi riješio probleme i greške jednog sloja, pojavile bi se nove greške drugog sloja. Rješavanje tih grešaka, opet generira nove greške u prethodnom (očišćenom) sloju i tako stalno u krug. Simulator bi doveo sa 1500 ili 250 grešaka na svega 4 greške, i onda kada krenem riješiti te preostale četiri greške, i kada ih napokon riješim, kompilacija izbaci opet set od novih 50-tak grešaka.

Razlog za ovo svakako leži u činjenici da moj program svakako nisu samo crteži gumba i tekstualne labele, no čak i kad sam praktički očistio sve dijelove koda osim čistih grafičkih, i dalje je trebalo rješavati niz kompilacijskih grešaka. Bilo je vrlo očito da je Microsoftov MSVC kompajler u Visual Studiju daleko osjetljiviji, stroži i netolerantan na bilo kakva odstupanja u strogom C++ deklariranju. Arduino IDE pak s druge strane u pozadini koristi GCC kompajler, koji je iznimno tolerantan prema redoslijedu koda, dopušta napredne Arduino tipove i sam u hodu rješava najave funkcija. Nesklad u verzijama i podsustavima (Linker) kod LVGL Win32 simulatora je također i ovdje stvarao mnoge probleme, što smo već iskusili i kod programiranja CrowPanela.

Visual Studio (MSVC) i Win32 drajverski most za LVGL v8 je bez sumnje izvrsna podloga za programere koji pišu grafičke aplikacije od početka do kraja na računalu. Međutim, moj prilično kompleksni programski kod je u potpunosti razvijen na CrowPanelu koji je duboko integriran sa specifičnim ESP32 hardverom, LoRa antenom te vanjskim senzorima i registrima. Time je postao previše kompliciran za prevođenje na Windowse i morao sam odustati od neprestanog rješavanja novih kompilacijskih grešaka.

 

Screenshot funkcija

Nakon što sam odustao od Win simulatora, probao sam napisati kod koji bi barem snimio izgled svih prozora na CrowPanelu i snimio ih na SD karticu. Ovo je također u početku (u teoriji) izgledalo obećavajuće, međutim, praksa je pokazala da i ovdje treba rješavati niz problema.

U teoriji, screenshot izgleda kao najobičnija operacija tipa “uzmi ono što se vidi na ekranu i spremi u datoteku”. No, kada se ta teorija spusti na realni hardver CrowPanela i operacijski sustav mikrokontrolera, praksa te odmah lupi po prstima i pretvori to u problem za sebe.

Prvi kodovi su izazivali trenutno rušenje sustava čim se pokrene funkcija za screenshot. Očito je dolazilo do sukoba unutar PSRAM i RAM memorija. Kada primjerice Windows radi screenshot, on u sekundi odvoji par megabajta iz svojih gigabajta instaliranog RAM-a. ESP32-P4 na CrowPanelu isto tako ima svoju vanjsku PSRAM memoriju, ali on njome upravlja kroz vrlo uske i stroge “prozore” (tzv. Cache MMU). Kada sam pozvao naredbu za screenshot (lv_snapshot_take), procesor je uletio u RAM i zatražio neprekinuti komad od točno 1,22 MB slobodnog prostora u jednom komadu za sliku rezolucije 1024×600. Čim je sustav shvatio da je memorija rascjepkana (jer FreeRTOS niti, audioPlayer i LoRa stalno uzimaju svoje komadiće), alokacija je pukla, procesor je zakoračio na zabranjenu adresu i aktivirao onaj slavni krah: Guru Meditation Error: Load access fault! (kojeg sam se nagledao tijekom programiranja).

Povodom toga sam napisao samostalni algoritam da zaobiđem lv_snapshot_take i izbjegnem krah. Ovime sam uspio dobiti stabilne slikovne datoteke, ali unutra su bili samo prazni ekrani u boji (bez gumbi, labela i ostalog vizualnog sadržaja). To se dogodilo jer moderni drajveri za ESP32-P4 uopće ne drže gotovu sliku u standardnom RAM-u. Grafički akcelerator crta sliku u pozadini i šalje je kroz brzu hardversku MIPI-DSI sabirnicu izravno na ekran. Moj kôd je čitao unutrašnje buffere u krivom trenutku, dok su oni bili prazni ili tek u fazi brisanja prije idućeg crteža, pa je screenshot uslikao samo čistu pozadinsku boju izbornika.

Najdalje što sam uspio doći to su slike ekrana koje sadrže neke nasumične linije u boji. Pokušaj slikanja ekrana na ovakvom hardveru unutar kompliciranog gotovog koda postao je klasičan primjer rješavanja problema koji traži puno vremena, strpljenja i učenja, a s druge strane izlazi iz okvira osnovnih zahtjeva i cilja ovog projekta. Stoga sam odustao i od ove nadogradnje.

 

Pokretanje kamere

U uvodu sam napisao da CrowPanel ima osigurane dvije MIPI-DSI trake za zaslon i dvije MIPI-CSI trake samo za kameru. Naravno da je inženjerski gledano prava šteta ne iskoristiti postojeću kameru koju sam dobio uz CrowPanel.

MIPI-CSI (Camera Serial Interface) s 2 trake služi da bi sirovi podaci s 2 MP kamere mogli u realnom vremenu dolaziti na procesor. Međutim, ove dvije trake za kameru je nemoguće iskoristiti na jednostavan način (poput običnog snapshot-a ili uvoza u Arduino) jer MIPI-CSI protokol u pozadini radi kao ekstremno kompliciran hardverski “stroj”. Senzor kamere kroz te dvije MIPI trake šalje sirove, neobrađene pakete bajtova (tzv. RAW Bayer format) prema ESP32-P4 procesoru. Unutar ESP32-P4 se nalazi poseban, namjenski hardverski procesor (ISP – Image Signal Processor) koji te bajtove mora u letu matematički obraditi (izračunati balans bijele boje, oštrinu, kontrast i pretvoriti ih u RGB format).

Arduino to jednostavno ne vidi. Da bi taj ISP stroj uopće znao raditi, potreban je cijeli set kompliciranih naredbi ugrađenih preko Linux-like operativnog sustava (ESP-IDF kroz CMake). Arduino IDE, zbog svoje jednostavnosti, te funkcije uopće nema ugrađene u svoj standardni paket. Zato za Arduino ta kamera i njezine 2 brze trake ostaju “mrtav hardver”.

 

„ESP-IDF kroz CMake“

ESP-IDF (Espressif IoT Development Framework) je službeni operacijski sustav i paket drajvera za sve ESP32 čipove. To je profesionalni, industrijski alat koji je tvrtka Espressif (proizvođač ESP32 čipova) osmislila za ozbiljan razvoj softvera. Za razliku od Arduina, koji je napravljen za hobiste i skriva tehnologiju iza jednostavnih gumba, ovi alati daju potpunu kontrolu nad svakim tranzistorom u čipu.

Kada kupite najnoviji i napredan čip kao što je tvoj ESP32-P4, on u sebi ima složeni hardverski video-procesor za MIPI-CSI kamere, hardverske grafičke akceleratore (JPEG dekodere, h.264 video kodeke) i napredno upravljanje memorijom. Arduino IDE pak u pozadini koristi relativnu staru i ogoljenu verziju ESP-IDF-a i stalno ima probleme sa prepoznavanjem novih drajvera. U naprednom ESP-IDF-u se kôd piše u čistom C jeziku, te se ima pristup doslovno svakom registru kamere, a program se izvršava drastično brže i troši upola manje RAM-a nego u Arduinu.

U CrowPanel-Advanced paketu drajvera koji ja ovdje koristim, primjer koda za pokretanje kamere nije ni stavljen u Arduino folder, već u IDF folder. Očito da Elecrow isporučuje lekcije za kameru i napredne ekrane kroz ESP-IDF i CMake jer je to jedini način da se izvuče maksimum iz jake MIPI-CSI periferije ESP32-P4 čipa. CMake je profesionalni alat za automatizaciju izgradnje softvera, daleko napredniji od Arduina.

 

Reklamne zamke

Na oglasu za moj CrowPanel ESP32-P4 naglašeno i privlačno piše kako ima snažnu podršku za Arduino i LGVL.  Međutim, kada pokušate pokrenuti napredne lekcije (poput one za kameru), brzo shvatite da su sve te napredne stvari pisane u ESP-IDF-u i CMake-u. Proizvođač je istina ponudio “podršku” za Arduino, ali samo za osnovnu grafiku i hardver, dok ste za sve kompliciranije stvari prepušteni sami sebi i satima mukotrpnog izučavanja specifične arhitekture CrowPanela kako bi napisali ispravan programski kod.

Čak i ako krenete u avanturu razvoja kompleksnog softvera za CrowPanel u Arduino IDE koja može trajati tjednima i mjesecima, suočavate se s problemima kompatibilnosti raznih biblioteka koje morate koristi u kodu, a koje se razvijaju gotovo na tjednoj bazi. Ja primjerice koristim LVGL biblioteku v8.3.11, a sada je aktualna verzija v9 koja imaju potpuno drugačija unutrašnja imena za funkcije.

Posve je normalno da za neki preuzeti kod sa Interneta, morate znati i točne verzije biblioteka za koje je taj kod pisan. Ako Arduino IDE u pozadini nadogradi biblioteke na novu verziju, posve je moguće da kod koji se prije kompajlirao bez problema sada javlja niz grešaka.

 

 

SUČELJE ELEKTRONIČKE METE

Tijekom razvoja softvera, bilo je potrebno stalno pratiti da li ugrađene funkcije rade, odnosno da li primaju podatke sa mete i ispravno ih prikazuju. U početku sam koristio softverski simulator ugrađen u sam programski kod koji je generirao pakete podataka kakvi bi inače dolazili preko LoRa sustava sa mete. Međutim, kako se softver razvijao i postajao kompleksniji, ovo više nije bilo dovoljno pouzdano.

Stoga sam napravio realni hardverski simulator koji „glumi“ metu i preko LoRa sustava periodički šalje slučajno generirane podatke na CrowPanel. To su podaci o stanju senzora, podaci o pogocima, podaci o brzini i smjeru vjetra na meti, podaci o brzini projektila na meti, podaci o stanju baterije i podaci o dvije temperature (laseri i ostala elektronika) u svrhu upozorenja od preopterećenja ili pregrijavanja.

Simulator sam programirao da podatke o pogocima ili stanju senzora (kvar) šalje svakih 5 sekundi, a sve ostale telemetrijske podatke osvježava svake sekunde, kako će i biti u stvarnosti. Simulator šalje sve podatke sa slučajno generiranim vrijednostima.

 

Simulator mete je spoj ESP32-WROOM-32D MCU pločice i LoRa DX-LR30 SX1262 modula (868-915Mhz). YuRobot pločica je samo napajanje 3,3 V za MCU i LoRa. 

 

Nekoliko snimaka ekrana iz rane faze razvoja softvera. 

 


 

Displej je organiziran u sedam prozora:

  • Glavni prozor – Meta
  • Prozor za Postavke
  • Prozor sa Statistikom
  • Prozor sa Meteorološkim podacima u realnom vremenu
  • Prozor Balistika u realnom vremenu
  • Prozor sa Balističkim kalkulatorom
  • Prozor sa Balističkom trajektorijom

 

Glavni prozor – Meta

 

Kod prvog paljenja pojavljuje se ovakav prozor. Preko mete se iscrtava mreža od 2×64 optičkih senzora. Kad stigne prvi paket podataka, ukoliko su svi senzori ispravni, sve linije mijenjaju boju u plavu. Ukoliko neki od senzora ne radi, pripadajuće linije ostaju crvene. Tako strijelac odmah vidi ispravnost mete.

 

Gumbom MREŽA prikaz optičke mreže se može ugasiti tako da ostaje čista meta. Međutim, ako se tijekom rada mete dogodi neka greška na senzorima (pregori/oslabi laser ili foto-senzor, padne neki list ili kukac na prozorčić optike i slično), pojavljuju se trajne crvene linije preko mete, tako da strijelac zna da taj dio mete ne radi.

U takvom slučaju strijelac može preko CrowPanela poslati signal za paljenje ventilatora na meti (VENTILATOR UGAŠEN/UPALJEN), tako da otpuše smetnju sa prozorčića optike. Također, preko CrowPanela može poslati signal za gašenje i paljenje lasera (LASERI) ili za restart elektronike mete (RESTART METE). Ako to ne pomogne, onda se kvar mora otkloniti na samoj meti ili se nastavlja gađanje na ispravnoj površini mete.

Pogoci se prikazuju zelenim kružićima sa crvenom rubom. Može se dogoditi da projektil aktivira samo jedno zavjesu (na primjer samo X os), a nekako se provuče kroz drugu zavjesu. Ovo je moguće ako se gađa malim kalibrima (razmak između laserskih linija je 4 mm). U tom slučaju će se preko mete iscrtati zelena linija (horizontalna ili vertikalna) na mjestu aktiviranog senzora. Tako strijelac zna da je metak prošao kroz metu i ima informaciju o pravcu prolaska po jednoj osi.

Podaci o trenutnom vremenu (sat) i datumu se ispisuju iz RTC-a, a podaci o jačini bežičnog signala (SIG) se ispisuju iz LoRa modula na CrowPanelu. Meta svake sekunde šalje telemetrijske podatke. U gornjem desnom dijelu prozora su podaci o stanju akumulatora (baterije) koja napaja metu (AKU). Ispod je grafički prikaz smjera i brzine vjetra. Za mjerenje smjera i brzine vjetra može se koristiti (odabrati) anemometar na meti, anemometar kod strijelca ili oba anemometra gdje se onda računa srednja vrijednost ovih podataka (VJETAR STRIJELAC, VJETAR META, VJETAR PROSJEK). Svi bar-grafovi i ispisi vrijednosti mijenjaju tri razine boja (zelena, narančasta, crvena) ovisno o vrijednosti.

Laseri troše najveći dio ukupne struje mete (95%) te se u pauzama gađanja mogu isključiti tipkom LASERI, tako da nepotrebno ne troše struju.

 

Podaci pogodaka se zapisuju u tablicu na glavnom prozoru, na SD karticu, te su dostupni u prozoru Statistika. Svaki zapisani pogodak se može isključiti iz grupe, ukoliko se primjerice dogodi „flajer“ ili neko neželjeno okidanje. Automatski se računa veličina grupe.

 

Kada serija sadrži puno pojedinačnih gađanja, mogu se koristiti četiri razine zuma željenog dijela mete za bolji prikaz mjesta pogodaka.

 

Kad završi serija gađanja, podaci i prikazi pogodaka se može očistiti iz glavnog prozora (OČISTI TRENUTNU SERIJU), ali ostaju i dalje trajno zapisani na SD kartici i dostupni u prozoru Statistika.

 

 Prozor za Postavke (SISTEM)

 

U ovom prozoru se može namjestiti realno vrijeme i datum, te podesiti svjetlina ekrana i jačina zvuka za glasovne komentare i alarme. Glasovni komentari se mogu kombinirati za tri podatka: pogoci, smjer i brzina vjetra, korekcija ciljanja preko optike. Time strijelac ne mora gledati u ekran. Ovisno o tome koji podaci su mu važni, gumbima ZVUK META, ZVUK VJETAR i ZVUK KOREKCIJA uključuje glasovni komentar.

Komentar za pogodak može biti centar (pogodak unutar jednog centimetra od centra) ili se izgovara udaljenost u centimetrima od centra i smjer po principu sata (npr. META 5 NA 8 SATI). Komentar za vjetar uključuje brzinu vjetra (m/s) i smjer vjetra po principu sata (npr. VJETAR 3,5 SA 2 SATA). Komentar za korekciju ciljanja glasi na primjer ovako: KOREKCIJA 1,5 DESNO, 3 DOLJE.

U sustav je uključen krug za automatsku kalibraciju lasera mete. Ovisno o uvjetima gađanja, strijelac može pokrenuti automatsku kalibraciju ili ručno namjestiti željenu jačinu lasera. Automatska kalibracija polako smanjuje snagu lasera, sve dok prvi senzor ne padne ispod praga okidanja. Tada sustav automatski diže snagu za 20% i to je optimum rada (potrošnja, zagrijavanje) laserske mreže. Ukoliko se tijekom gađanja dogode lažna izvješća o pogotku, strijelac može podići snagu lasera tako da se nadvlada uzrok lažnih detekcija (prašina na optičkim prozorima i slične sjene).

Na ovom prozoru se prikazuju telemetrijski podaci o temperaturi lasera i temperaturi elektronike na meti. Ukoliko temperatura pređe 55°C, aktivirati će se vizualni i zvučni alarm.

Na ovom prozoru su gumbi za uključenje ili isključenje ventilatora na meti (hlađenje ili čišćenje prozorčića optike), te gumb za hard reset mete u slučaju da dođe do nekog elektroničkog kvara (smrzavanje programa MCU-a ili slično).

Svi nazivi na gumbima i labelama prevedeni su na četiri jezika koji se mogu odabrati gumbom LANG. To su hrvatski, engleski, njemački i francuski jezik. Jednom kad se namjesti željeni jezik, ostaje zapisan u memoriji i postavlja se kod svakog idućeg paljenja uređaja.

Na dnu prozora su tipke za ulazak u druge prozore: METEO STANICA, BALISTIKA, STATISTIKA.

 

 

Prozor sa Statistikom

 

U ovom prozoru se može pristupiti podacima o svim pogocima. Bilježi se serija i broj hitaca, vrijeme i datum, mjesto pogotka, brzina projektila i meteo uvjeti tijekom gađanja. Može se odabrati jedna ili više serija gađanja, te se automatski izračunavaju statistike tih serija, primarno veličina grupe i preciznost.

Ovdje se mogu selektirati četiri različita strijelca, te se prikazuju podaci gađanja samo selektiranog strijelca.

 

 

Prozor sa Meteorološkim podacima u realnom vremenu

 

U long range streljaštvu zračnom puškom (udaljenosti od 50 do 100+ metara), vjetar je najkritičniji faktor zbog male mase i relativno male brzine dijabole. Utjecaj vjetra se smanjuje korištenjem slugova umjesto dijabola i korištenjem težih projektila većeg kalibra. Najmanje skretanje vjetra obično se postiže pri izlaznim brzinama oko 275 m/s (900 fps). Općenito prihvaćene granice brzine vjetra su:

  • Do 10 km/h (cca 3 m/s): Smatra se prihvatljivim za precizno gađanje. Čak i pri ovoj brzini, bočni vjetar može pomaknuti dijabolu za nekoliko centimetara na 50 metara, što zahtijeva korekciju ciljanja.
  • 16-22 km/h (cca 4,5-6 m/s): Gornja granica za većinu strijelaca. Na ovim brzinama utjecaj vjetra postaje vrlo nepredvidljiv, a dijabola može značajno “šetati” izvan zone pogotka.

Iznad 25 km/h (7 m/s): Smatra se prevelikom brzinom za smisleno long range gađanje zračnom puškom. Dijabole postaju izrazito nestabilne, a pogreške u procjeni brzine vjetra od samo 1-2 km/h rezultiraju promašajima cijele mete.

S obzirom na navedeno napravio sam zaseban prozor koji na velikom ekranu pokazuje samo smjer i brzinu vjetra, te ostale meteorološke podatke koje koristi i balistički kalkulator. Za smjer i brzinu vjetra mogu se uključiti glasovne najave koje stalno ponavljaju smjer i brzinu vjetra.

 

Prozor Balistika u realnom vremenu

 

 

S obzirom da postoji veliki broj tipova optičkih ciljnika sa različitim končanicama, umjesto da učitavam slike stotine tipova končanica, napravio sam interaktivnu končanicu koju strijelac sam može iscrtati tako da je izgledom najbliža njegovoj končanici. Tako na vrlo jednostavan način pomoću 7 gumbi može odrediti da li koristi MIL/MRAD ili MOA sistem, broj podjela prema gore, broj podjela prema dolje, broj podjela lijevo i desno, finoća podjela (0,5 ili 1) i vrijednost jedne podjele (1-20).

Balistički kalkulator automatski računa korekciju i prikazuje ju brojčano i pomoću crvene točke na končanici. Strijelac može uskladiti broj vertikalnih klikova na turetu svoje optike i time crvenu točku korigirati prema stvarnom mjestu ciljanja. Ispod končanice je prikaz brzine i smjera vjetra što svakako pomaže kod korekcije.

Strijelac može uključiti glasovnu najavu korekcije u realnom vremenu, tako da vizualno može biti potpuno koncentriran na svoju optiku i metu.

 

Prozor sa Balističkim kalkulatorom

 

 

Balistički kalkulatori znaju biti vrlo složeni, no za gađanje iz zračne puške do maksimalno 200-300 metara, možemo se usmjeriti samo na računanje onih podataka koji najviše utječu na balistiku. Balističke podatke smo podijelili u četiri grupe:

 

PODACI O PROJEKTILU

Najvažnija stavka u balističkim kalkulacijama je određivanje balističkog koeficijenta projektila sa kojim se gađa. Balistički koeficijent (BC) je mjera sposobnosti projektila da nadvlada otpor zraka tijekom leta. Jednostavno rečeno, on opisuje koliko učinkovito projektil zadržava svoju brzinu i kinetičku energiju. Što je vrijednost koeficijenta veća, to je otpor zraka manji u odnosu na masu projektila, što rezultira ravnijom putanjom i manjim utjecajem vjetra.

Tri su ključna faktora koja definiraju BC:

  • Tip ili oblik (aerodinamika) projektila: “Oštriji” i aerodinamičniji oblici (poput “slug” metaka) imaju veći BC od klasičnih dijabola s ravnom ili zaobljenom glavom koje su dizajnirane da se brzo usporavaju.
  • Promjer (kalibar): Širi projektili imaju veću površinu koja se sudara sa zrakom, što povećava otpor.
  • Masa projektila: Teži projektili bolje zadržavaju zamah i teže ih je usporiti otporom zraka.

BC se najčešće izražava kao decimalni broj manji od 1 (npr. dijabole za zračne puške obično imaju vrlo nizak BC, između 0,010 i 0,045). Određuje se na sljedeće načine:

  • Mjerenje brzine na dvije točke (najtočnije): Pomoću dva kronografa (uređaja za mjerenje brzine) mjeri se početna brzina na ustima cijevi i brzina na određenoj udaljenosti, npr. na 50 metara. Gubitak brzine kroz tu udaljenost unosi se u balistički kalkulator koji izračunava stvarni BC za tu dijabolu iz te puške.
  • Mjerenje pada projektila: Puška se upuca na jednu udaljenost (npr. 10 m), a zatim se mjeri koliko projektil padne na većoj udaljenosti (npr. 50 m). Razlika u točki pogotka omogućuje softveru da procijeni koeficijent.
  • Teorijski modeli: Proizvođači koriste standardne modele otpora. Za dijabole se najčešće koristi GA model, dok se za aerodinamičnije “slug” projektile koristi G1 model.

Poznavanje balističkog koeficijenta projektila nije dovoljno za njegovo računanje putanje (trajektorije) cijelom dužinom leta. Sama brojka (npr. 0,025) ne znači ništa bez modela otpora (oblika) na koji se odnosi. Balistički kalkulator mora znati koji standardni model koristite za svoj projektil. Korištenje ispravnog modela u kalkulatoru je ključno jer isti projektil ima različit BC broj u različitim modelima.

 

Balistički modeli

Balistički model za klasične dijabole: GA (ili GA2)

Ovaj model je standard za dijabole s okruglom glavom (domed pellets). Projektiran je da prati aerodinamiku dijabola koje su stabilizirane “suknjicom” (drag-stabilized), a ne samo rotacijom. Ako se koristi GA model, BC vrijednost će ostati približno ista bez obzira na promjenu brzine projektila, što daje preciznije rezultate u kalkulatorima poput Strelok Pro ili MERO.

Treba napomenuti da neki proizvođači (poput JSB-a ili H&N-a) navode BC za dijabole prema G1 modelu, što može dovesti do grešaka pri većim udaljenostima.

Modeli za slugove: G1, RA4, SLG0 / SLG1

Budući da su slugovi oblikom sličniji mecima iz vatrenog oružja, za njih se koriste modeli namijenjeni projektilima s punim tijelom.

  • G1 model je najčešće korišteni standard za slugove. Odnosi se na projektile s ravnim dnom (flat-base) i zašiljenim vrhom.
  • RA4 model je također popularan izbor za slugove jer je izvorno razvijen za .22 LR malokalibarsko streljivo, čija je aerodinamika vrlo slična slugovima iz zračnih pušaka na podzvučnim brzinama.
  • SLG0 / SLG1 su relativno novi modeli dostupni u specijaliziranim softverima, razvijeni isključivo za zračne slugove kako bi se smanjile pogreške pri brzinama blizu brzine zvuka.

Modeli za ostale oblike

  • Model GL se koristi se za tupe (wadcutter) projektile ili one s potpuno ravnim vrhom.
  • Model G7 se vrlo rijetko koristi u zračnom oružju jer je namijenjen ekstremno aerodinamičnim “boat-tail” mecima za gađanje na velikim udaljenostima iz vatrenog oružja.

Naš balistički kalkulator bi dakle svakako morao imati opciju modela GA za dijabole. Za slugove bi prvi izbor bio G1, a ako se primijete odstupanja na većim udaljenostima, onda bi trebalo ostaviti mogućnost pokušaja s RA4 modelom.

U našem softveru, kad se odabere tip projektila (dijabola ili slug), automatski se uračunava odgovarajući balistički model. Model za dijabole odgovara čistom GA / GA2 modelu, odnosno u balistički kalkulator je uvrštena fiksna retardacija (faktor usporavanja) od 0.0028f koja linearno simulira ponašanje GA modela. Taj model uzima u obzir aerodinamički otpor “suknjice” (eng. skirt-drag stabilization) koja drastično usporava dijabolu. Budući da programski kôd automatski računa živi BC na temelju terminalne brzine s LoRa mete, onda kalkulator zapravo drži dijabolu unutar stabilne GA krivulje otpora. Zato izračunati rezultati neće imati grešku pri promjeni brzine projektila na ustima cijevi.

Model za slugove u mojem balističkom kalkulatoru odgovara hibridu G1 i RA4 modela, odnosno retardacija se spušta na puno manju vrijednost od 0.0012f, a konstanta otpora za živi BC postavlja se na 0.00014f. Ova krivulja s niskim otporom je u praksi savršen hibrid između G1 i RA4 modela. Ona idealno opisuje fiziku projektila s punim tijelom i ravnim dnom (flat-base) koji leti na podzvučnim brzinama između 250 i 320 m/s, tipičnim za zračne puške. Budući da RA4 model (razvijen za .22 LR) ima gotovo identičan pad brzine kao i teži zračni slugovi, moj proračun s faktorom 0.0012f u praksi daje rezultate koji su istovjetni sa RA4 balističkom krivuljom.

Iako je prva ideja bila da ugradim stroge opcije za biranje tipičnih modela (GA, G1, RA4) kako bi strijelac u izborniku mogao birati točnu oznaku, za sada sam od toga odustao. To za većinu strijelaca može biti nerazumljivo i bolji rezultati se postižu malom korekcijom samog balističkog koeficijenta. Ako praksa pokaže drugačije, neće biti nikakav problem nadograditi tu opciju sa više različitih retardacija na izbor.

 

PODACI O ORUŽJU

Četiri faktora koja sam ovdje uvrstio čine samu srž eksterne (vanjske) balistike. Njihovim međusobnim preplitanjem definira se točna geometrija i parabola leta svakog projektila (bilo dijabole ili sluga), a promjena samo jednog od njih u potpunosti pomiče točku pogotka.

 

Daljina na kojoj je puška upucana (Zero Range)

To je udaljenost na kojoj se pravac ciljanja (Sight Line) kroz optiku i zakrivljena parabola leta projektila presijecaju po drugi put (tzv. Far Zero). Projektil nakon izlaska iz cijevi leti prema gore (u odnosu na optiku), presijeca liniju ciljanja na nekoliko metara udaljenosti (Near Zero), postiže svoj vrhunac (apogej) i zatim pod utjecajem gravitacije pada natrag dolje, presijecajući liniju optike točno na udaljenosti Zero Rangea.

Promjena ove daljine ne mijenja stvarnu putanju projektila kroz zrak, ali potpuno mijenja nagib cijevi u odnosu na optiku. Što je daljina upucavanja veća, cijev mora biti nagnuta više prema gore. U mojem kodu, ova vrijednost direktno definira referentni parametar pada projektila koji služi kao nulta točka za izračun svih preostalih MIL ili MOA klikova na kupoli.

 

Visina montaže optičkog ciljnika

To je točna udaljenost između središnje osi cijevi puške i središnje osi optičkog ciljnika (končanice), izražena u centimetrima.

Budući da projektil napušta cijev koja se nalazi ispod optike, on mora svladati tu početnu visinsku razliku kako bi uopće stigao do linije ciljanja. Što je montaža viša (npr. kod modernih “bullpup” zračnih pušaka ili visokih taktičkih prstenova), projektil na bliskim udaljenostima (5 do 15 metara) pogađa drastično niže od točke ciljanja. Međutim na većim udaljenostima gađanja, visoka montaža zapravo stvara povoljniji (ravniji) kut presjeka. Projektil dulje ostaje blizu linije ciljanja, što rezultira manjim ukupnim padom na ekstremnim daljinama i zahtijeva manji broj klikova na turetima.

 

Korak uvijanja žljebova cijevi

To je duljina unutar cijevi (najčešće izražena u milimetrima ili inčima) u kojoj žljebovi naprave jedan puni krug od 360° oko svoje osi (npr. korak 1:16″). Ovaj faktor izravno definira brzinu rotacije projektila (obrtaje u minuti – RPM).

Diabole su aerodinamički stabilizirane svojom suknjicom (drag-stabilized) i ne vole prebrz korak uvijanja jer ih preveliki RPM može destabilizirati u letu (uzrokovati spiralni let, tzv. spiraling). Slugovi su stabilizirani isključivo rotacijom (spin-stabilized). Budući da nemaju suknjicu i dulji su, slugovi zahtijevaju drastično brži korak uvijanja (kraću duljinu za puni krug) kako bi zadržali žiroskopsku stabilnost i spriječili prevrtanje (tumbling) u zraku.

Zbog rotacije i otpora zraka, projektil u letu bočno “skreće” u smjeru uvijanja žljebova (najčešće udesno). U programskom kodu balistički kalkulator koristi ovo pravilo za izračun mikro-pomaka uslijed rotacije projektila, dodajući ga horizontalnoj korekciji vjetra.

 

Brzina projektila na izlazu iz cijevi

Ovo je početna brzina projektila u trenutku kada napusti usta cijevi, izražena u metrima u sekundi (m/s). Početna brzina izravno definira vrijeme leta projektila do cilja. Budući da gravitacija djeluje na projektil konstantno, kraće vrijeme leta znači da će projektil provesti manje vremena u zraku, pa će i njegov ukupni pad biti drastično manji (parabola je znatno ravnija).

Što projektil leti brže, sila otpora zraka raste s kvadratom brzine, zbog čega balistički koeficijent (BC) i vrsta projektila (Diabola/Slug) dolaze do punog izražaja. Također, kraće vrijeme leta znači da i bočni vjetar ima manje vremena skrenuti projektil s putanje.

Ova vrijednost je važan dio balističkog proračuna. Ona direktno diktira početnu kinetičku energiju u džulima (J), definira padove u odnosu na vrijeme leta, te služi kao polazna točka za izračun efektivnog, živog BC-a onog trenutka kada LoRa sa mete vrati terminalnu brzinu projektila.

 

METNA SITUACIJA

Ova četiri faktora čine dinamičku stranu balistike. Dok su prethodni parametri uglavnom fiksne geometrijske postavke puške i optike, ova četiri faktora se mijenjaju sa svakim izlaskom na teren, svakom promjenom položaja mete ili promjenom atmosferskih prilika.

 

Daljina gađanja

To je linearna udaljenost od usta cijevi do ravnine u kojoj se nalazi meta. Pad projektila pod utjecajem gravitacije nije linearan, nego kvadratni u odnosu na vrijeme. Što projektil dulje leti, on drastično brže gubi brzinu zbog otpora zraka, a gravitacija ga vuče prema dolje sve većom brzinom u svakoj sekundi.

U balističkom kalkulatoru ovaj parametar izravno diktira izračun vremena leta do mete. Dvostruko veća udaljenost ne znači dvostruko veći pad, nego često četverostruko ili peterostruko veći pad u centimetrima. Također, udaljenost direktno definira vrijednost streljačkog mjerila: na 50 metara 1 MIL iznosi 5 cm, a na 100 metara iznosi 10 cm. Zato kalkulator na kraju proračuna dijeli ukupni pad s vrijednošću MIL/MOA na određenoj daljini kako bi strijelcu ispisao točan broj klikova za turet.

 

Nagib terena

To je kut pod kojim strijelac gađa metu u odnosu na horizontalnu ravninu (bilo uzbrdo ili nizbrdo). Gravitacija projektil uvijek vuče strogo vertikalno prema dolje (prema središtu Zemlje). Kada se gađa pod nagibom (uzbrdo ili nizbrdo), projektil prevaljuje dugačku kosu udaljenost kroz zrak, ali gravitacija na njega djeluje samo duž horizontalne komponente te putanje. Zbog toga se projektil ponaša kao da leti na kraću udaljenost nego što zapravo jest.

Stoga, bez obzira gađa li se strmo uzbrdo ili strmo nizbrdo, metak će uvijek pogoditi iznad točke ciljanja ako se ne korigira turet. U balističkom kodu to rješava klasični vojni Cosinus Arrow algoritam. Na primjer, ako se gađa na 100 m pod nagibom 30°, kosinus iznosi 0.866, i tvoj kalkulator u fazi računanja pada koristi efektivnu daljinu od svega 86,6 m, čime automatski smanjuje broj klikova na optici i sprječava promašaj iznad mete.

 

Nadmorska visina (gustoća zraka)

Ovaj parametar, zajedno s temperaturom i tlakom, izravno definira gustoću zraka. Zrak nije prazan prostor, on je fluid sastavljen od molekula plina kroz koje projektil mora doslovno “probiti” svoj put. Na većoj nadmorskoj visini zrak je rjeđi (ima manje molekula po kubičnom metru), pa je i sila otpora zraka manja.

Što je nadmorska visina veća (ili zrak topliji i suši), aerodinamički otpor pada, a projektil zadržava puno veću brzinu i ima manji pad. Balistički dio koda to rješava dinamičkom korekcijom balističkog koeficijenta preko varijable za gustoću zraka. Ako je zrak rjeđi, u proračunu se automatski povećava efektivni BC projektila. Veći BC znači manji zračni otpor, manje skretanje vjetra i ravniju parabolu leta projektila.

 

Brzina projektila na meti (Terminalna brzina)

To je stvarna, fizikalna brzina projektila u trenutku kada on prolazi kroz svjetlosnu zavjesu elektroničke mete. U standardnim balističkim softverima, brzina na meti se samo teoretski procjenjuje na temelju tvorničkih tablica, što često dovodi do grešaka. Moj sustav je zamišljen da balističkom kalkulatoru daje stvarne terminalne brzine projektila na meti. Ovo je izuzetno bitna informacija za balistički kalkulator koja drastično povećava točnost proračuna.

Sa podatkom o brzini projektila na meti balistički kalkulator izračunava stvarni balistički koeficijent (BC) svakog pojedinačnog projektila u specifičnim uvjetima gađanja. Ako na strelištu puše jak vjetar, ako je zrak iznimno vlažan ili ako je zrno mrvicu oštećeno u ležištu, brzina projektila na meti će biti manja. Kalkulator će to kroz realne proračune odmah osjetiti, smanjiti BC, korigirati ispis energije u džulima i prilagoditi korekciju za novi hitac prema posljednjim podacima.

 

METEO UVJETI

U balističkom modulu softvera, utjecaj smjera i brzine vjetra računa se kroz tri povezana fizikalna koraka: izvlačenje bočnih komponenti vektora, pronalaženje efektivnog (srednjeg) vjetra te primjenu linijskog modela skretanja (retardacije) preko živog balističkog koeficijenta (BC).

Vjetar rijetko puše strogo s bočne strane (90°), odnosno pod idealnim pravim kutom u odnosu na liniju gađanja. Ako puše pod kutom od npr. 30° (koso s prednje desne strane), njegova sila koja fizički gura metak u stranu znatno je manja. Zato balistički kalkulator koristi trigonometrijsku funkciju sinus kako bi izračunao isključivo čistu bočnu komponentu (Crosswind Component) koja djeluje pod pravim kutom na projektil.

Ako je vjetar točno s leđa (0°) ili točno od naprijed (180°), sin(0) i sin(180) iznose 0. Bočni pomak u kodu automatski postaje jednak nuli. Ako vjetar puše točno s boka (90° ili 270°), sinus iznosi 1 ili -1 i sila vjetra ulazi u proračun u svom maksimalnom iznosu. Ostali smjerovi vjetra ulaze u proračun sa vrijednostima između 0 i 1.

Vjetar kod strijelca (puške) i vjetar kod mete vrlo često pušu potpuno različitim brzinama i smjerovima (zbog drveća, prepreka ili konfiguracije terena). Stoga moj sustav predviđa dva anemometra, jedan kod strijelca i jedan kod mete, te se računa čisti aerodinamički prosjek na cijeloj trajektoriji leta.

Izračun korekcije se ne bazira samo na smjeru i brzini vjetra. Kao što smo već ranije opisali tu se uračunavaju i mnogi drugi faktori. Pomak zrna je izravno proporcionalan brzini bočnog vjetra. Dvostruko jači vjetar uzrokovat će točno dvostruko veće skretanje projektila. Međutim, što projektil dulje putuje kroz zrak do mete, bočna sila vjetra ima više vremena djelovati na njega i gurati ga s linije ciljanja. Zato lakša i sporija dijabola, koja duže putuje, ima znatno veće skretanje od teškog i brzog sluga. U izračun se dalje dodaje faktor oblika projektila i njegovog usporavanja. Ovo je empirijska balistička konstanta specifična za aerodinamiku zračnog oružja. Ona usklađuje odnos između vremena leta u idealnom vakuumu i stvarnog kašnjenja projektila (retardacije) zbog otpora zraka. Slijedi uračunavanje inverzne vrijednosti BC-a što je zapravo obrambeni štit projektila protiv vjetra. Budući da formula dijeli s efektivnim BC-om, vrijedi pravilo: Što je BC veći, skretanje vjetra je drastično manje. Na kraju, tu je i  uračunavanje žiroskopskog skretanja (Spin Drift) zbog rotacije projektila. Budući cijev moje puške (kao i većine drugih pušaka) ima desni korak uvijanja žljebova, rotirajući projektil zbog aerodinamičkog otpora sam od sebe blago “puzi” bočno udesno, čak i kada na cijeloj putanji leta uopće nema vjetra.

Sustav je zamišljen da ima dva bežična ultrazvučna anemometra koji se jednostavno postave negdje pored mete (na sigurnoj udaljenosti) i pored strijelca. Ipak, ako se iz nekog razloga ne žele postavljati anemometri, ostavljena je mogućnost ručnog upisa prosječnih elementa vjetra na području gađanja.

Svi podaci u koloni METEO UVJETI osvježavaju se i računaju iz senzora, tako da strijelac o tome ne treba voditi računa. On uvijek ima konstantnu slikovnu i glasovnu indikaciju promjene vjetra i promjene korekcije gađanja u realnom vremenu, izračunatu u balističkom kalkulatoru.

 

 

 

 

Balistički kalkulator sadrži sve podatke relevantne za korekciju ciljanja. Ukoliko se koriste senzori za vjetar i meteo podatke, podaci se povlače sa senzora (crne kućice). Ukoliko se senzori ne koriste moguć je ručni unos podataka. Plave kućice su vrijednosti koje balistički kalkulator sam računa. Moguće je spremiti 10 različitih profila sa unesenim vrijednostima.

 

Za unos vrijednosti dostupne su numerička i znakovna tipkovnica.

 

 

Prozor sa Balističkom trajektorijom

 

 

Ovdje se može vidjeti putanja (pad) projektila prema podacima unesenim u balistički kalkulator. Skala za padove u cm (y-os) se prilagođava automatski, a skala za daljine (x-os) se može odabrati ovisno stvarnoj daljini gađanja: 50, 150, 300, 600 metara.

 

 

 

 

Leave a comment

Vaša adresa e-pošte neće biti objavljena. Obavezna polja su označena sa * (obavezno)