低成本、超簡單之DVB-T數位電視天線製作
文∕趙英傑
拜讀Mobile01網站上的DIY數位電視天線教學之後,我也趁著中秋假期DIY了一個雙菱形天線。製作原理和Mobile01的大大相同,只是計算數據不太一樣。
數位電視天線
天線的作用是捕捉特定頻率的電波。當天線的長度等於電波的波長時,天線將和電波達成共振,收訊效果(感度)最好。
不過,天線的長度通常不取全波長,而是波長的一半或四分之一等數值,以便減少天線的體積。例如,在有線電視普及之前,家家戶戶樓頂的電視天線(亦即:魚骨天線),就是採半波長。
然而,每個電視頻道的發射頻率∕波長都不同,天線的長度理當隨之改變。那麼,收視10個頻道就要準備10支長短不一的天線,毫無實用性可言。
計算頻率與波長
在實作上,天線的長度通常取收視頻率範圍的中間值。以台灣的DVB-T數位頻道為例,根據「DTVC 社團法人台灣數位電視協會」的頻率表數據,最低頻率為530MHz,最高則是596MHz,因此,中間的頻率值為566MHz:
電磁波的速度等於光速,每秒29.97925萬公里,大約是30萬公里∕秒,在這個速度下,每秒約可繞行地球七圈半。電波在真空中的波長計算公式為「光速(Km)除以頻率(MHz)」:
天線本體需用導電性良好的金屬製作,例如,銅和鋁。不建議使用衣架,因為衣架的金屬含鐵,阻抗較高且容易生鏽。
速度係數(velocity factor)或波長短縮率(wavelength shortening rate)的考量
電波在空氣或金屬導體的傳播速度較慢,在計算波長時,要把這個因素考量進去。電磁波在實際環境中的傳播速度,和真空中的傳播速度的比例,稱為速度係數(velocity factor)或者「速度因子」,在使用銅線的場合,速度係數的值通常採0.95或0.97。
有些網友引用的係數是「短縮率」,此為電磁波在實際環境中傳播的波長,和在真空中傳播的波長的比值,稱為波長短縮率(wavelength shortening rate)。兩者的道理相通。
自製雙菱形天線(double-quad antenna)
本文自製的天線形式稱為雙菱形天線,採四分之一波長,因此天線的單邊長度計算方式如下:
雙菱形天線的組裝圖如下:
我們住家附近的五金行販賣的單芯銅線(就是一般水電用的電線),有1.6mm和2.0mm兩種規格,我選用是1.6mm,一米新台幣13元,我買1.5米。同軸電纜線是N年前接第四台時的剩餘線材,外加一個5C電纜接頭,成本只要25元。
底下是折好菱形(兩個正方形),再與同軸電纜線焊接後的樣子:
同軸電纜內部的接地,採用鍍鋅銅或鋼質編織網,不容易焊接。我是先剪一段銅線將它插入編織網後,再焊接到天線。下圖是最後做絕緣包覆的樣子:
整個天線並不大:
後記
DIY,有時候是為了享受自己動手做的過程,最好還可以滿足特定的需求,就像組合傢俱和改造電子小玩意一樣。做好數位天線並興沖沖地測試收視之後,我開始懷疑製作這天線的目的,好像只是為了驗證天線的製作原理無誤。
數位電視節目的內容,有線電視也看得到;有線電視台看不到的公共電視HiHD高畫質節目,我們家也收不到(因為HiHD試播訊號轉播站的第一期工程,集中在台灣北部和南部)。
看樣子,想欣賞高畫質電視節目,除了藍光影片之外,略過衛星(裝機費和月租費都不便宜)和有線電視,直接走向網路雲端比較實際。
延伸閱讀
老師請問如何讓在網頁中開啟的swf變成全螢幕化?
我做一個按鈕去觸發fscommand(“fullscreen”,”true”);
但是依然無法讓網頁中的swf變成全螢幕化>
fscommand只能用於單獨運行的Flash Player,對網頁的外掛程式版無效,請參閱「Flash的全螢幕播放設定方式」。
good luck!
jeffrey
謝謝老師的指導,這就來試試:grin:
你女兒好正阿,哈!是像爸爸還是像媽媽?
老師我依照你的教學可以成功為全螢幕了,只是當全螢幕後我原本設計在swf裡面的鍵盤事件,在全螢幕的狀態下完全無法控制,請問老師有可在全螢幕後還能正常控制鍵盤事件的方法嗎?
我做了一個利用鍵盤事件控制影片片段移動的遊戲,如果全螢幕後還能操控鍵盤那更棒^_^
因為安全因素,Flash Player 9無法在處於全螢幕狀態下偵聽鍵盤事件,但.exe獨立播放器版和AIR應用程式不在此限。
我記得Flash Player 10放寬這項限制,允許Tab、空白鍵和方向鍵可以用,請再測試看看。
have fun!
jeffrey
謝謝老師耐心的指導,如果沒老師的解說還真不知道有細分成這樣,我全螢幕化後可用Tab、空白鍵和方向鍵,來控制遊戲裡影片片段的動作了,不過覺得有些可惜的說,就只有這幾個鍵能使用:shock:
很疑惑為何Tab、空白鍵和方向鍵,就沒有安全性的問題,其他鍵就有安全性的問題,還不是一樣都是鍵盤上的鑑?
因為在全螢幕模式之下,使用者看不到原有的瀏覽器視窗。
網頁設計者可以在Flash內模仿任何網頁(如:銀行)的設計,以及瀏覽器的外型並加上網路銀行的網址,讓用戶誤以為真的在瀏覽某個銀行,放心地輸入帳號和密碼…
Adobe公司設想的還真週到,有些人真的很壞,不把技術用在好的地方ˇˇ
我在做格鬥類的小遊戲,若是在全螢幕狀態下能再多5個鑑可用就好了:cry:
不然只能用Tab和空白鍵做成重手和重腳,
以下這些連結的小遊戲,是對岸朋友用AS2.0寫出來的格鬥遊戲,
真是做的太棒了,
http://www.more.game.tw/games_15531.html
http://www.more.game.tw/games_15649.html
在老師身上所學,希望我有一天我也能用AS3.0做出和他們並駕齊驅甚至超越他們的作品:eek:
老師請問AS3.0的KEY_DOWN鍵盤事件,當按下並且持續按住鍵盤鍵不放後它會持續自動點擊,有方法能關閉它的自動點擊嗎?或有能增減它自動點擊頻率的方法嗎?
我做了影片片段讓它按下鍵盤後,向影片片段的x或y移動,我為了讓影片片段的移動看起來更流暢,x或y值設定越小,影片片段的移動看起來就不會鈍鈍的,假設我設為x+0.1,可是我計算按住鍵盤不放自動點擊的頻率大概只有每秒30下,這樣影片片段相對的移動速度只有每秒x+3的距離而已,我可以用計時器去控制影片片段的x或y軸達到我自行需要的移動速度,可是KEY_DOWN的自動點擊卻成了我設計上的困擾:cry:
如果你希望KEY_DOWN事件每次只觸發一次,可以在它的事件處理程式中加上一個布林值判斷;每次按下按鍵時將此值設為true,放開時(KEY_UP事件),再設成false。
have fun!
jeffrey
老師現在我的問題是出在KEY_DOWN事件,按住不放的情況下,它會自動點擊,舉例把影片片段my_mc放在x軸0的地方,
function ss(event:KeyboardEvent) {
if (event.keyCode == 37) {
my_mc.x = my_mc.x+1;
}
stage.addEventListener(KeyboardEvent.KEY_DOWN,xx);
當按住A鑑不放它會自動以大約每秒震盪30下,也就是等於mc.x+30,能自動點擊是很好,可是他的點擊頻率不合乎我的需求.
我把它改成用計數器去移動影片片段,如下式.
可是它的自動點擊卻變成自動累加my_mc.x+1,導致my_mc的移動變成越來越快,而不是固定的移動速度:cry:
function xx(event:KeyboardEvent) {
if (event.keyCode==37) {
var clockTimer:Timer = new Timer(1,1);
function xx1(event:TimerEvent):void {
my_mc.x = my_mc.x+1;
}
clockTimer.addEventListener(TimerEvent.TIMER, xx1);
clockTimer.start();
stage.addEventListener(KeyboardEvent.KEY_DOWN,xx);
如果增加影片片段的移動像素,然後讓KEY_DOWN事件,按住不放靠它的自動點擊來移動影片片段也是可以,舉例影片片段每秒向x軸方向+10,但是這樣看起來畫面不流暢頓頓的.
這個地方改這樣就會累加,變成非固定移動速度了.
var clockTimer:Timer = new Timer(1,50);
你可以用一個enterFrame事件迴圈掌控物件的x, y增量,當用戶放開按鍵時,將增量設置成0。例如:
var speed:int = 0;
var keyPressed:Boolean;
var keyCode:int;
addEventListener(Event.ENTER_FRAME, loop);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
function loop(e:Event):void
{
getKey();
my_mc.x += speed;
}
function keyDownHandler(e:KeyboardEvent):void
{
keyPressed = true;
keyCode = e.keyCode;
}
function keyUpHandler(e:KeyboardEvent):void
{
keyPressed = false;
keyCode = undefined;
}
function getKey()
{
if (keyPressed)
{
switch (keyCode)
{
case 65 : // A鍵,Keyboard.A
speed = -5;
break;
case 68 : // D鍵,Keyboard.D
speed = 5;
break;
}
}
else
{
// 避免物件不停移動
speed = 0;
}
}
老師我的需求是當按下鍵盤又放開的時候,my_mc可以自動從x軸=0像素的地方往右連續移動50個像素,就是讓影片片段看起來有滑行的樣子,可是當按下鍵盤不放的時候,my_mc又可以持續往右移動,並且要可以調整自己要的移動速度,希望老師能在po一段範例程式給我學習,不好意思一直麻煩你:oops:
要讓物件有加速∕減速的滑行效果,可以運用Flash內建的Tween類別,或者TweenLite類別(推薦)來達成;另外,你也可以考慮使用遊戲引擎(game engine)來開發遊戲,像是flixel, PushButton和FlashPunk,都是挺受歡迎的2D遊戲引擎。
have fun!
jeffrey
老師請問這些2D遊戲引擎都是不同於Adobe Flash Action Script的flash Action Script編譯器嗎?
老師AS2.0我寫如下的程式碼,可以很輕易的控制影片片段,可是AS3.0不知道該怎麼寫:cry:我在adobe網站看到的Tween類別教學很模糊,可不可以麻煩老師指導一下.
import mx.transitions.Tween;
import mx.transitions.easing.*;
new Tween(mc, “_y”, Regular.easeOut, mc._y, 300, 2, true);
Tween的問題我OK了太感謝老師了:smile:
恭喜 😉
趙老師你好,打擾…
今天我用 soundTransform 物件來控制聲音大小的時候,有個問題…
一般我們會用以下方法來取出SoundTransform物件
var myST:SoundTransform = SoundChannel物件.soundTransform
調整完音量後再指定回SoundChannel物件
myST.volume = 0.5;
SoundChannel物件.soundTransform = myST //為什麼要加這行?難道soundTransform不是參照變數?
我不懂的是最後一行,物件照裡說是參照類型,為何還要指定回去給SoundChannel物件
而且我如果直接拿這個屬性來調整音量的話,如下:
(SoundChannel物件.soundTransform).volume = 0.5
以上不會出錯,但是卻沒有作用?
因為以上看起來,soundTransform是一個實體變數了,這樣的類別,如果我們要自己寫,要怎麼宣告呢?還是我漏了什麼關念?
謝謝!
我猜是SoundChannel物件的問題,不是SoundTransform的問題…
不過還是請教您一下,我是不是有什麼地方觀念上有問題
這就像用一個變數來儲存影片片段的x軸座標:
var dx:Number =my_mc.x;
稍後改變my_mc的x座標,dx值並不會跟著改變一樣;它只是暫存了某個物件當時的狀態。
thanks,
jeffrey
老師我想請您幫個大忙,我很想買這本書http://www.books.com.tw/exep/prod/booksfile.php?item=0010388140
可是這本書市面上已經買不到了,老師是否有辦法提供我能買到這本書的管道?
不好意思我知道這與老師出版的書籍無關,但是這本書對於用Flash ActionScript 3.0製作遊戲,好像有比較貼近進階製作flash遊戲設計的教學,所以我想購得它來提升自己用ActionScript 3.0製作flash遊戲的能力.
不好意思再次打擾老師您:smile:
我下午幫你問一下上奇出版社的圖書經銷人員。
thanks,
jeffrey
嗯嗯!超級感謝老師:eek:
拍謝,他們目前沒有庫存。
thanks,
jeffrey
非常謝謝老師百忙之中還抽空幫我問上奇出版社:grin:
老師請問如果不用flasf專用的視訊伺服器應用程式,只用一般的APPServ伺服器應用程式,來做flash視訊的傳送和接收是否可行?
你可以採用開放原始碼的Red5伺服器。
have fun!
jeffrey
謝謝老師
可是這個Red5伺服器,對我來說好像有點難度,而且也沒有相關的中文教學:sad:
所以其實只要有看數位電視的軟體加 DIY 天線就可以看了嗎!?
不,應該說你的電腦或電視要有內建數位電視接收器(調諧器)才行。
thanks,
jeffrey
啊…所以電腦還是必須要有 usb 電視棒
了解!!
老師請問用AS3.0要如何做出兩台電腦間,伺服端和客戶端的即時聊天通訊?
想麻煩老師示範一段程式碼。
你的伺服器端需要佈署XML Socket Server,通常是用Java語言寫成的,這裡有個用Python語言寫的XML Socket server與ActionScript 3.0的例子:
Python XML Socket: how to create a chat with Adobe Flex, AIR and Python
這個則是用PHP 5寫的Socket Server,以及ActionScript 2.0的例子:
PHP 5 Sockets with Flash 8
have fun!
jeffrey
請問版主~
菱形天線和同軸電纜連接的地方,
強調 上、下不可短路。
小弟有一個疑問..
就是電纜中間的銅線和編織網
跟菱形天線整個連接完成後,不也是短路了嗎?
謝謝~
是的,但整個迴路的長度不一樣,所以才要依照波長設計。
have fun!
jeffrey
596Mhz – 530Mhz = 66Mhz
66/2 = 33Mhz
533 + 33 = 566Mhz
想請問為什麼是用533去加呢?
是不是應該要用530才對!!
wow~這兩年來,你是第一個發現我算錯的~
thanks!
jeffrey
感恩
基本數學 ,正確為 (530MHZ +596MHZ)/2=563MHZ
「本文自製的天線形式稱為雙菱形天線,採四分之一波長」
請問可以再縮小一半,八分之一或十六分之一嗎?
我不是很懂只是照做,但體積還是問題,所以想是否能再縮小。
凡撥空回復
感恩。
或許你可以嘗試製作碎形天線(fractal antenna),再麻煩查閱相關關鍵字。
thanks,
jeffrey
你好
想請教一下接收數位訊號之後交由晶片解碼,那晶片好壞是否影響輸出的品質呢?如色差、色彩、音效等等
Thanks
hi dancy:
按照常理,一定有影響。就像數位音源的DAC解碼晶片,CM108和PCM1794是兩個不同等級的IC,加上電容和其他元件的用料以及濾波電路的設計…等等,都會影響音質。話說回來,因為我家沒有百萬等級的音響,所以我不是很在意 😛
自從使用有線電視公司提供的數位機上盒,數位高畫質節目都是透過機上盒觀看,也就沒有使用這個DIY數位天線了。
thanks,
jeffrey
請問一下,手機想要回傳並暫存電腦所printf的值,然後顯示在手機上,需要用到那些指令呢?
拍謝……這個問題麻煩請學校老師解答。
thanks,
jeffrey