INPUT OUTPUT
Pendahuluan: Input / Output
Sejauh ini Anda telah belajar mengendalikan LED dengan kode, yang merupakan salah satu penggunaan output Arduino . Pelajaran ini dibangun berdasarkan output dengan menambahkan input . Papan Arduino Anda dapat diprogram untuk mendengarkan sinyal listrik dan mengambil tindakan berdasarkan input tersebut. Kami akan menyatukan rangkaian input digital dengan sakelar , dan sirkuit input analog dengan potensiometer (resistor variabel).
Sakelar adalah perangkat mekanis yang menghubungkan atau memutus sirkuit, sering menggunakan tuas atau tombol. Tombol kecil taktil Anda hanyalah salah satu anggota keluarga yang sangat besar dan beragam. Untuk mempelajari lebih lanjut, lihat pelajaran sakelar di kelas Instructables Electronics .
Sebuah variabel resistor adalah komponen dengan hambatan listrik yang berubah. Selain potensiometer (kenop) yang digunakan dalam pelajaran ini, Anda dapat mencari resistor variabel lain untuk dicoba, termasuk tetapi tidak terbatas pada: sensor tekanan ( resistor peka gaya alias FSR), resistor tergantung cahaya (LDR alias photoresistor), dan analog sensor suhu .
Persediaan
Untuk mengikuti pelajaran ini Anda perlu:
- Komputer menjalankan perangkat lunak Arduino
- Beberapa item dari Paket Anggaran Adafruit Arduino Uno
- Papan Arduino Uno
- Kabel USB AB
- Papan tempat memotong roti berukuran setengah
- Kabel papan tempat memotong roti
- Potensiometer 10K
- 1 tombol kecil
- 1 merah menyebar 5mm LED
- 1 resistor 220-1K ohm (nilai apa pun dalam rentang OK)
- 1 resistor 10K ohm
- Piring pemasangan plastik untuk papan tempat memotong roti dan Arduino
- Motor DC kecil
- Transistor PN2222
- 1N4001 dioda
Masukan digital
Mari bersiap-siap untuk memasang sirkuit baru. Ambil beberapa kabel papan tempat memotong roti, LED merah, resistor 1K (coklat-hitam-merah-emas), resistor 10K (coklat-hitam-oranye-emas), dan tombol kecil dari kit Anda. Berikan resistor 10K Anda perawatan siku + trim yang sama seperti resistor rapi lainnya.
Pertama, hubungkan LED ke pin Arduino 13 seperti yang Anda lakukan di sirkuit pertama Anda, dengan kawat dari pin 13 ke ujung positif LED Anda, dan resistor 1K yang menghubungkan ujung negatif LED ke ground.
Selanjutnya, colokkan tombol tekan sehingga mengangkang garis pemisah tengah papan tempat memotong roti Anda. Itu harus klik pada tempatnya dengan pas. Hubungkan 10K resistor dari satu ujung sakelar ke power rail 5V papan tempat memotong roti. Hubungkan kabel ke baris yang sama ini dan hubungkan ke pin Arduino 2.
Hubungkan ujung diagonal sakelar ke ground.
Klik "Mulai Simulasi" dalam modul Sirkuit Tinkercad dan coba klik (dan tahan) tombol untuk melihat apa yang dilakukan kode. Klik tombol "Kode" untuk melihat sketsa.
Anda dapat menemukan contoh ini di perangkat lunak Arduino dengan menavigasi ke File -> Contoh -> 02.Digital -> Tombol. Buka di komputer Anda, dan unggah ke papan Arduino Uno Anda. LED seharusnya menyala, tetapi matikan setiap kali Anda menekan tombol.
Ikuti bersama saat kami menjelajahi kode lebih terinci.
Baris pertama dari program ini memperkenalkan konstanta , yang mirip dengan variabel di mana mereka menyimpan sepotong informasi. Namun seperti yang Anda simpulkan, konstanta tidak berubah sepanjang program Anda, dan karenanya bagus untuk hal-hal seperti nomor pin. Mereka mengambil lebih sedikit ruang memori daripada variabel. Baris 39 mengkonfigurasi pin Arduino 2 sebagai input, sehingga kita dapat "mendengarkan" keadaan tombol tekan listrik.
Di loop utama, fungsi yang disebut
digitalRead();
memeriksa keadaan pin 2 (yang akan menjadi 5V alias TINGGI atau tanah alias RENDAH), dan menyimpan keadaan itu dalam variabel yang disebut buttonState. Baris 48 berisi pernyataan if yang memeriksa apakah buttonState adalah TINGGI ( ==
adalah operator pembanding , jangan dikelirukan dengan =
, yang merupakan operator penugasan ). Jika kondisi terpenuhi, digitalWrite(ledPin, HIGH);
perintah dieksekusi. Jika tidak, kode yang terdapat di dalam else {
dijalankan sebagai gantinya: digitalWrite(ledPin, LOW);
. Jika pernyataan bisa ada sendiri, atau dengan satu atau lebih pernyataan lain .
Pernahkah Anda memperhatikan bahwa sirkuit tombol Anda melakukan tindakan yang berlawanan dari yang dijelaskan dalam kode? Saya melakukan itu dengan sengaja untuk meregangkan otot-otot mental Anda; mari kita bahas sirkuit saklar lagi. Saat istirahat, sakelar sakelar tidak terhubung satu sama lain. Pin 2 terhubung melalui resistor 10K gemuk ke 5V. Saat tombol ditekan, sakelar sakelar terhubung, yang memungkinkan pin 2 dihubungkan ke arde, tanpa resistor. Karena listrik mengambil jalur dengan resistansi paling rendah, pin akan merasakan koneksi ke ground dengan kuat, dan mengabaikan koneksi lemah (10K) ke 5V. Tetapi ketika tidak ada sinyal lain (ketika sakelar tidak ditekan), koneksi lemah ke 5V itu yang bisa dirasakan oleh pin. Jadi resistornya adalah "menarik pin ke atas" ke 5V, dan itu disebut resistor pull-up. Tanpa satu, pin 2 tidak akan terhubung dengan apa pun sampai tombol ditekan. Ini disebut "mengambang", dan dapat menghasilkan derau acak dari listrik statis dan interferensi elektromagnetik. Demikian pula sebuah resistor dapat digunakan untuk mengikat pin ke tanah, yang disebut resistor pull-down .
Jadi untuk mengubah fungsi tombol, Anda dapat mengubah kabel sirkuit Anda, atau mengubah kode. Yang terakhir kurang bekerja dalam kasus ini, tetapi penting untuk diingat bahwa mungkin tidak selalu menjadi kasus ketika Anda membangun proyek sendiri. Edit baris 47 (komentar) dan 48 (jika pernyataan) untuk mengatakan RENDAH daripada TINGGI:
membatalkan loop () { // baca status nilai tombol: buttonState = digitalRead (buttonPin); // periksa apakah tombol ditekan. // jika ya, tombolState RENDAH: if (buttonState == LOW) { // nyalakan LED: digitalWrite (ledPin, HIGH); } lain { // matikan LED: digitalWrite (ledPin, LOW); } }
Unggah sketsa yang diperbarui ke papan Arduino Uno Anda, dan periksa bahwa tombolnya sekarang menyalakan LED alih-alih mati.
Pin Arduino memiliki resistor pull-up bawaan pada banyak pin (yang kecil, di dalam chip hanya untuk tujuan ini), dan Anda dapat mengaksesnya dengan mengaktifkannya di pengaturan:
pinMode (buttonPin, INPUT_PULLUP);
Ubah baris kode ini dalam sketsa Anda dan lepaskan resistor dari sirkuit Anda. Unggah kodenya; perilakunya harus tetap sama.
Monitor Seri
Melacak segala sesuatu yang terjadi dalam program Anda bisa menjadi perjuangan berat. Monitor serial adalah cara untuk memeriksa titik-titik berbeda dalam kode Anda dengan melaporkan kembali ke komputer melalui kabel USB.
Sirkuit ini menggunakan konfigurasi tombol yang sama dengan sirkuit input digital sebelumnya, tetapi tidak menggunakan LED. Muat kode dari modul ini atau temukan di perangkat lunak Arduino dengan menavigasi ke File -> Contoh -> 01.Basics -> DigitalReadSerial. Unggah kode ini ke papan Anda dan klik tombol Serial Monitor di kanan atas jendela sketsa. Anda juga dapat membuka monitor serial virtual di modul Sirkuit Tinkercad di atas (tombol di bagian bawah editor kode).
Untuk membuat koneksi serial, Anda harus menggunakan
Serial.begin();
di dalam pengaturan Anda. Angka 9600 adalah baud rate , atau kecepatan data, dalam bit per detik (bps). Di dalam loop program utama, Anda dapat menggunakan Serial.print();
untuk mengirim informasi ke port serial. Serial.println();
melakukan hal yang sama, tetapi mencetak pada baris baru. Baris 24 dalam kode kami mencetak nilai saat ini dari buttonState (HIGH alias 1 atau RENDAH alias 0) ke port serial. Jadi dengan monitor serial terbuka, kami memiliki tampilan gulir langsung dari apa pun yang dirasakan Arduino di pin 2. Monitor serial sangat berguna saat pemecahan masalah, karena Anda dapat dengan mudah membandingkan apa yang menurut Anda seharusnya terjadi dengan apa yang dilakukan Arduino. Anda juga dapat menggunakan komunikasi serial untuk berbicara antar perangkat dan banyak lagi, yang dapat Anda baca di referensi Arduino.Input Analog
Untuk merasakan sinyal listrik yang berubah secara bertahap, kami akan menggunakan input analog Arduino, yang terletak di sisi kiri papan. Pin khusus ini terhubung ke konverter analog ke digital Arduino (ADC), dilengkapi untuk mengubah sinyal analog antara 0V dan 5V menjadi rentang angka dari 0-1023 (nol dihitung sebagai nilai). Ukuran kekuatan-dua lainnya, 1024 adalah 2 ^ 10 byte, alias 1KB . Ambil salah satu potensiometer biru dari kit Anda dan hubungkan ke tiga baris di papan tempat memotong roti Anda (dengan USB Anda terputus).
Hubungkan pin tengah potensiometer ke pin analog Arduino A0, dan dua pin lainnya masing-masing ke daya dan arde. Pindahkan kabel kendali LED Anda dari pin 13 ke pin 9, jadi kami bisa menggunakan PWM.
Anda bisa mendapatkan kode dari modul Tinkercad Circuits seperti yang Anda miliki untuk pelajaran sebelumnya, atau menemukan contoh dengan menavigasi ke File -> Contoh -> 03.Analog -> AnalogInOutSerial.
Hubungkan kabel USB Anda dan unggah sketsa ke papan Arduino Uno Anda. Buka monitor serial dan amati itu dan LED saat Anda memutar potensiometer.
Nilai yang dibaca oleh input analog dicetak di kolom pertama, dan nilai kecerahan yang diterapkan pada LED dicetak di kolom kedua.
Mari kita lihat lebih dekat loop utama dari program ini:
Sketsa ini menggunakan
map();
fungsi pada baris 39, yang mengambil satu rentang angka dan memijatnya ke rentang lain. Dibutuhkan lima argumen: nilai yang akan diubah, batas bawah dari rentang nilai saat ini, batas atas dari rentang nilai saat ini, batas bawah dari rentang target, dan batas atas dari kisaran target. Jadi baris kode ini menetapkan nilai Output variabel ke angka antara 0 dan 255 tergantung pada posisi potensiometer.
Perintah pencetakan serial pada baris 44-47 mencetak label teks (kutipan di dalam) dan nilai-nilai yang masuk dari sensor dan keluar ke LED. Melihat angka-angka ini berubah bersama di monitor serial dapat benar-benar membantu Anda memahami bagaimana fungsi seperti peta () ; kerja. Ingatlah hal ini saat membuat dan mengatasi masalah sketsa Anda sendiri!
A Moment for Motors
Kode yang sama persis digunakan untuk mencerahkan dan meredupkan LED di sirkuit sebelumnya juga dapat digunakan untuk mengontrol kecepatan motor DCsederhana . Motor dasar ini memerlukan beberapa komponen tambahan untuk membantu mengendalikannya: resistor kecil (gunakan 1K Anda atau coba tanda 100 ohm berwarna coklat-hitam-cokelat-emas), sebuah transistor NPN(kami menggunakan PN2222), dan dioda (1N4001). Resistor digunakan untuk melindungi pin Arduino dari penarikan arus berlebih. Dioda mencegah transistor dari membuang tegangan blowback di mana saja seharusnya tidak (motor sesuatu yang cenderung melakukan). Transistor bertindak seperti katup elektronik, memungkinkan arus mengalir antara kolektor dan emitornya (pin luar PN2222) sebanding dengan sinyal yang diterimanya di pangkalan (pin tengah PN2222). Transistor berguna untuk mengendalikan komponen yang agak haus daya dengan pin mikrokontroler, yang tidak dapat memberikan arus yang cukup secara langsung.
Cabut kabel USB Anda dan bangun sirkuit sesuai dengan diagram, mengatur sisi datar transistor Anda (menghadap jauh dari Arduino di sirkuit ini), serta garis pada dioda Anda (di sisi terjauh dari transistor). Jika Anda menggunakan transistor NPN yang berbeda (seperti 2N2222), koneksi pin transistor Anda mungkin berbeda dari yang digambarkan, jadi lihat lembar data untuk memastikan Anda membuat koneksi berikut:
- Arduino pin 9 ke basis transistor melalui resistor
- 5V ke kolektor transistor melalui dioda
- Ground ke transistor emitor
- Kabel motor untuk kolektor transistor dan 5V (orientasi baik)
Nyalakan papan Anda dan lihat apa efek memutar kenop pada kecepatan motor (gunakan selotip untuk memudahkan melihat poros motor berputar).
Motor yang direkomendasikan untuk rangkaian ini memiliki daya kurang dari 250mA, tetapi yang lebih besar membutuhkan daya lebih dari yang dapat diberikan oleh port USB komputer Anda. Untuk memberi daya pada motor yang lebih besar, banyak LED, dan sirkuit lain yang menggunakan lebih banyak daya, Anda harus menggunakan catu daya eksternal, seperti adaptor AC atau paket baterai. Selain itu, untuk motor yang lebih besar, Anda juga membutuhkan transistor yang lebih besar. Kita akan belajar bagaimana menghitung kebutuhan daya rangkaian Anda pada pelajaran berikutnya, tetapi berdasarkan permintaan populer, inilah sirkuit motor yang sama yang ditenagai oleh paket baterai 6V eksternal (rel daya terpisah, landasan bersama):
Untuk mempelajari lebih lanjut tentang transistor dan menggunakannya dalam suatu proyek, lihat pelajaran transistor di Kelas Elektronik yang Dapat Diarahkan . Untuk mempelajari lebih lanjut tentang motor dan menggunakannya untuk membuat beberapa robot yang menyenangkan, lihat Kelas Robot yang Dapat Diajar .
Anda sekarang tahu blok bangunan dasar dari sebagian besar program Arduino, dan telah membangun beberapa sirkuit yang menunjukkan kegunaannya. Kerja bagus!
Komentar
Posting Komentar