วิทย์ม.ต้น: หัดไพธอน (Lists, permutations), หัดใช้ TRACKER

1. คลาสรุ่นพี่ เรียน Python จากหนังสือฟรีบนเว็บชื่อ Automate the Boring Stuff with Python โดยเขียนโปรแกรมใน Mu-Editor เราคุยกันเรื่อง Lists และ ทดลองเรื่องต่างๆเกี่ยวกับ list เช่น len, การ index, append, pop, การเอา list มารวมกัน, sort, การเปลี่ยน list เป็น tuple และ set และเปลี่ยนกลับ, การใช้ in และ not in, การใช้ count, join, split

2. เฉลยการบ้านสัปดาห์ที่แล้ว:

def convert_C_to_F(c):
    "แปลงอุณหภูมิ c เซลเซียสเป็นฟาเรนไฮต์"
    return c*9/5+32

def convert_F_to_C(f):
    "แปลงอุณหภูมิ f ฟาเรนไฮต์เป็นเซลเซียส"
    return (f-32)*5/9
    
def GCD(a,b):
    "หา ห.ร.ม. ของ a และ b"
    #Euclid GCD algorithm
    while(a != b):
        if b > a:
            a, b = b, a

        a, b = a-b, b

    return(a)

3. แนะนำให้เด็กๆรู้จัก itertools.permutations มาลองหาความน่าจะเป็นที่เลขเจ็ดหลักที่มีเลข 1-7 ครบทุกตัวสามารถหารด้วย 11 ลงตัว (มีวิธีทำด้วยมือที่แสดงว่าความน่าจะเป็น = 4/35)

#ดูว่าเลข 7 หลักที่เอาเลข 1,2,3..,7 มาเรียงกันแบบไม่ซ้ำกัน
#จะหารด้วย 11 ลงตัวกี่ตัว
#มีวิธีทำด้วยมือที่แสดงว่าความน่าจะเป็นที่จะหารด้วย 11 ลงตัว
#เท่ากับ 4/35

import itertools

digits = []
for d in range(1,8):
    digits.append(str(d))

total = 0
divisible = 0

for i in itertools.permutations(digits):
    total = total + 1
    #print(i)
    number = int("".join(i))
    #print(i, number)
    if number % 11 == 0:
        print(number)
        divisible = divisible + 1

print("Total numbers: " + str(total))
print("Divisible by 11: " + str(divisible))


4. การบ้านสัปดาห์นี้คือไปอ่านบทต่อไปเรื่อง Dictionaries

5. คลาสรุ่นน้องหัดใช้โปรแกรม Tracker โดยดาวน์โหลดและติดตั้งจาก https://physlets.org/tracker/ เราถ่ายวิดีโอการตกของลูกบาสแล้วให้ Tracker บันทึกตำแหน่งดู วิธีใช้ก็เหมือนๆกับที่ผมบันทึกไว้ที่คลิปนี้ครับ:

วิดีโอและไฟล์ .trk ดาวน์โหลดได้ที่นี่ครับ

วิทย์ม.ต้น: หัดไพธอน (Functions), รู้จัก Tracker, ดูลูกตุ้มทราย, หัด Scratch (วาด Lissajous Figures)

1. คลาสรุ่นพี่ เรียน Python จากหนังสือฟรีบนเว็บชื่อ Automate the Boring Stuff with Python โดยเขียนโปรแกรมใน Mu-Editor เราคุยกันเรื่อง Functions และหัดเขียนฟังก์ชั่นง่ายๆในชั้นเรียนกัน เช่น:

def add(a,b):
    "บวก a และ b เข้าด้วยกัน"
    return a+b
    
def หารลงตัว(a,b):
    "เช็คว่า a หารด้วย b ลงตัวหรือไม่"
    if a % b == 0:
        return True
    else:
        return False
    
def number_of_digits(x):
    "บอกว่าเลขจำนวนเต็มบวก x มีกี่หลัก"
    xstr = str(x)
    return len(xstr)
    
def contain_digit(a,b):
    "ดูว่ามีเลขโดด b ในจำนวนเต็มบวก a หรือไม่"
    astr = str(a)
    bstr = str(b)
    return bstr in astr
    
def contain_digit_1(a,b):
    "ดูว่ามีเลขโดด b ในจำนวนเต็มบวก a หรือไม่"
    return str(b) in str(a)
    
def contain_1_to_n(a):
    "a เป็นจำนวนเต็ม n หลัก, เช็คว่า a มีเลขโดด 1, 2, 3,..., n ครบหรือไม่"
    num_digits = number_of_digits(a)
    for digit in range(1,num_digits+1):
        #print("digit = " + str(digit))
        if not contain_digit(a,digit):
            return False
            
    return True

2. การบ้านรุ่นพี่คือไปอ่านบทที่ 4 เรื่อง Lists ในหนังสือ Automate the Boring Stuff with Python และ เขียนฟังก์ชั่นเหล่านี้ให้ทำงานได้ถูกต้อง:

def convert_C_to_F(c):
    "แปลงอุณหภูมิ c เซลเซียสเป็นฟาเรนไฮต์"
    pass
def convert_F_to_C(f):
    "แปลงอุณหภูมิ f ฟาเรนไฮต์เป็นเซลเซียส"
    pass
    
def GCD(a,b):
    "หา ห.ร.ม. ของ a และ b"
    #Euclid GCD algorithm
    pass

3. คลาสรุ่นน้องได้เห็นว่ามีโปรแกรมชื่อ Tracker (https://physlets.org/tracker/) ที่สามารถใช้วัดการเคลื่อนที่ต่างๆจากวิดีโอได้ เช่นวันนี้เอาคลิปลูกแก้ววิ่งเป็นวงกลมในกาละมังจากการเล่นวันพุธมาดูกัน จะเห็นว่าการเคลื่อนที่ในแนวตั้ง (แกน y) และแนวนอน (แกน x) จะเป็นคลื่น (พวก sine, cosine):

4. ได้ดูลูกตุ้มทรายแกว่ง และรู้จัก Lissajous Figures

5. ดูตัวอย่าง Scratch ว่าวาดรูปพวก Lissajous Figures อย่างไร แล้วดัดแปลงทดลองเอง:

6. เด็กๆดูคลิป Moire Pattern และหาใน Scratch ว่าทำอย่างไร:

วิทย์ประถม: แรงดันน้ำ, วัดปริมาตรกำปั้น, ของเล่นถ้วยบินจากแรงแม็กนัส, วิทย์อนุบาลสาม: ของเล่นเสือไต่ถัง

ผมไปทำกิจกรรมวิทย์กับเด็กๆประถมศูนย์การเรียนปฐมธรรมและเด็กอนุบาลสามอนุบาลบ้านพลอยภูมิมาครับ เด็กประถมต้นเล่นกับแรงดันน้ำและวัดปริมาตรกำปั้น ประถมปลายเล่นของเล่นถ้วยบินจากแรงแม็กนัส อนุบาลสามเล่นของเล่นเสือไต่ถัง

(อัลบั้มบรรยากาศกิจกรรมประถมอยู่ที่นี่ กิจกรรมอนุบาลสามอยู่ที่นี่ ส่วนลิงก์รวมทุกกิจกรรมอยู่ที่นี่นะครับ)

ก่อนอื่นเด็กประถมได้ดูมายากลนี้ครับ ดูเฉพาะตอนแรกที่เป็นกล ยังไม่ดูส่วนเฉลยตอนหลัง แล้วดูเฉลยหลังจากได้พยายามคิดพยายามอธิบายว่ากลแต่ละกลทำอย่างไรกันก่อน กลวันนี้คือลูกบอลลอยครับ:

กิจกรรมนี้ฝีกเด็กๆให้คิดแบบวิทยาศาสตร์ มีการสังเกต การตั้งสมมุติฐานเพื่ออธิบายสิ่งที่สังเกตมา การตรวจสอบสมมุติฐานกับข้อมูลที่สังเกตมา การตั้งสมมุติฐานใหม่เมื่อสมมุติฐานเดิมขัดกับข้อมูล นอกจากนี้เราพยายามให้เด็กๆมีความกล้าคิดและออกความเห็นครับ

สำหรับเด็กประถมต้น ผมทำการทดลองเรื่องความดันน้ำให้เด็กๆดูโดยจุ่มถ้วยพลาสติกบางๆลงในน้ำ ให้เห็นแรงดันน้ำกดถ้วย:

ผมถามเด็กๆว่าเคยดำน้ำไหม รู้สึกอย่างไรเมื่อดำน้ำ เด็กๆที่เคยดำลงไปใต้น้ำจะเข้าใจเรื่องความดันน้ำที่กดหน้าอกหรือหูเราได้ดี จริงๆแล้วเวลาเราเดินอยู่เหนือน้ำอากาศก็มีความดันอากาศกดตัวเราอยู่ ความดันอากาศเกิดจากนำ้หนักของอากาศในบรรยากาศที่กดทับเรานั่นเอง ความดันนี้มีค่าประมาณน้ำหนัก 1 กิโลกรัมต่อตารางเซ็นติเมตร หรือน้ำหนัก 10 ตันต่อตารางเมตร! สาเหตุที่ตัวเราไม่ยุบลงก็เพราะว่าเรามีอากาศในปอดอยู่ด้วย และร่างกายเราประกอบไปด้วยของเหลวที่ต่อสู้กับแรงกดจากอากาศได้

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

จากนั้นเราก็วัดปริมาตรกำปั้นกัน ผมเอาเหยือกน้ำตั้งไว้บนตาชั่ง แล้วอาศัยความจริงที่ว่าแรงดันน้ำที่ทำกับมือเราเท่ากับน้ำหนักของน้ำที่ถูกแทนที่ และน้ำหนึ่งกรัมมีขนาด 1 ลูกบาศก์เซ็นติเมตร (หรือ 1 cc หรือ 1 มิลลิลิตร) พอเราเอามือจุ่มลงไปน้ำหนักบนตาชั่งก็จะเพิ่มเท่ากับน้ำหนักของน้ำที่ถูกมือเราแทนที่ ถ้าเพิ่มหนึ่งกรัมก็เท่ากับว่าถูกแทนที่ไปหนึ่งลูกบาศก์เซ็นติเมตรครับ เช่นสมมุติว่าจุ่มกำปั้นลงไปแล้วตาชั่งบอกว่าน้ำหนักเพิ่ม 200 กรัม ก็แสดงว่าปริมาตรของกำปั้นเท่ากับ 200 ลูกบาศก์เซ็นติเมตร

สำหรับเด็กประถมปลาย ผมให้ประดิษฐ์ของเล่นถ้วยบินจากแรงแม็กนัสกันครับ:

เวลาลูกบอลหรือทรงกระบอกหมุนๆวิ่งผ่านอากาศ แรงเสียดทานระหว่างอากาศและลูกบอลจะทำให้อากาศด้านหนึ่งเลี้ยวเข้าหาหลังลูกบอลมากกว่าอีกด้านหนึ่ง โดยด้านที่ผิวลูกบอลหมุนไปทางเดียวกับอากาศที่วิ่งผ่านลูกบอล (ก็คือทิศตรงข้ามกับทิศทางการเคลื่อนที่ของลูกบอลนั่นเอง) จะทำให้อากาศเลี้ยวมากกว่า ทำให้ลูกบอลโดนดึงไปทางนั้นครับ

ลูกบอลหรือทรงกระบอกที่หมุนๆ เมื่อวิ่งผ่านอากาศจะเกิดแรงยกหรือแรงกดขึ้นกับทิศทางการหมุนครับ แรงนี้เรียกว่าแรงแมกนัส (Magnus Force) แรงเกิดจากการเลี้ยวของอากาศที่วิ่งผ่านผิวลูกบอลไม่เท่ากันขึ้นกับว่าโดนด้านไหนของลูกบอลที่หมุนๆอยู่ (ภาพจาก wikipedia)

เราเห็นปรากฎการณ์นี้ในกีฬาหลายๆอย่างเช่นฟุตบอล เทนนิส ปิงปอง เบสบอล หรือกีฬาอะไรก็ตามที่มีลูกบอลหมุนๆวิ่งผ่านอากาศครับ ในปืน BB ยิงกระสุนพลาสติกก็ใช้เทคนิคนี้ให้กระสุนวิ่งหมุนแบบ back-spin ให้ลอยอยู่นานๆ เรียกว่า hop-up ครับ

ผมแถมวิดีโอให้ดูอีกสองอันนะครับ เผื่อสนใจ (ไม่ได้โชว์ให้เด็กๆดูในห้องเรียนเพราะเวลาจำกัดครับ) อันแรกอธิบาย Magnus Effect ครับ:

อันที่สองอธิบายการเลี้ยวของลูกฟุตบอลครับ:

พอเด็กๆดูวิดีโอและคำอธิบายเสร็จก็หัดประดิษฐ์ของเล่นที่ใช้หลักการนี้กันครับ เอาถ้วยพลาสติกสองอันมาติดกันที่ก้นถ้วย แล้วใช้หนังยางดีดออกไปให้หมุนๆ เราสามารถทำให้ถ้วยพุ่งตกลงพื้นเร็วๆหรือให้ถ้วยร่อนอยู่ในอากาศนานๆขึ้นกับว่าเราทำให้หมุนแบบไหน แบบ top-spin หรือ back-spin ครับ:

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

มีอยู่ในรายการเด็กจิ๋ว & ดร.โก้ด้วยครับ:

พอเด็กๆรู้จักวิธีเล่นก็เล่นกันเองครับ:

บันทึกกิจกรรมวิทยาศาสตร์สำหรับเด็กๆ อยากให้คุณพ่อคุณแม่คุณครูเอาไปประยุกต์เล่นกับเด็กๆเยอะๆครับ :-)