เขียนโค้ดภาษาไพทอนเพื่อจำลองการนำยานอวกาศแล่นลงจอดบนพื้นผิวดาวอังคาร (Mars Landing Using Python Programming)
(แหล่งที่มาข้อมูลและโค้ด NASA Jet Propulsion Laboratory หรือที่ลิงก์ https://www.jpl.nasa.gov/edu/learn/project/code-a-mars-landing)
การนำยานอวกาศลงจอดต้องอาศัยการตรวจวัดระยะห่างระหว่างยานอวกาศและพื้นผิวดาวอังคาร (spacecraft's proximity from the surface)
อุปกรณ์และเครื่องมือที่ต้องเตรียม ได้แก่
(1) คอมพิวเตอร์/แลปท็อปสำหรับการรันภาษาไพทอน
(2) ซอร์ฟแวร์ในการแก้ไขโค้ดไพทอน (Python Editor) เช่น Mu [ https://codewith.mu ] หรือ Atom Editor [ https://atom-editor.cc ]
(3) เซนเซอร์ตรวจรับแสง (Light Sensor)
(4) หลอดไฟ LEDs สีต่าง ๆ
(5) เซนเซอร์ตรวจวัดคลื่นอัลตราโซนิก (Ultrasonic Sensor)
(6) ลำโพง Buzzer หรือ Speaker
(7) ปุ่มที่สามารถเขียนโปรแกรมควบคุมได้ (Programmable buttons)
(8) สายเคเบิล (Connector cables) และ โพรโทบอร์ด (Protoboard)/เบรดบอร์ด (Breadboard)
(9) ทั้งนี้อาจชุด Kits ที่มีอุปกรณ์ต่าง ๆ ข้างต้นก็สามารถใช้ได้เช่นเดียวกัน เช่น Arduino , Raspberry Pi, LEGO หรือ Cubit
เนื่องด้วยระยะทางระหว่างโลกและดาวอังคารมีระยะที่ไกลมาก ทำให้การติดต่อสื่อสารและควบคุมยานอวกาศจากโลกทำได้อย่างยากลำบาก (สัญญาณจากโลกใช้เวลาไปและกลับดาวอังคารราว ๆ 14 นาที) จึงเป็นเหตุผลให้ยานอวกาศต้องลงจอดได้ด้วยตัวเองด้วยการตั้งค่าโปรแกรมส่วนนี้เอาไว้ ซึ่งกระบวนการลงจอดจะสำเร็จได้ต้องอาศัย
- การคำนวณระยะห่างระหว่างยานพื้นผิว
- กลไกการลงจอด เช่น กางร่มเพื่อลดความเร็ว ใช้เรดาร์เพื่อบอกระยะห่าง หรือกาง landing legs เพื่อลงจอดที่พื้นผิว
- การส่งสัญญานแจ้งข้อมูลสถานะต่าง ๆ ไปที่ศูนย์ควบคุมที่อยู่บนโลก
เริ่มต้นเขียนโปรแกรม (*เป็นการเขียนคำสั่งในเบื้องต้นเท่านั้น ผู้นำไปใช้งานต้องนำไปปรับแจต่งตามความเหมาะสม)
1. Import ข้อมูล
from components import UltrasonicSensor, LED
from time import sleep
#If your kit doesn't automatically detect the port being used, you can specify
ultrasonic = UltrasonicSensor("D1")
2. ตั้งค่าเซนเซอร์ตรวจวัดคลื่นอัลตราโซนิกและแสดงค่าระยะห่างจากพื้นผิว ณ ขณะนั้น
while True:
distance = ultrasonic.distance
print(distance)
sleep(0.1)
3. ใช้ไฟจาก LEDS เพื่อแสดงผลว่าอยู่ในระยะที่สามารถลงจอดได้หรือไม่
red_led = LED("D2")
yellow_led = LED("D3")
green_led = LED("D4")
if distance < 10:
red_led.on()
yellow_led.on()
green_led.on()
elif distance < 20:
red_led.off()
yellow_led.on()
green_led.on()
else:
red_led.off()
yellow_led.off()
green_led.on()
4. ติดตั้ง Buzzer เพื่อส่งสัญญาณเตือน
from components import Buzzer
buzzer = Buzzer("D5")
if distance < 10:
red_led.on()
yellow_led.on()
green_led.on()
buzzer.on()
elif distance < 20:
red_led.off()
yellow_led.on()
green_led.on()
else:
red_led.off()
yellow_led.off()
green_led.on()
5. การรับพลังงานแสงเพื่อเปลี่ยนเป็นพลังงานสำหรับการลงจอดของยานด้วย Light sensor หรือ Solar Panel
from components import LightSensor
from time import sleep, time
light = LightSensor("D6")
while True:
lightlevel = (light.reading)
print lightlevel
(การจดบันทึกค่าพลังงานที่ได้ ทั้งนี้โคดที่แสดงขึ้นอยู่กับอุปกรณ์หรือชุด Kit ของคุณใช้)
plt.ion()
fig = plt.figure()
x_data = []
y_data = []
start_time = time()
x_data.append(elapsed_time)
y_data.append(lightlevel)
plt.title("Light Sensor input over time")
plt.ylabel("Light Level")
plt.xlabel("Time in seconds")
plt.plot(x_data, y_data)
plt.draw()
plt.pause(0.01)
การส่งสัญญาณกลับมายังโลกเพื่อบอกสถานะยานว่าปลอดภัย
from components import Button
button = Button("D7")
while True:
if button.is_pressed:
buzzer.on()
else:
buzzer.off()
ส่งสัญญาณในรูปแบบรหัสมอร์สโค้ด
Morse_Dict = { 'A':'.-', 'B':'-...', 'C':'-.-.', 'D':'-..', 'E':'.',
'F':'..-.', 'G':'--.', 'H':'....', 'I':'..', 'J':'.---', 'K':'-.-',
'L':'.-..', 'M':'--', 'N':'-.', 'O':'---', 'P':'.--.', 'Q':'--.-',
'R':'.-.', 'S':'...', 'T':'-', 'U':'..-', 'V':'...-', 'W':'.--',
'X':'-..-', 'Y':'-.--', 'Z':'--..'}
def encrypt(message):
convert = ' '
for letter in message:
if letter != ' ':
convert += Morse_Dict[letter] + ' '
else:
convert += ' '
return convert
def decrypt(message):
message += ' '
decode = ''
text = ''
for letter in message:
if (letter != ' '):
i = 0
text += letter
else:
i += 1
if i == 2:
decode += ' '
else:
decode += list(Morse_Dict.keys())[list(Morse_Dict.values()).index(text)]
text = ''
return decode
def main():
text = input("Enter Message: ")
output = encrypt(text.upper())
print(output)
if __name__ == '__main__':
main()
6. เมื่อ EDL เริ่มทำงาน โค้ดจะถูกรันตั้งแต่เริ่มต้นจบสิ้นสุดกระบวนการ ดังนี้
- วัดระยะห่างระหว่างพื้นผิวได้ (ไฟ LED สีแดง หมายถึง ระยะห่างสูงเกินไปที่จะลงจอด / ไฟ LED สีเขียวคือระยะที่เหมาะสม)
- เมื่อยานอยู่ในระยะห่างที่่เหมาะสมจากพื้นผิว ไฟสีเขียวจะขึ้น และจะได้ยินเสียงไปพร้อมกับการแล่นลงจอดอย่างปลอดภัย และเริ่มเก็บพลังงานแสง
- หลังจากเก็บพลังงานแสงไป 30 วินาที จะเริ่มมีการส่งรหัส Morse code กลับมายังโลก
- เมื่อได้รับรหัสที่ส่งกลับมา ให้สิ้นสุดการทำงานได้
แหล่งที่มาข้อมูล: NASA Jet Propulsion Laboratory เข้าถึงได้ที่ https://www.jpl.nasa.gov/edu/learn/project/code-a-mars-landing