Forum

เขียนโค้ดภาษาไพทอนเ...
 
แบ่งปัน:
การแจ้งเตือน
ลบทั้งหมด

เขียนโค้ดภาษาไพทอนเพื่อจำลองการนำยานอวกาศแล่นลงจอดบนพื้นผิวดาวอังคาร (Mars Landing Using Python Programming)

1 โพสต์
1 ผู้ใช้
0 Reactions
215 เข้าชม
(@natthasit-n)
Eminent Member
เข้าร่วม: 1 ปี ที่ผ่านมา
กระทู้: 12
หัวข้อเริ่มต้น  

เขียนโค้ดภาษาไพทอนเพื่อจำลองการนำยานอวกาศแล่นลงจอดบนพื้นผิวดาวอังคาร (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


   
อ้างอิง
แบ่งปัน:
1,420,287 views since 16 August 2018