Người học có thể tương tác với các đối tượng trong các file flash mô phỏng và tạo ra các hoạt hình animation trong khi thiết kế các thí nghiệm.. Và với sự hỗ trợ để mở file flash của hầu
Trang 1MỤC LỤC
PHẦN I MỞ ĐẦU 1
1 Lý do chọn đề tài 1
2 Mục đích nghiên cứu 2
3 Đối tượng nghiên cứu 2
4 Nhiệm vụ nghiên cứu 2
5 Phương pháp nghiên cứu 2
6 Cấu trúc khoá luận 2
7 Kế hoạch thực hiện 2
PHẦN II NỘI DUNG 3
Chương I Tìm hiểu phần mềm Adobe Flash CS5 3
1 Khởi động phần mềm 3
2 Giao diện chương trình và các panel 4
3 ActionScript trong Flash 5
4 Tạo chuyển động bằng cách viết mã lệnh 7
Chương II Ứng dụng Adobe Flash CS5 thiết kế một số thí nghiệm mô phỏng trong chương trình vật lý 12 11
1 Thí nghiệm về con lắc lò xo 11
2 Thí nghiệm về con lắc đơn 15
3 Con lắc dao động với hai nửa chu kì khác nhau (con lắc vướng đinh) 20
4 Con lắc vật lý 27
5 Dao động tắt dần 29
6 Thí nghiệm minh họa mối liên hệ giữa dao động điều hòa và chuyển động tròn đều 32
7 Thí nghiệm minh họa sóng dọc 34
8 Thí nghiệm minh họa sóng ngang 37
9 Thí nghiệm so sánh sóng dọc và sóng ngang 40
10 Thí nghiệm mô phỏng máy phát điện xoay chiều một pha, ba pha 43
11 Thí nghiệm về lăng kính 48
Trang 2PHẦN III: KẾT LUẬN VÀ KIẾN NGHỊ 51
1 KẾT LUẬN 52
2 KIẾN NGHỊ 53
TÀI LIỆU THAM KHẢO 54
Trang 3mà nguyên nhân là học sinh không thể hình dung được hiện tượng
Hiện nay có rất nhiều phần mềm có thể làm được điều đó song phần lớn các phần mềm mô phỏng hiện nay đều xuất phát từ nước ngoài nên nhiều phần không sát với chương trình của chúng ta và không phải hiện tượng vật lý nào cũng có, hơn nữa để thể hiện được đúng ý đồ của người dạy lại càng khó Để khắc phục những nhược điểm đó tôi đã tìm hiểu phần mềm Adobe Flash, là một phần mềm rất phù hợp cho việc mô phỏng các hiện tượng vật lý
Adobe Flash là phần mềm vẽ hình cho phép tạo hình ảnh động, có các hiệu ứng chuyển động và biến đổi, lập trình để tạo ra các hoạt động mô phỏng và tương tác một cách sinh động, hấp dẫn Flash là công cụ mạnh nhất có thể tạo ra hoạt hình lẫn
mô phỏng Người học có thể tương tác với các đối tượng trong các file flash mô phỏng và tạo ra các hoạt hình (animation) trong khi thiết kế các thí nghiệm File flash có thể kết hợp dễ dàng với Violet hoặc Powerpoint để tạo thành một bài giảng hoàn chỉnh Và với sự hỗ trợ để mở file flash của hầu hết các trình duyệt web hiện nay (Chrome, Firefox, Internet Explore…) học sinh có thể tự làm, tự thực hành, tự hoàn thành các yêu cầu của người thiết kế thiết kế thí nghiệm ảo bằng việc tương tác trực tiếp trên các đối tượng trong file flash mô phỏng Với phần mềm Adobe Flash, chúng ta có thể thiết kế các quá trình, cơ chế, thí nghiệm hoặc tất cả những yếu tố có tính động để dạy vật lý cho học sinh
Adobe Flash có rất nhiều phiên bản, phiên bản sau là phiên bản nâng cấp của phiên bản trước và có thêm nhiều cải tiến Luận văn của tôi sử dụng phiên bản CS5 là phiên bản xuất xưởng năm 2010 của Adobe Flash Và với việc lựa chọn
khóa luận “Ứng dụng Adobe Flash CS5 thiết kế một số thí nghiệm mô phỏng trong chương trình vật lý lớp 12” làm đối tượng nghiên cứu Tôi mong muốn
Trang 4học hỏi, nâng cao, khai thác ứng dụng công nghệ thông tin trong việc thiết kế các thí nghiệm mô phỏng hiện tượng vật lý nhằm hỗ trợ công tác giảng dạy sau này Hy vọng rằng luận văn sẽ là một tài liệu hữu ích cho các sinh viên ngành
Sư phạm vật lý cũng như các giáo viên giảng dạy ở trường THPT
4 Nhiệm vụ nghiên cứu
- Tìm hiểu cách sử dụng phần mềm Adobe Flash CS5
- Ứng dụng để thiết kế một số thí nghiệm mô phỏng các hiện tượng vật lý trong chương trình vật lý lớp 12
5 Phương pháp nghiên cứu
- Nghiên cứu tài liệu
- Thực hành thiết kế bằng phần mềm Adobe Flash CS5 trên máy tính
6 Cấu trúc khoá luận
- Phần I Mở Đầu
- Phần II Nội Dung
+ Chương I Giới thiệu phần mềm Adobe Flash CS5
+ Chương II Ứng dụng Adobe Flash CS5 thiết kế một số thí nghiệm mô phỏng các hiện tượng vật lý trong chương trình vật lý 12
Trang 5PHẦN II NỘI DUNG Chương I Tìm hiểu phần mềm Adobe Flash CS5
Hiện nay Adobe Flash đã trải qua rất nhiều phiên bản khác nhau Với phiên bản CS5, xuất xưởng năm 2010 Adobe đã bổ sung vào những tính năng mới giúp người dùng thiết kế và lập trịnh đơn giản hơn Với mục dích tận dụng được những nâng cấp của phiên sau tác giả của luận văn chọn phiên bản CS5 của Adobe Flash với tên đầy đủ là Adobe Flash Professional CS5 trên nền giao diện Window 8 để làm đối tượng nghiên cứu
Trong giao diện Star menu di
chuyển và chọn đến biểu tượng
của phần mềm Adobe Flash
Professional CS5 (hình 1) sau đó
click chuột trái hoặc nhấn Enter
trên bàn phím
Khởi động từ hộp thoại tìm kiếm:
Di chuyển con chỏ chuột
vào góc màn hình bên phải của
màn hình Deskop sau đó chọn
chức năng search trên window
8, viết vào hộp thoại tìm kiếm
Trang 6Sau khi cho ̣n xong, chương
trình màn hình Splash - màn hình
chào đón của Adobe Flash
Professional CS5 sẽ hiện ra (hình 3)
Sau khi quá trình khởi động
hoàn tất ta sẽ thấy có giao diện sau
đây (hình 4)
Flash CS5 cho phép làm việc
theo chế độ Tab Trên vùng thanh
menu, ở góc bên phải mục
Essentials cho phép ta chuyển đổi
qua lại giữa các cách bố trí giao
diện Có 6 chế độ bố trí giao diện:
Animator, Classic, Debug, Designer, Developer và Essentials Với mục đích của
khóa luận là tạo hoạt hình mô phỏng thí nghiệm nên tôi chọn chế độ Animator
và ActionScript 2.0
2 Giao diện chương trình và các panel
Stage (sân khấu)
Stage là vùng màn hình mà ta vẽ vào và là vùng trình diễn khi phim đã được
xuất bản
(hình 4) (hình 3)
(hình 5)
Trang 7Có thể cho gọi các bảng từ menu Window
Timeline (bảng tiến trình)
Bảng tiến trình tổ chức và điều kiển về vấn đề thời gian cho phim
Layers (các lớp)
Giúp tổ chức trật tự trên dưới của các đối tượng hình vẽ
Library (thư viện)
Là nơi lưu trữ các tài nguyên của đoạn phim
Properties (bảng thuộc tính)
Cho ta biết thuộc tính của đối tượng (màu nền, tốc độ hình ảnh, kích cỡ sân…), về hình ảnh (màu nét, màu nền, độ rộng nét ), các thông số trong các chuyển động (tốc độ nhanh dần hay chậm dần, quay theo chiều nào…)
3 ActionScript trong Flash
Mã lệnh ActionScript (code AS) là một dạng ngôn ngữ lập trình được xây dựng trong Flash ta cũng có thể hiểu AS như các câu lệnh đơn giản bằng tiếng Anh
* Thứ nhất, ta cần biết là AS sẽ được viết ở đâu? Có 3 nơi chúng ta có thể viết
AS, là:
- Trên Timeline, ở bất kỳ Frame nào
- Trên nút (button), có AS thì nút mới có ý nghĩa trong tương tác, nút chỉ hoạt
động khi có chuột hoặc bàn phím tác động lên nó mà thôi
- Trên đoạn phim (MovieClip), hoạt động của MC sẽ rất đa dạng nếu được
kèm theo AS, có thể xem đây là đối tượng chính mà ta thường xuyên viết AS
* Thứ hai, ta cần biết là viết AS như thế nào?
Trang 8Để viết AS thì rất đơn giản, ta chọn
nơi mà mình dự định sẽ viết AS (có thể
là một Frame trên TimeLine, một nút
hay một MC) Tiếp đó, mở bảng Actions
(phím tắt F9) rồi viết AS vào vùng trắng
bên phải Bên trái là các mã lệnh có sẵn
của Adobe Flash CS5, ta có thể tham
khảo nếu quên mã lệnh
* Thứ ba, ta sẽ tìm hiểu một vài AS cơ bản
- Cấu trúc cú pháp của một câu lệnh nói chung thì gồm 3 phần chính:
Key Word (Event) {Actions}; Tạm dịch là: Từ khóa (Sự kiện) {Hành động};
Một câu lệnh thường kết thúc bằng dấu (;) Nếu một câu nào đó nằm sau dấu
// thì nó được xem như lời chú thích cho phần code AS mà tác giả vừa viết nhằm giúp cho người đọc dễ hiểu, nó không được máy tính xem như mã lệnh và sẽ không thực hiện
- Đối với AS trên TimeLine: ra lệnh trực tiếp cho TimeLine thực hiện một
hành động nào đó tại một Frame mà ta mong muốn, không cần thông qua
từ khóa hay sự kiện nào cả Một số code thường dùng hành động trên TimeLine như:
gotoAndPlay (n); // khi tới frame này thì sẽ nhảy đến tự động chạy từ frame thứ n
gotoAndStop (m,n); // nhảy đến và dừng tại frame thứ n của phân cảnh thứ m // đây chỉ là 2 cách nhảy frame, mỗi câu lệnh đều có thể dùng 1 trong 2 cách nhảy như trên
play (); // chạy frame này
stop (); // dừng tại frame này
nextFrame (); // tiến tới frame tiếp theo
prevFrame (); // lùi lại frame trước đó
nextScene (); // tiến tới phân cảnh tiếp theo
prevScene (); // lùi lại phân cảnh trước đó
(hình 6)
Trang 9stopAllSounds (); // dừng chơi mọi âm thanh tại frame này
- Đối với AS trên nút ta thường có câu lệnh dạng: on (sự kiện) { hành động };
tức là sau sự kiện nào đó thì hành động trong {} sẽ được thực hiện Một số code dùng trên nút là:
on (press) {hành động giống trên TimeLine}; // press là sự kiện nhấn chuột lên nút
on (release) {hành động giống trên TimeLine}; // release là sự kiện nhấn chuột lên nút và sau khi thả chuột thì hành động sẽ được thực hiện
- Đối với AS trên MC ta thường có câu lệnh dạng: onClipEvent (sự kiện) {hành động};
Một số sự kiện dùng trên MC là: load (khi MC chạy), enterFrame (khi đoạn phim Flash bắt đầu chạy), mouseDown (nhấn chuột lên MC), mouseMove (di chuyển chuột), mouseUp (để chuột trên MC)…
Một số hành động trên MC như: starDrag (bắt đầu có thể nhấn và kéo MC), stopDrag (dừng nhấn và kéo MC), this._x (cho biết tọa độ x của MC), this._y (cho biết tọa độ y của MC), this._rotation = r (hành động quay MC một góc r nào đó), this._rotation += V (quay MC theo một tốc độ V nào đó), this._alpha =
a (thể hiện độ mờ của MC theo tỉ lệ a% với 0< a <100), this._visible = v (thể hiện độ trong suốt của MC theo tì lệ v nào đó, với 0<v<1) “this” trong các câu lệnh trên có thể thay bằng câu lệnh _parent.tên MC Ví dụ _parent.xedap._x ( cho biết tọa độ x của MC xe đạp)
Kết hợp sự kiện và hành động vào cú pháp ở trên ta sẽ có những đoạn code trên MC như ý
Ngoài ra ta cũng có thể điều khiển MC hay nút bằng cách viết mã lệnh trên TimeLine
- Một số lệnh khác như: lệnh If (điều kiện ràng buộc) {hành động}, lệnh
_root._xmouse hay _root._ymouse để lấy tọa độ chuột, một số phép toán …
4 Tạo chuyển động bằng cách viết mã lệnh
Ta sẽ chèn mã lệnh ActionScript vào MovieClip
Vậy đầu tiên ta cần tạo được các MovieClip
Trang 10Bước 1: chọn đối tượng (ví dụ
quả bóng)
Bước 2: nhấn F8 chọn loại
Type là MovieClip, chọn vị trí của
tâm MC (Registration), sau đó
chọn OK Đặt tên cho MovieClip
ở phần < Instance Name > trong Properties của MC
Tạo một MovieClip trắng (không có đối tượng): nhấn Ctrl + F8
4.1 Đối với chuyển động tròn
Nhập 1 trong 2 đoạn code sau vào MC
onClipEvent (enterFrame) {this._rotation += 10;} // khi chạy frame thì MC
sẽ chuyển động với tốc độ 10 theo chiều (+) (cùng chiều kim đồng hồ)
onClipEvent (enterFrame) {this._rotation -= 10;} // khi chạy frame thì MC sẽ
CĐ với tốc độ 10 theo chiều (-) (ngược chiều kim đồng hồ)
Chạy thử (Ctrl+Enter) để xem kết quả
Lưu ý: tâm của chuyển động này chính là tâm vùng thiết kế riêng của MC, ta
có thể tạo chuyển động tròn với những bán kính quỹ đạo khác nhau bằng cách chỉnh sửa khoảng cách của đối tượng trong MC tới tâm này
4.2 Đối với chuyển động thẳng đều
- Theo phương ngang thì dùng 1 trong 2 đoạn code sau:
onClipEvent (enterFrame) {this._x += 10;} // khi chạy frame thì MC sẽ CĐ với tốc độ 10 theo chiều (+) (trái qua phải)
onClipEvent (enterFrame) {this._x -=10;} //khi chạy frame thì MC sẽ CĐ với tốc độ 10 theo chiều (-) (phải qua trái)
- Theo phương đứng thì dùng 1 trong 2 đoạn code sau:
onCLipEvent (enterFrame) {this._y +=10;} //khi chạy frame thì MC sẽ CĐ với tốc độ 10 theo chiều (+) (trên xuống)
onClipEvent (enterFrame) {this._y -= 10;} // khi chạy frame thì MC sẽ CĐ với tốc độ 10 theo chiều (-) (dưới lên)
(hình 7)
Trang 11- Theo một phương bất kỳ, khi này ta cần biết hàm của y theo x : y = f(x) sau đó dùng đoạn code có cấu tạo như sau:
onClipEvent (enterFrame) { this._x += speed ; this._y =f (this._x) ;}
VD: khi muốn MC chuyển động theo phương 450 hướng lên, tức là y = f(x) = x, khi đó ta có đoạn code:
onClipEvent (enterFrame) { this._x += 10 ; this._y = this._x ;}
//khi chạy frame thì MC sẽ CĐ với tốc độ 10 theo chiều trái qua phải và hướng lên góc 450
4.3 Đối với chuyển động thẳng chậm dần đều
- Theo phương ngang thì trước tiên ta cần đặt vật ở vị trí ban đầu, sau đó cần xác định vị trí cuối cùng rồi dùng đoạn code sau:
onClipEvent (enterFrame) { this._x += (400 - this._x)/speed;}
// khi chạy frame thì MC bắt đầu thay đổi vị trí x bằng cách cộng thêm hiệu của 550 (đây chính là vị trí cuối ta chọn, (550,50)) và vị trí cũ rồi chia cho speed, phần cộng thêm giảm dần khi tọa độ cũ tăng nên CĐ là chậm dần
- Theo phương đứng ta cũng làm tương tự, cần vị trí đầu và vị trí cuối sau đó nhập
onClipEvent (enterFrame) { this._y += (400 - this._y)/speed;}
// khi chạy frame thì MC bắt đầu thay đổi vị trí y bằng cách cộng thêm hiệu của 400 (đây chính là vị trí cuối ta chọn, (50,400)) và vị trí cũ rồi chia cho speed, phần cộng thêm giảm dần khi tọa độ cũ tăng nên CĐ là chậm dần
- Theo một phương bất kỳ, khi này ta cần biết hàm của y theo x : y = f(x) sau đó
dùng đoạn code có cấu tạo như sau:
onClipEvent (load) {
this._x = vị trí đầu của x ; this._y = vị trí đầu của y; speed = tốc độ ;}
Trang 12onClipEvent (enterFrame) {
this._x += (vị trí cuối của x – this._x)/speed ; this._y = f (this._x);}
- Ta có thể tự tìm hiểu thêm để thay đổi hướng chuyển động của vật
4.4 Đối với chuyển động thẳng nhanh dần đều
Ta làm tương tự nhưng trên nguyên tắc là cộng thêm một lượng tăng dần thì
sẽ có chuyển động nhanh dần
4.5 Đối với các chuyển động bất kỳ khác
Ta chỉ cần nắm được nội dung liên hệ giữa x, y rồi cho chúng biểu diễn qua lại lẫn nhau là được
VD: chuyển động ném ngang có quỹ đạo là x = v.t, y = 1/2.g.t2 nên sẽ có đoạn code sau:
Trang 13Chương II Ứng dụng Adobe Flash CS5 thiết kế một số thí nghiệm mô phỏng trong chương trình vật lý 12
1 Thí nghiệm về con lắc lò xo
* Mục đích thí nghiệm: Khảo sát dao động của con lắc lò xo về mặt động lực học + Điều kiện để vật ở vị trí cân bằng (hay trạng thái của lò xo)
+ Chuyển động của vật khi kéo vật ra khỏi vị trí cân bằng
+ Các lực tác dụng lên vật, phương chiều độ lớn của chúng
* Những hạn chế khi sử dụng thí nghiệm truyền thống
+ Học sinh chỉ có thể quan sát được chuyển động của con lắc lò xo, nhưng rất khó để hình dung được sự thay đổi về hướng, độ lớn của các lực tác dụng, sự thay đổi của vận tốc, gia tốc trong quá trình dao động của con lắc
+ Rất khó để có thể dừng con lắc tại thời điểm bất kì để khảo sát con lắc về mặt động lực học
+ Để thay đổi được các giá trị của k và m, thì đồng nghĩa với việc phải thay lò
xo, và vật nặng, sẽ rất mất thời gian, và học sinh cũng rất khó để nhận ra sự thay đổi về tốc độ dao động của con lắc
* Ưu điểm của thí nghiệm flash
+ Trực quan và đễ sử dụng đối với giáo viên và học sinh
+ Giúp học sinh có thể hình dung được một cách dễ dàng nhất về chuyển động của con lắc lò xo, sự thay đổi về hướng và độ lớn của các lực tác dụng lên vật trong quá trình dao động của con lắc
+ Có thể tạm dừng con lắc tại một ví trí bất kì để quan sát hoặc khảo sát con lắc
+ Sau khi hoàn thành, giáo viên có thể đưa thí nghiệm này đến với từng học sinh,
để học sinh có thể tự làm thí nghiệm, tự học và tự thực hành, hoặc có thể bổ sung câu hỏi vào thí nghiệm để giao cho học sinh giống như một bài tập về nhà
Trang 14+ File flash có thể mở một cách dễ dàng bằng các trình duyệt web (Chrome, Filefox, IE…) hoặc cũng có thể kết hợp dễ dàng với Violet hoặc Powerpoint để tạo thành một bài giảng hoàn chỉnh
* Các bước thiết kế thí nghiệm
Bước 1: Tạo các Layer chứa MovieClip
(MC), đặt tên cho MC tương ứng (lưu ý
tên của MC viết liền không cách, không
dấu trong mục <Instance Name>), tạo
các thành phần cần có khác trên Stage
Tạo một MC trắng (nhấn Ctrl + F8) sau
đó vào Libraly để kéo ra Stage
Kết quả (hình 8)
Bước 2 Thực hiện viết các mã lệnh
- Bên trong MC trắng: Click đúp vào
MC (dấu chấm trắng trên Stage sau đó nhấn F9):
_parent.dung.onPress = function(){ ha = false;}//khi bấm nút tạm dừng
_parent.chay.onPress = function(){ ha = true;} //khi bấm nút play
// khi bấm và giữ vật để kéo vật đi
_parent.vat.onPress = function(){
_parent.vat.startDrag(true, x0 - A, y0, x0 + A, y0); ha = false; }
// khi thả vật ra
_parent.vat.onRelease = function(){ _parent.vat.stopDrag();
biendo = _parent.vat._x - x0;// biên độ được xác định
ha = true; _parent.bienam._visible = true; _parent.bienduong._visible = true;} _parent.vat.onReleaseOutside = function(){
_parent.vat.stopDrag(); biendo = _parent.vat._x - x0;
ha = true; _parent.bienam._visible = true; _parent.bienduong._visible = true;}
- Bên ngoài MC trắng, nhấn F9 rồi viết các câu lệnh sau:
//tại thời điểm ban đầu
onClipEvent (load){ t = 0; // thời gian ban đầu
(hình 8)
Trang 15x0 = _parent.vat._x; y0 = _parent.vat._y;// tọa độ ban đầu của vật
l0 = _parent.loxo._width; // độ dài ban đầu của lò xo
ym = _parent.khoiluong._y; // tọa độ y ban đầu của thanh nút thay đổi m, k hvat = _parent.vat._height; // độ cao ban đầu của vật
wvat = _parent.vat._width; // độ rộng ban đầu của vật
m = 0.4*(ym + 60 - _root.khoiluong._y)/10;// khối lượng của vật
k = 80*(ym + 60 - _root.docung._y)/10; // độ cứng của lò xo
w = Math.sqrt(k/m); // tần số góc
_parent.vat._height = 30 + 7*m;_parent.vat._width =30 + 7*m;//kích cỡ của vật _parent.trongluc._height = 40*m; //độ dài của véc-tơ trọng lực
_parent.phanluc._height = 40*m; // độ dài của véc-tơ phản lực
e = _parent.vat._x; // tọa độ x của vật khi bị kéo ra khỏi vị trí cân bằng
_parent.que._x = e; _parent.lucf._x = e; //tọa độ x của que nối, véc-tơ lực F
b = _parent.lucf._xscale = k*(x0 - e)/400;// chiều dài của véc-tơ lực F
_parent.chuf._x = e + b; // tọa độ x của chữ F dùng để chú thích lực F
_parent.giatoc._x = e; // tọa độ x của véc-tơ gia tốc
c = _parent.giatoc._xscale = b/m; // độ dài của véc-tơ gia tốc
_parent.chua._x = e + c; // tọa độ x của chữ a dùng để chú thích gia tốc
_parent.loxo._width = e - x0 + l0; // độ dãn của lò xo khi kéo vật ra khỏi vtcb _parent.trongluc._x = e;_parent.phanluc._x = e;//tọa độ x của trọng lực, phản lực _parent.bienam._x = x0 - biendo; _parent.bienduong._x = x0 + biendo; // vị trí xác định đâu là biên âm, đâu là biên dương theo tọa độ x
_parent.chua._visible = false; _parent.chuf._visible = false; //ẩn chữ a, chữ F
f = Math.abs(_parent.lucf._xscale); //giá trị tuyệt đối của độ dài lực F
j = _parent.lucf._visible; // thuộc tính ẩn/hiện của lực F
Trang 16if ( f > 1 ){ if ( j == true){ _parent.chua._visible = true; // hiển thị chữ a _parent.chuf._visible = true;}}// hiển thị chữ F
if(ha == true){ t = t + 0.01; // thời gian bắt đầu tăng với hệ số 0.01
//tiếp theo là thuộc tính của các đối tượng theo thời gian
e = _parent.vat._x = x0 + biendo*Math.cos(w*t); // tọa độ của vật
_parent.que._x = e; //tọa độ x của que nối vật với lò xo
_parent.vantoc._x = e; // tọa độ x của véc-tơ vận tốc
a = _parent.vantoc._xscale = 0 - biendo*Math.sin(w*t)*w/30;// độ dài của véc-tơ vận tốc
_parent.chuv._x = e + a; // tọa độ x của chữ v dùng để chú thích vận tốc _parent.chuv._visible = false;// ẩn chữa v
_parent.vantoc._visible = false; // ẩn véc-tơ vận tốc
if (f > 1){ if ( j == true){ _parent.vantoc._visible = true;//hiện véc-tơ vận tốc _parent.chuv._visible = true;}}// hiển thị chữ v
_parent.lucf._x = e; _parent.chuf._x = e + b;//tọa độ x của véc-tơ lực F và chữ F _parent.giatoc._x=e;_parent.chua._x=e + c;//tọa độ x của véc-tơ gia tốc và chữ a _parent.lido._x = e; //tọa độ x của mũi tên hai chiều đo khoảng cách li độ
_parent.loxo._width = e - x0 + l0; //độ dài của lò xo
_parent.trongluc._x = e; _parent.phanluc._x = e;
_parent.lido._visible = true; //ẩn mũi tên hai chiều đo khoảng cách li độ
d = _parent.lido._xscale = e - x0;//độ dài của li độ
if (d > 0){ _parent.xduong._visible = true; _parent.xam._visible = false;} //hiện x > 0 và ẩn x < 0
if (d < 0){ _parent.xduong._visible = false; _parent.xam._visible = true;}}} //ẩn x > 0 và hiện x < 0
- Tại Frame đầu tiên nhấn F9 và chèn mã lệnh sau:
g = false; h = true; trongluc._visible = g; phanluc._visible = g; lucf._visible = g; giatoc._visible = g; vantoc._visible = g; chuv._visible = g; xam._visible = g; xduong._visible = g; bienam._visible = g; bienduong._visible = g; lido._visible = g; cauhoi._visible = g; // các thuộc tính ẩn (false) và hiện (true) của các đối tượng
Trang 17Nhấn Ctrl + Enter để xem kết quả (hình 9)
2 Thí nghiệm về con lắc đơn
* Mục đích thí nghiệm: Khảo sát con lắc
đơn về mặt động lực học
+ Chuyển động của con lắc đơn
+ Các lực tác dụng lên con lắc trong khi dao động
* Những hạn chế khi sử dụng thí nghiệm truyền thống
+ Học sinh chỉ có thể quan sát được chuyển động của con lắc đơn, nhưng rất khó
để hình dung được sự thay đổi về hướng, độ lớn của các lực tác dụng, sự thay đổi của vận tốc, gia tốc trong quá trình dao động của con lắc
+ Rất khó để có thể dừng con lắc lại tại một thời điểm bất kì để khảo sát
* Ưu điểm của thí nghiệm flash
+ Trực quan và dễ sử dụng đối với giáo viên và học sinh
+ Giúp học sinh có thể hình dung được một cách dễ dàng nhất về chuyển động của con lắc đơn, sự thay đổi về hướng và độ lớn của các lực tác dụng lên quả nặng trong quá trình dao động của con lắc
+ Có thể tạm dừng con lắc tại một ví trí bất kì để quan sát hoặc khảo sát con lắc
về mặt động lực học
+ Sau khi hoàn thành, giáo viên có thể đưa thí nghiệm này đến với từng học sinh,
để học sinh có thể tự làm thí nghiệm, tự học và tự thực hành, hoặc có thể bổ sung câu hỏi vào thí nghiệm để giao cho học sinh giống như một bài tập về nhà
(hình 9)
Trang 18+ File flash có thể mở một cách dễ dàng bằng các trình duyệt web (Chrome, Filefox, IE…) hoặc cũng có thể kết hợp dễ dàng với Violet hoặc Powerpoint để tạo thành một bài giảng hoàn chỉnh
* Các bước thiết kế thí nghiệm
Bước 1: Tạo các MovieClip và đặt
tên cho MC tương ứng (lưu ý tên
của MC viết liền không cách, không
dấu trong mục < Instance Name >,
có thể tạo các MC trên các Layer
_parent.dung.onPress = function(){ha = false;}//khi bấm nút tạm dừng
_parent.batdaulai.onPress = function(){batdaulai=true;ha = true;}//khi bấm nút stop
- Bên ngoài MC trắng:
//tại thời điểm ban đầu
onClipEvent(load){
g = 9.8;//gia tốc trọng trường
A = -30;// biên độ góc, quay theo chiều ngược chiều kim đồng hồ
api = -A*Math.PI/180; //chuyển sang radian
(hình 10)
Trang 19l = _parent.soiday._height; //độ dài của sợ dây
_parent.soiday._rotation = A;// sợ dây quay theo góc A
x0 = _parent.vat._x; y0 = _parent.vat._y;// tọa độ ban đầu của vật nặng
// tọa độ của vật sau khi sợ dây quay một góc A
xvat = _parent.vat._x = x0 + l*Math.sin(api);
yvat = _parent.vat._y = y0 - l + l*Math.cos(api);
//tọa độ của các véc-tơ trọng lực, phản lực
_parent.trongluc._x = xvat; _parent.trongluc._y = yvat;
lp = _parent.trongluc._yscale;// độ dài của véc-tơ trọng lực
_parent.lucpn._x = xvat; _parent.lucpn._y = yvat;//tọa độ của véc-tơ thành phần theo phương pháp tuyến của trọng lực
_parent.lucpn._rotation = A; //véc-tơ thành phần pn quay với góc A
lpn = _parent.lucpn._yscale = lp*Math.cos(api); //độ dài của véc-tơ pn
_parent.chupn._x = xvat + 1.3*lpn*Math.sin(api);//tọa độ x của chữ pn
_parent.chupn._y = yvat + lpn*Math.cos(api) + 30;//tọa độ y của chữ pn //tương tự như thành phần trọng lực pn, ta cũng có các thuộc tính của thành phần trọng lực theo phương tiếp tuyến pt, lực căng dây T
_parent.lucpt._x = xvat; _parent.lucpt._y = yvat; _parent.lucpt._rotation = A; lpt = _parent.lucpt._xscale = lp*Math.sin(api);
_parent.chupt._x = xvat - 1.6*lpt*Math.cos(api);
_parent.chupt._y = yvat + lpt*Math.sin(api) + 15;
_parent.luct._x = xvat; _parent.luct._y = yvat; _parent.luct._rotation = A; _parent.luct._yscale = lpn; _parent.chut._x = xvat - 0.5*lpn*Math.sin(api); _parent.chut._y = yvat - lpn*Math.cos(api)/1.1;
// các đường kẻ nét đứt nối các thành phần trọng lực và trọng lực để luôn tạo thành một hình bình hành
_parent.noipn._x = xvat; _parent.noipn._y = yvat + lp +20;
_parent.noipn._rotation = A; _parent.noipn._xscale = lpt*1.7;
_parent.noipt._x = xvat; _parent.noipt._y = yvat + lp + 20;
_parent.noipt._rotation = A; _parent.noipt._yscale = lpn*1.85 ;
Trang 20t= 0; }// thời gian ban đầu bằng không
//bắt đầu chạy Frame
onClipEvent (enterFrame){
if (ha ==true){ t = t + 0.01;//thời gian tăng dần với hệ số 0.01
i = Math.cos(2*Math.PI*t);//biến i với các giá trị từ -1 đến 1
a = A*i; //biên độ góc thay đổi từ -a đến a theo thời gian
api = -A*i*Math.PI/180;// biên độ góc theo radian thay đổi từ -api đến api //tiếp theo là trong quá trình dao động theo thời gian, thì các thuộc tính của các đối tượng sẽ được xác định dựa vào các mối liên hệ giữa chúng
_parent.soiday._rotation = a;//sợi dây quay với biên độ góc thay đổi a
xvat=_parent.vat._x =x0 + l*Math.sin(api);//tọa độ x của vật theo thời gian yvat = _parent.vat._y = y0 - l + l*Math.cos(api);//tọa độ y của vật theo thời gian _parent.trongluc._x=xvat;_parent.trongluc._y=yvat;//tọa độ của véc-tơ trọng lực theo thời gian trong quá trình dao động
lp = _parent.trongluc._yscale;// độ dài của véc-tơ trọng lực theo thời gian _parent.lucpn._x = xvat; _parent.lucpn._y = yvat; //tọa độ của véc-tơ thành phần trọng lực pn theo thời gian
_parent.lucpn._rotation = a;// thành phần pn quay với biên độ góc thay đổi a lpn =_parent.lucpn._yscale =lp*Math.cos(api);//độ dài của véc-tơ thành phần
pn theo thời gian
//tọa độ của chữ pn theo thời gian
_parent.chupn._x = xvat + 1.3*lpn*Math.sin(api);
_parent.chupn._y = yvat + lpn*Math.cos(api) + 30;
//tương tự là tọa độ của thành phần pt theo thời gian
_parent.lucpt._x = xvat; _parent.lucpt._y = yvat;
_parent.lucpt._rotation = a;// thành phần pt quay với biên độ góc thay đổi a lpt = _parent.lucpt._xscale = lp*Math.sin(api); // độ dài của véc-tơ thành phần trọng lực pt theo thời gian
//tọa độ của chữ pt theo thời gian
_parent.chupt._x = xvat - 1.6*lpt*Math.cos(api);
Trang 21_parent.chupt._y = yvat + lpt*Math.sin(api) + 15;
//tọa độ của véc-tơ lực căng dây T theo thời gian
_parent.luct._x = xvat; _parent.luct._y = yvat;
_parent.luct._rotation = a;//véc-tơ lực T quay với biên độ góc thay đổi a _parent.luct._yscale = lpn; //độ dài của véc-tơ lực căng T theo thời gian //tọa độ của chữ t theo thời gian
_parent.chut._x = xvat - 0.5*lpn*Math.sin(api);
_parent.chut._y = yvat - lpn*Math.cos(api)/1.1;
//tương tự ta có các thuộc tính của các thành phần nối các thành phần trọng lực với nhau để luôn tạo ra một hình bình hành
_parent.noipn._x = xvat;_parent.noipn._y= yvat + lp +20; //tọa độ theo thời gian _parent.noipn._rotation = a;//quay với biên độ góc thay đổi a
_parent.noipn._xscale = lpt*1.7;//độ dài theo thời gian
_parent.noipt._x = xvat; _parent.noipt._y = yvat + lp + 20;
_parent.noipt._rotation = a; _parent.noipt._yscale = lpn*1.85 ;
_parent.goc._x = x0 - 25 + xvat/10;//tọa độ x của chữ α
with (_parent.quydao){lineTo(_parent.trongluc._x, _parent.trongluc._y);} //quỹ đạo của vật được xác định theo tọa độ của véc-tơ trọng lực, hoặc có thể chọn là tọa độ của vật
if (batdaulai == true){t = 0; _parent.quydao.clear();}}}
- Tại Frame đầu tiên:
//các thuộc tính ẩn hiện của các đối tượng khi bắt đầu chạy từ Frame đầu tiên trongluc._visible = false; luct._visible = false; lucpn._visible = false; lucpt._visible = false; noipn._visible = false; noipt._visible = false; chut._visible
= false; chupt._visible = false; chupn._visible = false;
- Trong nút hiển thị lực căng dây và trọng lực:
on(press){trongluc._visible = true; luct._visible = true; chut._visible = true;}
- Trong nút hiển thị các thành phần của trọng lực:
on(press){lucpt._visible = true; lucpn._visible = true; noipn._visible = true; noipt._visible = true; chupt._visible = true; chupn._visible = true;}
Trang 22- Trong nút ẩn:
on(press){
trongluc._visible = false; luct._visible = false;
lucpn._visible = false; lucpt._visible = false;
noipn._visible = false; noipt._visible = false;
chupt._visible = false; chupn._visible = false;
chut._visible = false}
Nhấn Ctrl + Enter để xem kết quả (hình 11):
3 Con lắc dao đô ̣ng với hai nửa chu kì khác nhau (con lắc vướng đinh)
* Mục đích thí nghiệm: Khảo sát con lắc vướng đinh về mặt động lực học
+ Chuyển động của con lắc vướng đinh
+ Các lực tác dụng lên con lắc trong khi dao động
* Những hạn chế khi sử dụng thí nghiệm truyền thống
+ Học sinh chỉ có thể quan sát được chuyển động của con lắc vướng đinh, nhưng rất khó để hình dung được sự thay đổi về hướng, độ lớn của các lực tác dụng, sự thay đổi của vận tốc, gia tốc trong quá trình dao động của con lắc
+ Rất khó để có thể dừng con lắc lại tại một thời điểm bất kì để khảo sát
* Ưu điểm của thí nghiệm flash
+ Trực quan và dễ sử dụng đối với giáo viên và học sinh
+ Giúp học sinh có thể hình dung được một cách dễ dàng nhất về chuyển động của con lắc vướng đinh, sự thay đổi về hướng và độ lớn của các lực tác dụng lên quả nặng trong quá trình dao động của con lắc
+ Có thể tạm dừng con lắc tại một ví trí bất kì để quan sát hoặc khảo sát con lắc
về mặt động lực học
+ Sau khi hoàn thành, giáo viên có thể đưa thí nghiệm này đến với từng học sinh, để học sinh có thể tự làm thí nghiệm, tự học và tự thực hành, hoặc có thể bổ sung câu hỏi vào thí nghiệm để giao cho học sinh giống như một bài tập về nhà
+ File flash có thể kết hợp dễ dàng với Violet hoặc Powerpoint để tạo thành một bài giảng hoàn chỉnh
(hình 11)
Trang 23Bước 1: Tạo các MovieClip và đặt tên
cho MC tương ứng (lưu ý tên của MC
viết liền không cách, không dấu trong
mục < Instance Name >, có thể tạo các
MC trên các Layer khác nhau), tạo các
thành phần cần có khác trên Stage
Tạo hai MC trắng (nhấn Ctrl + F8) sau
đó vào Libraly để kéo ra Stage, đặt tên
trong mục < Instance Name > lần lượt
là diem1 và diem2
Lưu ý: cần tạo ra 3 sợi dây có độ dài l0
< l2 < l1, 2 nút play đặt chồng lên nhau có tên là unpausebutton1 và unpausebutton2, nút pause đặt tên là pausebutton, nút stop đặt tên là nutsop, nút các thành phần của trọng lực đặt tên là nut2
Kết quả (hình 12)
Bước 2: Thực hiện viết các mã lệnh
- Tại Frame đầu tiên
t1 = 0; t2 = 0;//hai mốc thời gian ban đầu
x0 = vat._x; y0 = vat._y;//tọa độ ban đầu của quả nặng
xt = chut._x; yt = chut._y;//tọa độ ban đầu của chữ T (lực căng dây T)
dodail1 = l1._height; dodail2 = l2._height; //độ dài của l1, l2
lp = trongluc._yscale;//độ dài của véc-tơ trọng lực
//ẩn các đối tượng trọng lực, lực căng T, chữ T; thành phần lực Pt, Pn; chữ Pt, Pn; đường kẻ nối giữa trọng lực và các thành phần Pt, Pn; nút các thành phần của trọng lực; các chữ α, β; phần thông tin ghi nhớ, câu hỏi, nút play thứ hai trongluc._visible = false; luct._visible = false; chut._visible = false;
lucpt._visible = false; lucpn._visible = false; chupn._visible = false;
chupt._visible = false; noipt._visible = false; noipn._visible = false;
nut2._visible = false; gocb._visible = false; goca._visible = false;
ghinho._visible = false; cauhoi._visible = false; unpausebutton2._visible = false;
(hình 12)
Trang 24g = 9,8;// gia tốc trọng trường
w1 = 30*Math.sqrt(g/dodail1);//tần số góc trước khi vướng đinh
w2 = 30*Math.sqrt(g/dodail2);//tần số góc sau khi vướng đinh
//khai báo đối tượng batdau()
function batdau (){ t1 = 0; t2 = 0;}//mốc thời gian ban đầu
//khai báo đối tượng batdaulai ()
function batdaulai() { t1 = 0; t2 = 0;
vat._x = x0; vat._y = y0;//vật trở về vị trí ban đầu
//thực hiện các đối tượng
dao_dong1(); dao_dong2 (); tamdung ();
//ẩn các đối tượng sau
lucpt._visible = false; lucpn._visible = false; chupn._visible = false;
chupt._visible = false; noipt._visible = false; noipn._visible = false;
nut2._visible = false; gocb._visible = false; goca._visible = false;
chut._x = xt; chut._y = yt;//chữ T trở về vị trí ban đầu
goca._x = x0; gocb._x = x0;}// các chữ α, β có tọa độ x = x0
// khai báo đối tượng tamdung ()
function tamdung() { timing1 = false; timing2 = false;} //hai biến timing bằng false // khai báo đối tượng chaytiep1 ()
function chaytiep1() { timing1 = true;}//biến timing1 bằng true
//khai báo đối tượng chaytiep2 ()
function chaytiep2() { timing2 = true;}//biến timing2 bằng true
//khai báo đối tượng dao_dong1 () bao gồm
function dao_dong1() { unpausebutton1._visible = true;//hiện nút play thứ nhất unpausebutton2._visible = false;//ẩn nút play thứ hai
l1._visible = true;//hiện sợi dây 1 (sợi dây chưa bị vướng đinh)
l2._visible = false; l0._visible = false;//ẩn hai sợi dây l1, l0
i1 = Math.sin(w1*t1);//biến i1
a = 30;//biên độ góc của con lắc trước khi vướng đinh
api = a*i1*Math.PI/180;//biên độ góc theo radian
Trang 25//nếu i1 > 0 thì
if (i1 > 0){ //bắt đầu theo thời gian
//các đối tượng sau quay theo chiều ngược chiều kim đồng hồ
l1._rotation = -a*i1; luct._rotation = -a*i1; lucpn._rotation = -a*i1;
lucpt._rotation = -a*i1; noipn._rotation = -a*i1; noipt._rotation = -a*i1; //tọa độ của quả nặng theo thời gian khi con lắc chưa vướng đinh
vat._x = x0 + dodail1*Math.sin(api);
vat._y = y0 - dodail1 + dodail1*Math.cos(api);
lpn = lucpn._yscale = lp*Math.cos(api);//độ dài của thành phần lực Pn //tọa độ theo thời gian của chữ Pn
chupn._x = xvat + 1.3*lpn*Math.sin(api);
chupn._y = yvat + lpn*Math.cos(api) + 30;
luct._yscale = lpn;//độ dài của lực căng dây T theo thời gian
lpt = lucpt._xscale = lp*Math.sin(api);// độ dài của thành phần lực Pt //tọa độ theo thời gian của chữ Pt, chữ T
chupt._x = xvat - 1.6*lpt*Math.cos(api);
chupt._y = yvat + lpt*Math.sin(api) + 15;
chut._x = xvat - 0.5*lpn*Math.sin(api);
chut._y = yvat - lpn*Math.cos(api)/1.1;
noipn._xscale = lpt*1.7;//độ dài của đoạn nối trọng lực với thành phần lực Pn noipt._yscale =lpn*1.85;//độ dài của đoạn nối trọng lực với thành phần lực Pt goca._x = x0 + dodail1/6*Math.sin(api);}//tọa độ x của chữ α
//hoặc nếu i1 không lớn hơn 0 thì
else { l1._rotation = 0;//sợi dây l1 trở về vị trí ban đầu
batdau(); //thực hiện đối tượng batdau ()
timing1=false;timing2=true;}}//biến timing1, timing2 được gán bằng false, true //khai báo đối tượng dao_dong2 () bao gồm
function dao_dong2() { unpausebutton2._visible = true;//hiện nút play thứ hai unpausebutton1._visible = false;//ẩn nút play thứ nhất
l1._visible = false;//ẩn sợi dây l1
Trang 26l2._visible = true; l0._visible = true;//hiển thị sợi dây l2, l0
i2 = Math.sin(w2*t2);//biến i2
b = 40;//biên độ góc của con lắc sau khi vướng đinh
bpi = -b*i2*Math.PI/180;//biên độ góc theo radian
//nếu i2 > 0 thì
if (i2 > 0){ //bắt đầu theo thời gian
//các đối tượng sau quay theo chiều kim đồng hồ
l2._rotation = b*i2; luct._rotation = b*i2; lucpn._rotation = b*i2;
lucpt._rotation = b*i2; noipn._rotation = b*i2; noipt._rotation = b*i2; //tọa độ của quả nặng theo thời gian sau khi con lắc bị vướng đinh
vat._x = x0 + dodail2*Math.sin(bpi);
vat._y = y0 - dodail2 + dodail2*Math.cos(bpi);
lpn = lucpn._yscale = lp*Math.cos(bpi);//độ dài lực thành phần Pn
//tọa độ của chữ Pn theo thời gian
chupn._x = xvat + 1.3*lpn*Math.sin(bpi);
chupn._y = yvat + lpn*Math.cos(bpi) + 30;
luct._yscale = lpn;//độ dài của lực căng dây T theo thời gian
lpt = lucpt._xscale = lp*Math.sin(bpi);//độ dài lực thành phần Pt
//tọa độ của chữ Pt và chữ T theo thời gian
chupt._x = xvat - 1.6*lpt*Math.cos(bpi);
chupt._y = yvat + lpt*Math.sin(bpi) + 15;
chut._x = xvat - 0.5*lpn*Math.sin(bpi);
chut._y = yvat - lpn*Math.cos(bpi)/1.1;
noipn._xscale = lpt*1.7;//độ dài đoạn nối giữa trọng lực và thành phần Pn noipt._yscale = lpn*1.85;// độ dài đoạn nối giữa trọng lực và thành phần Pt gocb._x = x0 + dodail2/4*Math.sin(bpi);}//tọa độ x của chữ β
//hoặc nếu i2 không lớn hơn 0 thì
else { l2._rotation = 0; //l2 trở về vị trí ban đầu
batdau (); //thực hiện đối tượng batdau ()
timing2=false;timing1=true;}}//biến timng1, timing2 được gán bằng true, false
Trang 27//khi bắt đầu chạy Frame
onEnterFrame = function() {
//nếu timing1 bằng true
if (timing1) { t1 = t1 + 0.01;//thời gian t1 tăng theo hệ số 0.01
dao_dong1();//thực hiện đối tượng dap_dong1 ()
//hiển thị các thành phần sau
nut2._visible = true; goca._visible = true;
gocb._visible = false;}//ẩn chữ β
//nếu timing2 bằng true
if (timing2) { t2 = t2 + 0.01;//thời gian t2 tăng theo hệ số 0.01
dao_dong2(); //thực hiện đối tượng dao_dong2 ()
goca._visible = false;//ẩn chữ α
gocb._visible = true;}//hiện chữ β
xvat = vat._x; yvat = vat._y; //đặt biến xvat, yvat là tọa độ cảu quả nặng theo thời gian
//tọa độ của các đối tượng khác theo thời gian
trongluc._x=xvat; trongluc._y = yvat; luct._x = xvat; luct._y = yvat;
lucpt._x = xvat; lucpt._y = yvat; lucpn._x = xvat; lucpn._y = yvat;
noipn._x = xvat; noipn._y = yvat + lp +20; noipt._x = xvat;
noipt._y = yvat + lp + 20; clear();
lineStyle(1.500000, 65280, 100);//vẽ đường thẳng là đường vẽ góc α
moveTo(cham1._x, cham1._y);//nối từ
lineTo(goca._x, goca._y);//đến điểm
lineStyle(1.999000, 75280, 100);// vẽ đường thẳng là đường vẽ góc β
moveTo(cham2._x, cham2._y);//nối từ
lineTo(gocb._x, gocb._y);}//đến điểm
//khi bấm nút play thứ hai
unpausebutton2.onPress=function() { chaytiep2();}//thực hiện đối tượng chaytiep2 () //khi bấm nút pause
pausebutton.onPress=function() {tamdung();}//thực hiện đối tượng tamdung ()
Trang 28//khi bấm nút stop
nutstop.onPress= function() {batdaulai();//thực hiện đối tượng batdaulai () unpausebutton1._visible = true;//hiện nút play thứ nhất
unpausebutton2._visible = false;//ẩn nút play thứ hai
luct._rotation = 0;}//lực căng dây T xác định tại ví trí cân bằng
//khi bấm nút play thứ hai
unpausebutton1.onPress = function (){chaytiep1 ();}//thực hiện đối tượng này
- Trong nút chứa thông tin cần ghi nhớ
on (press){ ghinho._visible = !ghinho._visible ;}
- Trong nút chứa câu hỏi
on (press){ cauhoi._visible = !cauhoi._visible;}
Nhấn Ctrl + Enter xem kết quả (hình 13)
(hình 13)