เล่นปล่อยรถของเล่นเข้าเป้า แรงโน้มถ่วงเทียมกันน้ำหก

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

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

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

อันที่สองคือโดรนที่คนเข้าไปโดยสารได้ บินเอง คนไม่ต้องบังคับ:

มีรายละเอียดเพิ่มเติมที่นี่นะครับ

คลิปที่สามคือคลิปแสดงว่าการขับรถในทางแคบ ขับที่ความเร็วเท่าไรจึงปลอดภัยครับ:

ระยะทางที่รถใช้ในการหยุดขึ้นอยู่กับความเร็วของรถ และความเร็วของระบบประสาทคนขับ เมื่อคนขับเห็นคนข้ามถนน สัญญาณจากตาจะวิ่งไปที่สมอง สมองตัดสินใจเหยียบเบรค ส่งสัญญาณมาตามเส้นประสาทไปที่ขาและเท้า ช่วงเวลานี้มักใช้เวลาระดับ 0.1-1 วินาที ในช่วงเวลานี้รถจะขยับไปเท่ากับความเร็วรถคูณกับ 0.1-1 วินาที หลังจากเหยียบเบรคแล้ว รถจะสูญเสียพลังงานจลน์ไปเป็นความร้อนที่เบรค ที่ยาง และพื้นถนน ระยะทางที่ต้องใช้จะแปรผันกับความเร็วกำลังสองโดยประมาณ ในคลิปมีการทดลองว่าถ้าจะขับรถให้ปลอดภัยบนทางแคบๆควรใช้ความเร็วไม่เกิน 30 กิโลเมตรต่อชั่วโมงครับ

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

หลังจากเด็กๆทำความคุ้นเคยกับรถเขาแล้ว เราก็เล่นเกมปล่อยรถใส่เป้าวงกลมที่พื้นกันครับ ผมใช้ชอล์ควาดวงกลมเส้นผ่าศูนย์กลางประมาณครึ่งเมตรบนพื้น ให้เด็กๆอยู่ห่างไป 2-4 เมตรแล้วให้เขาปล่อยรถจากทางลาดชันลงใส่เป้า ใครจอดข้างในหรือแตะเส้นขอบเป้าได้ก็ได้คะแนน เด็กๆสนุกและลุ้นกันมาก

สำหรับเด็กอนุบาลสามผมสอนให้ประดิษฐ์อุปกรณ์ช่วยถือแก้วน้ำหรือชามซุปให้หกยากๆครับ

เราสามารถประดิษฐ์อุปกรณ์ช่วยถือของแบบนี้ได้ง่ายๆด้วยของในบ้านครับ หาถาดหรือตะกร้าและเชือกมาก็ทำได้แล้ว ผมเคยบันทึกไว้ในรายการเด็กจิ๋ว & ดร.โก้ครับ:

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

เด็กๆได้เล่นตามแบบที่ผมทำให้ดูครับ เขาตื่นเต้นที่สังเกตเห็นผิวน้ำเรียบเหมือนเป็นเยลลี่:

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

ผมไม่ได้ถ่ายคลิปวิดีโอการแกว่งข้ามหัวครั้งนี้ไว้แต่มีคลิปจากในอดีตแบบนี้ครับ:

วาดภาพขาวดำให้เป็นจำนวนเฉพาะ

ผมไปเห็นโพสต์ตลกๆใน Reddit มา การ์ตูนบอกว่าสามารถเอาตัวเลข 0 และ 1 มาเรียงกันบนจอโทรศัพท์ให้เป็นรูปยีราฟและเลข 0 และ 1 ที่เรียงกันนั้นถ้าตีความเป็นเเลขฐานสองแล้ว มันจะเป็นเลขจำนวนเฉพาะอีกด้วย (เลขจำนวนเฉพาะคือจำนวนเต็มบวกที่มีตัวหารที่เป็นบวกแค่ 1 และตัวมันเอง)

ภาพการ์ตูนจาก https://www.reddit.com/r/math/comments/7qpfls/does_there_exist_a_prime_number_whose/ ครับ
ภาพการ์ตูนจาก https://www.reddit.com/r/math/comments/7qpfls/does_there_exist_a_prime_number_whose/ ครับ

 

ใต้การ์ตูนมีคนทำรูปยีราฟที่วาดด้วย 0  และ  1 เรียงกัน 4096 ตัว ซึ่งถ้ามองเป็นเลขฐานสองจะเป็นจำนวนเฉพาะด้วยครับ:

ภาพยีราฟวาดด้วย 0 และ 1
ภาพยีราฟวาดด้วย 0 และ 1

ถ้าเราสังเกตที่ด้านล่างของภาพยีราฟจะเห็นว่ามันไม่เป็น 0 ทั้งหมด ทำให้น่าสงสัยว่าคนสร้างภาพเปลี่ยนค่า 0 บางตัวเป็น 1 จนกระทั่งทั้งภาพกลายเป็นจำนวนเฉพาะ ผมก็เลยคิดสงสัยว่าเราสามารถสร้างรูปขาวดำอะไรก็ได้ให้เป็นจำนวนเฉพาะแบบนี้ได้ไหม 

ก่อนอื่นเราต้องหาตรวจสอบว่าเลขฐานสองยาวๆเป็นจำนวนเฉพาะหรือไม่ก่อน ถ้าเราใช้ภาษาไพธอน แล้วเรามีสตริงชื่อ x ที่มีเลข 0/1 เรียงกันเป็นเลขฐานสองเราใช้คำสั่ง int(x,2) เปลี่ยนเป็นค่าตัวเลขได้ แล้วใช้คำสั่ง gmpy2.is_prime(num) มาตรวจว่าเป็นจำนวนเฉพาะหรือเปล่า 

x = "0100011"
num = int(x,2) #num = 35
gmpy2.is_prime(num) #False เพราะ 35 = 1x5x7

y = '0100101'
num = int(x,2) #num = 37
gmpy2.is_prime(num) #True เพราะ 37 = 1x37

เวลาตัวเลขของเรามีขนาดไม่ใหญ่นัก มีไม่กี่หลัก เราสามารถทดลองหาตัวหารไปเรื่อยๆได้ แต่ถ้าตัวเลขใหญ่มีเป็นร้อยเป็นพันหลัก เราจะลองอย่างนั้นไม่ได้เพราะจะใช้เวลามากเกินไป ความวิเศษของ gmpy2.is_prime( ) ก็คือมันใช้เทคนิค Miller-Rabin ที่สามารถตรวจสอบเลขที่มีหลายๆพันหลักได้ด้วยวิธีสุ่ม โดยที่เราเลือกลดความน่าจะเป็นที่มันจะตอบผิดว่าตัวเลขเป็นจำนวนเฉพาะทั้งๆที่ไม่ใช่ให้มีค่าน้อยๆใกล้ศูนย์ได้ตามใจ 

พอเรารู้วิธีตรวจสอบจำนวนเฉพาะขนาดใหญ่ๆได้แล้ว เราก็แค่เขียนโปรแกรมให้อ่านภาพเข้ามาแล้วแปลงเป็นภาพขาวดำ เปลี่ยนสีดำเป็น 0 เปลี่ยนสีขาวเป็น 1 

โค้ดส่วนนี้อ่านภาพเข้ามาแล้วทำให้ขนาดไม่ใหญ่เกินไป:

def scale_image(file, size = 64):
    """
    Read an image file, change it to grayscale (0-255),
    and scale it so that its dimension is at most size x size,
    keeping the image's aspect ratio.
    """

    im = PIL.Image.open(file)
    im = im.convert('L') #change image to grayscale (0 to 255)
   
    width, height = im.size
    if width > height:
        max_size = width
    else:
        max_size = height
       
    scale_factor = size/max_size
    new_width = int(scale_factor*width)
    new_height = int(scale_factor*height)
    im = im.resize((new_width, new_height))
   
    return im

ส่วนนี้เปลี่ยนภาพให้เป็นสตริง 0/1

def image_to_binary(image):
    """
    Convert a grayscale (0-255) image to its binary string representation.
    Change the last pixel to 1 to make it a prime number more easily.
    """

    width, height = image.size
   
    pixels = np.asarray(image) #store pixel value in numpy array
    binary_pixels = (pixels > 128).astype(np.int) #low values go to 0, high values go to 1
    binary_pixels[(-1,-1)] = 1 #make sure last pixel is 1 to make it a prime more easily
    binary_string = "".join(binary_pixels.flatten().astype(np.str).tolist())
   
    return width, height, binary_string #return width and height along with 1-dimension binary representation

แล้วเราก็ตรวจสอบว่าสตริง 0/1 เป็นจำนวนเฉพาะด้วยฟังก์ชั่นนี้:

def is_binary_string_prime(x, n_tests = 50):
    """
    Check if the binary string x is prime using gmpy2's Miller-Rabin
    algorithm with n_tests steps.
    """

    num = int(x,2) #convert binary string to decimal number
    return gmpy2.is_prime(num, n_tests)

ถ้าภาพยังไม่เป็นจำนวนเฉพาะ เราก็สุ่มจุดมาหนึ่งจุด แล้วเปลี่ยนเลขตรงนั้น ถ้าเคยเป็น 0 ก็เปลี่ยนเป็น 1 ถ้าเคยเป็น 1 ก็เปลี่ยนเป็น 0 แล้วค่อยเอาไปตรวจใหม่ว่าเป็นจำนวนเฉพาะไหม ถ้ากลายเป็นจำนวนเฉพาะภาพที่ได้ก็ต่างจากภาพเริ่มต้นเพียง 1 จุดเท่านั้น ฟังก์ชั่นที่ใช้เปลี่ยนเลขก็มีหน้าตาแบบนี้:

def mutate(x):
    """
    Given a binary string x, flip one random bit and return the result.
    """

    i = random.randint(0, len(x)-1) #location to flip a bit

    if x[i] == '0':
        flip = '1'
    else:
        flip = '0'
       
    result = x[:i] + flip + x[i+1:] #copy x to result, except one flipped bit
   
    return result

ปัญหาต่อไปก็คือถ้าภาพยังไม่เป็นจำนวนเฉพาะ เราจะทำการเปลี่ยนจุด 1 จุดกี่ครั้งดี เราอาศัยความจริงที่ว่าจำนวนเฉพาะที่น้อยกว่า N จะมีประมาณ N/Log(N) ตัว ดังนั้นความน่าจะเป็นที่เราสุ่มเลือกเลขที่อยู่ระหว่าง 1 ถึง N มาแล้วมันเป็นจำนวนเฉพาะก็จะประมาณ 1/Log(N)

เปรียบเทียบจำนวนของจำนวนเฉพาะที่ไม่เกิน N และ N/Log(N)
เปรียบเทียบจำนวนของจำนวนเฉพาะที่ไม่เกิน N และ N/Log(N)

ถ้าภาพของเรามีจุด 0/1 ทั้งหมด K จุด ความน่าจะเป็นที่มันเป็นจำนวนเฉพาะก็จะประมาณ 1/Log(2K) = 1/(K Log(2)) = 1.44/K  เช่นถ้าภาพมีขนาด 64×64 แสดงว่า K = 64×64 = 4096 และความน่าจะเป็นที่ภาพจะเป็นจำนวนเฉพาะก็ประมาณ 1.44/4096 เท่ากับประมาณ 1/2800 แปลว่าถ้าเราเลือกเลขสุ่มๆมาสักสองสามเท่าของ 2800 ครั้ง เราน่าจะได้เลขจำนวนเฉพาะมาสองสามตัวถ้าเราไม่โชคร้ายเกินไป

จากนั้นเราก็แค่ลองเปลี่ยนเพียง 1 จุดในภาพไปเรื่อยๆจนภาพกลายเป็นจำนวนเฉพาะด้วยฟังก์ชั่นหน้าตาแบบนี้ครับ:

def mutate_to_prime(x, max_tries = 12000):
    """
    Given a binary string x, flip just one bit to make it a prime number.
    max_tries is the maximum number of tries before giving up.
    If x is N bits long, probability that x is a prime is about 1/(N log(2)),
    so max_tries about a few times N log(2) should be OK.
   
    The first prime found will be returned.
    If no prime is found, None will be returned.
    """


    if is_binary_string_prime(x):
        return x  #if x is already prime, just return it.
   
    found_prime = False
    for k in range(max_tries):
        m = mutate(x) #try flipping one bit
        if is_binary_string_prime(m): #if it's a prime, return it
            return m
   
    return None

ผมประกอบฟังก์ชั่นต่างๆเป็นโปรแกรมแบบนี้ครับ โหลดได้ที่นี่:

import PIL.Image
import gmpy2
import random
import numpy as np
import math

def scale_image(file, size = 64):
    """
    Read an image file, change it to grayscale (0-255),
    and scale it so that its dimension is at most size x size,
    keeping the image's aspect ratio.
    """

    im = PIL.Image.open(file)
    im = im.convert('L') #change image to grayscale (0 to 255)
   
    width, height = im.size
    if width > height:
        max_size = width
    else:
        max_size = height
       
    scale_factor = size/max_size
    new_width = int(scale_factor*width)
    new_height = int(scale_factor*height)
    im = im.resize((new_width, new_height))
   
    return im

def image_to_binary(image):
    """
    Convert a grayscale (0-255) image to its binary string representation.
    Change the last pixel to 1 to make it a prime number more easily.
    """

    width, height = image.size
   
    pixels = np.asarray(image) #store pixel value in numpy array
    binary_pixels = (pixels > 128).astype(np.int) #low values go to 0, high values go to 1
    binary_pixels[(-1,-1)] = 1 #make sure last pixel is 1 to make it a prime more easily
    binary_string = "".join(binary_pixels.flatten().astype(np.str).tolist())
   
    return width, height, binary_string #return width and height along with 1-dimension binary representation

def mutate(x):
    """
    Given a binary string x, flip one random bit and return the result.
    """

    i = random.randint(0, len(x)-1) #location to flip a bit

    if x[i] == '0':
        flip = '1'
    else:
        flip = '0'
       
    result = x[:i] + flip + x[i+1:] #copy x to result, except one flipped bit
   
    return result

def is_binary_string_prime(x, n_tests = 50):
    """
    Check if the binary string x is prime using gmpy2's Miller-Rabin
    algorithm with n_tests steps.
    """

    num = int(x,2) #convert binary string to decimal number
    return gmpy2.is_prime(num, n_tests)

def mutate_to_prime(x, max_tries = 12000):
    """
    Given a binary string x, flip just one bit to make it a prime number.
    max_tries is the maximum number of tries before giving up.
    If x is N bits long, probability that x is a prime is about 1/(N log(2)),
    so max_tries about a few times N log(2) should be OK.
   
    The first prime found will be returned.
    If no prime is found, None will be returned.
    """


    if is_binary_string_prime(x):
        return x  #if x is already prime, just return it.
   
    found_prime = False
    for k in range(max_tries):
        m = mutate(x) #try flipping one bit
        if is_binary_string_prime(m): #if it's a prime, return it
            return m
   
    return None

def print_pic(x, width):
    """
    Given a binary string x, print it
    so that each line contains width characters.
    """

    height = int(len(x)/width)
    for row in range(height):
        print(x[row*width : row*width+width])

def pic_to_prime(file, size = 64, max_tries = 12000):
    """
    Open an image file and attempt to
    print it as a binary string picture
    that is a prime number.
    """

    im = scale_image(file, size)
   
    width, height, binary = image_to_binary(im)
   
    x = mutate_to_prime(binary, max_tries)
    if x:
        print_pic(x,width)
        num = int(x,2)
        print("\nThe number is {} in base 10.".format(num))
        print("It has {} digits".format(len(str(num))))
        print("It's likely a prime with probability = {}".format(1-math.pow(0.5,50)))

def main():
    import sys
    usage = """
    python pic_to_prime.py image_file [size] [max_tries]
    Will attempt to convert image_file into a black and white picture whose ASCII representation is
    (black = 0, white = 1) and the string of 0's and 1's forms a binary number which is likely prime with
    an extremely high probablity.

    size is an optional parameter.  The converted image's dimension will be at most size x size
    Default value for size is 64

    max_tries is an optional parameter. It's the maximum number of tries to flip one bit in the converted image
    until it's a prime number.  If max_tries is reached without find a prime, the program does not return any Ascii image.
    Typically, setting max_tries to be a few times size x size should be sufficient.
    Default value for max_tries is 12,000
    """


    if len(sys.argv) < 2:
        print(usage)
        exit(1)

    try:
        file_name = sys.argv[1]
        print("Converting {}...".format(file_name))
        if len(sys.argv) == 2:
            pic_to_prime(file_name)
        if len(sys.argv) == 3:
            size = int(sys.argv[2])
            pic_to_prime(file_name, size)
        if len(sys.argv) &gt;= 4:
            size = int(sys.argv[2])
            max_tries = int(sys.argv[3])
            pic_to_prime(file_name, size, max_tries)      
       
       
    except:
        print("An error has occured:", sys.exc_info())
   
if __name__ == '__main__':
    main()

วิธีใช้ก็เรียก python pic_to_prime.py filename โดยที่ filename คือชื่อไฟล์รูปภาพที่เราต้องการเปลี่ยนเป็นจำนวนเฉพาะครับ 

ตัวอย่างภาพที่ได้จากการเปลี่ยนภาพ Darth Vader:

ภาพ Darth Vader ข้างบนคือเลขฐานสิบที่มี 1195 หลัก หน้าตาแบบนี้ครับ: 

3069183072727172278860337378214364811175034036025244450162785708918361127976622462244955616465542073310944718954147895761643252918537495912453992270956943332625163100410236971285347282168904965253931503727481796300351734500671920231110149740644603732320920567437139574018949692454814303373410337477406380375065946238083359795848929370044692287614885238710013203784493630576976222535714074987122348018208566276582108014408460395720661886870781674435952140263967388925330430468219482326166783846446434209037095617083753020217147213702448717413427206823791407299246422960343709648378621123745736208899112612922595944987425466506332619408247083609772049609869403316890387132071258208841211446813145804008085966690045193746244730410209439050722697005342344505437504795775660537102148374631191587907498516228228789209160814532098859180914649594125752152645342655118749520955226752989697313945409163186662411266021539069921213862430095726119501306030813846080124361789827996639620644316501126994186024697789684863191124018231390812596919287605853413555802043957703338340785628246023479885637324716903027104728159535177737667950181169447546144659362616465956401475098937299932469625956492313055325061119

 

ข้อจำกัดของสมอง เล่นโคลนแป้งมัน

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

(อัลบั้มบรรยากาศกิจกรรมต่างๆอยู่ที่นี่นะครับ กิจกรรมคราวที่แล้วเรื่อง “ถ่ายวิดีโอสายน้ำสั่น โคลนแป้งเต้นระบำ” ครับ รวมทุกกิจกรรมอยู่ที่นี่นะครับ)

เด็กๆประถมได้ดูคลิปนี้ ได้พยายามนับว่าทีมเสื้อขาวส่งลูกบอลกี่ครั้งครับ ลองนับเองเลยนะครับ:

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

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

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

สำหรับคลิปนี้ให้สังเกตว่าถนนมีอะไรเปลี่ยนแปลงบ้าง:

พวกเราสังเกตการเปลี่ยนแปลงได้เป็นส่วนน้อยจากการเปลี่ยนแปลงทั้งหมดครับ

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

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

สำหรับอนุบาลสาม เราเล่นโคลนแป้งมันเต้นระบำกันครับ

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

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

(รายละเอียดสำหรับนักเรียนโตๆครับ: เรามีคำเรียกความยากง่ายเวลาเราคนของเหลวว่า “ความหนืด” ของเหลวอะไรคนยากเช่นน้ำผึ่งเราก็เรียกว่ามีความหนืดสูง ของเหลวอะไรคนง่ายเช่นน้ำเปล่าเราก็เรียกว่ามีความหนืดต่ำ โดยปกติความหนืดจะลดลงเมื่อของมีอุณหภูมิสูงขึ้น แต่ไม่ขึ้นกับว่าเราคนเร็วหรือคนช้า เจ้าแป้งข้าวโพดผสมน้ำเป็นของเหลวที่ไม่ปกติ เนื่องจากความหนืดของมันขึ้นกับว่าเราคนเร็วหรือคนช้าด้วย ถ้าเราคนเร็วมากๆมันจะหนืดมากจนกลายเป็นของแข็งไปเลย ของเหลวที่ความหนืดขึ้นกับความเร็วในการคนเรียกว่า Non-Newtonian Fluid ตัวอย่างอื่นๆของ Non-Newtonian fluid ก็มีเช่น ทรายดูด (ถ้าเราตกไปแล้วขยับตัวเร็วๆมันจะฝืดมาก ทำให้เราหมดแรงและออกมาไม่ได้และอดน้ำหรืออาหารตาย วิธีรอดคือค่อยๆขยับตัวช้าๆมากๆเข้าหาฝั่ง) ซอสมะเขือเทศ (ถ้าอยู่เฉยๆจะหนืดมาก ถ้าเขย่าหรือตบจะหนืดน้อย)  Silly Putty (ถ้าทิ้งไว้นานๆจะไหลสู่ที่ตำ่เหมือนของเหลว ถ้าบีบช้าๆจะนิ่ม ถ้าโยนใส่พื้นจะกระเด้ง ถ้าทุบแรงๆจะแตกออกเป็นเสี่ยงๆเหมือนแก้วแตก) ความจริงเรื่อง Non-Newtonian fluid มีรายละเอียดมากกว่านี้ แต่ผมยกตัวอย่างให้พอเข้าใจกันโดยทั่วๆไป ถ้าสนใจเข้าไปที่ลิงค์แล้วดูรายละเอียดเพิ่มเติมนะครับ)

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

 

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