Mục lục:

Xây dựng nút nguồn Raspberry Pi tốt hơn: 4 bước
Xây dựng nút nguồn Raspberry Pi tốt hơn: 4 bước

Video: Xây dựng nút nguồn Raspberry Pi tốt hơn: 4 bước

Video: Xây dựng nút nguồn Raspberry Pi tốt hơn: 4 bước
Video: 5 Dự Án Nổi Bật với Raspberry Pi trong năm 2022 2024, Tháng bảy
Anonim
Image
Image

Rất dễ dàng tạo nút tắt hoặc tắt nguồn Raspberry. Có rất nhiều dự án như vậy trên web và một vài dự án ở đây trên Có thể hướng dẫn, nhưng không có dự án nào trong số đó (mà tôi có thể thấy) cho bạn biết khi nào Pi của bạn thực sự tắt và do đó có thể an toàn để kéo nguồn. Trên thực tế, họ thậm chí không thừa nhận rằng người bấm nút đã được nhìn thấy.

Cũng có những dự án khởi động lại Pi đã bị tắt, nhưng những dự án này đều không cung cấp cho bạn bất kỳ phản hồi trực quan nào.

Nhưng ai cần một nút như vậy? Nếu bạn là một con mọt sách như tôi, hoặc thậm chí chỉ là một con mọt sách đầy tham vọng, bạn luôn có thể đăng nhập vào Pi cục bộ hoặc qua mạng và nhập sudo shutdown -h ngay bây giờ. Nhưng nếu bạn đang xây dựng một dự án cho người dùng không phải là kỹ thuật, điều đó sẽ không thành công. Đúng vậy, bạn gần như luôn luôn có thể thoát khỏi chỉ với việc kéo dây nguồn, nhưng lưu ý, tôi đã nói gần như luôn luôn! Vận may của mọi người sớm muộn gì cũng hết. Tôi đã bị chết thẻ SD chỉ vào tuần trước, mặc dù tôi sẽ không bao giờ biết liệu nó có thực sự là do mất điện đột ngột hay không.

Trong trường hợp của tôi, tôi cần thêm nút nguồn vào một chiếc Pi mà chúng tôi sử dụng làm bộ đệm midi để ghi âm và phát lại các bài thánh ca và bài hát trong nhà thờ, phòng khi chúng tôi không có nghệ sĩ dương cầm trực tiếp. Tôi luôn có thể gõ lệnh tắt máy nhưng tôi cần xóa kỹ năng khi không có mặt ở đó.

Mục đích của tôi ở đây không phải là cung cấp cho bạn một sản phẩm hoàn chỉnh, hoàn chỉnh với hộp đựng được in 3D đẹp mắt, giống như rất nhiều sản phẩm Giảng dạy khác. Mọi người sẽ có một cách sử dụng khác nhau cho nó hoặc muốn kết hợp trong dự án của riêng họ. Thay vào đó, tôi sẽ thiết lập cho bạn công nghệ mà bạn có thể thêm vào dự án của mình, cho dù đó là trung tâm truyền thông, thiết bị IoT hay bất kỳ thứ gì khác.

(Trong video, tôi đang trình diễn điều đó với Pi Zero v1.2 và một màn hình tôi làm từ màn hình máy tính xách tay và bộ điều khiển từ Viễn Đông được lắp đặt lại.)

Bước 1: Thiết kế

Làm thế nào nó hoạt động
Làm thế nào nó hoạt động

Đây là những gì nút nguồn của tôi sẽ làm cho bạn:

  • Khi Pi đang chạy, một đèn LED sáng liên tục. Nếu tắt theo cách thủ công, đèn LED chỉ tắt khi có thể rút phích cắm điện an toàn.
  • Trong khi đang chạy, nếu bạn nhấn nút trong ít nhất một giây, quá trình tắt máy sẽ bắt đầu và đèn LED sẽ tắt trong một phần tư giây mỗi giây cho đến khi có thể rút phích cắm điện an toàn.
  • Từ trạng thái tắt máy (nếu chưa tháo nguồn), nhấn vào nút để nó khởi động và nhấp nháy đèn LED trong một phần tư giây mỗi giây cho đến khi nó khởi động. (Có thể mất nhiều thời gian hơn một chút cho đến khi tất cả các dịch vụ như ssh và vnc đang chạy.)

Các thành phần rất rẻ. Tất cả bạn cần là:

  • ATTiny85 (chip tương thích với Arduino)
  • 3 điện trở: 2 x 330Ω và 1 x 10kΩ
  • 1 đèn LED - Tôi đề xuất màu xanh lá cây hoặc xanh lam, nhưng đó là sự lựa chọn của bạn
  • breadboard và dây jumper, hoặc dải, hoặc bất cứ cách nào bạn muốn xây dựng nó.

Bước 2: Cách thức hoạt động

Như với tất cả các nút nguồn của Pi, nút này kéo chân GPIO xuống trạng thái thấp để báo hiệu yêu cầu tắt đến chương trình trợ giúp đang chạy trên Pi. Tôi đã sử dụng GPIO4 (pin 7) nhưng bạn có thể sử dụng bất kỳ chân nào khác.

Cách duy nhất để biết rằng Pi đã hoàn tất quá trình tắt là xem TxD pin 8, sau đó giá trị này sẽ xuống thấp. Điều này phụ thuộc vào bảng điều khiển nối tiếp đang được bật, theo mặc định. Trên thực tế, TxD sẽ thường xuyên lên xuống trong khi nó được sử dụng như một bảng điều khiển nối tiếp, nhưng nó sẽ không bao giờ xuống thấp hơn khoảng 30mS tại một thời điểm, ngay cả ở tốc độ truyền phổ biến chậm nhất. Nó vẫn có thể được sử dụng cho một bảng điều khiển nối tiếp vì chúng ta chỉ xem nó một cách thụ động.

Để khởi động lại, chúng ta cần kéo nhẹ SCL1 (chân 5) xuống thấp. Chân này được sử dụng bởi bất kỳ thiết bị I2C nào (bao gồm cả giao diện midi của tôi), nhưng sau khi bắt đầu khởi động, chúng tôi để nó một mình.

Phần lớn sự phức tạp nằm trong bản phác thảo Arduino mà chúng tôi tải vào ATTiny85. Điều này thực hiện một "máy trạng thái" - một cách rất hữu ích và mạnh mẽ để mã hóa bất kỳ vấn đề nào có thể được biểu diễn bằng một số "trạng thái". Máy giặt cũng hoạt động theo cách tương tự. Các trạng thái đại diện cho các giai đoạn trong chu kỳ giặt và mỗi trạng thái xác định những gì máy sẽ làm tại thời điểm đó (động cơ hoặc máy bơm được chạy, van được mở hoặc đóng) và đầu vào cảm biến nào (nhiệt độ, mực nước, bộ hẹn giờ) xác định thời điểm chuyển sang trạng thái tiếp theo và lựa chọn trạng thái tiếp theo.

Bản phác thảo tay là bản thảo đầu tiên của tôi về một biểu đồ trạng thái, cho thấy tất cả các chuyển đổi trạng thái. Đây chỉ là để cho bạn thấy cách bạn có thể lập kế hoạch ban đầu cho các trạng thái và chuyển đổi trạng thái của mình - nó có thể không hoàn toàn chính xác như trước khi tôi bắt đầu gỡ lỗi.

Trong trường hợp của chúng tôi, chúng tôi có 6 trạng thái mà tôi đã gọi là TẮT, YÊU CẦU BOOT, BẬT, CHẠY, YÊU CẦU SHUTDOWN và TẮT XUỐNG. (Sau khi TẮT XUỐNG, nó chuyển trở lại TẮT.) Chúng được xác định bằng các nhận xét trong bản phác thảo và đối với mỗi nhận xét khác cho biết nó nên làm gì và những sự kiện nào sẽ chuyển nó sang trạng thái khác.

Chương trình trợ giúp chạy trên Pi chỉ phức tạp hơn một chút so với hầu hết các nút tắt. Nó đáp ứng với một xung thấp dài trên chân GPIO bằng cách bắt đầu tắt máy, nhưng nó cũng đáp ứng với một xung ngắn bằng cách kéo chân GPIO xuống thấp trong thời gian ngắn. Đây là cách ATTiny85 có thể cho biết rằng nó đang chạy và do đó có thể chuyển từ trạng thái BẮT BUỘC sang trạng thái CHẠY.

Bước 3: Xây dựng một mẫu thử nghiệm

Xây dựng một nguyên mẫu Demo
Xây dựng một nguyên mẫu Demo
Xây dựng một mẫu thử nghiệm
Xây dựng một mẫu thử nghiệm
Xây dựng một mẫu thử nghiệm
Xây dựng một mẫu thử nghiệm

Đối với mục đích trình diễn, bạn có thể tạo nguyên mẫu nó trên một breadboard không hàn như được hiển thị nhưng tôi cũng đã cung cấp cho bạn sơ đồ để bạn có thể tạo ra bố cục của riêng mình bằng cách sử dụng dải bảng hoặc PCB tùy chỉnh, có lẽ là một phần của một dự án rộng lớn hơn.

Bước 4: Lập trình ATTiny85

Bản phác thảo Arduino và chương trình trợ giúp được đính kèm trong bước này. Trong thư mục phác thảo Arduino của bạn, hãy tạo một thư mục có tên là PiPwr và sao chép tệp PiPwr.ino vào đó. Khởi chạy Arduino IDE bây giờ bạn sẽ tìm thấy nó trong sổ phác thảo của mình.

Có một số cách lập trình ATTiny85. Nếu bộ nạp khởi động của bạn được cài đặt, bạn có thể sử dụng bảng phát triển ATTiny85 có giá chỉ vài pound. Điều này kết nối với PC của bạn qua cổng USB. Tôi đã sử dụng một Hidiot về cơ bản giống nhau nhưng có khu vực tạo mẫu.

Trong IDE Arduino dưới Tệp - Tùy chọn, hãy thêm

digistump.com/package_digistump_index.json

vào URL quản lý bảng bổ sung.

Trong Công cụ - Bảng bây giờ bạn sẽ thấy một số tùy chọn Digispark. Chọn Digispark (Mặc định - 16,5MHz).

Nếu ATTiny85 của bạn không có bộ nạp khởi động (hoặc bạn không biết) thì bạn có thể nhận được một lập trình viên AVR ISP với giá vài pound. Hoặc bạn có thể sử dụng Arduino Uno hoặc Pro Mini hoặc Nano rẻ hơn làm lập trình viên. Google cho "arduino as isp attiny85" (không có dấu ngoặc kép) để được hướng dẫn.

Nếu bạn muốn sửa đổi bản phác thảo, bạn sẽ thấy nó được chú thích đầy đủ và hy vọng dễ làm theo. Để gỡ lỗi, sử dụng Arduino Pro Mini hoặc Nano dễ dàng hơn nhiều. Bỏ ghi chú serial.begin () trong Thiết lập và các câu lệnh in trong vòng lặp () để xem các bước mà nó trải qua bằng cách sử dụng màn hình nối tiếp. Có các định nghĩa pin thay thế trong nguồn, được nhận xét ra, cho Uno, Pro Mini hoặc Nano.

Trên Raspberry Pi của bạn, sao chép tệp shutdown_helper.py vào thư mục / etc / local / bin và đặt nó là tệp thực thi bằng lệnh

sudo chmod + x /usr/local/bin/shutdown_helper.py

Bây giờ, hãy chỉnh sửa tệp /etc/rc.local bằng trình chỉnh sửa yêu thích của bạn. (Bạn sẽ cần phải làm như vậy với tư cách là người chủ.) Trước dòng cuối cùng (thoát 0), hãy chèn dòng

nohup /usr/local/bin/shutdown_helper.py &

Khởi động lại và chương trình trợ giúp sẽ tự động bắt đầu.

Đề xuất: