Tìm kiếm mã

Khóa học Bài 2/10: Python cơ bản để điều khiển Bộ Kit Xe Thông Minh 4WD Raspberry Pi Pico

Bài học này là một phần của: Xe thông minh Raspberry Pi Pico 4WD

Khóa học Bài 2/10: Python cơ bản để điều khiển Bộ Kit Xe Thông Minh 4WD Raspberry Pi Pico

Trong bài học thứ hai của khóa học Robojax Raspberry Pi Pico 4WD Smart Car này, chúng ta sẽ đi sâu vào các khái niệm lập trình Python cơ bản giúp bạn điều khiển robot của mình. Hướng dẫn này được thiết kế để đưa bạn từ người chưa có kinh nghiệm viết mã đến việc tự tin viết các tập lệnh điều khiển phần cứng. Thay vì chỉ ghi nhớ cú pháp, chúng ta sẽ khám phá "lý do" đằng sau mỗi khái niệm, giúp bạn có công cụ để xây dựng và tùy chỉnh các dự án của riêng mình. Đến cuối bài học này, bạn sẽ hiểu vững chắc về biến, luồng điều khiển, hàm và danh sách—những khối xây dựng nền tảng cho mọi dự án trong tương lai.

Kiến thức này không chỉ dành riêng cho xe thông minh. Các nguyên tắc bạn học ở đây cũng được sử dụng trong vô số ứng dụng thực tế. Bạn có thể áp dụng những kỹ năng này để:

  • Tự động hóa nhà kính tại nhà để điều khiển quạt, máy bơm và đèn dựa trên dữ liệu cảm biến.
  • Xây dựng hệ thống an ninh tùy chỉnh kích hoạt báo động hoặc gửi thông báo.
  • Tạo ra các tác phẩm nghệ thuật tương tác phản ứng với môi trường.
  • Phát triển các hành vi robot tùy chỉnh của riêng bạn ngoài những hành vi được lập trình sẵn.

Phần cứng/Linh kiện

Để làm theo các ví dụ phần cứng trong bài học này, bạn sẽ cần các linh kiện sau. Tất cả đều có trong Bộ Kit Xe Thông Minh Raspberry Pi Pico 4WD của SunFounder, nhưng có thể mua riêng lẻ cho các thí nghiệm độc lập.

  • Raspberry Pi Pico: Bộ não vi điều khiển của dự án.
  • Một đèn LED: Dùng để minh họa điều khiển đầu ra kỹ thuật số.
  • Một điện trở (150Ω - 330Ω): Để giới hạn dòng điện và bảo vệ đèn LED.
  • Dây nối: Để kết nối trên bảng mạch thử.
  • Bảng mạch thử (breadboard): Để tạo mạch thử nghiệm.

Hướng dẫn đấu dây

Đối với phần trình diễn phần cứng trong bài học này, chúng ta sẽ xây dựng một mạch đơn giản để điều khiển đèn LED bằng Raspberry Pi Pico. Việc đấu dây khá đơn giản và là bước đầu tiên kinh điển trong điện toán vật lý. Điều quan trọng là sử dụng điện trở giới hạn dòng điện để tránh làm cháy đèn LED. Điện trở được mắc nối tiếp với đèn LED. Chân dài của đèn LED (cực dương) là kết nối dương, còn chân ngắn (cực âm) là kết nối âm.

Trong video, giảng viên sử dụng một điện trở nối với chân nối đất và chân ngắn của đèn LED. Chân dài được nối với chân GPIO 22. Cách thiết lập này cho phép Pico gửi tín hiệu cao (3.3V) đến chân để bật đèn LED và tín hiệu thấp (0V) để tắt nó.

Lưu ý: Sơ đồ đấu dây được hiển thị trong video. Vui lòng tham khảo hướng dẫn trực quan để biết vị trí chính xác.

Giải thích mã

Bài học này tập trung vào cú pháp và logic Python cốt lõi, điều cần thiết để điều khiển robot của bạn. Hãy phân tích các khái niệm chính được trình bày trong video. Các ví dụ mã được viết bằng MicroPython, một phiên bản Python được thiết kế để chạy trên các vi điều khiển như Raspberry Pi Pico.

Biến và Kiểu dữ liệu

Biến giống như các hộp có nhãn nơi bạn lưu trữ thông tin. Trong Python, bạn không cần khai báo kiểu của biến; nó được suy ra từ giá trị bạn gán. (trong video lúc 03:33)


age = 23  # Đây là số nguyên
name = "Ahmad"  # Đây là chuỗi (văn bản)
pi = 3.14  # Đây là số thực (số thập phân)

Bạn có thể sử dụng các biến này trong phép tính và in giá trị của chúng. Ví dụ, để tính số ngày trong một độ tuổi nhất định, bạn có thể dùng days = age * 365. Hàm print() được dùng để hiển thị đầu ra ra màn hình điều khiển.

Câu lệnh điều kiện (If/Else)

Câu lệnh điều kiện cho phép mã của bạn đưa ra quyết định. Điều này rất quan trọng để robot phản ứng với môi trường, như dừng lại khi phát hiện chướng ngại vật. (trong video lúc 07:39)


age = 16
if age >= 17:
    print("Bạn có thể lái xe")
else:
    print("Còn quá trẻ để lái xe")

Câu lệnh if kiểm tra một điều kiện. Nếu điều kiện là True, khối mã được thụt lề bên dưới sẽ được thực thi. Nếu là False, mã dưới câu lệnh else sẽ chạy. Việc thụt lề (khoảng trắng ở đầu dòng) rất quan trọng trong Python; nó xác định mã nào thuộc về khối nào.

Vòng lặp (For và While)

Vòng lặp được dùng để lặp lại một khối mã. Điều này lý tưởng cho các tác vụ như quét giá trị cảm biến hoặc di chuyển động cơ qua một chuỗi các bước. (trong video lúc 09:04)

Vòng lặp For: Vòng lặp này lặp một số lần cụ thể.


for x in range(5):  # x sẽ là 0, 1, 2, 3, 4
    print(x)

Vòng lặp While: Vòng lặp này tiếp tục chạy miễn là điều kiện còn đúng. Điều này hữu ích để tạo vòng lặp chương trình chính chạy mãi mãi cho đến khi một sự kiện cụ thể xảy ra. (trong video lúc 12:13)


x = 9
while x > 5:
    print("Giá trị của x là:", x)
    x = x - 1  # Giảm x
print("Vòng lặp đã kết thúc")

Hãy cẩn thận với vòng lặp while True:. Chúng sẽ chạy mãi mãi trừ khi bạn dùng câu lệnh break để thoát khỏi vòng lặp hoặc bạn dừng chương trình.

Hàm

Hàm là các khối mã có thể tái sử dụng để thực hiện một tác vụ cụ thể. Chúng giúp giữ mã của bạn có tổ chức và tránh lặp lại. (trong video lúc 14:52)


def calculate_days(years):
    days = years * 365
    return days

# Bây giờ chúng ta có thể sử dụng hàm này nhiều lần
days_in_10_years = calculate_days(10)
print("Số ngày trong 10 năm:", days_in_10_years)

Ở đây, calculate_days là một hàm nhận một đối số (years) và trả về một giá trị. Điều này hiệu quả hơn việc viết đi viết lại cùng một phép tính. Video cũng minh họa cách một hàm có thể gọi một hàm khác, cho phép bạn xây dựng các thao tác phức tạp từ những phần đơn giản, dễ kiểm tra.

Danh sách (Lists)

Danh sách được dùng để lưu trữ một tập hợp các mục có thứ tự. Điều này rất phù hợp để lưu chuỗi lệnh cho robot của bạn, như "tiến", "lùi", "trái" và "phải". (trong video ở phút 19:15)


move = ["forward", "back", "left", "right", "stop"]
print(len(move))  # In ra số lượng mục trong danh sách (5)
print(move[0]) # In ra mục đầu tiên, "forward"

# Bạn có thể thêm mục
move.append("cliff")
# Bạn có thể xóa mục
move.pop()  # Xóa "cliff"
# Bạn có thể thay đổi mục
move[2] = "fly"  # Thay đổi mục thứ ba thành "fly"

Danh sách được đánh chỉ số từ 0, nghĩa là mục đầu tiên ở chỉ số 0. Hàm len() cho bạn độ dài của danh sách, và bạn có thể dùng vòng lặp for để duyệt qua tất cả các mục. Hàm enumerate() cũng được giới thiệu, hàm này cung cấp cả chỉ số và giá trị trong vòng lặp, rất hữu ích khi làm việc với nhiều chân GPIO hoặc cảm biến.

Làm việc với Chân GPIO và Thời gian

Đây là nơi bạn kết nối logic Python với thế giới vật lý. Bạn sử dụng thư viện machine để điều khiển các chân GPIO của Pico. (trong video ở phút 25:16)


from machine import Pin
import time

# Thiết lập chân 22 làm đầu ra
led = Pin(22, Pin.OUT)

# Bật và tắt đèn LED
led.on()
time.sleep(1)
led.off()
time.sleep(1)

Bạn cũng có thể đọc từ một chân bằng cách đặt nó làm đầu vào với Pin(2, Pin.IN). Thư viện time rất quan trọng để thêm độ trễ (time.sleep()) và để đo thời gian trôi qua bằng time.ticks_ms() hoặc chuyển đổi giữa các định dạng thời gian bằng time.localtime()time.mktime(). Điều này rất quan trọng cho logic dựa trên thời gian, như tạo tín hiệu điều chế độ rộng xung (PWM) để điều khiển tốc độ động cơ.

Dự án/Demo Trực tiếp

Trong video, giảng viên cung cấp một buổi demo trực tiếp về các khái niệm này. Anh ấy bắt đầu bằng việc trình bày các câu lệnh print() đơn giản và gán biến trong trình thông dịch Python. Sau đó, anh ấy chuyển sang các ví dụ phức tạp hơn, minh họa trực quan cách các câu lệnh if thay đổi luồng chương trình dựa trên giá trị của biến.

Giảng viên sau đó trình diễn một ví dụ phần cứng thực tế bằng cách kết nối một đèn LED với Raspberry Pi Pico. Anh ấy viết một tập lệnh MicroPython đơn giản để bật và tắt đèn LED với độ trễ một giây, cho thấy kết quả trực tiếp của việc điều khiển đầu ra vật lý bằng mã. Ví dụ thực hành này củng cố mối liên hệ giữa logic lập trình và hành động trong thế giới thực. Bài học kết thúc bằng cách chỉ ra cách sử dụng enumerate để quản lý nhiều chân và cách sử dụng mô-đun time cho các thao tác hẹn giờ và lập lịch nâng cao hơn.

Các Chương

  • [00:00] Giới thiệu về Khóa học Xe Thông minh Raspberry Pi Pico
  • [01:31] Tổng quan về Khóa học và Khả năng của Bộ Kit
  • [03:33] Biến và Kiểu Dữ liệu trong Python
  • [07:39] Câu lệnh Điều kiện (If/Else)
  • [09:04] Hiểu về Vòng lặp For
  • [12:13] Khám phá Vòng lặp While
  • [14:52] Định nghĩa và Sử dụng Hàm
  • [19:15] Làm việc với Danh sách và Cấu trúc Dữ liệu
  • [25:16] Điều khiển Chân GPIO bằng MicroPython
  • [29:54] Ví dụ Thực tế: Nhấp nháy Đèn LED
  • [31:15] Điều khiển Chân Nâng cao với Enumerate
  • [31:24] Làm việc với các Hàm Thời gian
Không có mã đính kèm.

Tài nguyên & tài liệu tham khảo

Chưa có tài nguyên nào.

Tập tin📁

Không có tệp nào khả dụng.