6. září 2016

Quadruple Oblong na 144 MHz

Velmi jednoduchá a lehká anténa ze stránek DK7ZB. Anténa je zajímavá vyzařovacím diagramem a svou  jednoduchostí. Zisk je 5.6 dBd ve dvou směrech. Hmotnost je 200g a lze ji postavit do dostatečné výšky na laminátovém stožáru.  K výrobě budeme potřebovat mosaznou trubičku 4x1 (k dostání v modelářské prodejně) a měděné lanko 1.5mm. Ostatní komponenty jsou opět vytištěné na 3D tiskárně. STL pro výrobu je možné stáhnout na thingiverse. Pokud nemáte 3D tiskárnu je možné plastové komponenty zakoupit na hamshop.cz. 
Délka vertikálně - 714 mm, délka horizontálně - 292 mm.


Schéma antény

Detail připojení kabelu, z kabelu je pak dobré navinout tlumivku

Detail uchycení

Hotová anténa

Anténa má výborné PSV  přes céle 2m pásmo. Anténa jsem vyzkoušel na 12m stožáru od DX-WIRE a na svoji jednoduchost a nízkou hmotnost funguje velmi pěkně.

7. července 2016

Univerzální stojan

Další pro mě užitečná věc vyrobená na 3D tiskárně. Stojan pro laminátový teleskop. Stavba antény na louce je pak o hodně jednodušší a nemusíme hledat k čemu teleskop připevnit. Komponenty jsou vytištěné na 3D tiskárně. Vzpěry jsou z hliníkové pásoviny. Pro menší teleskopy používám pásovinu 15x2 a pro větší 20x2. Šrouby M5 nebo M6.






Celý design je udělaný v OpenScadu. Jednoduše lze modifikovat rozměry podle potřeby. Soubory pro tisk (průměr laminátu 42mm - DX Wire 12.5)  i zdrojáky je možné stáhnout zde.



13. dubna 2016

Komponenty pro YAGI antény vyrobené na 3D tiskárně


Poslední dobou se hodně bavím 3D tiskem. 3D tisk otvírá úžasné konstrukční možnosti. Pro modelování používám OpenSCAD, což je otevřený SW, který se liší od CAD programů tím, že je spíš pro programátory. Modely se nekreslí ale píšou jako program. Za obrovskou výhodu považuji pak jednoduchou modifikovatelnost modelů. Jeden z posledních projektů co jsem udělal jsou komponenty pro yagi antény. K dispozici jsou úchyty prvků a dipólu. Jednotlivé komponenty jdou snadno modifikovat pro jiné průměry ráhna i prvků. Antény z těchto komponent nejsou určeny pro trvalou montáž, jako ráhno používám plastovou trubku o průměru 25 mm a jako prvky 3.2 mm svářecí hliníkový drát. Na dipól 4 mm svářecí mosazný drát. Jem možné postavit prakticky libovolnou anténu. Hodně možností je na stránkách DK7ZB.


Uchycení dipólu a kabelu

Uchycení dipólu a kabelu


Yagi na 70 cm

Yagi na 2m

Detail uchycení prvků
Celý projekt je k dispozici na http://www.thingiverse.com/thing:912567.

Plastové díly je možné zakoupit na hamshop.cz.


8. července 2015

Baofeng UV-3R a bezdrátové nabíjení

V mobilních telefonech se už začalo používat bezdrátové nabíjení. Dokonce i výrobce nábytku IKEA zabudovává nabíječe QI standardu do svého nábytku. Chtěl jsem bezdrátové nabíjení trochu prozkoumat. Na ebay je možné koupit sadu pijímač vyílač pod 10 USD (250 Kč). Napadlo mě zabudovat bezdrátové nabíjení do UV-3R. Koupil jsem na ebay sadu pro Samsung Galaxy S3. přijímač se přesně vejde pod baterii. Úprava je velmi jednoduchá. Radio rozebereme podle tohto video návodu.




Kablík od přijímač bezdrátového nabíjení se připojí k napájecímu konektoru
V hliníkovém odlitku je třeba vyvrtat otvor pro kablík
Rádio složíme do původního stavu. Musí nám koukat kablík pro připojení přijímače bezdrátového nabíječe. Připojíme přijímač (Pozor na polaritu).

Mezi kryt a baterii vložíme přijímač
Rádio stačí položit zády na vysílač bezdrátové nabíječky a už nabíjíme...


6. července 2015

Ultra portable yagi vyrobená na 3D tiskárně

Asi před půl rokem se mi podařilo zprovoznit doma postavenou 3D tiskárnu a začal jsem si hrát s 3D tiskem. 3D tisk mi otevřel úplně nové možnosti. Začal jsem se učit modelovat v OpenScadu a postupně začali vznikat různé pokusy s využitím 3D tisku při stavbě antén. A tak vznikly i tyto dvě antény. Všechny plastové komponenty jsou vytištěné na 3D tiskárně. Prvky jsou vyrobeny ze svinovacího metru. Anténu lze sbalit omotáním prvků kolem ráhna a pohodlně uložit do batohu pro transport. Rozměry obou antén vycházejí z konstrukce DK7ZB. Jedná se o 3el. yagi s ráhnem 50 cm pro pásmo 2m a dvoupásmovou 2+3 el. yagi. Konstrukce je patrná z fotografií. Jako ráhno je použitá plastová elektrikářská trubka o průměru 25mm. Všechny díly jsem tiskl z PLA bez podpory s výplní 25%. Vytištění dílů trvá méně než 2 hodiny.












Soubory pro 3D tisk ve formátu STL i zdrojové soubory pro OpenScad je možé stáhnout zde:
http://www.thingiverse.com/ok1cdj/designs

12. ledna 2015

Univerzální deska pro ESP8266 ESP-01

Pro experimenty s ESP8266 konkrétně s modulem ESP-01 jsem navrhl a vyrobil jednoduchou univerzální desku. Deska obsahuje měnič, který je nastaven na výstupní napětí 3.3V. Měnič pochází z eBay. Dále tlačítko, které slouží k aktivaci bootloaderu pro update firmware. Všechny GPIO porty jsou vyvedeny na svorkovnici. Dále je zde konektor pro připojení sériové linky. Deska je navržena jako jedno stranná. Lze ji vyrobit např. metodou transferu toneru jednoduše i v domácích podmínkách.

Zapojení není třeba dále komentovat.


Schéma zapojení


Plošný spoj

Hotová deska
Veškeré soubory jsou k dispozici na:
https://github.com/ok1cdj/ESP8266-LUA/tree/master/ESP-01-board

11. ledna 2015

Twitter

Poslední dobou nemám moc času psát články na blog. Tím neříkám, že se tu nebude nic dít. Mám rozpracovaných několik článků, které snad publikuji v lednu. Od nového roku jsem více začal používat twitter. Snažím se tam dávat aktuální informace o tom co zrovna bastlím. Takže kdo používáte twitter přidejte si do sledování ok1cdj nebo se podívejte na https://twitter.com/ok1cdj

28. prosince 2014

ESP8266: WI-FI a internet do každého zařízení V.

V tom článku si ukážeme praktické použití. Uděláme teploměr s čidlem DS18B20, který bude v pravidelných intervalech odesílat data na thingspeak.com. Thingspeak je otevřená cloud platforma pro různá zařízení co sbírají data. Výhodu je, že odeslání dat je velmi jednoduché, není třeba žádná složitá autentizace. Z dat se automaticky vytváří graf. Je možné je pak exportovat. Nejdříve si musíte na thingspeak.com založit účet a vytvořit kanál kam budeme odesílat data. K danému kanálu je třeba získat API klíč pro zápis.

Zapojení je velmi jednoduché:


Dále pomocí IDE nahrajeme dva subory ds1820.lua a init.lua.
Soubor ds1820.lua čte teplotu z čidla a odesílá metodou GET data na server thingspeak.com. Zde nastavte váš API klíč pro zápis a periodu jak často chcete data odesílat. Výchozí hodnota je 1 minuta.

-- ds1820.lua
-- Measure temperature and post data to thingspeak.com
-- 2014 OK1CDJ
--- Temp sensor DS18B20 is conntected to GPIO0
pin = 3
ow.setup(pin)

counter=0
lasttemp=-999

function bxor(a,b)
   local r = 0
   for i = 0, 31 do
      if ( a % 2 + b % 2 == 1 ) then
         r = r + 2^i
      end
      a = a / 2
      b = b / 2
   end
   return r
end

--- Get temperature from DS18B20 
function getTemp()
      addr = ow.reset_search(pin)
      repeat
        tmr.wdclr()
      
      if (addr ~= nil) then
        crc = ow.crc8(string.sub(addr,1,7))
        if (crc == addr:byte(8)) then
          if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then
                ow.reset(pin)
                ow.select(pin, addr)
                ow.write(pin, 0x44, 1)
                tmr.delay(1000000)
                present = ow.reset(pin)
                ow.select(pin, addr)
                ow.write(pin,0xBE, 1)
                data = nil
                data = string.char(ow.read(pin))
                for i = 1, 8 do
                  data = data .. string.char(ow.read(pin))
                end
                crc = ow.crc8(string.sub(data,1,8))
                if (crc == data:byte(9)) then
                   t = (data:byte(1) + data:byte(2) * 256)
         if (t > 32768) then
                    t = (bxor(t, 0xffff)) + 1
                    t = (-1) * t
                   end
         t = t * 625
                   lasttemp = t
         print("Last temp: " .. lasttemp)
                end                   
                tmr.wdclr()
          end
        end
      end
      addr = ow.search(pin)
      until(addr == nil)
end

--- Get temp and send data to thingspeak.com
function sendData()
getTemp()
t1 = lasttemp / 10000
t2 = (lasttemp >= 0 and lasttemp % 10000) or (10000 - lasttemp % 10000)
print("Temp:"..t1 .. "."..t2.." C\n")
-- conection to thingspeak.com
print("Sending data to thingspeak.com")
conn=net.createConnection(net.TCP, 0) 
conn:on("receive", function(conn, payload) print(payload) end)
-- api.thingspeak.com 184.106.153.149
conn:connect(80,'184.106.153.149') 
conn:send("GET /update?key=YOURKEY&field1="..t1.."."..t2.." HTTP/1.1\r\n") 
conn:send("Host: api.thingspeak.com\r\n") 
conn:send("Accept: */*\r\n") 
conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n")
conn:send("\r\n")
conn:on("sent",function(conn)
                      print("Closing connection")
                      conn:close()
                  end)
conn:on("disconnection", function(conn)
                                print("Got disconnection...")
  end)
end

-- send data every X ms senconds to thing speak
tmr.alarm(0, 60000, 1, function() sendData() end )

Soubor initi.lua - se spustí automaticky po restartu. Připojí se k nastavené WIFI síti a počká na přidělení IP adresy a pak spustí skript ds1820.lua. Ve skriptu je třeba nastavit vaši síť.

--init.lua
print("Setting up WIFI...")
wifi.setmode(wifi.STATION)
--modify according your wireless router settings
wifi.sta.config("SSDID","PASSWORD")
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function() 
if wifi.sta.getip()== nil then 
print("IP unavailable, Waiting...") 
else 
tmr.stop(1)
print("Config done, IP is "..wifi.sta.getip())
dofile("ds1820.lua")
end 
end)

Zdrojové kódy je možné také sthnout zde: https://github.com/ok1cdj/ESP8266-LUA/tree/master/Thermometer-DS18B20-Thingspeak

Jak je vidět ESP8266 s LUA firmwarem je použitelné pro různé aplikace. Není problém v něm napsat jednoduchý klient i server, připojit různé periférie (momentálně 1-wire nebo i2c).

25. prosince 2014

ESP8266: WI-FI a internet do každého zařízení IV.

Lua je odlehčený, reflexivní, imperativní a procedurální programovací jazyk navržený jako skriptovací jazyk s rozšiřitelnou sémantikou. Název je odvozen z portugalského slova pro měsíc. Jeho celá implementace se vejde do 100 kB. Pokud umíte něco naprogramovat v PHP nebo Pythonu nebude pro vás LUA žádný problém.


1. Proměnné
Rozlišujeme dva druhy proměnných. Globální a lokální. Globální existují všude a lokální pouze v bloku (funkci) kde vznikly. Název proměnné by měl začínat vždy písmenem a pozor jsou rozlišována velká a malá písmena.
Proměnné můžou být těchto typů: nill - nic, prázdná hodnota, čísla, znaky, stav (true/false - 0/1), řetězce, tabulky, funkce.
Příklad:
i=nill
k=1
flag=true
bname="ahoj"

2. Komentáře a klíčová slova
-- komentář
Klíčová slova:
and    break  do   else     elseif   
end    false  for  function if
in     local  nil  not      or
repeat return then true     until
while

3. Podmínky, funkce, cykly

Podmínka if
1.  if condition then
            block
   end
2.  if condition then
            block1
   else
            block2
   end
 
3.  if condition1 then
            block1
  elseif condition2 then
            block2
  elseif condition3 then
            block3
  else
            block4
  end

Funkce
1.  function Name()
            block
  end
 
2.  Name = function()
            block
   end

Cykly
1.  for variable = beginning, end, step do
            block
  end
   
2.  for variable, name  in table do
            block
   end
 
 3.  while condition do
            block
   end
 
 4.  repeat
            block
   until condition

Není  cílem popsat ze celou syntaxi jazyka LUA. Chtěl jsem pouze na příkladech ukázat, že je přehledná a jednoduchá. Více informací o jazyce LUA je v češtině třeba na root.cz nebo je k dispozici i kniha v češtině.

NodeMCU API implementuje rozhraní k funkcím čipu, kompletní popis je zde ve wiki.

Několik ukázek práce s API

Manipulace s GPIO
    pin = 1
    -- nastaví pin jako výstup
    gpio.mode(pin,gpio.OUTPUT)
    -- nastaví pin na log 1
    gpio.write(pin,gpio.HIGH)
    -- přečte a vypíše hodnotu pin
    print(gpio.read(pin))

Jednoduchý webserver
    srv=net.createServer(net.TCP) 
    srv:listen(80,function(conn) 
      conn:on("receive",function(conn,payload) 
        print(payload) 
        conn:send("<h1> Hello, NodeMcu.</h1>")
      end) 
      conn:on("sent",function(conn) conn:close() end)
    end)


Jak je vidět i vytvoření jednoduchého web serveru díky dobré implementaci v API zabere pár řádek kódu.

V příštím díle si ukážeme jak udělat WIFI teploměr s uploadem dat na thingspeak.com.

24. prosince 2014

ESP8266: WI-FI a internet do každého zařízení III.

V minulém díle jsme rozchodili alternativní  LUA firmware NodeMCU a připojili modul k WIFI. Teď můžeme začít psát vlastní programy. Ve firmware je implementovaný jednoduchý filesystém. Pro programy a další soubory máme k dispozici cca 150 kB. LUA příkazy můžeme psát přímo do konzole. Tak se nám neuchovají pro příští použití. Lepší bude ukládat je do souboru.

Soubor vytvoříme takto:
-- otevře 'test.lua' in 'a+' mode
    file.open("test.lua", "a+")
-- zapíše slovo 'pokus' na konec souboru
    file.writeline('pokus')
    file.close() 

Tímto způsobem můžeme vytvářet soubory. Ale jak vidíte, je to poměrně krkolomné. Výhodnější bude když si pořídíme nějaké vývojové prostředí, které se  o zápis souborů postará za nás. Vývojových prostředí jsem vyzkoušel několik. Nejpropracovanější a nejvíce rozvíjené jsou teď asi dvě.

 Lua loader - aplikace pro Windows (funguje i na Linuxu od Wine)



ESPlorer - multiplatformní aplikace, vyžaduje Javu verze 8. Funguje na WIN i Linuxu. 


Obě aplikace jsou si dost funkčně podobné. ESPlorer umožňuje posílat i AT příkazy pro originální firmware a je připraven i pro použití s dalšími alternativními firmwary.

V příštím díle si ukážeme základy syntaxe jazyka LUA a API NodeMCU firmwaru.

23. prosince 2014

ESP8266: WI-FI a internet do každého zařízení II.

V tomto článku popíšu jak do ESP8266, konkrétně modulu verze ESP-01 (do ostatních verzí to bude podobné) nahrát alternativní firmware. Já jsem začal používat firmware NodeMCU. Tento firmware je podle mě asi nejdál ze všech. Včera byly k tomuto firmware zveřejněny i zdrojové kódy což jeho vývoj asi ještě urychlí. Tento firmware v sobě obsahuje skriptovací jazyk LUA. V tomto jazyce pak můžeme psát svoje vlastní programy.

Pozor, celý modul je napájen z 3.3V a GPIO porty netolerují napětí 5V. Odběr při komunikaci přes WIFI může být až 250mA a napájení z interního stabilizátoru USB převodníku nemusí stačit pro správnou funkci a je třeba použít externí napájení.

Zapojení modulu pro flash firmware
Modul zapojíme podle schématu. Zatím nepřipojujeme GPIO0 na zem a vyzkoušíme nejdříve nějakým terminálovým programem (např. Coolterm) zda nám modul komunikuje i s originálním firmware. Rychlost by měla být 115200 bd (u některých hodně starých verzí 57600 bd). Na  AT+GMR by měl vrátit verzi fw.
Stáhneme aktuální firmware z:  
https://github.com/nodemcu/nodemcu-firmware/tree/master/pre_build/0.9.4/512k-flash

Nejčastěji se vyskytují moduly s 512k flash pamětí, ale jsou k dispozici i pro jiné velikosti.

Nyní budeme potřebovat nějaký nástroj pro nahraní nového firmware. 
Pro Linux např. https://github.com/themadinventor/esptool
Pro windows např. https://github.com/nodemcu/nodemcu-flasher


Modul připojíme podle schématu a GPIO0 připojíme na zem a a pak teprve připojíme napájení.

V linuxu použijeme příkaz:

./esptool.py -p /dev/<path-to-serial> write_flash 0x000000 nodemcu_512k.bin

Ve WIN nahrajeme aplikací.

Po odpojení GPIO0 a resetu napájení by měl modul začít komunikovat rychlostí 9600 bd.

Můžeme zkusit zadat příkazy pro připojení k WIFI a vypsání IP adresy.

Základní připojení k WIFI síti:
print(wifi.sta.getip())
--0.0.0.0
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
print(wifi.sta.getip())
--192.168.18.110

Modul by se měl připojit a získat IP adresu z DHCP serveru. Nyní můžeme začít vytvářet svoje vlastní programy.

V příštím díle si ukážeme jak s modulem efektivně komunikovat a jak vytvářet vlastní scripty.

22. prosince 2014

ESP8266: WI-FI a internet do každého zařízení I.

Co je vlastně ESP8266 ? Modul pro převod sériové linky na WI-FI. Řeknete si, takových modulů na trhu je, ale tento se dá pořídit pod 5 USD. Ano, do 100 Kč včetně poštovného, pořídíte modul, který připojíte pomocí 4 vodičů ke stávajícímu zařízení a můžete komunikovat po WI-FI. Podporuje módy v b/g/n, zabezpečení  WPA/WPA2 a umí pracovat jako Station nebo AP. Přisel na trh jaře tohoto roku jak jinak než z Číny. Na začátku byl k dispozici jen čínský datasheet a nic moc informací. Nyní na internetu kupa informací a je uvolněno SDK a tím pádem je možné psát vlastní firmware. A také s několik alternativních firmware již objevilo. Ty to posouvají o hodně dál. Už není třeba připojovat další MCU, ale lze celý modul využít samostatně. Co vím tak jsou k dispozici například - Nodemcu LUA, Nodelua, Frankenstein, Micropython. Některé jsou ještě hodně syrové. Nejdále je momentálně asi Nodemcu LUA.

Různé verze, dnes jich je k dispozici asi 12

Zapojení vývodů ESP-01
U všech věcí kolem ESP8266 probíhá momentálně bouřlivý vývoj. Hodně informací je možné nalézt na fóru esp8266.com.

V příštím článku článku popíšu jak do modulu nahrát alternativní firmware, konkrétně  Nodemcu LUA a vytvořit jednoduché zařízení připojené do internetu.


5. listopadu 2014

Let bálonu CDJ-1

Po zkušenostech z vývoje trackerů pro Stratocaching jsem se rozhodl vypustit vlastní balón. Nejlevnější  a nejschůdnější se mi jevila varianta PICO balónu. Jedná se párty balón o průměru 36" a trackerem co nejnižší hmotnosti.  V zahraničí létá poměrně hodně balónů této kategorie, protože pro ně není třeba žádné povolení. Tracker je zařízení, které dokáže vysílat udaje o poloze balónu pomocí GPS a vysílače (v našem případe 430MHz a RTTY a CW). Já jsem použil Picotracker v 3.1, který vychází z trackeru Radima OM2AMR z stsproject.net (stejný tracker letěl už 2x při Stratocahingu). Tracker obsahuje vysílač postavený na RFM22b pro pásmo 430 MHz, GPS uBlox MAX 7 a procesor ATMEGA328.  Celý systém je napájen z jedné AA baterie Energizer Lithium Ultimate a měniče na 1.8V. Klíčovou věcí celého trackeru je spotřeba. Podařilo se mi implementovat power save mode pro GPS  a tím ještě ušetřit docela dost energie. Anténa 1/4 GP a výkon byl nastaven na 20mW. Celý projekt je Open Source a je možné si ho stáhnout na GITHubu.


Tracker těsně před uzavřením
Start byl naplánován na sobotu 1.11.2014 z QTH OL7C na Blatenském vrchu. Počasí  přálo. Balón jsem nafoukl héliem na tah 2g. To by mělo zaručit, že vystoupá do 5-6 km a poletí v takzvaném floatu. Startovní hmotnost trackeru byl 29g. Start se podařil.

Dráha letu
Ihned po startu jsem začal dekódovat telemetrii. Po vystoupání začalo přijímacích stanic přibývat. Program pro příjem (DL-FLDIGI) odesílá data na internet a aktuální polohu balónu lze sledovat na spacenear.us/tracker. Balón přeletěl celou republiku a pak pokračoval směrem do Polska. Během letu ho přijímaly stanice z OK,OM,SP, DL. Po 39 hodinách a 24 minutách letu nad SP se tracker odmlčel. Baterie v tu dobu měl už jen 0.75V. Za tu dobu balón uletěl 832km. V následujících grafech je vidět kompletně průběh letu.

Napětí baterie a teplota

Výška, rychlost

Výška teplota
Pro příští start se chystám ještě snížit hmotnost a spotřebu trackeru.

Děkuji všem, kteří balón sledovali a hlavně Radimovi OM2AMR  z stsproject.net za cenné rady k celému projektu.

29. října 2014

Sledovaní balónů pomocí RTL-SDR na Linuxu

Po evropě se skoro každý víkend vypouštějí experimentální balóny. Provoz je možné sledovat na http://spacenear.us/tracker/. K jejich poslechu je třeba SSB přijímač v pásmu 430 MHz nebo dnes lehce dostupné RTL-SDR. Zde je jednoduchý návod na zprovoznění pod Linuxem. Já jsem to konkrétně instaloval na starším notebooku s Lubuntu 14.04.


Nejdříve je třeba rozchodit RTL-SDR:

apt-get install rtl-sdr

Do souboru /etc/modprobe.d/blacklist.conf přidáme řádek:

blacklist dvb_usb_rtl28xxu

Otestujeme pomocí:

rtl_test

Nainstalujem GQRX:

apt-get install gqrx-sdr


Příjem máme vyřešen. Pro dekódování potřebujeme DL-FLDIGI, cože je upravená verze  FLDIGI. Ta obsahuje komunikaci  s serverem a před nastavené parametry pro dekódování konkrétního letu.  Instalace DL-FLDIGI na Ubuntu je detailně popsána zde. Je třeba ho kompilovat ze zdrojových kódů.
Dále je třeba vyřešit propojení audio cesty z výstupu GQRX do vstupu DL-FLDIGI. Jedna z možností je použít propojovací kablík mezi vstup a výstup zvukovky. Na systémech se zvukovým systémem alsa by mělo jít vytvořit virtuální propojení pomocí alsa-loop. Na systémech s pulse audio lze požít pavucontrol.


Konfigurace DL-FLDIGI je detailně popsána zde (Slovensky nebo Anglicky).