Arduino Menyela

Terganggu

Ini adalah panduan untuk mengimplementasikan interupsi untuk kode Arduino Anda. Ada banyak informasi bagus tentang interupsi di luar sana, tetapi panduan ini adalah bagian dari rangkaian menjalankan Arduino Anda dengan konsumsi daya yang kecil. Maksud kami mungil. Kita berbicara tahun operasi tergantung pada aplikasi .... Pada baterai sel koin. Ini adalah hal-hal yang perlu Anda ketahui untuk membuat proyek Internet atau Benda yang akan tertanam di masa depan. Terus terang, tidak masuk akal berapa banyak daya yang dibuang oleh Arduino. Dengan menggunakan berbagai trik dalam seri panduan ini, Anda akan dapat mengurangi konsumsi daya hingga lebih dari 1000 faktor! Kedengarannya menarik? Maka ini adalah panduan untuk Anda! Jika Anda menyukai panduan ini, atau ingin melihat bagaimana kami menerapkan interupsi dalam proyek kami sendiri, lihat situs web kami di:

//doteverything.co/

Mengapa Saya Membutuhkan Interupsi?

Jawabannya sederhana, sungguh. Anda perlu interupsi karena tanpa interupsi Anda tidak dapat membuat Arduino tidur dan berharap Arduino akan bangun lagi (secara umum. Ada cara untuk bangun dari tidur tanpa interupsi dalam situasi terbatas). Dan jika Anda tidak bisa menidurkannya, Anda akan menenggelamkan kekuatan seperti pelari maraton yang berlari melalui Death Valley di tengah-tengah air musim panas. Mode tidur mengkonsumsi daya yang sangat, sangat sedikit ... tetapi perlu upaya khusus untuk mengatur. Hal pertama yang harus Anda ketahui adalah bagaimana menulis kode Anda untuk memanfaatkan interupsi, maka Anda dapat menggunakan teknik yang lebih kuat.

APA itu interupsi?

Interupsi adalah beberapa hal. Tetapi pada intinya, itu adalah sepotong kode yang dipanggil ketika tindakan khusus terjadi. Tindakan khusus apa? Pada dasarnya, ketika pin tertentu tegangannya berubah. Di Duemilanove / UNO, hanya ada 2 pin yang memenuhi syarat. Tapi seperti yang Anda lihat, ini adalah persyaratan yang sangat luas. Anda dapat menggunakan apa saja untuk mengubah tegangan pada pin tersebut. Ini bisa menjadi input pengguna melalui tombol, dapat berupa perangkat periferal seperti sensor, dapat berupa microchip lain, bahkan dapat berupa timer internal. Hal pertama yang perlu Anda lakukan untuk mulai menggunakan interupsi adalah mencari tahu bagaimana aplikasi Anda dapat dikonversi untuk memiliki pemicu listrik eksternal. Seringkali perangkat lain yang Anda ingin antarmuka ke Arduino Anda akan menggunakan interupsi untuk mendapatkan perhatian Anda. Instruksi kami sebelumnya, Cara Menambahkan Bluetooth ke Proyek Arduino Anda, adalah contoh sempurna untuk menghubungkan perangkat eksternal sedemikian rupa.

Panduan ini akan menunjukkan bagaimana cara menyambungkan rangkaian contoh ke api interupsi. Kemudian, kami akan memberikan beberapa kode contoh. Mudah-mudahan setelah melihat bagaimana hal itu dilakukan, Anda akan masuk ke kerangka berpikir yang benar untuk mencari cara menerapkan interupsi ke proyek Anda.

Katakanlah saya tidak peduli dengan Konsumsi Daya. Apakah saya masih membutuhkan interupsi?

Iya! Bahkan jika Anda tidak berencana untuk mematikan prosesor, Anda mungkin perlu interupsi! Interupsi sangat penting jika Anda memiliki aplikasi tergantung waktu. Ini bisa berarti Anda memerlukan tindakan untuk terjadi setiap x milidetik, atau bahwa Anda memerlukan tindakan untuk terjadi segera setelah peristiwa eksternal terjadi. Jika Anda terbiasa dengan dasar-dasar pemrograman Arduino, Anda mungkin bertanya-tanya mengapa Anda tidak bisa menggunakan loop sementara untuk memeriksa kapan saatnya untuk melakukan tindakan Anda. Solusi tipikalnya adalah membuat loop sementara Anda "polling" keadaan pin secepat mungkin. Metode ini sering berhasil, tetapi tidak dapat diandalkan. Apa yang terjadi jika Anda polling untuk menekan tombol, tetapi tombol ditekan dan dilepaskan sebelum loop sementara Anda berkeliling untuk memeriksa keadaan tombol lagi? Anda akan kehilangan tombol tekan. Apa yang terjadi jika Anda mencari acara yang sangat cepat, seperti sinyal dari sensor? Anda harus melakukan pemungutan suara secara terus-menerus dan program Anda tidak dapat melakukan hal lain karena takut ketinggalan acara kritis. Tetapi dengan interupsi, Anda dijamin 100% untuk menyaksikan acara tersebut. Menggunakan interupsi juga membuat Anda tidak perlu memeriksa status penghemat daya secara terus-menerus dan membiarkan perputaran sementara Anda menyelesaikan tugas lainnya dengan lebih cepat.

Langkah 1: Ikhtisar Sirkuit

Inilah sirkuit yang harus Anda bangun untuk membuat interupsi pertama Anda:

... Atau setidaknya itu sirkuit yang HARUS Anda bangun. Untungnya sebagian besar papan Arduino sudah memiliki LED dan resistor bawaan, dalam konfigurasi ini. Mereka dapat diaktifkan dalam perangkat lunak. Sayangnya, hanya menggunakan fungsi bawaan tidak menunjukkan semua yang terjadi! Jadi, ada baiknya Anda mempelajari skema ini dan memahami apa yang dilakukannya. Fakta bahwa rangkaian yang tepat ini dibangun untuk Arduino sudah harus memberi Anda petunjuk utama tentang seberapa penting itu.

Bagian terpenting dari rangkaian ini adalah resistor 20k yang terhubung ke + 5V. Ini disebut resistor pull-up. Jika resistor telah terhubung ke GND alih-alih + 5V, itu akan disebut resistor pull-down (Arduino tidak memiliki resistor pull-down, Anda harus menambahkannya secara eksternal). Penarik pull-up memegang pin yang dikaitkan dengan pada + 5V secara normal. Jadi dibiarkan saja, pin akan selalu membaca TINGGI. Jika Anda menghubungkan pin secara langsung ke GND (katakanlah, dengan menutup tombol), pin tersebut akan diturunkan ke 0V dan akan membaca RENDAH. Jika kami tidak memiliki pull-up, kami tidak bisa mendapatkan tombol untuk melakukan sesuatu yang berarti. Pin Arduino apa pun dapat dihubungkan ke + 5V secara internal dengan menentukan pinMode (pin #, INPUT_PULLUP). Perhatikan bahwa pullup hanya bermakna ketika pin dikonfigurasi sebagai input. Untuk informasi lebih lanjut tentang pull-up, periksa halaman DigitalPins.

INTERRUPT_PIN harus menyematkan 2 atau 3 pada Arduino UNO Anda (atau Arduino berbasis 328p lainnya). Untuk Arduino lain, periksa halaman ini untuk menemukan pin yang mampu mengganggu. Sebagai contoh kode kita, kita akan menghubungkannya ke pin 2. LED yang terhubung ke ANY_PIN adalah rangkaian langsung. Arduino sudah memiliki LED yang terhubung ke pin 13, jadi kami akan menggunakannya tetapi jangan ragu untuk memodifikasi sirkuit dengan LED Anda sendiri pada pin yang berbeda. LED Arduino memiliki huruf "L" di sebelahnya.

Tombol sering memiliki 4 pin - biasanya dua pin hanya terhubung secara internal ke pin lain di sisi tombol yang sama. Jika Anda menekan tombol dan tidak ada yang terjadi, periksa apakah Anda benar-benar menyambungkan sirkuit Anda di pin yang terhubung ketika tombol ditekan, bukan di pin yang selalu terhubung.

Langkah 2: Pengkabelan Aktual

Dengan semua itu dalam pikiran, jika Anda ingin menggunakan pull-up Arduino internal dan LED onboard, inilah sirkuit super sederhana yang sebenarnya harus Anda hubungkan.

Langkah 3: Kode

Ada beberapa hal yang perlu ditunjukkan di sini. Yang paling menarik adalah baris 10, tempat kami mengkonfigurasi interupsi. attachInterrupt () membutuhkan 3 argumen. Yang pertama adalah nomor interupsi, bukan nomor pin. Anda tidak perlu khawatir tentang ini, pastikan untuk selalu menggunakan digitalPinToInterrupt (Pin #) dan itu akan diterjemahkan secara otomatis. Ingat, hanya pin tertentu yang dapat diubah menjadi pin interupsi. Argumen kedua adalah nama fungsi yang Anda ingin kode Anda lompati setiap kali interupsi dipicu. Anda dapat melihat bagaimana fungsi ini didefinisikan pada baris 21.

Argumen ketiga untuk melampirkanInterrupt () adalah, dalam hal ini, kata kunci FALLING. Ini berarti interupsi akan terpicu ketika tegangan pada pin 2 beralih dari TINGGI ke RENDAH. Anda juga dapat menentukan RISING, yang akan memicu ketika tegangan rendah ke TINGGI; atau Anda bisa menggunakan CHANGE, yang akan memicu ketika tegangan berubah di kedua arah. Di sirkuit kami, ketika tombol ditekan, tegangan akan berubah dari tinggi ke rendah, dan ketika tombol dilepas, itu akan beralih dari tinggi ke rendah. Kami tidak ingin memicu kode dua kali setiap kali tombol beralih, jadi kami memilih RISING atau FALLING. Aplikasi Anda mungkin meminta sesuatu yang berbeda.

Mencoba

Jika Anda memuat kode, jalankan Serial Monitor, dan klik tombol Anda akan melihat bahwa LED tidak berperilaku tepat seperti yang kami maksudkan. Kami ingin LED berputar antara hidup dan mati setiap kali tombol ditekan. Tetapi bagi Anda, itu kemungkinan akan berkedip dan padam beberapa kali setiap kali Anda menekan tombol. Ini terjadi karena tombol tidak sempurna. Jari Anda mungkin menekan tombol, tetapi jika Anda melihat pada tingkat mikroskopis tombol sebenarnya memantul kontak beberapa kali sebelum menutup sepenuhnya. Setiap bouncing akan memicu interupsi. Sistem kami sangat tepat dan sangat sensitif sehingga kami benar-benar memperkenalkan masalah baru! Untuk memperbaikinya, kami menggunakan rutin yang dikenal sebagai debouncing untuk membuat deteksi interupsi kurang sensitif.

Langkah 4: Contoh

Ini yang saya coba. Ini tidak sempurna, tentu ada cara yang lebih baik, tetapi itu sudah cukup untuk Anda mulai menggunakan tombol.

Ide dasarnya adalah mencatat kapan tombol ditekan terakhir kali menggunakan fungsi millis (). (Fungsi milis () memberi tahu Anda berapa milidetik yang telah berlalu sejak sketsa mulai berjalan). Jika pemicu interupsi sebelumnya terjadi kurang dari 200 milidetik sebelum yang sekarang, kemungkinan tombol memantul, jadi tidak ada tindakan yang diambil. Kalau tidak, semuanya terjadi secara normal. Variabel apa pun yang Anda ingin modifikasi di dalam fungsi Interrupt harus dinyatakan sebagai volatile sehingga loop interupsi dan utama tidak pernah tidak setuju pada nilai.

Langkah 5: Apa Selanjutnya?

Itu dia! Setiap kali Anda mengklik tombol, LED harus berubah status. Anda sekarang memiliki gangguan kerja. Terserah Anda untuk membayangkan cara memasukkan interupsi ke dalam proyek Anda. Seperti yang Anda lihat, interupsi sangat penting ketika pengaturan waktu dan daya komputasi penting. Dalam panduan berikutnya kita akan membahas bagaimana menempatkan ATMega328p ke mode tidur sangat-rendah, mengandalkan interupsi untuk membangunkan kita lagi. Sampai saat itu, berlanggananlah kami di Instructables dan lihat halaman produk kami di www.doteverything.co. Kami sedang membangun Dot, perangkat Internet of Things yang kami harap akan Anda temukan keren dan berguna, dan melalui seri panduan ini kami akan menunjukkan kepada Anda bagaimana membangun versi perangkat keras Anda sendiri!

Artikel Terkait