Isi kandungan:

Bina Butang Kuasa Raspberry Pi yang Lebih Baik: 4 Langkah
Bina Butang Kuasa Raspberry Pi yang Lebih Baik: 4 Langkah

Video: Bina Butang Kuasa Raspberry Pi yang Lebih Baik: 4 Langkah

Video: Bina Butang Kuasa Raspberry Pi yang Lebih Baik: 4 Langkah
Video: Cara Membangun Raspberry Pi Pico PLC || Editor OpenPLC 2024, Disember
Anonim
Image
Image

Sangat mudah untuk membuat butang mematikan atau mematikan Raspberry. Terdapat banyak projek seperti itu di web dan beberapa di sini di Instructables, tetapi tidak satu pun dari mereka (yang dapat saya lihat) memberitahu anda apabila Pi anda benar-benar selesai dimatikan dan oleh itu selamat untuk menarik kuasa. Malah mereka bahkan tidak mengakui bahawa penekanan butang telah dilihat.

Terdapat juga projek untuk memulakan semula Pi yang telah ditutup, tetapi kedua-duanya tidak memberi anda maklum balas visual.

Tetapi siapa yang memerlukan butang seperti itu? Sekiranya anda agak kutu buku seperti saya, atau hanya kutu buku yang bercita-cita tinggi, anda selalu boleh log masuk ke Pi anda secara tempatan atau melalui rangkaian dan ketik sudo shutdown -h sekarang. Tetapi jika anda membina projek untuk pengguna bukan teknikal, itu tidak akan berjaya. Benar, anda hampir selalu dapat melepaskan diri dengan hanya menarik kabel kuasa, tetapi perhatikan, saya katakan hampir selalu! Nasib semua orang cepat atau lambat. Saya mempunyai kad SD yang mati pada minggu lepas, walaupun saya tidak akan tahu sama ada ia benar-benar disebabkan oleh kehilangan kuasa yang tiba-tiba.

Dalam kes saya, saya perlu menambahkan butang power ke Pi yang kami gunakan sebagai sequencer midi untuk merakam dan memutar lagu-lagu pujian dan lagu di gereja, kerana ketika kami tidak mempunyai pemain piano langsung. Saya selalu dapat menaip perintah shutdown tetapi saya perlu mengurangkan kemahirannya ketika saya tidak berada di sana.

Tujuan saya di sini bukanlah untuk memberi anda produk siap, lengkap dengan cetakan 3D yang indah, seperti banyak Instruksional lain. Setiap orang akan mempunyai penggunaan yang berbeza atau ingin memasukkannya ke dalam projek mereka sendiri. Sebaliknya, saya akan menyediakan anda dengan teknologi yang boleh anda tambahkan ke projek anda, sama ada pusat media, peranti IoT, atau apa sahaja.

(Dalam video itu saya menunjukkannya dengan Pi Zero v1.2 dan monitor yang saya buat dari skrin komputer riba yang dipakai semula dan alat kawalan dari Timur Jauh.)

Langkah 1: Reka Bentuknya

Bagaimana ia berfungsi
Bagaimana ia berfungsi

Inilah yang akan dilakukan oleh butang kuasa saya untuk anda:

  • Semasa Pi sedang berjalan, LED menyala berterusan. Sekiranya ia dimatikan secara manual, LED akan padam hanya apabila selamat mencabut kuasa.
  • Semasa berjalan, jika anda menekan butang sekurang-kurangnya satu saat, pemadaman dimulakan dan LED mati selama seperempat saat setiap saat sehingga selamat untuk mencabut bekalan elektrik.
  • Dari keadaan mati (jika daya belum dilepaskan), menekan butang akan memulakan boot dan menyalakan LED selama seperempat saat setiap saat sehingga ia dimulakan. (Mungkin memerlukan sedikit masa lagi sehingga semua perkhidmatan seperti ssh dan vnc berjalan.)

Komponennya sangat murah. Yang anda perlukan adalah:

  • ATTiny85 (cip serasi Arduino)
  • 3 perintang: 2 x 330Ω dan 1 x 10kΩ
  • 1 LED - Saya mencadangkan warna hijau atau biru, tetapi ia adalah pilihan anda
  • papan roti dan wayar pelompat, atau papan jalur, atau bagaimanapun anda mahu membinanya.

Langkah 2: Bagaimana Ia Berfungsi

Seperti semua butang kuasa Pi, yang satu ini menarik pin GPIO ke keadaan rendah untuk menandakan permintaan penutupan ke program pembantu yang berjalan pada Pi. Saya menggunakan GPIO4 (pin 7) tetapi anda boleh menggunakan pin lain.

Satu-satunya cara untuk memberitahu bahawa Pi telah selesai ditutup adalah dengan menonton pin TxD 8, yang kemudian menjadi rendah. Ini bergantung pada konsol siri yang diaktifkan, yang secara lalai. Sebenarnya TxD akan naik dan turun secara berkala semasa ia digunakan sebagai konsol bersiri, tetapi tidak akan pernah turun lebih rendah daripada lebih kurang 30mS pada satu masa, walaupun pada tahap baud biasa paling lambat. Itu masih boleh digunakan untuk konsol bersiri kerana kita menontonnya secara pasif.

Untuk menghidupkan semula, kita perlu menarik SCL1 (pin 5) ke bawah secara ringkas. Pin ini digunakan oleh mana-mana peranti I2C (termasuk antara muka midi saya), tetapi setelah memulakan boot, kami membiarkannya.

Sebilangan besar kerumitan terdapat dalam lakaran Arduino yang kami muatkan ke ATTiny85. Ini menerapkan "mesin keadaan" - cara yang sangat berguna dan kuat untuk mengekod masalah apa pun yang dapat diwakili oleh sejumlah "keadaan". Mesin basuh berfungsi dengan cara yang sama. Keadaan mewakili tahap-tahap dalam kitaran pencucian, dan masing-masing menentukan apa yang harus dilakukan mesin pada ketika itu (motor atau pam yang hendak dijalankan, injap dibuka atau ditutup) dan input sensor apa (suhu, paras air, pemasa) tentukan bila hendak berpindah ke keadaan seterusnya dan negeri mana yang akan dipilih.

Lakaran tangan adalah draf pertama rajah keadaan saya, menunjukkan semua peralihan keadaan. Ini hanya untuk menunjukkan kepada anda bagaimana anda boleh merancang peralihan keadaan dan keadaan anda pada mulanya - mungkin tidak tepat seperti yang saya lakukan sebelum saya memulakan debug.

Dalam kes kami, kami mempunyai 6 keadaan yang telah saya namakan OFF, BOOT REQUEST, BOOTING, RUNNING, SHUTDOWN REQUEST, dan SHUTTING DOWN. (Setelah MENUTUP DOWN, ia bergerak kembali ke MATI.) Ini dikenal pasti oleh komen dalam lakaran, dan untuk masing-masing, komen selanjutnya mengatakan apa yang harus dilakukan dan peristiwa apa yang akan memindahkannya ke keadaan lain.

Program pembantu yang berjalan di Pi sedikit lebih rumit daripada kebanyakan butang tutup. Ia bertindak balas terhadap nadi rendah yang panjang pada pin GPIO dengan memulakan penutupan, tetapi ia juga bertindak balas terhadap nadi pendek dengan sendirinya menarik pin GPIO rendah. Ini adalah bagaimana ATTiny85 dapat mengetahui bahawa ia sedang berjalan dan boleh bergerak dari keadaan BOOTING ke keadaan MENJALANKAN.

Langkah 3: Membina Prototaip Demo

Membina Prototaip Demo
Membina Prototaip Demo
Membina Prototaip Demo
Membina Prototaip Demo
Membina Prototaip Demo
Membina Prototaip Demo

Untuk tujuan demonstrasi, anda boleh membuat prototaip pada papan roti tanpa solder seperti yang ditunjukkan tetapi saya juga telah memberikan skema kepada anda supaya anda dapat menyusun susun atur anda sendiri menggunakan papan jalur atau PCB khusus, mungkin merupakan sebahagian daripada projek yang lebih luas.

Langkah 4: Memprogram ATTiny85

Sketsa Arduino dan program pembantu dilampirkan pada langkah ini. Di folder sketsa Arduino anda, buat folder bernama PiPwr dan salin fail PiPwr.ino ke dalamnya. Melancarkan Arduino IDE, anda sekarang akan menemuinya di buku lakaran anda.

Terdapat beberapa cara pengaturcaraan ATTiny85. Sekiranya pemuat boot anda dipasang, anda boleh menggunakan papan pengembangan ATTiny85 yang berharga hanya beberapa paun. Ini menyambung ke PC anda melalui port USB. Saya menggunakan Hidiot yang pada dasarnya sama tetapi dengan kawasan prototaip.

Di Arduino IDE di bawah Fail - Keutamaan, tambahkan

digistump.com/package_digistump_index.json

ke URL pengurus papan Tambahan.

Di bawah Alat - Papan sekarang anda akan melihat sejumlah pilihan Digispark. Pilih Digispark (Lalai - 16.5MHz).

Sekiranya ATTiny85 anda tidak mempunyai bootloader (atau anda tidak tahu) maka anda boleh mendapatkan programmer AVR ISP dengan harga beberapa paun. Atau anda boleh menggunakan Arduino Uno atau Pro Mini atau Nano yang lebih murah sebagai pengaturcara. Google untuk "arduino as isp attiny85" (tanpa tanda petik) untuk arahan.

Sekiranya anda ingin mengubah lakaran, anda akan mendapat komen sepenuhnya dan mudah diikuti. Untuk melakukan debug, lebih mudah menggunakan Arduino Pro Mini atau Nano. Tanggalkan siri.begin () dalam Penyediaan dan pernyataan cetak dalam gelung () untuk melihat langkah-langkah yang dilaluinya menggunakan monitor bersiri. Terdapat definisi pin alternatif dalam sumber, yang dikomentari, untuk Uno, Pro Mini atau Nano.

Pada Raspberry Pi anda, salin file shutdown_helper.py ke folder / etc / local / bin dan tetapkan sebagai boleh dilaksanakan dengan arahan

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

Sekarang edit fail /etc/rc.local dengan editor kegemaran anda. (Anda perlu melakukannya sebagai root.) Sebelum baris terakhir (keluar 0) masukkan baris

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

Reboot, dan program pembantu akan dimulakan secara automatik.

Disyorkan: