#+TITLE: kiber kegel

* Splošno

Kiber kegli so del [[https://mismonismo.org/shows/music-table-glasbena-miza/][glasbene mize]].

Ta zbirka kode vsebuje načrte, dokumentacijo in kodo za nadgradnjo keglov v glasbene inštrumente. Preko brezžičnega mikrokrmilnika (ESP32) pošiljajo spremembe rotacij in pospeškov gibalnega senzorja (MPU9255) v računalnik, ki podatke v obliki OSC pretvori v MIDI signale.

* Strojni del - telo
** Mere kegla

Najdaljši premer - 82mm
Špica - 15mm
32mm je lahko dolg vstavek
27mm je široka spodnja odprtina (blizu držalu)

Zapečemo ga s strani (izrez + prispajk nazaj). Kasneje sva se raje odločila za vijake, tako je kegel lažje popravljat.

#+CAPTION: Prototip kegla
[[./slike/2022-11-27_kegel.jpg]]

#+CAPTION: Narejen kegel spredaj
[[./slike/IMG_20230618_131926.jpg]]

#+CAPTION: Narejen kegel zadaj
[[./slike/IMG_20230618_131933.jpg]]

** Elektonske povezave

| MPU9255 | ESP32 |
|---------+-------|
| VCC     | 3.3v  |
| GND     | GND   |
| SCL     | 22    |
| SDA     | 21    |

Baterijski priklop omogoča [[https://docs.wemos.cc/en/latest/d1_mini_shield/battery.html][baterijski shield]] za [[https://docs.wemos.cc/en/latest/d1/index.html][wemos d1 mini]] (esp32 varjanta). Lahko bi imeli tudi kakšno esp32 krmilnik z vgrajenim regulatorjem napetosti in priklopom na baterijo.

Ena žica baterije (+ pol?) je vezana preko stikala, speljanega na rob kegla, da ga je mogoče ugansniti. ~POZOR~ pri priklopu baterije na baterijski shield moramo pazit na polariteto; barve baterijskih kablov se ne skladajo nujno s +/- poli na shieldu, napačen priklop lahko skuri tuljavo.

[[file:slike/IMG_20230618_131305.jpg][Kegel znotraj]]

USB priklop baterijskega shielda je speljan za rob kegla za lažje polnjenje preko robustnejšega vtikača USB tipa B.

[[file:slike/IMG_20230618_130022.jpg][Kegel znotraj 2]]

Sprva je za brezžični prenos podatkov skrbel bluetooth protokol. Kasneje se je pa izkazalo da je precej lažje uporabit ESP-NOW preko še enega krmilnik za sprejem. Tako je lažje in hitreje vzpostavit povezavo s kegli, prenos je konsistentnejši, doseg bi moral biti večji (tukaj je sicer bluetooth bil dovolj dober).

S pomočjo [[https://github.com/thomasfla/Linux-ESPNOW][tega projekta]] bi moralo biti mogoče prejemati ESPNOW pakete brez dodatnega sprejemnika.

TODO slika sprejemnika.

* Koda

Poganjanje projekta omogoča tudi koda, ki se nahaja na več mestih; arduino koda za krmilnik je tako v keglu kot v sprejemniku, potem imamo pretvornik brezžično prejetih signalov v midi (neposredno oz. pretvorjeno). Opcionalno tudi vizualiziramo zadevo.

** Krmilnik v keglu

Krmilnik v keglu, ki prebira senzorje in pošilja podatke v sprejemnik, je spisan [[file:osc32_9255_rtimulib_espnow/osc32_9255_rtimulib_espnow.org][v tej skici]]. Preden skico zapečemo na kegel, je potrebno kalibrirati magnetometer.

*** Kalibracija
Magnetometerski senzor je potrebo kalibrirati, skica za kalibracijo je [[file:ArduinoMagCal/ArduinoMagCal.ino][tukaj]]. Skico zapečemo na krmilnik in sledimo navodilom na serijskem monitorju.

** Sprejemni krmilnik

Skica za brezžični sprejemnik je [[file:osc32_espnow_sprejemnik/osc32_espnow_sprejemnik.ino][tukaj]]. Z nekaj prilagoditvami lahko namesto ~ESP32~ uporabimo tudi ~ESP8266~, ki prav tako podpira ~ESP-NOW~ protokol.
TODO literate programming!

** Pretvornik iz serijskega OSC v midi

   - wavey wind TODO
   - pretvornik TODO

* Scenariji
** 30. 11. 2022 (cirkulacija)
1. en kegel
  samo deformacija, mogoce malo zoom
  pulz na zogico,
   + nojz (glasba, rocno?)
   + BREZ zogic
   + BREZ dodatnih
2. dva kegla
3. ena zogica
4. 2 kegla + zogica

===== VKLOP LUCI ======

reset (calibrate, zoom blizu)
 (nojz stran)
 (vklopimo zogice)

5. komad: ena zogica!
6. tri zogice

7. band: vkljucimo publiko
  + VKLOP dodatni kegli

TODO:
- barvne palete za zogice (izmenicno levo desno), kegle
- upostevaj velocity zogic
- WW kontroler za vklop / izklop deformacije, ostalih elementov (barva ja / ne)
- postavit kegle v sredino
- postavit zogice v kader

* Ideje za naprej
** sprejemnik → bitwig
Namesto pretvorne komponente iz serijskega OSC v midi bi lahko bitwig neposredno prejemal podatke iz sprejemnika. [[https://github.com/Dewb/bitwig-serialosc-example][Tale primer]] skripte za bitwig izgleda dokaj podoben željenemu in bi z nekaj prilagoditvami verjetno lahko vskočil. Slaba stran je specifičnost bitwigu

** supercollider sprejemnik
Pretvorbo iz serijskega OSC v midi bi lahko implementirali v supercolliderju. [[https://github.com/madamdata/SLIPDecoder][Tale quark]] dela podobno stvar, v delu imam generalizacijo. Supercollider je nekoliko lažje namestit kot javascript, precej bolj prijeten je za eksperimentacijo. Enostavno bi bilo narediti preprost GUI v njem.

* Težave

** počasno/redko pošiljanje podatkov

Če se gibalni podatki pri napajanju iz baterije zelo počasi pošiljajo, pri povezavi preko USB kabla pa kegel deluje pravilno, je verjetno baterija prazna in jo je treba napolnit.

** problem pri nalaganju firmware-a

#+begin_quote
esp_core_dump_flash: Core dump flash config is corrupted! CRC=0x7bd5c66f instead of 0x0
#+end_quote

V arduino IDE nastaviš ~Flash mode~ na ~DIO~ namesto ~QIO~.

