การเลือกใช้ Python สำหรับโปรเจกต์ฮาร์ดแวร์และไมโครคอนโทรลเลอร์ ภาพนี้แสดงให้เห็นถึงบอร์ดไมโครคอนโทรลเลอร์และโค้ด Python บนหน้าจอคอมพิวเตอร์ ซึ่งนำเสนอแนวคิดของความง่ายต่อการใช้งานและประสิทธิภาพของ Python ในการเขียนโปรแกรมสำหรับไมโครคอนโทรลเลอร์
การเลือกใช้ Python สำหรับการพัฒนาโปรเจกต์ทางด้านฮาร์ดแวร์และไมโครคอนโทรลเลอร์เป็นการตัดสินใจที่ดีสำหรับหลายๆ สถานการณ์ โดยเฉพาะ ถ้าคุณพบว่า Python มีความชัดเจน และ ง่ายต่อการเขียนมากกว่า C ที่ใช้ใน Arduino นี่คือบางประเด็นที่ทำให้ Python (และเฉพาะ MicroPython สำหรับไมโครคอนโทรลเลอร์) น่าสนใจ :
-
ความชัดเจน และ ง่ายต่อการเรียนรู้ : Python มีโครงสร้างไวยากรณ์ที่อ่านง่ายและเข้าใจง่าย ซึ่งช่วยให้การเขียนและการดีบักโค้ดง่ายขึ้น โดยเฉพาะกับผู้ที่เริ่มต้นใช้งาน
-
ชุมชนและทรัพยากร : Python มีชุมชนที่ใหญ่และหลากหลาย ซึ่งทำให้คุณสามารถค้นหาคำแนะนำ, ไลบรารี่, และตัวอย่างโค้ดได้ง่าย
-
ไลบรารี่ที่หลากหลาย : Python มีไลบรารี่มากมายที่สามารถช่วยในการพัฒนาโปรเจกต์ต่างๆ ไม่ว่าจะเป็นการจัดการกับข้อมูล, การสื่อสารผ่านเครือข่าย, หรือแม้แต่การประมวลผลภาพ
-
การใช้งานที่หลากหลาย : MicroPython สามารถใช้งานได้กับหลายประเภทของไมโครคอนโทรลเลอร์ และบอร์ดต่างๆ เช่น ESP8266, ESP32 และบอร์ดที่สามารถใช้งาน MicroPython ได้
-
การทดสอบและการดีบัก: ด้วย Python, คุณสามารถใช้งาน REPL (Read-Eval-Print Loop) ซึ่งช่วยให้คุณทดลองและทดสอบโค้ดของคุณได้ทีละขั้นตอนในเวลาจริง
แม้ว่า Python จะมีข้อดีมากมาย แต่ก็มีข้อจำกัดบางประการ เช่น การใช้งานทรัพยากรที่มากกว่าเมื่อเทียบกับภาษา C หรือการทำงานที่ล่าช้ากว่าเล็กน้อยเนื่องจาก Python เป็นภาษาที่ถูกตีความ ดังนั้นการเลือกภาษาก็ขึ้นอยู่กับความต้องการของโปรเจกต์และความสะดวกสบายของผู้พัฒนาครับ
Block Diagram
#Micropython Code
from machine import Pin, ADC
import utime
U1 = Pin(3, Pin.OUT)
U2 = Pin(5, Pin.OUT)
V1 = Pin(6, Pin.OUT)
V2 = Pin(9, Pin.OUT)
W1 = Pin(10, Pin.OUT)
W2 = Pin(11, Pin.OUT)
fase = 1
tiempo = 100
previousMillis = 0
Stop = 0
val = ADC(Pin(26)) # สมมติว่า A0 เป็น GPIO 26 ในบอร์ดของคุณ
def set_phase(phase):
states = [(LOW, LOW, LOW, LOW, HIGH, HIGH), # Phase 1 C-B
(HIGH, LOW, LOW, LOW, HIGH, LOW), # Phase 2 A-B
(HIGH, LOW, LOW, LOW, LOW, HIGH), # Phase 3 A-C
(LOW, LOW, HIGH, LOW, LOW, HIGH), # Phase 4 B-C
(LOW, HIGH, HIGH, LOW, LOW, LOW), # Phase 5 B-A
(LOW, HIGH, LOW, LOW, HIGH, LOW)] # Phase 6 C-A
U1.value(states[phase-1][0])
U2.value(states[phase-1][1])
V1.value(states[phase-1][2])
V2.value(states[phase-1][3])
W1.value(states[phase-1][4])
W2.value(states[phase-1][5])
def read_potentiometer():
t = val.read_u16() # อ่านค่า ADC
return round(t / 65535 * 2000) # แปลงเป็นช่วงเวลา
previousMillis = utime.ticks_us()
while True:
if tiempo > 1950:
Stop = 0
tiempo = 1950
U1.low()
U2.low()
V1.low()
V2.low()
W1.low()
W2.low()
else:
Stop = 1
if Stop == 1:
currentMillis = utime.ticks_us()
if utime.ticks_diff(currentMillis, previousMillis) >= tiempo:
previousMillis = utime.ticks_add(previousMillis, tiempo)
set_phase(fase)
fase = fase + 1 if fase < 6 else 1
tiempo = read_potentiometer()
print(fase, tiempo)
utime.sleep_ms(50) # เพิ่มเวลาหน่วงเพื่อลดการใช้ CPU
คำแนะนำเกี่ยวกับโค้ดนี้ :
- คุณอาจต้องปรับ
Pin
ที่ใช้สำหรับADC
ให้ตรงกับบอร์ดของคุณ ซึ่งอาจไม่ใช่ GPIO 26 เสมอไป - ฟังก์ชัน
read_potentiometer()
อาจต้องปรับเปลี่ยนตามช่วงค่าที่อ่านได้จาก ADC ของบอร์ดของคุณ - โค้ดนี้ไม่ได้รวมการตั้งค่าสำหรับการสื่อสารผ่าน Serial เนื่องจาก MicroPython มักใช้ REPL ผ่าน Serial สำหรับการโต้ตอบกับผู้ใช้ คุณอาจต้องใช้การสื่อสารผ่าน Serial อื่นถ้าจำเป็น