Spirála se 4015

Taková blbost a takový to dalo práce:-)


Základní myšlenka je jednoduchá a má ještě nějaká zjednodušení. Původně to měl být kruh a otázka byla, zda 24 nebo 32 LEDek. Ale jako kruh to není ono. Mají-li být všechny parametry spojitě štelovatelné, nebude kruh navazovat. Takže spirála. Jenže aby spirála spirálou byla ... chce to aspoň tak 100 LEDek:-)
První pokus se skriptem nedopadl dobře, není to ono. Ale zas je to triviální úprava skriptu na kruh odsud: Arranging components in a circle with Kicad.

Nakonec se inspirace smrskla jen na názvy funkcí pro práci s Kicadem:-)

Vlastní program generuje klasickou Archimedovu spirálu
a jednou za nastavenou délku na ní posadí součástku .. a pak dořešit nějaké ty detaily:
#!/usr/bin/env python2

# import archimed
# archimed.spiral("D", 0, 95, 0.0, (0, 0), 5.0, 6.5, 4.0)
 
import math
from pcbnew import *

# archimedova spirala, mm, refMin-refMax 
# text ref, min ref n, max ref n, start angle, (center x, center y), min rad, stoupani, rozestup, otoceni souc., skryt ref, zamknout
def spiral(refText, refMin, refMax, angStart, center, rMin, stoup, dist, compOffs=0, hide_ref=True, lock=False):
    # r = a + b*fi
    a = rMin
    b = stoup / 2 / math.pi
    ang = angStart
    angStep = 0.01/(a + b * math.sqrt(refMax-refMin))
    pcb = GetBoard()
    idx = refMin
    prevX=-123456
    prevY=-123456
    for i in range(0, 1000000):
        ang += angStep
        r = a + b * ang
        x = center[0] + r * math.cos(ang)
        y = center[1] + r * math.sin(ang)
        if prevX == -123456 and prevY == -123456 or sqrt((x-prevX)**2 + (y-prevY)**2) >= dist:
            rd = refText + str(idx)
            part = pcb.FindModuleByReference(rd)
            part.SetPosition(wxPoint(FromMM(x), FromMM(y)))
            part.SetOrientation(((math.degrees(ang) + compOffs) % 360) * -10)
            prevX=x
            prevY=y
            idx+=1
            if idx>refMax:
                print "hotovo, otacek: " + str(ang/2/math.pi) + ", krok: " + str(math.degrees(angStep)/360.0) \
                + " deg = " + str(angStep * 2 * math.pi * r) + " mm na konci"
                break
                
    if i>=1000000:
        print "Chyba: Mimo rozsah uhloveho indexu"
Hm.. a teď ještě všechno naroutovat:-)

To se nakonec podařilo, i když práce byla přeci jen složitější. Asi by bylo lepší, kdyby LEDky směřovaly obráceně. Celkově je to ale tak na hranici, co je ještě pro 2 vrstvy únosný, když jsou obě strany prakticky plný součástek a 96 z nich je navíc šikmo.

Původně bylo v plánu, že uprostřed bude repráček a s pomocí čtvrtého hradla bude vydávat haluzní zvuky, dle proudu odebíraného LEDkama. Ale tenhle obvod se beznadějě nevešel. Aby ne, plánován byl v době rohodování, zda kruh bude mít 24, nebo 32 LEDek:-)

Napufat pastu na stranu s integráčema.

Nasázet součástky, šup do grilu a za chvilku je připájeno. To se to hezky sází, když jsou skoro všechny stejné a navíc máme iBom.

Poznámky k ručnímu pájení:
1. Použijte iBom.
2. Nejprve připájet všechny odpory a všechny kondíky. Žádný diody a už vůbec ne trimry.
3. Až jsou všechny odpory a kondíky, připájet integráče. Hlavně žádnej neobrátit.
4. Nyní připojit na 5 V přes LEDku a odpor 1k. Pokud LEDka nesvítí, žádnej integráč není obráceně. Pokud svítí, najít obrácenej a obrátit správně. Finální správný stav je, že při správné polaritě LEDka nesvítí a když k ní desku připojíte opačně, LEDka se rozsvítí.

Strana s LEDkama vypadá děsivěji. Ale zas je jasné, kam která patří:-)

Poznámky k ručnímu pájení:
5. Pokud jste připájeli i diody, leží teď deska malinko nakřivo. Pokud i trimry, budete si jí muset vypodložit. Proto jste je pájet zatím neměli:-)

Napufání šlo zas rychle, sázet je horší, každá je trochu jinak šikmo. Hlavně žádnou neobrátit.

Poznámky k ručnímu pájení:
6. Pozor při cínování pájecích ploch. Ujistěte se, že cínujete od každý LEDky jen jednu. Jinak budou nakřivo a bude to vypadat blbě (při pájení trafopáječkou tento krok ignorujte).
7. Připájejte jedny konce všech LEDek. Pozor na správnou polaritu.
8. Pokud to jde, zkontrolujte polaritu všech LEDek a případně opravte.
9. Pokud je nějaká nehezky jinak šikmo než by měla být, zkuste jí srovnat.
10. Připájejte druhé konce LEDek.
11. Obraťte desku, připájejte diody a trimry. Pokud máte modré nebo bílé LEDky, místo D102 dejte propojku.

A teď znovu do grilu, ale pozor, dole už máme 13 intergáčů a trochu "smetí". Pomohlo podložit podložkama.

Zapečeno. Jenže gril neumí chladící část reflow profilu, takže nezbývá než opatrně vytáhnout a držet ve vzduchu, dokud cín nezatuhne.

Funguje:-) (Video)
Celkové skóre: Jeden zkrat mezi nožičkama a 1 LED měla 1 nožičku nedozapojenou.

Takhle s červenýma LEDkama to funguje od 2,7 do 7,2 V a žere 0-450 mA při svícení 50% počtu LED. Trochu to svítí už asi od 2,2, ale je to vidět jen ve tmě, naopak při mírném překročení 7,2 se přestanou přenášet 1 z prvního do dalších registrů a funkce se obnoví až kousek pod 7,2.

Poznámky k ručnímu pájení:

12. Nastavte všechny trimry cca doprostřed a zapněte na 4-5 V. Pokud chcete použít Li-ionku, nebo Li-polku, připojte to k ní přes odpor cca 1 ohm, který v nejhorším případě přehoří, pokud jste na desce ještě něco fatálně zkazili, nebo ji připojili obráceně. Očekávejte odběr 0-250 mA z 5 V.

Průběh napětí ultracapu 1,5 F nabitého na 5,2 V, když živí tento výtvor. Na grafu je vidět, jak napětí klesá stále pomaleji, protože proud LEDkami klesá jak se napětí blíží hranici vodivosti sériového spojení LEDky a dvou křemíkových diod. Zařízení "vesele" funguje i po 20 minutách, ale vidět je to již jen ve tmě. Viditelnost nakonec vydržela ještě pár hodin do noci.

Na videu je situace po asi minutě provozu:Video