2017-08-14

L'APARITION de LOURDES

   Turbūt po to kai mirė bobutės sesuo Jadvyga 1985, kuri neturėjo vaikų, artimi giminės išsidalino jos turtą, nežinau ar pagal testamentą ar kažkokiu kitu būdu. Pas ją buvo nemažai jos (ir bobutės) brolio Povilo Bakšio dalykų - knygų, nuotraukų, enciklopedijų, suvenyrų iš užsienių ir panašiai. Keletas iš tokių niekučių atiteko ir bobutei, o tiksliau tokios grojančios dėžutės. Prisuki mechanizmą ir skamba :) 
   Tuomet man buvo gal 9 metai ir tai buvo stebuklas kažkoks! Pirmoji dėžutė tokia labai graži buvo. Priekis lyg iš kokio dramblio kaulo gabalėlių, viduryje šventas abrazdėlis, nugarėlė aksominė, atraminė kojelė visa blizga tokia, bet muzikėlė gan liūdna ir todėl man nelabai patiko. Ten grojo Ave Marija
   O kita dėžutė buvo ne tokia prašmatni. Tiksliau sakant ten net ne dėžutė bet pora fosforinių statulėlių ant plastmasinio pagrindo. Vis pamenu laikydavau prie lempos, kol ranka pavargsta ir po to bėgdavau kur tamsu žiūrėt kaip "magiškai" žaliai-mėlynai jos šviečia abi. Tada dar prisukdavau ir klausydavau, klausydavau...
   Matyt nuo to klausymo ji ir gedo dažnai ir krisdavo ir lūždavo ir taip toliau. Neseniai buvau pas tėvus ir tėvas įdavė man šias statulėles. Sako ten matyt spyruoklė atsikabino, nebegroja. Parsivežiau išardžiau, pasirodo ten ta spyruoklė pavargus nuo gyvenimo ir tiesiog lūžus pusiau. Neremontuojama, nevirinama.
   Vieną dieną su bendradarbiu Roku pietų metu užsukom į laikrodžių taisyklą. Pasipasakojau laikrodininkui, tas man pardavė spyruoklę. Jos pasirodo visos standartinės tik reik ilgį atsikirpt kiek reik. Papasakojo kaip nulaužt, kaip atleist grūdinimą, kaip padaryt skylę... Žodžiu vakarui darbelio smagaus :). Kai vargais negalais aš tą spyruoklę įkišau į vidų, išlindo ir kitos bėdos - vienas dantratukas pametęs pusę dantų, varžtas nebesilaiko. O galiausiai ir ta spyruoklė šiek tiek peraukšta.     Kelioms dienoms buvau užmetęs remontą ir audžiau mintį ar nereiks elektrifikuot šito grožio. Nupirkt kokį mikro motoriuką, bateriją... Poto mąsčiau gal kokią kinišką šiolaikinę grojančią dėžutę kaip donorą šiai,  bet jos pasirodo dabar plastmasinės, o ir būgno dydis tikrai ne toks... Galiausiai nusprendžiau dar syk grįžt pas laikrodininkus. Kai pabandžiau nuimti tą dvigubą aptrupėjusį dantratį pamačiau, kad jis iš dviejų atskirų dalių, o ne vientisas. Taigi pakako mažąjį tik apsukti kita puse ir grąžinti atgal. Žinoma tai "čytinimas", kaip pasakytų vaikai, bet kodėl "nedamušus" ir antros pusės dantračio? Va kai ir šita nusibaigs, tada ir paieškosim visiškai sveiko ;)
   Taigi apsukau ir grąžinau atgal. Tą nesilaikantį varžtą apklijavau kažkokiais klijais (labai negrabiai), kurie virsta kaip akmuo. Atspausdinau naują dugną, nes senasis buvo faneros gabalėlis prisuktas medsriegiais. Taip pat teko nuimt šiek tiek seno remonto niuansų ir padaryt vietos būgnui. Kažkur apsiskaičiavau ir teko išgramdyt apie milimetrą plastiko iš vidaus virš būgno kad nesiremtų. Na galutinis variantas gavo si toks

O vidaus "grožybės", nors ir gėda bet parodysiu vistiek ;)

Na ir muzika, gal atpažinsi... https://goo.gl/photos/qW1JXn55NcYXcdET8

Beje, panašią dėžutę radau internete ieškodamas pagal "REUGE Fabrfrancaise" http://themusicboxman.com/A.PilgrimageSouvenirs137/2.html. Gal reikalui esant pavyks pas juos rasti ir detalių?

2017-07-15

Oho!

   Matyt senstu, nes kuo tolyn tuo keistyn mano užsiėmimai. Patapau 952 bendrijos pirmininku (http://952dnsb.blogspot.lt/), pradėjau domėtis 3d spausdinimu, mikrokontroleriais, radioelektronika (net išsiaškinau kas tie amperai, voltai watai ir omai !!!:)), radio bangomis, laistinais dažniais, atstumo matavimo galimybėmis, geometrija (nuo Pitagoro teoremos iki cosinusų ir stačiojo trikampio formulių)... uch... kaip įdomu... Tiesa atstumo matavimui daugiau ir nereikia kaip šių kelių formulių.
 
   Paskutinis iš mano smagių dalykėlių prie kurio dirbu (bet matyt kaip ir visų kitų nebaigsiu iki galo) yra automatinė strėlių paieška taikinyje. Nors lankais nebešaudau senokai, netgi savo geriausią lanką pardaviau su visom strėlėm (beveik, pasirodo dar buvau rusį kažkur paslėpęs keletą), bet vistiek gryžtu prie šio sporto. Prisiminiau kad Edma kažkada klausė, ar negalima padaryt kažko kas parodytų kur pataikiau. Na aišku tam yra žiūronai, bet taip neįdomu. Juk gyvenam elektronikos pasaulyje! Viskas turi būti telefone, mobilu ir atrodyt kuo "krūčiau"!
 
  Idėja tokia. Taikinio apačioje, kairėje (nors nesvarbu) prismeigsim aparatėlį degtukų dėžutės dydžio. Pagrindiniai smegenys - Wemos D1 su ESP8266 controleriu. Prie jo prismeigtas Mini  Micro Servo varikliukas SG90, kuris sukinės nurodytais laipsniais lazerinį atstumo matuoklį GY-530 VL53L0X. Jei darysim prielaidą jog servo variklis sukinėsis tiksiais kampais, lazeris tiksliai matuos atstumą -  turėsim grąžų žaisliuką. Bet yra dar vienas bet. Jei strėlė užstos strėlę nuo daviklio reiks minimum 2 servų ir 2 lazerių. Nors yra tikimybė jog ir jų dviejų nepakaks, tada reiks mastyt kažkokį aparatą kuris jutiklį judintų, o nebūtų fiksuotose padėtyse. Bet čia poto.
 
   Pradžiai maketas:
   Patencikas kol kas atstoja lazerį imituodamas atsitiktinį atstumą kol dalys važiuoja iš kinijos. Servo variklis veikia gražiai, D1 irgi negrybauja, kaip grybavo esp01 modelis.
 
   Aplikacijai pasirinkau Blynk platformą. Labai paprasta ir tokiems minimalistiniams uždaviniams per akis. Yra vienas bet. Ji nori interneto arba lokalaus Blynk servo. Servas - 15 min darbo, jei projektas pasirodys bent kiek vertas dėmesio, bus galima pagalvot apie kokį resberi ar banana šiam reikalui. Kolkas jei vyks testavimas lauke telefone tiesiog reik įjungt HotSpot, kad ESP galėtų prisismeigt prie Blynk serverio.
   Taigi, prismeigiam aparatą kur nors šalia taikinio (kairėj, apačioj). Tada įsmeigiam strėlę į patį taikinio vidurį. Įjungus aparatą jis prisijungs prie Blynk servų per wifi kurį šarins telefonas. Poto praskanuos lentą. Mygtuke "Center" atsiras atstumas milimetrais iki strėlės ir kampas iki jos nuo menamo horizonto. Taigi šitas taškas bus įrenginio suprantamas kaip taikinio centras. Po to sušaudai visą partiją, ar po kiekvieno šūvio spaudi "Rescan". Mygtuke taip pat matysis atstumas iki rastos strėlės ir kampas (čia tik tetavimui, vėliau tuos skaičius išimsiu). Apačioje lentelėje atsiras visos rastos strėlės, atstumai iki centro ir kryptis nuo centro (Nort West, South East ir pan).
Na ir čia testavimo rezultatai:
   Tikras stebuklas ką gali geometrija!!!

   Na ir kodo gabaliukas jei kam įdomu. Kolkas pritaikytas tik skanavimui po kiekvieno šūvio, poto strėles dėsiu į masyvus ir senas ignoruosiu:




#define BLYNK_PRINT Serial
#include 
#include 
#include 
Servo servo_L;
int aw, cd, ca, cx, cy, ad, aa, ax, ay, an=0, a2c, d2c;
float ba;
float ra=57.2957795;
String name;

BLYNK_WRITE(V4)
{
  int pinData = param.asInt();
  if (pinData == 1) 
  {
    Blynk.virtualWrite(V3,"clr");
    an=0;
  }
}


BLYNK_WRITE(V2)
{
  int pinData = param.asInt();
  if (pinData == 1) 
  {
    an++;                                  // Kelintas suvis
    int val;
    int kampas = random(5, 85);            // Imituojam kokiu kampu nuo pagringo buvo rasta strele.
  
    servo_L.write(0);  delay(500);
    for (int i=0; i<=90; i++)
    {
      servo_L.write(i);
      delay(15);
  
      val = analogRead(A0);                // imituojam lazerio skaityma, kolkas patencikas

      if (i==kampas) {
                                           // Visi pataikymai turi buti netoliau nei 2*centras
        if (val < cd*2) {
          ad=val+aw/2;
          aa=i;
        }
      }
    }
    name=ad; name+="@"; name+=aa;
    Blynk.setProperty(V2,"offLabel",name);
    Blynk.virtualWrite(V2,LOW);
    
    d2c=round(sqrt(pow(cd,2)+pow(ad,2)-2*cd*ad*cos((aa-ca)/ra)));        // skaiciuojam atstuma iki centro
//    a2c=acos((pow(d2c,2)+pow(cd,2)-pow(ad,2))/(2*d2c*cd))*ra;          // skaiciuojam kampa nuo 45 i taikini, nereikia jo
    name=d2c;

    ax=round(cos(aa/ra)*ad);
    ay=round(sin(aa/ra)*ad);
    name+=" ";  
    if (aycy) name+="N";
    if (axcx) name+="E";

    Blynk.virtualWrite(V3,"add",an,String(an),name);                     //siunciam i lentele
  }
}

BLYNK_WRITE(V0)
{
  aw = param.asInt(); // nusiskaitom streles stori
}


void out(String str, int val)
{
  str+=": ";
  str+=val;
  Serial.println(str);
}

void setup()
{
  Serial.begin(115200);
  Blynk.begin("authkejus", "wifi sidas", "wifi passordas");

  servo_L.attach(D4);
  servo_L.write(0); delay(500);             // grazinam i 0 pozicija ir leidziam motorui atsisukt
                                            // skanuojam lapa
  for (int i=0; i<=90; i++)
  {
    servo_L.write(i); delay(15);            // sukam serva ir duodam laiko
    int val = analogRead(A0);               // imituojam lazerio skaityma
                                            // imituojam jog radom centra lygiai ant 45 laipsniu
    if (i==45) {
      cd=val+aw/2;                          // dadedam puse streles storio prie ilgio                                
      ca=i;                                 // cia kampas iki centro
      cx=round(cos(ca/ra)*cd);
      cy=round(sin(ca/ra)*cd);
      name=cd; name+="@"; name+=ca;
      Blynk.setProperty(V1,"offLabel",name);
      name=cx; name+=":"; name+=cy;
      Blynk.setProperty(V1,"onLabel",name);
    }
  }
}

void loop()
{
  Blynk.run();
}



2016-12-18

CNC

   Kliba man galvoj viena mintis jau keletas metų. Paskaitin4jau internete naujienas apie tai, ogi žiūriu gamyba mano išsvajoto agregato supaprastejo iki mechaninio sprendimo. Eletronika jau gatava ir gan pigi. Nuo kiniškų iki normalių. Programų taip pat begalės. Pluginų beveik kiekvienam normaliasniam softui. Tagi apsisprendžiau ir pradėjau rinkti komponentus.
   Tarp kitko ir mechaninių elementų didelis pasirinkimas. Nuo pigių iki brangių. Nuo sraigtų su guoliais iki žalvarinių įvorių. Nuo dirželių iki krumplestiebių. Žodžiu tik apsispręsk ko nori.
   Man dabar sunkiausia dalis sugalvoti rėmą. Aliuminis gražu, bet brangu. Noriu pagamint iš juodo metalo kvadratinių profilių. Tikiuosi gausis. Kitas likęs brangus elementas kreipiančiosios. Manau jis niekad neatpigs. Bandysiu kažką machinuot. Gal patį rėmo vamzdį panaudot kaip kreipiančiąją? Bet nesugalvoju ir nerandu ratuku tokiu kurie apkabinę riedėtų per rėmą.
 
 
 
Aliuminio profilis čia geriau. Įmeti "v" arba "w" ratelį į tarpą ir jis raičiojasi. Nusipirkau tokių "u" guoliukų.
 
 
Galvoju gal pavyks prie rėmo prisukti metaline juostą kokių 6mm ir per ją riedėti?
 
   Jau turiu ir kontrolinį. Vieną užsisakiau pas kitaicus, o po kelių dienų radau ebay "gShield syntethos" uz 16 svarų!! Plius keli E uz parsiuntima per pirkanglijoje.lt ir vualia.


 
   Laukiu Kalėdų, važiuosiu į Ukmergę pasiimsiu varikliukus ir pradėsiu testuot.
   Dar neturiu ir matblokio. Reikalingas Lemonoj kainuoja apie 50E, pas kinus apie 30. Turiu tokį Lenovo kroviklį 20v. 3A. Tuos Epsono varikliukus, manau, tikrai turėtų varinėt. Poto apsispręsiu dėl normslaus maiteko. O kol kas vis suku galvą dėl rėmo ir kreipiančiųjų. Nuo šitų dviejų dalykų priklausys pavaros.

2015-10-30

Counter tiuningas

Na va, nepraėjo nei metai ir "klientui" prireikė patobulinimų. Ir iš tiesų, pradinė mintis, kad paleidinėti ir stabdyti skaitliuką su nuotoliniu pulteliu buvo nebloga, bet tik tol kol realiai nepradedi tai naudoti. Kaip ir kiekvienas gaminys apsišlifuoja ir pasimato nepatogumai tik jį pradėjus intensyviai naudoti.

Čia gi tas pat. Pakabinus monitorių į vietą






pultelis pradėjo nebeveikti nuo palangės (kaip paaiškėjo vėliai tereikėjo pakeisti bateriją). Reikėjo atsistoti tiesiai prieš monitorių ir iš ten paleisti. Taip pultelis prarado savo nuolatinę vietą. Kažas įsideda į kišenę, kažkas deda ant lankų laikiklio(nukrenta). Žodžiu sprendimas - pririšti :)



Sekantis įkyrus dalykas pasirodė, tai kaskart įjungus nustatinėti. Nors tų parametrų viso labo tik keturi, bet juk galima ir jų išvengti. Taigi po įjungimo defaultiniai parametrai dabar iškart pakraurnami ir belieka sulaukti START komados. Ir dar. dėl to jog treniruotės vyksta žymiai dažniau nei varžybos defaultinis serijų skaičius dabar 99.

Taip kur kas geriau! Po kurio laiko užkniso vis siekti to pririšto pultelio, taigi pasiūliau ir visai  teigiamai buvo sutikta mintis mechaniniams mygtukams:






Man čia pasitaikė kaip tik gera proga pasiaiškinti su GPIO portais. Papildomai prie viso to teko susiinstaliuoti python-dev headerius debianui, parsitempti RPi.GPIO ARMui iš https://pypi.python.org/pypi/RPi.GPIO, ir susiinstaliavus (unzip RPi*; cd RPi*; python setup.py install) pridevelopint funkcionalumą. Beje headeriai nenorėjo lyst kol nepraleidau apt-get update. Matyt pasikeitė keliai, versija... Taigi teko šitam bananui laikinai ir internetą duot :

Kadangi po pradinio varianto buvo dar kaikas pakeista, įmesiu pilną kodą:
 #!/usr/bin/python  
 #import Tkinter as tk  
 from Tkinter import *  
 from time import sleep  
 import os  
 #gpio part  
 import RPi.GPIO as GPIO  
 GPIO.setmode(GPIO.BCM)  
 GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
 GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
 def ck_stop_button():  
      if (GPIO.input(18) == GPIO.LOW): stop()  
      root.after(10,ck_stop_button)  
 def ck_start_button():  
      if (GPIO.input(23) == GPIO.LOW): start()  
      root.after(10,ck_start_button)  
 #gpio part end  
 def togglepauseplay(e=None): os.popen('mocp -M /root/c/.moc1 -G')  
 def mforward(e=None): os.popen('mocp -M /root/c/.moc1 -k 10')  
 def mrewind(e=None): os.popen('mocp -M /root/c/.moc1 -k -10')  
 def mstop(e=None): os.popen('mocp -M /root/c/.moc1 -s')  
 def mplay(e=None): os.popen('mocp -M /root/c/.moc1 -p')  
 def mnext(e=None): os.popen('mocp -M /root/c/.moc1 -f')  
 def mprev(e=None): os.popen('mocp -M /root/c/.moc1 -r')  
 def decrease():  
      global job, curtim  
      tim.configure(text=curtim, fg="#00ff00")  
      if curtim>=0:  
           curtim=curtim-1  
           job=root.after(1000, decrease)  
      else:  
           stop()  
 def start(e=None):  
      global job, var, curtim, timval, curind, indval, curser, serval  
      if var==5 and job==0:  
                curtim=timval  
                os.popen('/root/c/start')  
                decrease()  
 def stop(e=None):  
      global job, timval, curind, curser, serval, indval  
      if job!=0:  
           tim.configure(fg="#ff0000")  
           root.after_cancel(job)  
           job=0  
           os.popen('/root/c/stop &')  
           sleep(5)  
           if (curind==indval and curser==serval):  
                power()  
                return 0  
           nextind()  
           tim.configure(text=timval)  
 def power(e=None):  
      global modval, indval, serval, timval, var, job, w  
      if job==0:  
            job=0  
            var=0  
            modval="Train"  
            indval=0  
            serval=0  
            timval=0  
           mod.place(x=0, y=0)  
           ser.place(x=w/3, y=0)  
           ind.place(x=w/3*2, y=0)  
           mod.configure(text="Mode", fg="gray15")  
           ind.configure(text="Index", fg="gray15")  
           ser.configure(text="Series", fg="gray15")  
           tim.configure(text="Time", fg="gray15")  
 def n(i):  
      global var, modval, indval, serval, timval  
      if var==1:  
           modval=("Train","Comp")[i==0]  
           mod.configure(text=modval)  
      if var==3:  
           indval=i  
           if indval==0: indval=1  
           ind.configure(text=indval)  
      if var==2:  
           serval=serval*10+i  
           if serval==0: serval=1  
           if serval>=99: serval=99  
           ser.configure(text=serval)  
      if var==4:  
           timval=timval*10+i  
           if timval==0: timval=1  
           if timval>=300: timval=300  
           tim.configure(text=timval)  
 def ok(e=None):  
      global var, modval, indval, serval, timval, curind, curser, w  
      if var<5:  
           var=var+1  
           if var==1:  
                mod.configure(fg="yellow")  
           if var==2:  
                if modval=="Train" or modval=="Comp": mod.configure(fg="gray50")  
                else: mod.configure(fg="gray15")  
                ser.configure(fg="yellow")  
           if var==3:  
                if serval>0 and serval<100: ser.configure(fg="gray50")  
                else: ser.configure(fg="gray15")  
                ind.configure(fg="yellow")  
           if var==4:  
                if indval>0 and indval<10: ind.configure(fg="gray50")  
                else: ind.configure(fg="gray15")  
                tim.configure(fg="yellow")  
           if var==5:  
                if modval=="": modval="Train"  
                if indval==0: indval=1  
                if serval==0: serval=99  
                if timval==0: timval=90  
                if modval=="Train": os.popen('touch /root/c/mp3_play')  
                else: os.popen('rm -rf /root/c/mp3_play')  
                 curind=1  
                curser=1  
                curtime=timval  
                modval=""  
                ser.place(x=0, y=0)  
                ind.place(x=w/2, y=0)  
                updinfo()  
 def reset(e=None):  
      global var, modval, indval, serval, timval  
      if var==1: modval=""; mod.configure(text="Mode")  
      if var==3: indval=0; ind.configure(text="Index")  
      if var==2: serval=0; ser.configure(text="Series")  
      if var==4: timval=0; tim.configure(text="Time")  
 def prevind(e=None):  
      global job, curind, indval, curser  
      if job==0:  
           if curind>1:  
                curind=curind-1  
           else:  
                if curser>1:  
                     curser=curser-1  
                     curind=indval  
           updinfo()  
 def nextind(e=None):  
      global job, curind, indval, curser, serval  
      if job==0:  
           if curind<indval:  
                curind=curind+1  
           else:  
                if curser<serval:  
                     curser=curser+1  
                     curind=1  
           updinfo()  
 def updinfo(e=None):  
      indname=['-','A','B','C','D','E','F','G','H','I']  
      global curind, indval, curser, serval, modval, timval  
      #ind.configure(fg="gray50", text="I: "+indname[curind])  
      #ser.configure(fg="gray50", text="S: "+str(curser)+"/"+str(serval))  
      ind.configure(fg="#ffffff", text=indname[curind])  
      ser.configure(fg="#ffffff", text=str(curser))  
      mod.configure(fg="gray50", text=modval)  
      tim.configure(fg="#ff0000", text=timval)  
 var=10  
 val=0  
 modval=""  
 indval=0  
 serval=0  
 timval=0  
 job=0  
 k="b"  
 root=Tk()  
 w=root.winfo_screenwidth()  
 h=root.winfo_screenheight()  
 if k=="b":  
      root.bind('o', prevind)  
      root.bind('p', nextind)  
      root.bind('<F9>', power)  
      root.bind('e', ok)  
      root.bind('q', reset)  
      root.bind('u', start)  
      root.bind('y', stop)  
      root.bind('w', lambda e: n(0))  
      root.bind('3', lambda e: n(1))  
      root.bind('7', lambda e: n(2))  
      root.bind('1', lambda e: n(3))  
      root.bind('<Tab>', lambda e: n(4))  
      root.bind('4', lambda e: n(5))  
      root.bind('5', lambda e: n(6))  
      root.bind('-', lambda e: n(7))  
      root.bind('=', lambda e: n(8))  
      root.bind('9', lambda e: n(9))  
      root.bind('t', togglepauseplay)  
      #root.bind(']', mplay)  
      #root.bind('[', mstop)  
      ##root.bind('o', mrewind)  
      ##root.bind('p', mforward)  
      #root.bind('a', gtournament)  
      #root.bind('s', gtraining)  
      #root.bind('p', mnext)  
      #root.bind('o', mprev)  
 else:  
      #w=640; h=480  
      root.bind('o', prevind)  
      root.bind('p', nextind)  
      root.bind('<Escape>', power)  
      root.bind('<Return>', ok)  
      root.bind('<BackSpace>', reset)  
      root.bind('<F1>', start)  
      root.bind('<space>', stop)  
      root.bind('0', lambda e: n(0))  
      root.bind('1', lambda e: n(1))  
      root.bind('2', lambda e: n(2))  
      root.bind('3', lambda e: n(3))  
      root.bind('4', lambda e: n(4))  
      root.bind('5', lambda e: n(5))  
      root.bind('6', lambda e: n(6))  
      root.bind('7', lambda e: n(7))  
      root.bind('8', lambda e: n(8))  
      root.bind('9', lambda e: n(9))  
 if (1.0*w/h)<1.5: ftim=h/5*3  
 else: ftim=h/8*6  
 ytim=(h/2)-(ftim/2)  
 finfo=h/7  
 root.wm_title("Counter 4 STRELE.LT")  
 root.configure(bg='black')  
 root.geometry('%dx%d+%d+%d' % (w, h, 0, 0))  
 tim=Label(root, text="Time", fg="gray5", bg="black", font=('Times', -ftim, 'bold'))  
 mod=Label(root, text="Mode", fg="gray5", bg="black", font=('Times', -finfo))  
 ind=Label(root, text="Index", fg="gray5", bg="black", font=('Times', -finfo))  
 ser=Label(root, text="Series", fg="gray5", bg="black", font=('Times', -finfo))  
 tim.place(x=0, y=ytim)  
 mod.place(x=0, y=0)  
 ser.place(x=w/3, y=0)  
 ind.place(x=w/3*2, y=0)

 # Disable powersaving
 os.popen('xset s off')
 os.popen('xset -dpms')
 os.popen('xset s noblank')

 #Autostart 
 power()  
 ok()  
 ok()  
 ok()  
 ok()  
 ok()  
 #start()  
 #gpio buttons check  
 root.after(10,ck_stop_button)  
 root.after(10,ck_start_button)  
 #gpio buttons check end  
 root.mainloop()  



Kadangi naudoju Banana Pi, o ne Raspbery Pi, gpio pinoutas šiek tiek skiriasi, todėl kad daug negalvot ir neskaityt dokumentacijos kalnų, porai mygtukų pinus radau taip: Prijungiau laidą prie GND pino, o poto prilietęs prie betkurio kito prasukdavau šitą kodą:
 #!/usr/bin/python 
 import RPi.GPIO as GPIO  
 GPIO.setmode(GPIO.BCM)  
 GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
 for i in range (0, 24):  
      GPIO.setup(i, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
 for i in range (0, 24):  
      if (GPIO.input(i) == GPIO.LOW):  
           print "%s YESSS" % i  


Tada atjungęs prasukdavau kodą darsyk. Taip rasdavau skirtumą kuriuose pinuose krinta frontas. Galiausiai radau pasirinkau kombinaciją kur abipus GND yra kažkoks IO. Mano atveju pinai P12, P14 ir P16:


kur P12 atitinka IO18, o P16 - IO23.
Nežinau kodėl visur dokumentacijoj rodo, jog tai IO1 ir IO4, bet man mano skriptukas parodė ką kitą:


Taigi ant IO 18 pakabinau STOP mygtuką, o ant 23 START. Sumoje trys laidukai ir 12 eilučių kodo:
Visa kita liko po senovei:
Turbūt neveltui atsiranda tokie posakiai "bėda po vieną nevaikšto", "kur trunka ten plyšta", "žingsnis pirmyn, du atgal" ir t.t. Programuotojai pasiskolino Enšteino formule E=mc^2 ir pritaikė sau - Errors=more code^2. Taigi, kuo daugiau kodo tuo daugiau bėdų. Nors mano atveju gal šitas ir nelabai tiktų. Žodžiu, kai padarėm valdymą mygtukais per GPIO ir nebespaudinėjam distancinio, tas mūsų "bananas" pradėjo galvot kad jo niekas nebečiupinėja ir liūdnas po dešimties minučių nueidavo miegot. Nežinau kodėl, bet pažadint jį būvo galima tik nutraukus maitinimą. Šiek tiek pabrausinus radau sprendimą nes ne vienas entuziastas su tuo jau susidūrė ir maloniai pasidalino webe (http://crunchbang.org/forums/viewtopic.php?id=13990). Kadangi čia gerokai apkarpyta distribucija ir .xinitrc nesuveikė (nors turėjo) lengviausia pasirodė paleisti iš counter.py nes reik nustatymus sukišt jau startavusiai X sesijai:
 # Disable powersaving
 os.popen('xset s off')
 os.popen('xset -dpms')
 os.popen('xset s noblank') 

Kaip pagalvoji anoks čia stebuklas, tereikia mokėt šiek tiek programuot, truputį sysadmino žinių, networko pagrindų, geros/naudingos idėjos ir gabumų pamatyt sprendimo kelią apjungiant į vienumą komponentus iš skirtingų sferų.

Čia aš šiaip pamoralizavau, nes vakar gavau repliką daugmaž tokią:
- Ble jūs AjTyšnikai, nieko neveikiat ir tūkstančius gaunat! Už tokias babkes ir aš galėčiau dirbt tokį darbą. Svarbu ką nors protingo pasakyt kai paklausia... na ką nors krūčiau negu tiesiog: 'Spausk ENTER'. Tarkim... 'C6' spausk!... ir viskas, atrodai kietas, babkes gauni...

Net kažkuriuo momentu pasijutau kaltu!! Jofana...!

Nepasiūliau, tik namo parėjus dašilo, reikėjo pasakyt: "taigi va, kaip tik laisva vieta bus po savaitės, gali eit į mano poziciją. Bus proga pasakyt ar pašoliuot kaip arkliui c6-d8 arba c6-e7... spausk... varyk..."

Na ir velniop... Eina jie šikt... Neskaitau, kad jie nedirba, bet bent jau krintančią atsakomybę tegu palygina... Suerzino...

2015-08-30

Pencininkas ir balvonas

   Oi kaip seniai nerašiau. Gal dėl to, kad vaikai užaugo ir nebėra iš ko pasijuokt? Nors kartais nutinka koks vienas kitas juokelils. Neseniai buvom atostogaut Ventspilyje. Pasistatėm palapinę, pabuvom pajūry. Kažkurią dieną nušlepsėjom iki parduotuvės. Stovėjimo aikštelė išgrysta tokiom plytelėm ir vietos invalidams ne nudažytos kaip pas mus, bet taip labai gražiai išdėliotos tomis pačiomis tik kitos spalvos plytelėmis. Dainai pirmoji pamatė tą ženklą ir sako:
   - Ei, žiūrėkit, koks gražus pensininkas!
   - Kur?
   - Na va, ten! Ant žemės guli!

   O apie balvoną tai čia vakar ir vėl gi Daina išsireiškė. Lina kažką skaitė internete, o aš eidamas pro šalį viana akimi užkliuvau už pavadinimo "Vilnius be 'balvonų'". Ten kažkas apie tas statulas kurios buvo ant žalio tilto. Garsiai perskaičiau, sakau:
   - ale rimtai, koks įdomus tas žodis 'balvonai'...
Tada Daina:
   - Koks įdomus? Taigi pats tą žodį vardojai dažnai. Girdėjau ankščiau!
   - Na, - sakau, - gal ir vartojau, bet tikrai ne dažnai. Nors apskritai nepamenu, kada aš taip sakiau?
   - Na tu sakiai gi, kai numiršta žmogus jis tada buna balvonas.
Na aišku skaniai pasijuokėm, o Daina turėjo omeny žodį "lavonas".