Tag Archives: วิทย์ม.ต้น

วิทย์ม.ต้น: ฝึกไพธอน, แก้ปัญหาด้วยตัวเองด้วยวิดีโอและ Tracker

วันนี้เราคุยกันเรื่องพวกนี้ครับ:

1. รุ่นพี่ฝึกไพธอนกันต่อ เขียนโปรแกรมแก้ปัญหาเล็กๆหลายๆอัน มีเฉลยการบ้านจากสัปดาห์ที่แล้ว หน้าตาประมาณนี้ (โปรแกรมเบื้องต้น ไม่มี error handling เพื่อให้เข้าใจง่าย)

#เขียนโปรแกรมรับจำนวนตัวเลขที่จะป้อน แล้วรับตัวเลขไปเรื่อยๆเท่ากับจำนวนครั้งนั้น  แล้วโปรแกรมจะคำนวณค่ามากที่สุด น้อยที่สุด (ใช้ for และ list)

count = int(input("ใส่จำนวนตัวเลขที่จะป้อน: "))
numbers = []
for i in range(count):
    x = float(input("ใ่ส่ตัวเลขตัวที่ " + str(i+1) + " จากทั้งหมด " + str(count) + " ตัว: "))
    numbers.append(x)

print("ตัวเลขที่มากที่สุดคือ " + str(max(numbers)))
print("ตัวเลขที่น้อยที่สุดคือ " + str(min(numbers)))
#เขียนโปรแกรมรับจำนวนตัวเลขที่จะป้อน แล้วรับตัวเลขไปเรื่อยๆเท่ากับจำนวนนั้น  แล้วโปรแกรมจะเรียงลำดับตัวเลขเหล่านั้นจากมากไปน้อย
#และน้อยไปมาก (ใช้ for และ list)

count = int(input("ใส่จำนวนตัวเลขที่จะป้อน: "))
numbers = []
for i in range(count):
    x = float(input("ใ่ส่ตัวเลขตัวที่ " + str(i+1) + " จากทั้งหมด " + str(count) + " ตัว: "))
    numbers.append(x)


print("ตัวเลขที่ใส่เข้ามาคือ " + str(numbers))
print("ตัวเลขเรียงจากน้อยไปมากคือ " + str(sorted(numbers)))
print("ตัวเลขเรียงจากมากไปน้อยคือ " + str(sorted(numbers, reverse=True) ))

2. รุ่นพี่มีการบ้านไปเขียนโปรแกรมสองข้อนี้:

–หาจำนวนวันที่เราเกิดมา โดยใช้ฟังก์ชั่นเกี่ยวกับวันเวลาของไพธอน
–สร้างโปรแกรมให้เราใส่วันที่เข้าไป แล้วคำนวณว่าวันนั้นห่างจากปัจจุบันเป็นเวลาเท่าไร

3. รุ่นน้องผมให้แก้ปัญหาสองข้อโดยผมไม่บอกว่าต้องทำอย่างไร ให้เด็กๆร่วมกันคิดและทำเอง ข้อแรกคือให้หาความเร็วว่ามอเตอร์โฮโมโพลาร์เหล่านี้หมุนเร็วแค่ไหน:

คลิปโฮโมโพลาร์มอเตอร์เส้นลวดที่เล่นกันครับ (เมื่อวานเด็กๆม.ต้นเรียนรู้เรื่อง Lorentz force (แรงลอเรนซ์),…

Posted by Pongskorn Saipetch on Wednesday, November 25, 2020

เด็กๆหาวิธีโหลดวิดีโอจากเฟซบุ๊ค เอาวิดีโอใส่โปรแกรม Tracker แล้วดูว่าการหมุนแต่ละรอบต้องใช้ภาพกี่เฟรม เมื่อเทียบกับจำนวนเฟรมต่อวินาทีของวิดีโอก็สามารถคำนวณความเร็วการหมุนได้ เด็กบางคนใช้ Tracker จับตำแหน่งวัตถุแล้วพล็อตกราฟด้วย

ข้อสองคือผมให้หาว่าแปรงลบกระดานตกจากความสูงค่าหนึ่งใช้เวลาเท่าไรจะตกถึงพื้น เด็กๆก็หาทางถ่ายวิดีโอ แชร์คลิปกัน แล้วใส่ใน Tracker วัดจำนวนเฟรมระหว่างตอนเริ่มปล่อยและตอนกระทบพื้น และคำนวณเป็นเวลาออกมา (ซึ่งได้เท่ากับเวลาที่คำนวณจากทฤษฎีเป๊ะมากๆ)

4. บรรยากาศเป็นดังนี้ครับ:

วันนี้ผมให้เด็กๆหาทางแก้ปัญหาเองโดยผมไม่บอกว่าต้องทำอะไรบ้าง…

Posted by Pongskorn Saipetch on Thursday, November 26, 2020

วิทย์ม.ต้น: แรงจากแม่เหล็กและไฟฟ้า (Lorentz force), หัดวัดด้วยมัลติมิเตอร์, ทำโฮโมโพลาร์มอเตอร์เส้นลวด

วันนี้เราคุยกันเรื่องเหล่านี้ครับ:

1. ผมเล่าให้เด็กๆฟังว่าทำไมมอเตอร์ตะปูเกลียวจากสัปดาห์ที่แล้วถึงหมุน แนะนำให้เด็กๆรู้จักแรงลอเรนซ์ (Lorentz force) โดยเฉพาะส่วนที่สนามแม่เหล็กกระทำกับกระแสไฟฟ้าซึ่งจะมีแรงกระทำกับกระแสไฟฟ้าในทิศทางที่ตั้งฉากกับทั้งทิศทางสนามแม่เหล็กและทิศทางกระแสไฟฟ้าด้วยกฎมือขวา

ลองดูคลิปเหล่านี้เพื่อความเข้าใจมากขึ้นครับ:

2. เด็กๆหัดใช้มัลติมิเตอร์วัดความต่างศักย์ ทดลองกับถ่านไฟฉายและตามร่างกาย รู้จักการต่อถ่านไฟฉายแบบอนุกรม (series) และขนาน (parallel) การต่อแบบอนุกรมจะเพิ่มความต่างศักย์ การต่อแบบขนานจะเพิ่มความสามารถในการเพิ่มกระแสไฟฟ้า

3. เด็กๆเริ่มรู้จักความต่างศักย์ (หน่วยเป็นโวลท์, Volt, V), กระแสไฟฟ้า (หน่วยเป็นแอมป์, Amp, A), ความต้านทานไฟฟ้า (หน่วยเป็นโอห์ม, Ohm, Ω)

4. แนะนำให้เด็กๆไปดูคลิปนี้เพื่อความเข้าใจมากขึ้นนะครับ:

5. สอนวิธีดัดลวดทองแดงเป็นโฮโมโพลาร์มอเตอร์เส้นลวด วิธีตามคลิปนี้ครับ:

วันนี้ผมยังไม่ได้ให้เด็กๆดัดลวดทองแดงแบบในคลิปเพราะมันแข็ง จึงให้ดัดลวดทองแดงขนาดเล็กลงมาเป็นการเรียนรู้ก่อนครับ

6. บรรยากาศกิจกรรมครับ:

เมื่อวานเด็กๆม.ต้นเรียนรู้เรื่อง Lorentz force (แรงลอเรนซ์), หัดใช้มัลติมิเตอร์วัดความต่างศักย์, และสร้างโฮโมโพลาร์มอเตอร์จากลวดครับ

Posted by Pongskorn Saipetch on Wednesday, November 25, 2020

คลิปโฮโมโพลาร์มอเตอร์เส้นลวดที่เล่นกันครับ (เมื่อวานเด็กๆม.ต้นเรียนรู้เรื่อง Lorentz force (แรงลอเรนซ์), หัดใช้มัลติมิเตอร์วัดความต่างศักย์, และสร้างโฮโมโพลาร์มอเตอร์จากลวดครับ)

Posted by Pongskorn Saipetch on Wednesday, November 25, 2020

วิทย์ม.ต้น: ฝึกไพธอน, คลิปน่าสนใจ, Leidenfrost Effect, ฝึก Tracker

1. มีเฉลยการบ้านที่รุ่นพี่เอาไปทำสัปดาห์ที่แล้วครับ

โจทย์ 1: เขียนโปรแกรมรับค่าตัวเลขไปเรื่อยๆ ถ้าจะหยุดให้ใส่คำว่า END แล้วโปรแกรมจะคำนวณค่าเฉลี่ยของตัวเลขที่รับเข้าไป (ใช้ while และ list)

เฉลยแบบที่ 1: คำนวณค่าเฉลี่ยโดยบวกเอง และยังไม่มีการจัดการข้อยกเว้นต่างๆที่ทำให้โปรแกรมพังได้ (ยังไม่มี error handling)

#เขียนโปรแกรมรับค่าตัวเลขไปเรื่อยๆ ถ้าจะหยุดให้ใส่คำว่า END แล้วโปรแกรมจะคำนวณค่าเฉลี่ยของตัวเลขที่รับเข้าไป (ใช้ while และ list)
#พังได้หลายแบบมาก เช่นถ้าสิ่งที่พิมพ์เข้าไปไม่ใช่ตัวเลขและไม่ใช่คำว่า END
#เราจะเรียนรู้เรื่อง exception handling ต่อไป

numbers = []
x = input("ใส่ตัวเลขเข้ามา พิมพ์ END เพื่อหยุด: ")
while x != "END":
    numbers.append(float(x))
    x = input("ใส่ตัวเลขเข้ามา พิมพ์ END เพื่อหยุด: ")
    
print("ตัวเลขคือ ",numbers)
sum = 0
for x in numbers:
    sum = sum + x
average = sum / len(numbers)
print ("ค่าเฉลี่ยคือ", average)

เฉลยแบบที่ 2: คำนวณค่าเฉลี่ยโดยใช้ฟังก์ชั่น sum() ในไพธอน และยังไม่มีการจัดการข้อยกเว้นต่างๆที่ทำให้โปรแกรมพังได้ (ยังไม่มี error handling)

#เขียนโปรแกรมรับค่าตัวเลขไปเรื่อยๆ ถ้าจะหยุดให้ใส่คำว่า END แล้วโปรแกรมจะคำนวณค่าเฉลี่ยของตัวเลขที่รับเข้าไป (ใช้ while และ list)
#พังได้หลายแบบมาก เช่นถ้าสิ่งที่พิมพ์เข้าไปไม่ใช่ตัวเลขและไม่ใช่คำว่า END
#เราจะเรียนรู้เรื่อง exception handling ต่อไป

#ใช้ฟังก์ชั่น sum() ในไพธอน

numbers = []
x = input("ใส่ตัวเลขเข้ามา พิมพ์ END เพื่อหยุด: ")
while x != "END":
    numbers.append(float(x))
    x = input("ใส่ตัวเลขเข้ามา พิมพ์ END เพื่อหยุด: ")
    
average = sum(numbers) / len(numbers)

print ("ตัวเลขคือ ", numbers)
print ("ค่าเฉลี่ยคือ", average)

โจทย์ 2: เขียนโปรแกรมรับค่าตัวเลขไปเรื่อยๆ ถ้าจะหยุดให้ใส่คำว่า END แล้วโปรแกรมจะคำนวณค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐานของตัวเลขที่รับเข้าไป (ใช้ while และ list)

เฉลยแบบที่ 1: ใช้ฟังก์ชั่น sum() ในไพธอน คำนวณค่าเบี่ยงเบนมาตรฐานเอง, ไม่มี error handling

#เขียนโปรแกรมรับค่าตัวเลขไปเรื่อยๆ #
#ถ้าจะหยุดให้ใส่คำว่า END แล้วโปรแกรมจะคำนวณค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐานของตัวเลขที่รับเข้าไป (ใช้ while และ list)
#พังได้หลายแบบมาก เช่นถ้าสิ่งที่พิมพ์เข้าไปไม่ใช่ตัวเลขและไม่ใช่คำว่า END
#เราจะเรียนรู้เรื่อง exception handling ต่อไป

import math

numbers = []
x = input("ใส่ตัวเลขเข้ามา พิมพ์ END เพื่อหยุด: ")
while x != "END":
    numbers.append(float(x))
    x = input("ใส่ตัวเลขเข้ามา พิมพ์ END เพื่อหยุด: ")
    
average = sum(numbers) / len(numbers)

sum_sq = 0
for x in numbers:
    sum_sq = sum_sq + (x-average)**2


SD = math.sqrt(sum_sq / (len(numbers)-1))
print("ตัวเลขคือ", numbers)
print("ค่าเฉลี่ยคือ", average)
print("ค่าเบี่ยงเบนมาตรฐานคือ ",SD)

เฉลยแบบที่ 2: ใช้ฟังก์ชั่น mean() และ std() ใน numpy, ไม่มี error handling

#เขียนโปรแกรมรับค่าตัวเลขไปเรื่อยๆ #
#ถ้าจะหยุดให้ใส่คำว่า END แล้วโปรแกรมจะคำนวณค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐานของตัวเลขที่รับเข้าไป (ใช้ while และ list)
#พังได้หลายแบบมาก เช่นถ้าสิ่งที่พิมพ์เข้าไปไม่ใช่ตัวเลขและไม่ใช่คำว่า END
#เราจะเรียนรู้เรื่อง exception handling ต่อไป

#ใช้ฟังก์ชั่น mean(),std()  ใน numpy

import numpy as np

numbers = []
x = input("ใส่ตัวเลขเข้ามา พิมพ์ END เพื่อหยุด: ")
while x != "END":
    numbers.append(float(x))
    x = input("ใส่ตัวเลขเข้ามา พิมพ์ END เพื่อหยุด: ")
    
average = np.mean(numbers)
SD = np.std(numbers, ddof=1)


print("ตัวเลขคือ", numbers)
print("ค่าเฉลี่ยคือ", average)
print("ค่าเบี่ยงเบนมาตรฐานคือ ",SD)

2. โจทย์รุ่นพี่วันนี้คือเขียนโปรแกรมไพธอนเพื่อแก้ปัญหาเหล่านี้ ข้อที่ทำไม่เสร็จไปทำต่อเป็นการบ้าน:

-เขียนโปรแกรมรับค่าตัวเลขไปเรื่อยๆ ถ้าจะหยุดให้ใส่คำว่า END แล้วโปรแกรมจะคำนวณค่ามากที่สุด น้อยที่สุด (ใช้ while และ list)

-เขียนโปรแกรมรับจำนวนตัวเลขที่จะป้อน แล้วรับตัวเลขไปเรื่อยๆเท่ากับจำนวนครั้งนั้น  แล้วโปรแกรมจะคำนวณค่ามากที่สุด น้อยที่สุด (ใช้ for และ list)

-เขียนโปรแกรมรับจำนวนตัวเลขที่จะป้อน แล้วรับตัวเลขไปเรื่อยๆเท่ากับจำนวนนั้น  แล้วโปรแกรมจะเรียงลำดับตัวเลขเหล่านั้นจากมากไปน้อย (ใช้ for และ list)

-เขียนโปรแกรมรับจำนวนตัวเลขที่จะป้อน แล้วรับตัวเลขไปเรื่อยๆเท่ากับจำนวนนั้น  แล้วโปรแกรมจะเรียงลำดับตัวเลขเหล่านั้นจากน้อยไปมาก (ใช้ for และ list)

3. รุ่นน้องดูคลิปน่าสนใจต่างๆดังนี้:

กาวต่อท่อ PVC หมุนในน้ำ:

จรวดน้ำแข็งแห้ง (อันตรายบ้างถ้าหลบไม่ทัน):

ระเบิดไนโตรเจนเหลว (อันตราย):

เทไนโตรเจนเหลวบนมือแล้วเกิดอะไรขึ้น:

เดินบนไฟได้อย่างไร:

และการทดลอง(ที่อันตรายที่สุดถ้าพลาด) ดูว่าเอามือของเราไปจุ่มในตะกั่วเหลวร้อนๆได้หรือไม่ ถ้าได้ทำอย่างไร

ปรากฏว่าทำได้ครับถ้าตะกั่วเหลวนั้นร้อนมากๆ (ตะกั่วเริ่มเป็นของเหลวที่ประมาณ 330 องศาเซลเซียส ในการทดลองเขาต้มตะกั่วจนร้อนประมาณ 450 องศาเซลเซียส) แล้วเอามือจุ่มน้ำให้เปียก แล้วจุ่มลงไปในตะกั่วแป๊บเดียวแล้วดึงออก (ถ้าตะกั่วไม่ร้อนมากพอ เวลาเอามือไปจุ่ม ตะกั่วจะเย็นลงพอเพียงที่จะเป็นของแข็งแล้วติดนิ้วขึ้นมาทำให้เป็นอันตราย)

สาเหตุที่สามารถจุ่มนิ้วเข้าไปในตะกั่วเหลวร้อนมากๆแล้วไม่เป็นอันตรายก็เพราะน้ำที่ติดนิ้วอยู่จะโดนความร้อนจากตะกั่วจนกลายเป็นไอน้ำ เจ้าไอน้ำจะเป็นตัวกั้น เป็นฉนวนความร้อนป้องกันไม่ให้ความร้อนจากตะกั่วทำอันตรายนิ้วได้ แต่ถ้าแช่ไว้นานๆน้ำก็จะระเหยเป็นไอหมดและนิ้วก็จะไหม้ได้

ปรากฏการณ์นี้เป็นเรื่องเดียวกับเวลาเราหยดน้ำไปบนกระทะร้อนๆแล้วหยดน้ำลอยอยู่บนกระทะได้นานๆ เราจะสังเกตได้ว่าเวลากระทะร้อนแต่ยังไม่ร้อนมากพอ เมื่อเราหยดน้ำลงไปน้ำจะฟู่ๆแล้วระเหยหายไปอย่างรวดเร็ว นี่เป็นเพราะความร้อนจากกระทะทำให้หยดน้ำส่วนที่ติดกับกระทะร้อนกลายเป็นไอ แต่เมื่อกระทะร้อนขึ้นมากๆ ไอน้ำที่เกิดขึ้นจะเกิดขึ้นเร็วพอและมากพอที่จะกลายเป็นชั้นไอน้ำรองรับหยดน้ำให้ลอยอยู่เหนือกระทะนานๆเนื่องจากชั้นไอน้ำนำความร้อนได้ช้ากว่าเวลาหยดน้ำติดกับกระทะตรงๆ ปรากฏการณ์นี้เรียกว่า “ปรากฏการณ์ลีเดนฟรอสท์” (Leidenfrost Effect)

4. รุ่นน้องหัดใช้ Tracker ต่อ โดยทำตามวิธีในคลิปนี้ คราวนี้หัดใช้ Auto Tracker ติดตามภาพวัตถุที่สนใจครับ:

เด็กๆสามารถโหลดไฟล์วิดีโอการทดลองต่างๆไปหัดใช้กับ Tracker ได้จากลิงก์นี้ครับ