馮彩儀,程敏熙,郭可馨
(華南師范大學 物理與電信工程學院,廣東 廣州 510006)
人教版高中物理選修(3-4)第11章第4節(jié)中“注射器噴墨法”獲取單擺振動圖像的演示實驗,在實際操作中存在諸多不足:1)注射器中的墨水不易控制而流動不止,容易把紙弄臟;2)勻速拖動白紙難以操作,導致圖像準確度欠佳;3)教師演示時難以實現(xiàn)描繪的同時讓全班學生看清圖像的形成過程[1-3];4)振動圖像不能方便地重復(fù)獲取. 基于此,筆者受光電鼠標追蹤技術(shù)[4]的啟發(fā),對該實驗裝置進行了改進.
實驗裝置包括硬件和軟件2部分:硬件部分如圖1所示,在懸掛的擺球中放置光電鼠標,其無線接收端接入電腦USB端口中,在擺球下方放置感光板(實際為鼠標墊)使光電鼠標得到感應(yīng). 當擺球擺動時,鼠標指針在電腦屏幕中移動,從而相當于把擺球的運動軌跡投影到屏幕上. 軟件部分是窗體應(yīng)用程序“Move”,用于描繪單擺振動圖像,并同時測量時間.
圖1 單擺振動演示儀
1) 準備材料:塑料空心吊球(直徑為7cm)、002型號指環(huán)光電鼠標、鼠標墊、保鮮膜、150g細沙、尼龍繩、泡沫、卡紙.
2) 把沙子裝入保鮮膜中制成沙包,均勻地填充塑料球,并在球的中部預(yù)留空間放置光電鼠標.
3) 在球的下方開孔,孔的大小稍大于光電鼠標的底面積.
4) 制作合適的空心柱狀泡沫,放入球的中部與沙子緊貼,用于固定光電鼠標,如圖2所示.
圖2 擺球
5) 用2根尼龍繩把做好的擺球懸掛起來形成雙線擺(雙線可保證擺球在豎直平面內(nèi)擺動).
6) 取長30cm、寬13cm、高5cm矩形泡沫板,根據(jù)擺球擺動的幅度,將泡沫板的一面做成弧面,并鋪上鼠標墊或其他感光材料,另外用卡紙對泡沫板進行簡單包裝,如圖3所示.
圖3 用卡紙包裝后的泡沫板
用C#編寫窗體應(yīng)用程序“Move”[5-7],實現(xiàn)的功能主要包括:
1)畫圖功能,任意按下鼠標時,可畫任意曲線.
2)計時功能,在軟件界面右下角同步顯示描繪單擺振動圖像所用的時間,從而得到擺球振動1次所用時間即周期.
3)在軟件上模擬勻速拖動紙板過程的功能,添加時間軸,即鼠標指針按一定速度從左往右平移像素點,設(shè)置快捷鍵“S”和“P”,分別控制時間軸的開啟與關(guān)閉.
4)擦除功能,設(shè)置快捷鍵“E”,實現(xiàn)擦除已畫曲線的功能.
以下是程序代碼的主體部分:
namespaceMove
{
publicpartialclassForm1:Form
{
privateboolCanMove=false;
publicPointstartpt,endpt;
[DllImport(“user32”)]
privatestaticexternintmouse_event(intdwFlags,intdx,intdy,intcButtons,intdwExtraInfo);
privateconstintMOUSEEVENTF_MOVE= 0x0001;
privateconstintMOUSEEVENTF_ABSOLUTE=0x8000;
privateintt= 0;
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_MouseDown(objectsender,MouseEventArgse)
{
This.CanMove=true;
Startpt.X=e.X;
Startpt.Y=e.Y;
}
privatevoidForm1_MouseMove(objectsender,MouseEventArgse)
{
if(this.CanMove==true)
{
Graphicsg=this.CreateGraphics();
Endpt.X=e.X;
Endpt.Y=e.Y;
g.DrawLine(newPen(Color.Red, 3),startpt,endpt);
startpt=endpt;
}
}
privatevoidForm1_MouseUp(objectsender,MouseEventArgse)
{
Graphicsg=this.CreateGraphics();
g.DrawLine(newPen(Color.Red,1),this.startpt,newPoint(e.X,e.Y));
this.CanMove=false;
}
privatevoidForm1_Load(objectsender,EventArgse)
{
This.timer1.Enabled=false;
This.timer1 =this.timer1 =newSystem.Windows.Forms.Timer();
This.timer1.Interval= 20;
This.timer1.Tick+=newEventHandler(timer1_Tick);
}
privatevoidtimer1_Tick(objectsender,EventArgse)
{
intwidth=Screen.PrimaryScreen.Bounds.Width;
intheight=Screen.PrimaryScreen.Bounds.Height;
intoffsetX= (MousePosition.X+ 3) * 65535 /width;
intoffsetY= (MousePosition.Y+ 1) * 65535 /height;
mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE,offsetX,offsetY, 0, 0);
}
}
}
1)演示前,把光電鼠標的無線接收端接入電腦USB端口中,打開開關(guān)并放入擺球中,把感光板放到擺球的下方,調(diào)節(jié)兩者距離在2mm范圍內(nèi),但不接觸.
2)調(diào)節(jié)光電鼠標在擺球中的位置以達到效果:擺球在豎直平面內(nèi)擺動時,鼠標指針在計算機屏幕中的上下移動.
3)在計算機中選擇“控制面板-個性化-更改鼠標指針-指針選項”降低鼠標指針移動的精確度,打開“Move”軟件的界面,拖動計算機鼠標使指針移到界面左側(cè)(合適位置).
4)小角度拉開擺球并靜止釋放,觀察到鼠標指針在屏幕中上下移動.
5)按下快捷鍵“S”以啟動時間軸,指針的勻速右移與上下移動相結(jié)合,同時按下計算機鼠標左鍵進行畫圖,擺球振動一定次數(shù)后,按下快捷鍵“P”以結(jié)束指針右移,同時松開鼠標左鍵,結(jié)束畫圖,得到單擺振動圖像如圖4所示.可清晰看到,圖中的振動圖像為正弦函數(shù)圖像,振動9個周期,界面右下角顯示時間為11.75s,從而得到單擺振動周期為1.31s.
圖4 單擺振動圖像
6)如果操作過程中由于外界干擾使感光出錯導致畫出的圖線欠佳,可以按下快捷鍵“E”擦除已畫的圖線,重新進行畫圖.
該實驗儀器的制作取材容易,操作簡單,方便攜帶. 光學感應(yīng)器高精度的光學引擎使得描繪的振動圖像準確度更高,而且對描繪的振動圖像進行計時,容易得到較為準確的周期,同時可以方便地探究擺長與周期的關(guān)系.
參考文獻:
[1] 尹高生. 描繪單擺振動圖像的新實驗裝置[J]. 物理教師,2011,32(3):29.
[2] 江陽,徐勝. 環(huán)保節(jié)約型單擺振動圖像演示儀[J]. 物理教學探討,2011,29(10):33-34.
[3] 王維民,李金. 單擺振動圖像演示器的改進[J]. 教學儀器與實驗,2006(6):44-45.
[4] 張曉斌,佐斌,薛孟杰,等. 基于鼠標追蹤技術(shù)的個體建構(gòu)過程實時測量[J]. 心理科學進展,2012,20(5):770-781.
[5] 顧洪,李慧. C#語言程序設(shè)計[M]. 南京:東南大學出版社,2009:171-182.
[6] 范盛榮. Visual C#2008控件使用范例詳解[M]. 北京:清華大學出版社,2009:10.
[7] 田原,李素若,文斌. C#程序設(shè)計[M]. 北京:北京交通大學出版社,2005:252-261.
[8] 王占平. 精確測量單擺周期[J]. 物理實驗,2006,26(10):27-28,30.