Arduino - Panduan Cepat

Arduino adalah platform prototipe (open-source) berdasarkan perangkat keras dan perangkat lunak yang mudah digunakan. Ini terdiri dari papan sirkuit, yang dapat diprogram (disebut sebagai mikrokontroler) dan perangkat lunak siap pakai yang disebut Arduino IDE (Lingkungan Pengembangan Terpadu), yang digunakan untuk menulis dan mengunggah kode komputer ke papan fisik.

Fitur utamanya adalah -

  • Papan Arduino mampu membaca sinyal input analog atau digital dari sensor yang berbeda dan mengubahnya menjadi output seperti mengaktifkan motor, menyalakan / mematikan LED, menghubungkan ke cloud dan banyak tindakan lainnya.

  • Anda dapat mengontrol fungsi papan Anda dengan mengirimkan satu set instruksi ke mikrokontroler di papan melalui Arduino IDE (disebut sebagai perangkat lunak pengunggah).

  • Tidak seperti kebanyakan papan sirkuit yang dapat diprogram sebelumnya, Arduino tidak memerlukan perangkat keras tambahan (disebut programmer) untuk memuat kode baru ke papan. Anda cukup menggunakan kabel USB.

  • Selain itu, Arduino IDE menggunakan versi C ++ yang disederhanakan, sehingga lebih mudah untuk mempelajari program.

  • Terakhir, Arduino menyediakan faktor bentuk standar yang memecah fungsi pengontrol mikro menjadi paket yang lebih mudah diakses.

Jenis Papan

Berbagai jenis papan Arduino tersedia tergantung pada mikrokontroler berbeda yang digunakan. Namun, semua papan Arduino memiliki satu kesamaan: mereka diprogram melalui Arduino IDE.

Perbedaan tersebut didasarkan pada jumlah masukan dan keluaran (jumlah sensor, LED, dan tombol yang dapat Anda gunakan pada satu papan), kecepatan, tegangan operasi, faktor bentuk, dll. Beberapa papan dirancang untuk disematkan dan tidak memiliki program antarmuka (perangkat keras), yang perlu Anda beli secara terpisah. Beberapa dapat dijalankan langsung dari baterai 3.7V, yang lain membutuhkan setidaknya 5V.

Berikut adalah daftar papan Arduino berbeda yang tersedia.

Arduino boards based on ATMEGA328 microcontroller

Nama Papan Volt Pengoperasian Kecepatan jam I / o digital Input Analog PWM UART Antarmuka Pemrograman
Arduino Uno R3 5V 16MHz 14 6 6 1 USB melalui ATMega16U2
Arduino Uno R3 SMD 5V 16MHz 14 6 6 1 USB melalui ATMega16U2
Papan Merah 5V 16MHz 14 6 6 1 USB melalui FTDI
Arduino Pro 3.3v / 8 MHz 3.3V 8MHz 14 6 6 1 Header yang Kompatibel dengan FTDI
Arduino Pro 5V / 16MHz 5V 16MHz 14 6 6 1 Header yang Kompatibel dengan FTDI
Arduino mini 05 5V 16MHz 14 8 6 1 Header yang Kompatibel dengan FTDI
Arduino Pro mini 3.3v / 8mhz 3.3V 8MHz 14 8 6 1 Header yang Kompatibel dengan FTDI
Arduino Pro mini 5v / 16mhz 5V 16MHz 14 8 6 1 Header yang Kompatibel dengan FTDI
Ethernet Arduino 5V 16MHz 14 6 6 1 Header yang Kompatibel dengan FTDI
Arduino Fio 3.3V 8MHz 14 8 6 1 Header yang Kompatibel dengan FTDI
LilyPad Arduino 328 papan utama 3.3V 8MHz 14 6 6 1 Header yang Kompatibel dengan FTDI
Papan sederhana LilyPad Arduino 3.3V 8MHz 9 4 5 0 Header yang Kompatibel dengan FTDI

Arduino boards based on ATMEGA32u4 microcontroller

Nama Papan Volt Pengoperasian Kecepatan jam I / o digital Input Analog PWM UART Antarmuka Pemrograman
Arduino Leonardo 5V 16MHz 20 12 7 1 USB Asli
Pro mikro 5V / 16MHz 5V 16MHz 14 6 6 1 USB Asli
Pro mikro 3,3V / 8MHz 5V 16MHz 14 6 6 1 USB Asli
LilyPad Arduino USB 3.3V 8MHz 14 6 6 1 USB Asli

Arduino boards based on ATMEGA2560 microcontroller

Nama Papan Volt Pengoperasian Kecepatan jam I / o digital Input Analog PWM UART Antarmuka Pemrograman
Arduino Mega 2560 R3 5V 16MHz 54 16 14 4 USB melalui ATMega16U2B
Mega Pro 3.3V 3.3V 8MHz 54 16 14 4 Header yang Kompatibel dengan FTDI
Mega Pro 5V 5V 16MHz 54 16 14 4 Header yang Kompatibel dengan FTDI
Mega Pro Mini 3.3V 3.3V 8MHz 54 16 14 4 Header yang Kompatibel dengan FTDI

Arduino boards based on AT91SAM3X8E microcontroller

Nama Papan Volt Pengoperasian Kecepatan jam I / o digital Input Analog PWM UART Antarmuka Pemrograman
Arduino Mega 2560 R3 3.3V 84MHz 54 12 12 4 USB asli

Dalam bab ini, kita akan belajar tentang berbagai komponen di papan Arduino. Kami akan mempelajari papan Arduino UNO karena itu adalah papan paling populer di keluarga papan Arduino. Selain itu, ini adalah papan terbaik untuk memulai dengan elektronik dan pengkodean. Beberapa papan terlihat sedikit berbeda dari yang diberikan di bawah ini, tetapi sebagian besar Arduino memiliki mayoritas komponen yang sama.

Power USB

Papan Arduino dapat didukung dengan menggunakan kabel USB dari komputer Anda. Yang perlu Anda lakukan hanyalah menghubungkan kabel USB ke koneksi USB (1).

Power (Barrel Jack)

Papan Arduino dapat diberi daya langsung dari catu daya listrik AC dengan menghubungkannya ke Barrel Jack (2).

Voltage Regulator

Fungsi pengatur tegangan adalah untuk mengontrol tegangan yang diberikan ke papan Arduino dan menstabilkan tegangan DC yang digunakan oleh prosesor dan elemen lainnya.

Crystal Oscillator

Osilator kristal membantu Arduino dalam menangani masalah waktu. Bagaimana Arduino menghitung waktu? Jawabannya adalah dengan menggunakan osilator kristal. Angka yang tercetak di atas kristal Arduino adalah 16.000H9H. Ini memberitahu kita bahwa frekuensinya adalah 16.000.000 Hertz atau 16 MHz.

Arduino Reset

Anda dapat mengatur ulang papan Arduino Anda, yaitu memulai program Anda dari awal. Anda dapat mengatur ulang papan UNO dengan dua cara. Pertama, dengan menggunakan tombol reset (17) di papan. Kedua, Anda dapat menghubungkan tombol reset eksternal ke pin Arduino berlabel RESET (5).

Pins (3.3, 5, GND, Vin)

  • 3.3V (6) - Menyediakan tegangan keluaran 3,3

  • 5V (7) - Pasokan 5 volt keluaran

  • Sebagian besar komponen yang digunakan dengan papan Arduino bekerja dengan baik dengan tegangan 3,3 volt dan 5 volt.

  • GND (8) (Ground) - Ada beberapa pin GND pada Arduino, salah satunya dapat digunakan untuk membumikan sirkuit Anda.

  • Vin (9) - Pin ini juga dapat digunakan untuk menyalakan papan Arduino dari sumber daya eksternal, seperti catu daya listrik AC.

Analog pins

Papan Arduino UNO memiliki enam pin input analog A0 hingga A5. Pin ini dapat membaca sinyal dari sensor analog seperti sensor kelembaban atau sensor suhu dan mengubahnya menjadi nilai digital yang dapat dibaca oleh mikroprosesor.

Main microcontroller

Setiap papan Arduino memiliki mikrokontroler sendiri (11). Anda dapat menganggapnya sebagai otak papan Anda. IC utama (sirkuit terintegrasi) pada Arduino sedikit berbeda dari papan ke papan. Mikrokontroler biasanya dari Perusahaan ATMEL. Anda harus tahu IC apa yang dimiliki papan Anda sebelum memuat program baru dari Arduino IDE. Informasi ini tersedia di bagian atas IC. Untuk detail lebih lanjut tentang konstruksi dan fungsi IC, Anda dapat merujuk ke lembar data.

ICSP pin

Sebagian besar, ICSP (12) adalah AVR, header pemrograman kecil untuk Arduino yang terdiri dari MOSI, MISO, SCK, RESET, VCC, dan GND. Hal ini sering disebut sebagai SPI (Serial Peripheral Interface), yang dapat dianggap sebagai "perluasan" dari keluaran. Sebenarnya, Anda memasang perangkat keluaran ke master bus SPI.

Power LED indicator

LED ini akan menyala ketika Anda mencolokkan Arduino Anda ke sumber daya untuk menunjukkan bahwa papan Anda dinyalakan dengan benar. Jika lampu ini tidak menyala, berarti ada yang salah dengan koneksi.

TX and RX LEDs

Di papan Anda, Anda akan menemukan dua label: TX (transmisi) dan RX (terima). Mereka muncul di dua tempat di papan Arduino UNO. Pertama, di pin digital 0 dan 1, untuk menunjukkan pin yang bertanggung jawab untuk komunikasi serial. Kedua, led TX dan RX (13). LED TX berkedip dengan kecepatan berbeda saat mengirim data serial. Kecepatan flashing tergantung pada baud rate yang digunakan oleh board. RX berkedip selama proses penerimaan.

Digital I/O

Papan Arduino UNO memiliki 14 pin I / O digital (15) (6 di antaranya menyediakan output PWM (Pulse Width Modulation). Pin ini dapat dikonfigurasi untuk bekerja sebagai pin digital input untuk membaca nilai logika (0 atau 1) atau sebagai digital pin keluaran untuk menggerakkan modul yang berbeda seperti LED, relai, dll. Pin berlabel "~" dapat digunakan untuk menghasilkan PWM.

AREF

AREF adalah singkatan dari Analog Reference. Kadang-kadang, digunakan untuk mengatur tegangan referensi eksternal (antara 0 dan 5 Volt) sebagai batas atas untuk pin input analog.

Setelah mempelajari tentang bagian utama dari papan Arduino UNO, kami siap untuk mempelajari cara mengatur Arduino IDE. Setelah kita mempelajari ini, kita akan siap untuk mengunggah program kita ke papan Arduino.

Di bagian ini, kita akan belajar dalam langkah-langkah mudah, cara mengatur Arduino IDE di komputer kita dan menyiapkan papan untuk menerima program melalui kabel USB.

Step 1- Pertama, Anda harus memiliki papan Arduino (Anda dapat memilih papan favorit Anda) dan kabel USB. Jika Anda menggunakan Arduino UNO, Arduino Duemilanove, Nano, Arduino Mega 2560, atau Diecimila, Anda memerlukan kabel USB standar (colokan A ke colokan B), jenis yang akan Anda sambungkan ke printer USB seperti yang ditunjukkan pada gambar berikut.

Jika Anda menggunakan Arduino Nano, Anda memerlukan kabel A ke Mini-B sebagai gantinya seperti yang ditunjukkan pada gambar berikut.

Step 2 − Download Arduino IDE Software.

Anda bisa mendapatkan berbagai versi Arduino IDE dari halaman Download di situs resmi Arduino. Anda harus memilih perangkat lunak Anda, yang kompatibel dengan sistem operasi Anda (Windows, IOS, atau Linux). Setelah unduhan file Anda selesai, buka zip file tersebut.

Step 3 − Power up your board.

Arduino Uno, Mega, Duemilanove dan Arduino Nano secara otomatis menarik daya dari koneksi USB ke komputer atau catu daya eksternal. Jika Anda menggunakan Arduino Diecimila, Anda harus memastikan bahwa papan telah dikonfigurasi untuk menarik daya dari koneksi USB. Sumber listrik dipilih dengan jumper, sepotong kecil plastik yang pas dengan dua dari tiga pin antara USB dan colokan listrik. Periksa apakah itu ada di dua pin yang paling dekat dengan port USB.

Hubungkan papan Arduino ke komputer Anda menggunakan kabel USB. LED daya hijau (berlabel PWR) akan menyala.

Step 4 − Launch Arduino IDE.

Setelah perangkat lunak Arduino IDE Anda diunduh, Anda perlu mengekstrak foldernya. Di dalam folder tersebut, Anda dapat menemukan ikon aplikasi dengan label infinity (application.exe). Klik dua kali ikon tersebut untuk memulai IDE.

Step 5 − Open your first project.

Setelah perangkat lunak dimulai, Anda memiliki dua opsi -

  • Buat proyek baru.
  • Buka contoh proyek yang sudah ada.

Untuk membuat proyek baru, pilih File → New.

Untuk membuka contoh proyek yang ada, pilih File → Contoh → Dasar-dasar → Blink.

Di sini, kami hanya memilih salah satu contoh dengan nama Blink. Ini menyalakan dan mematikan LED dengan beberapa waktu tunda. Anda dapat memilih contoh lain dari daftar.

Step 6 − Select your Arduino board.

Untuk menghindari kesalahan saat mengunggah program Anda ke papan, Anda harus memilih nama papan Arduino yang benar, yang cocok dengan papan yang terhubung ke komputer Anda.

Buka Alat → Papan dan pilih papan Anda.

Di sini, kami telah memilih papan Arduino Uno sesuai dengan tutorial kami, tetapi Anda harus memilih nama yang cocok dengan papan yang Anda gunakan.

Step 7 − Select your serial port.

Pilih perangkat serial papan Arduino. Pergi keTools → Serial PortTidak bisa. Ini mungkin COM3 atau lebih tinggi (COM1 dan COM2 biasanya disediakan untuk port serial perangkat keras). Untuk mengetahuinya, Anda dapat memutuskan sambungan papan Arduino Anda dan membuka kembali menu, entri yang menghilang seharusnya dari papan Arduino. Sambungkan kembali papan dan pilih port serial itu.

Step 8 − Upload the program to your board.

Sebelum menjelaskan bagaimana kita dapat mengunggah program kita ke papan, kita harus mendemonstrasikan fungsi dari setiap simbol yang muncul di toolbar Arduino IDE.

A - Digunakan untuk memeriksa apakah ada kesalahan kompilasi.

B - Digunakan untuk mengunggah program ke papan Arduino.

C - Pintasan yang digunakan untuk membuat sketsa baru.

D - Digunakan untuk langsung membuka salah satu contoh sketsa.

E - Digunakan untuk menyimpan sketsa Anda.

F - Monitor serial digunakan untuk menerima data serial dari papan dan mengirim data serial ke papan.

Sekarang, cukup klik tombol "Unggah" di lingkungan. Tunggu beberapa detik; Anda akan melihat RX dan TX LED di papan, berkedip. Jika unggahan berhasil, pesan "Selesai mengunggah" akan muncul di bilah status.

Note - Jika Anda memiliki Arduino Mini, NG, atau papan lainnya, Anda perlu menekan tombol reset secara fisik di papan, segera sebelum mengklik tombol unggah pada Perangkat Lunak Arduino.

Dalam bab ini, kita akan mempelajari secara mendalam, struktur program Arduino dan kita akan mempelajari lebih banyak terminologi baru yang digunakan di dunia Arduino. Perangkat lunak Arduino adalah sumber terbuka. Kode sumber untuk lingkungan Java dirilis di bawah GPL dan pustaka mikrokontroler C / C ++ di bawah LGPL.

Sketch - Terminologi baru pertama adalah program Arduino yang disebut “sketch".

Struktur

Program Arduino dapat dibagi menjadi tiga bagian utama: Structure, Values (variabel dan konstanta), dan Functions. Dalam tutorial ini, kita akan belajar tentang program perangkat lunak Arduino, selangkah demi selangkah, dan bagaimana kita dapat menulis program tanpa kesalahan sintaks atau kompilasi.

Mari kita mulai dengan Structure. Struktur perangkat lunak terdiri dari dua fungsi utama -

  • Fungsi Setup ()
  • Fungsi loop ()
Void setup ( ) {

}
  • PURPOSE - Itu setup()fungsi dipanggil saat sketsa dimulai. Gunakan untuk menginisialisasi variabel, mode pin, mulai menggunakan perpustakaan, dll. Fungsi pengaturan hanya akan berjalan satu kali, setelah masing-masing menyalakan atau mengatur ulang papan Arduino.

  • INPUT - -

  • OUTPUT - -

  • RETURN - -

Void Loop ( ) {

}
  • PURPOSE - Setelah membuat setup() fungsi, yang menginisialisasi dan menetapkan nilai awal, yaitu loop()function melakukan persis seperti yang disarankan namanya, dan mengulang secara berurutan, memungkinkan program Anda untuk berubah dan merespons. Gunakan untuk mengontrol papan Arduino secara aktif.

  • INPUT - -

  • OUTPUT - -

  • RETURN - -

Tipe data di C mengacu pada sistem ekstensif yang digunakan untuk mendeklarasikan variabel atau fungsi dari tipe yang berbeda. Jenis variabel menentukan berapa banyak ruang yang ditempati dalam penyimpanan dan bagaimana pola bit yang disimpan diinterpretasikan.

Tabel berikut menyediakan semua tipe data yang akan Anda gunakan selama pemrograman Arduino.

kosong Boolean arang Karakter tak bertanda tangan byte int Int tak bertanda tangan kata
panjang Tak bertanda tangan panjang pendek mengapung dua kali lipat Himpunan Array string-char Objek string

kosong

Kata kunci void hanya digunakan dalam deklarasi fungsi. Ini menunjukkan bahwa fungsi tersebut diharapkan tidak mengembalikan informasi ke fungsi yang memanggilnya.

Contoh

Void Loop ( ) {
   // rest of the code
}

Boolean

Boolean memiliki salah satu dari dua nilai, benar atau salah. Setiap variabel Boolean menempati satu byte memori.

Contoh

boolean val = false ; // declaration of variable with type boolean and initialize it with false
boolean state = true ; // declaration of variable with type boolean and initialize it with true

Arang

Tipe data yang membutuhkan satu byte memori yang menyimpan nilai karakter. Literal karakter ditulis dalam tanda kutip tunggal seperti ini: 'A' dan untuk beberapa karakter, string menggunakan tanda kutip ganda: "ABC".

Namun, karakter disimpan sebagai angka. Anda dapat melihat pengkodean khusus di bagan ASCII . Artinya, operasi aritmatika pada karakter dapat dilakukan, di mana nilai ASCII dari karakter tersebut digunakan. Misalnya, 'A' + 1 bernilai 66, karena nilai ASCII dari huruf kapital A adalah 65.

Contoh

Char chr_a = ‘a’ ;//declaration of variable with type char and initialize it with character a
Char chr_c = 97 ;//declaration of variable with type char and initialize it with character 97

unsigned char

Unsigned charadalah tipe data unsigned yang menempati satu byte memori. Tipe data karakter unsigned mengkodekan angka dari 0 hingga 255.

Contoh

Unsigned Char chr_y = 121 ; // declaration of variable with type Unsigned char and initialize it with character y

byte

Sebuah byte menyimpan nomor unsigned 8-bit, dari 0 hingga 255.

Contoh

byte m = 25 ;//declaration of variable with type byte and initialize it with 25

int

Bilangan bulat adalah tipe data utama untuk penyimpanan nomor. int menyimpan nilai 16-bit (2-byte). Ini menghasilkan kisaran -32.768 hingga 32.767 (nilai minimum -2 ^ 15 dan nilai maksimum (2 ^ 15) - 1).

Itu intukuran bervariasi dari papan ke papan. Di Arduino Due, misalnya, fileintmenyimpan nilai 32-bit (4-byte). Ini menghasilkan kisaran -2.147.483.648 hingga 2.147.483.647 (nilai minimum -2 ^ 31 dan nilai maksimum (2 ^ 31) - 1).

Contoh

int counter = 32 ;// declaration of variable with type int and initialize it with 32

Int tak bertanda tangan

Unsigned int (unsigned integers) sama dengan int dalam cara mereka menyimpan nilai 2 byte. Alih-alih menyimpan angka negatif, bagaimanapun, mereka hanya menyimpan nilai positif, menghasilkan kisaran yang berguna dari 0 hingga 65.535 (2 ^ 16) - 1). Due menyimpan nilai 4 byte (32-bit), mulai dari 0 hingga 4.294.967.295 (2 ^ 32 - 1).

Contoh

Unsigned int counter = 60 ; // declaration of variable with 
   type unsigned int and initialize it with 60

Kata

Di Uno dan papan berbasis ATMEGA lainnya, sebuah kata menyimpan nomor 16-bit yang tidak ditandatangani. Di Due dan Zero, ia menyimpan nomor 32-bit unsigned.

Contoh

word w = 1000 ;//declaration of variable with type word and initialize it with 1000

Panjang

Variabel panjang adalah variabel ukuran yang diperluas untuk penyimpanan nomor, dan menyimpan 32 bit (4 byte), dari -2.147.483.648 menjadi 2.147.483.647.

Contoh

Long velocity = 102346 ;//declaration of variable with type Long and initialize it with 102346

unsigned long

Variabel panjang unsigned adalah variabel ukuran yang diperluas untuk penyimpanan nomor dan penyimpanan 32 bit (4 byte). Tidak seperti long standar, unsigned long tidak akan menyimpan angka negatif, membuat kisarannya dari 0 hingga 4.294.967.295 (2 ^ 32 - 1).

Contoh

Unsigned Long velocity = 101006 ;// declaration of variable with 
   type Unsigned Long and initialize it with 101006

pendek

Short adalah tipe data 16-bit. Pada semua Arduino (berbasis ATMega dan ARM), short menyimpan nilai 16-bit (2-byte). Ini menghasilkan kisaran -32.768 hingga 32.767 (nilai minimum -2 ^ 15 dan nilai maksimum (2 ^ 15) - 1).

Contoh

short val = 13 ;//declaration of variable with type short and initialize it with 13

mengapung

Tipe data untuk bilangan floating-point adalah bilangan yang memiliki koma desimal. Bilangan floating-point sering digunakan untuk memperkirakan nilai analog dan kontinu karena memiliki resolusi yang lebih besar daripada bilangan bulat.

Angka floating-point bisa sebesar 3,4028235E + 38 dan paling rendah -3,4028235E + 38. Mereka disimpan sebagai informasi 32 bit (4 byte).

Contoh

float num = 1.352;//declaration of variable with type float and initialize it with 1.352

dua kali lipat

Pada Uno dan papan berbasis ATMEGA lainnya, angka floating-point presisi ganda menempati empat byte. Artinya, implementasi ganda persis sama dengan float, tanpa perolehan presisi. Pada Arduino Due, double memiliki presisi 8-byte (64 bit).

Contoh

double num = 45.352 ;// declaration of variable with type double and initialize it with 45.352

Sebelum kita mulai menjelaskan tipe variabel, subjek yang sangat penting yang perlu kita pastikan, Anda mengerti sepenuhnya disebut variable scope.

Apa itu Variable Scope?

Variabel dalam bahasa pemograman C yang digunakan Arduino memiliki sifat yang disebut scope. Cakupan adalah wilayah program dan ada tiga tempat di mana variabel dapat dideklarasikan. Mereka adalah -

  • Di dalam fungsi atau blok, yang disebut local variables.
  • Dalam definisi parameter fungsi, yang disebut formal parameters.
  • Di luar semua fungsi, yang disebut global variables.

Variabel Lokal

Variabel yang dideklarasikan di dalam fungsi atau blok adalah variabel lokal. Mereka hanya dapat digunakan oleh pernyataan yang ada di dalam fungsi atau blok kode itu. Variabel lokal tidak diketahui berfungsi di luar variabel mereka sendiri. Berikut adalah contoh menggunakan variabel lokal -

Void setup () {

}

Void loop () {
   int x , y ;
   int z ; Local variable declaration
   x = 0;
   y = 0; actual initialization
   z = 10;
}

Variabel Global

Variabel global didefinisikan di luar semua fungsi, biasanya di bagian atas program. Variabel global akan mempertahankan nilainya sepanjang waktu program Anda.

Variabel global dapat diakses oleh fungsi apa pun. Artinya, variabel global tersedia untuk digunakan di seluruh program Anda setelah deklarasi.

Contoh berikut menggunakan variabel global dan lokal -

Int T , S ;
float c = 0 ; Global variable declaration

Void setup () {

}

Void loop () {
   int x , y ;
   int z ; Local variable declaration
   x = 0;
   y = 0; actual initialization
   z = 10;
}

Operator adalah simbol yang memberi tahu kompiler untuk melakukan fungsi matematika atau logika tertentu. Bahasa C kaya akan operator bawaan dan menyediakan jenis operator berikut -

  • Operator Aritmatika
  • Operator Perbandingan
  • Operator Boolean
  • Operator Bitwise
  • Operator Senyawa

Operator Aritmatika

Asumsikan variabel A memiliki 10 dan variabel B memiliki 20 maka -

Tunjukkan Contoh

Nama operator Operator sederhana Deskripsi Contoh
operator tugas = Menyimpan nilai di sebelah kanan tanda sama dengan dalam variabel di sebelah kiri tanda sama dengan. A = B
tambahan + Menambahkan dua operan A + B akan menghasilkan 30
pengurangan - Mengurangi operan kedua dari yang pertama A - B akan memberi -10
perkalian * Kalikan kedua operan A * B akan memberi 200
divisi / Bagilah pembilang dengan penyebut B / A akan memberi 2
modulo % Modulus Operator dan sisa setelah pembagian integer B% A akan memberi 0

Operator Perbandingan

Asumsikan variabel A memiliki 10 dan variabel B memiliki 20 maka -

Tunjukkan Contoh

Nama operator Operator sederhana Deskripsi Contoh
sama dengan == Memeriksa apakah nilai dua operan sama atau tidak, jika ya maka kondisinya menjadi benar. (A == B) tidak benar
tidak sebanding dengan ! = Memeriksa apakah nilai dari dua operan sama atau tidak, jika nilai tidak sama maka kondisi menjadi benar. (A! = B) benar
kurang dari < Memeriksa apakah nilai operan kiri kurang dari nilai operan kanan, jika ya maka kondisinya menjadi benar. (A <B) benar
lebih besar dari > Memeriksa apakah nilai operan kiri lebih besar dari nilai operan kanan, jika ya maka kondisi menjadi benar. (A> B) tidak benar
kurang dari atau sama dengan <= Memeriksa apakah nilai operan kiri kurang dari atau sama dengan nilai operan kanan, jika ya maka kondisi menjadi benar. (A <= B) benar
lebih dari atau sama dengan > = Memeriksa apakah nilai operan kiri lebih besar dari atau sama dengan nilai operan kanan, jika ya maka kondisi menjadi benar. (A> = B) tidak benar

Operator Boolean

Asumsikan variabel A memiliki 10 dan variabel B memiliki 20 maka -

Tunjukkan Contoh

Nama operator Operator sederhana Deskripsi Contoh
dan && Disebut Logical AND operator. Jika kedua operan bukan nol maka kondisi menjadi benar. (A && B) benar
atau || Disebut Logical OR Operator. Jika salah satu dari dua operan bukan nol maka kondisi menjadi benar. (A || B) itu benar
tidak ! Disebut Logical NOT Operator. Gunakan untuk membalikkan keadaan logis operannya. Jika kondisi benar maka operator NOT akan membuat salah. ! (A && B) salah

Operator Bitwise

Asumsikan variabel A memiliki 60 dan variabel B memiliki 13 maka -

Tunjukkan Contoh

Nama operator Operator sederhana Deskripsi Contoh
dan & Biner AND Operator menyalin sedikit ke hasil jika ada di kedua operan. (A & B) akan memberikan 12 yaitu 0000 1100
atau | Biner ATAU Operator menyalin sedikit jika ada di salah satu operan (A | B) akan menghasilkan 61 yaitu 0011 1101
xor ^ Operator Biner XOR menyalin bit jika diatur dalam satu operan tetapi tidak keduanya. (A ^ B) akan menghasilkan 49 yaitu 0011 0001
tidak ~ Operator Pelengkap Binary Ones adalah unary dan memiliki efek bit 'membalik'. (~ A) akan memberikan -60 yaitu 1100 0011
bergeser ke kiri << Operator Binary Left Shift. Nilai operan kiri dipindahkan ke kiri dengan jumlah bit yang ditentukan oleh operan kanan. A << 2 akan menghasilkan 240 yaitu 1111 0000
bergeser ke kanan >> Operator Pergeseran Kanan Biner. Nilai operan kiri dipindahkan ke kanan dengan jumlah bit yang ditentukan oleh operan kanan. A >> 2 akan menghasilkan 15 yaitu 0000 1111

Operator Senyawa

Asumsikan variabel A memiliki 10 dan variabel B memiliki 20 maka -

Tunjukkan Contoh

Nama operator Operator sederhana Deskripsi Contoh
kenaikan ++ Operator increment, meningkatkan nilai integer satu A ++ akan memberikan 11
pengurangan - Operator pengurangan, mengurangi nilai integer satu A-- akan memberi 9
penambahan senyawa + = Tambahkan DAN operator penugasan. Ini menambahkan operan kanan ke operan kiri dan menetapkan hasilnya ke operan kiri B + = A ekivalen dengan B = B + A
pengurangan majemuk - = Kurangi DAN operator penugasan. Ini mengurangi operan kanan dari operan kiri dan menetapkan hasilnya ke operan kiri B - = A ekivalen dengan B = B - A
perkalian majemuk * = Kalikan DAN operator penugasan. Ini mengalikan operan kanan dengan operan kiri dan menetapkan hasilnya ke operan kiri B * = A ekivalen dengan B = B * A
divisi majemuk / = Bagi DAN operator penugasan. Ini membagi operan kiri dengan operan kanan dan menetapkan hasilnya ke operan kiri B / = A ekivalen dengan B = B / A
modulo majemuk % = Modulus DAN operator penugasan. Dibutuhkan modulus menggunakan dua operan dan menetapkan hasilnya ke operan kiri B% = A setara dengan B = B% A
campuran bitwise atau | = bitwise inklusif OR dan operator penugasan A | = 2 sama dengan A = A | 2
senyawa bitwise dan & = Bitwise AND operator penugasan A & = 2 sama dengan A = A & 2

Struktur pengambilan keputusan mengharuskan pemrogram menentukan satu atau lebih kondisi untuk dievaluasi atau diuji oleh program. Ini harus bersama dengan pernyataan atau pernyataan yang akan dieksekusi jika kondisi ditentukan benar, dan secara opsional, pernyataan lain untuk dieksekusi jika kondisi ditetapkan sebagai salah.

Berikut ini adalah bentuk umum dari struktur pengambilan keputusan khas yang ditemukan di sebagian besar bahasa pemrograman -

Pernyataan Kontrol adalah elemen dalam Kode Sumber yang mengontrol aliran eksekusi program. Mereka adalah -

S.NO. Pernyataan & Deskripsi Kontrol
1

Jika pernyataan

Dibutuhkan ekspresi dalam tanda kurung dan pernyataan atau blok pernyataan. Jika ekspresi benar maka pernyataan atau blok pernyataan akan dieksekusi jika tidak, pernyataan ini dilewati.

2

Jika… pernyataan lain

Sebuah if pernyataan bisa diikuti oleh pernyataan lain opsional, yang dijalankan ketika ekspresi salah.

3

Jika… lain jika… pernyataan lain

Itu if Pernyataan dapat diikuti dengan opsional else if...else pernyataan, yang sangat berguna untuk menguji berbagai kondisi menggunakan pernyataan if ... else if tunggal.

4

pernyataan switch case

Mirip dengan pernyataan if, switch...case mengontrol aliran program dengan mengizinkan pemrogram untuk menentukan kode berbeda yang harus dijalankan dalam berbagai kondisi.

5

Operator Bersyarat? :

Operator bersyarat? : adalah satu-satunya operator terner di C.

Bahasa pemrograman menyediakan berbagai struktur kontrol yang memungkinkan jalur eksekusi yang lebih rumit.

Pernyataan loop memungkinkan kita untuk mengeksekusi pernyataan atau sekelompok pernyataan beberapa kali dan berikut adalah bentuk umum dari pernyataan loop di sebagian besar bahasa pemrograman -

Bahasa pemrograman C menyediakan jenis loop berikut untuk menangani persyaratan perulangan.

S.NO. Loop & Deskripsi
1

while loop

while loop akan mengulang terus menerus, dan tanpa batas, sampai ekspresi di dalam tanda kurung, () menjadi salah. Sesuatu harus mengubah variabel yang diuji, atau while loop tidak akan pernah keluar.

2

lakukan… while loop

Itu do…whileloop mirip dengan loop sementara. Pada while loop, kondisi loop-continuation diuji pada awal loop sebelum melakukan body loop.

3

untuk loop

SEBUAH for loopmengeksekusi pernyataan beberapa kali yang telah ditentukan. Ekspresi kontrol untuk loop diinisialisasi, diuji dan dimanipulasi seluruhnya dalam tanda kurung loop for.

4

Loop Bersarang

Bahasa C memungkinkan Anda menggunakan satu loop di dalam loop lain. Contoh berikut menggambarkan konsep tersebut.

5

Lingkaran tak terbatas

Ini adalah loop yang tidak memiliki kondisi penghentian, sehingga loop menjadi tak terbatas.

Fungsi memungkinkan penataan program dalam segmen kode untuk melakukan tugas individu. Kasus khas untuk membuat fungsi adalah ketika seseorang perlu melakukan tindakan yang sama beberapa kali dalam sebuah program.

Membakukan fragmen kode menjadi fungsi memiliki beberapa keuntungan -

  • Fungsi membantu programmer tetap terorganisir. Seringkali ini membantu untuk membuat konsep program.

  • Fungsi menyusun satu tindakan di satu tempat sehingga fungsi tersebut hanya perlu dipikirkan dan di-debug sekali.

  • Ini juga mengurangi kemungkinan kesalahan dalam modifikasi, jika kode perlu diubah.

  • Fungsi membuat seluruh sketsa lebih kecil dan lebih ringkas karena bagian kode digunakan kembali berkali-kali.

  • Mereka membuatnya lebih mudah untuk menggunakan kembali kode di program lain dengan membuatnya menjadi modular, dan menggunakan fungsi sering kali membuat kode lebih mudah dibaca.

Ada dua fungsi yang diperlukan dalam sketsa Arduino atau program yaitu setup () dan loop (). Fungsi lain harus dibuat di luar tanda kurung dari kedua fungsi ini.

Sintaks paling umum untuk mendefinisikan suatu fungsi adalah -

Deklarasi Fungsi

Sebuah fungsi dideklarasikan di luar fungsi lain, di atas atau di bawah fungsi loop.

Kita dapat mendeklarasikan fungsi dengan dua cara berbeda -

Cara pertama hanya menulis bagian dari fungsi yang dipanggil a function prototype di atas fungsi loop, yang terdiri dari -

  • Jenis pengembalian fungsi
  • Nama fungsi
  • Jenis argumen fungsi, tidak perlu menulis nama argumen

Prototipe fungsi harus diikuti dengan titik koma (;).

Contoh berikut menunjukkan demonstrasi deklarasi fungsi menggunakan metode pertama.

Contoh

int sum_func (int x, int y) // function declaration {
   int z = 0;
   z = x+y ;
   return z; // return the value
}

void setup () {
   Statements // group of statements
}

Void loop () {
   int result = 0 ;
   result = Sum_func (5,6) ; // function call
}

Bagian kedua, yang disebut definisi atau deklarasi fungsi, harus dideklarasikan di bawah fungsi loop, yang terdiri dari -

  • Jenis pengembalian fungsi
  • Nama fungsi
  • Jenis argumen fungsi, di sini Anda harus menambahkan nama argumen
  • Badan fungsi (pernyataan di dalam fungsi yang dijalankan saat fungsi dipanggil)

Contoh berikut menunjukkan deklarasi fungsi menggunakan metode kedua.

Contoh

int sum_func (int , int ) ; // function prototype

void setup () {
   Statements // group of statements
}

Void loop () {
   int result = 0 ;
   result = Sum_func (5,6) ; // function call
}

int sum_func (int x, int y) // function declaration {
   int z = 0;
   z = x+y ;
   return z; // return the value
}

Metode kedua hanya mendeklarasikan fungsi di atas fungsi loop.

String digunakan untuk menyimpan teks. Mereka dapat digunakan untuk menampilkan teks pada LCD atau di jendela Arduino IDE Serial Monitor. String juga berguna untuk menyimpan input pengguna. Misalnya, karakter yang diketik pengguna di keypad terhubung ke Arduino.

Ada dua jenis string dalam pemrograman Arduino -

  • Array karakter, yang sama dengan string yang digunakan dalam pemrograman C.
  • Arduino String, yang memungkinkan kita menggunakan objek string dalam sketsa.

Dalam bab ini, kita akan mempelajari String, objek, dan penggunaan string dalam sketsa Arduino. Di akhir bab, Anda akan mempelajari jenis string yang digunakan dalam sketsa.

Array Karakter String

Jenis string pertama yang akan kita pelajari adalah string yang merupakan rangkaian karakter dari tipe tersebut char. Pada bab sebelumnya, kita telah mempelajari apa itu array; serangkaian variabel yang sama yang disimpan dalam memori. String adalah larik variabel karakter.

String adalah larik khusus yang memiliki satu elemen tambahan di akhir string, yang selalu bernilai 0 (nol). Ini dikenal sebagai "string diakhiri null".

Contoh String Karakter Array

Contoh ini akan menunjukkan cara membuat string dan mencetaknya ke jendela monitor serial.

Example

void setup() {
   char my_str[6]; // an array big enough for a 5 character string
   Serial.begin(9600);
   my_str[0] = 'H'; // the string consists of 5 characters
   my_str[1] = 'e';
   my_str[2] = 'l';
   my_str[3] = 'l';
   my_str[4] = 'o';
   my_str[5] = 0; // 6th array element is a null terminator
   Serial.println(my_str);
}

void loop() { 

}

Contoh berikut menunjukkan dari apa sebuah string terdiri dari; array karakter dengan karakter yang dapat dicetak dan 0 sebagai elemen terakhir dari array untuk menunjukkan bahwa di sinilah string berakhir. String dapat dicetak ke jendela Arduino IDE Serial Monitor dengan menggunakanSerial.println() dan melewatkan nama string.

Contoh yang sama ini dapat ditulis dengan cara yang lebih nyaman seperti yang ditunjukkan di bawah ini -

Example

void setup() {
   char my_str[] = "Hello";
   Serial.begin(9600);
   Serial.println(my_str);
}

void loop() {

}

Dalam sketsa ini, kompilator menghitung ukuran larik string dan juga secara otomatis null mengakhiri string dengan nol. Sebuah array yang terdiri dari enam elemen dan terdiri dari lima karakter diikuti oleh nol dibuat persis sama seperti pada sketsa sebelumnya.

Memanipulasi Array String

Kita dapat mengubah array string dalam sketsa seperti yang ditunjukkan pada sketsa berikut.

Contoh

void setup() {
   char like[] = "I like coffee and cake"; // create a string
   Serial.begin(9600);
   // (1) print the string
   Serial.println(like);
   // (2) delete part of the string
   like[13] = 0;
   Serial.println(like);
   // (3) substitute a word into the string
   like[13] = ' '; // replace the null terminator with a space
   like[18] = 't'; // insert the new word
   like[19] = 'e';
   like[20] = 'a';
   like[21] = 0; // terminate the string
   Serial.println(like);
}

void loop() {

}

Hasil

I like coffee and cake
I like coffee
I like coffee and tea

Sketsa tersebut bekerja dengan cara berikut.

Membuat dan Mencetak String

Dalam sketsa yang diberikan di atas, string baru dibuat dan kemudian dicetak untuk ditampilkan di jendela Serial Monitor.

Mempersingkat String

String ini dipersingkat dengan mengganti karakter ke-14 dalam string dengan nol yang mengakhiri nol (2). Ini adalah elemen nomor 13 dalam larik string yang dihitung dari 0.

Ketika string dicetak, semua karakter dicetak hingga nol baru yang mengakhiri nol. Karakter lainnya tidak hilang; mereka masih ada di memori dan larik string masih berukuran sama. Satu-satunya perbedaan adalah bahwa setiap fungsi yang bekerja dengan string hanya akan melihat string hingga terminator nol pertama.

Mengubah Kata dalam String

Akhirnya, sketsa tersebut mengganti kata "kue" dengan "teh" (3). Pertama-tama harus mengganti terminator null di like [13] dengan spasi sehingga string dikembalikan ke format yang dibuat semula.

Karakter baru menimpa "cak" dari kata "kue" dengan kata "teh". Ini dilakukan dengan menimpa karakter individu. 'E' dari "cake" diganti dengan karakter penghentian null baru. Hasilnya adalah bahwa string sebenarnya diakhiri dengan dua karakter null, yang asli di akhir string dan yang baru menggantikan 'e' di "cake". Ini tidak membuat perbedaan ketika string baru dicetak karena fungsi yang mencetak string berhenti mencetak karakter string ketika bertemu dengan terminator null pertama.

Fungsi untuk Memanipulasi Array String

Sketsa sebelumnya memanipulasi string secara manual dengan mengakses karakter individu dalam string. Untuk mempermudah memanipulasi larik string, Anda dapat menulis fungsi Anda sendiri untuk melakukannya, atau menggunakan beberapa fungsi string dariC perpustakaan bahasa.

S.No. Fungsi & Deskripsi
1

String()

Kelas String, bagian dari inti pada versi 0019, memungkinkan Anda untuk menggunakan dan memanipulasi string teks dengan cara yang lebih kompleks daripada yang dilakukan array karakter. Anda dapat menggabungkan String, menambahkannya, mencari dan mengganti substring, dan banyak lagi. Dibutuhkan lebih banyak memori daripada larik karakter sederhana, tetapi ini juga lebih berguna.

Sebagai referensi, array karakter disebut sebagai string dengan 's' kecil, dan instance kelas String disebut sebagai String dengan huruf kapital S. Perhatikan bahwa string konstan, yang ditentukan dalam "tanda kutip ganda" diperlakukan sebagai array karakter, bukan contoh dari kelas String

2

charAt()

Akses karakter tertentu dari String.

3

compareTo()

Membandingkan dua String, menguji apakah yang satu muncul sebelum atau sesudah yang lain, atau apakah keduanya sama. String tersebut dibandingkan karakter demi karakter, menggunakan nilai ASCII dari karakter tersebut. Artinya, misalnya, 'a' muncul sebelum 'b' tetapi setelah 'A'. Angka datang sebelum huruf.

4

concat()

Menambahkan parameter ke String.

5

c_str()

Mengonversi konten string sebagai gaya C, string diakhiri null. Perhatikan bahwa ini memberikan akses langsung ke buffer String internal dan harus digunakan dengan hati-hati. Secara khusus, Anda tidak boleh mengubah string melalui pointer yang dikembalikan. Saat Anda memodifikasi objek String, atau saat dihancurkan, pointer apa pun yang sebelumnya dikembalikan oleh c_str () menjadi tidak valid dan tidak boleh digunakan lagi.

6

endsWith()

Menguji apakah sebuah String diakhiri dengan karakter dari String lain.

7

equals()

Membandingkan dua string untuk persamaan. Perbandingannya case-sensitive, artinya String "hello" tidak sama dengan String "HELLO".

8

equalsIgnoreCase()

Membandingkan dua string untuk persamaan. Perbandingan ini tidak case-sensitive, artinya String ("hello") sama dengan String ("HELLO").

9

getBytes()

Menyalin karakter string ke buffer yang disediakan.

10

indexOf()

Menemukan karakter atau String dalam String lain. Secara default, ini mencari dari awal String, tetapi juga bisa mulai dari indeks yang diberikan, memungkinkan untuk menemukan semua contoh karakter atau String.

11

lastIndexOf()

Menemukan karakter atau String dalam String lain. Secara default, ini mencari dari akhir String, tetapi juga dapat bekerja mundur dari indeks tertentu, memungkinkan untuk menemukan semua contoh karakter atau String.

12

length()

Mengembalikan panjang String, dalam karakter. (Perhatikan bahwa ini tidak termasuk karakter nol di belakangnya.)

13

remove()

Modifikasi di tempat, string yang menghapus karakter dari indeks yang disediakan ke akhir string atau dari indeks yang disediakan ke indeks plus hitungan.

14

replace()

Fungsi String replace () memungkinkan Anda untuk mengganti semua instance dari karakter tertentu dengan karakter lain. Anda juga dapat menggunakan replace untuk mengganti substring dari string dengan substring yang berbeda.

15

reserve()

Fungsi String reserve () memungkinkan Anda mengalokasikan buffer dalam memori untuk memanipulasi string.

16

setCharAt()

Menetapkan karakter String. Tidak berpengaruh pada indeks di luar panjang String yang ada.

17

startsWith()

Menguji apakah suatu String dimulai dengan karakter dari String lain.

18

toCharArray()

Menyalin karakter string ke buffer yang disediakan.

19

substring()

Dapatkan substring dari sebuah String. Indeks awal bersifat inklusif (karakter terkait disertakan dalam substring), tetapi indeks akhir opsional bersifat eksklusif (karakter terkait tidak disertakan dalam substring). Jika indeks akhir dihilangkan, substring berlanjut ke akhir String.

20

toInt()

Mengonversi String yang valid menjadi integer. String masukan harus dimulai dengan bilangan bulat. Jika string berisi angka non-integer, fungsi tersebut akan berhenti melakukan konversi.

21

toFloat()

Mengonversi String yang valid menjadi float. String input harus dimulai dengan digit. Jika string berisi karakter non-digit, fungsi tersebut akan berhenti melakukan konversi. Misalnya, string "123.45", "123", dan "123fish" masing-masing dikonversi menjadi 123.45, 123.00, dan 123.00. Perhatikan bahwa "123.456" didekati dengan 123.46. Perhatikan juga bahwa float hanya memiliki presisi 6-7 digit desimal dan string yang lebih panjang mungkin terpotong.

22

toLowerCase()

Dapatkan String versi huruf kecil. Mulai 1.0, toLowerCase () memodifikasi string pada tempatnya daripada mengembalikan yang baru.

23

toUpperCase()

Dapatkan versi huruf besar dari sebuah String. Mulai 1.0, toUpperCase () memodifikasi string pada tempatnya daripada mengembalikan yang baru.

24

trim()

Dapatkan versi String dengan menghapus spasi di depan dan di belakangnya. Mulai 1.0, trim () memodifikasi string pada tempatnya daripada mengembalikan yang baru.

Sketsa selanjutnya menggunakan beberapa fungsi string C.

Contoh

void setup() {
   char str[] = "This is my string"; // create a string
   char out_str[40]; // output from string functions placed here
   int num; // general purpose integer
   Serial.begin(9600);

   // (1) print the string
   Serial.println(str);

   // (2) get the length of the string (excludes null terminator)
   num = strlen(str);
   Serial.print("String length is: ");
   Serial.println(num);

   // (3) get the length of the array (includes null terminator)
   num = sizeof(str); // sizeof() is not a C string function
   Serial.print("Size of the array: ");
   Serial.println(num);

   // (4) copy a string
   strcpy(out_str, str);
   Serial.println(out_str);

   // (5) add a string to the end of a string (append)
   strcat(out_str, " sketch.");
   Serial.println(out_str);
   num = strlen(out_str);
   Serial.print("String length is: ");
   Serial.println(num);
   num = sizeof(out_str);
   Serial.print("Size of the array out_str[]: ");
   Serial.println(num);
}

void loop() {

}

Hasil

This is my string
String length is: 17
Size of the array: 18
This is my string
This is my string sketch.
String length is: 25
Size of the array out_str[]: 40

Sketsa tersebut bekerja dengan cara berikut.

Cetak String

String yang baru dibuat dicetak ke jendela Serial Monitor seperti yang dilakukan pada sketsa sebelumnya.

Dapatkan Panjang String

Fungsi strlen () digunakan untuk mendapatkan panjang string. Panjang string hanya untuk karakter yang dapat dicetak dan tidak termasuk terminator nol.

String tersebut berisi 17 karakter, jadi kami melihat 17 karakter tercetak di jendela Serial Monitor.

Dapatkan Panjang Array

Operator sizeof () digunakan untuk mendapatkan panjang array yang berisi string. Panjangnya termasuk terminator nol, jadi panjangnya lebih dari satu panjang string.

sizeof () terlihat seperti fungsi, tetapi secara teknis adalah operator. Ini bukan bagian dari pustaka string C, tetapi digunakan dalam sketsa untuk menunjukkan perbedaan antara ukuran array dan ukuran string (atau panjang string).

Salin String

Fungsi strcpy () digunakan untuk menyalin string str [] ke array out_num []. Fungsi strcpy () menyalin string kedua yang diteruskan ke string pertama. Salinan string sekarang ada di larik out_num [], tetapi hanya membutuhkan 18 elemen larik, jadi kita masih memiliki 22 elemen karakter bebas di larik. Elemen bebas ini ditemukan setelah string di memori.

String tersebut disalin ke array sehingga kita akan memiliki beberapa ruang ekstra dalam array untuk digunakan di bagian selanjutnya dari sketsa, yang menambahkan string ke ujung string.

Menambahkan String ke String (Concatenate)

Sketsa tersebut menggabungkan satu string ke string lainnya, yang dikenal sebagai penggabungan. Ini dilakukan dengan menggunakan fungsi strcat (). Fungsi strcat () meletakkan string kedua yang diteruskan ke ujung string pertama yang diteruskan ke sana.

Setelah penggabungan, panjang string dicetak untuk menunjukkan panjang string baru. Panjang array kemudian dicetak untuk menunjukkan bahwa kita memiliki string sepanjang 25 karakter dalam array panjang 40 elemen.

Ingatlah bahwa string panjang 25 karakter sebenarnya mengambil 26 karakter dari array karena nol yang mengakhiri nol.

Array Bounds

Saat bekerja dengan string dan array, sangat penting untuk bekerja di dalam batas string atau array. Dalam sketsa contoh, sebuah array dibuat, yang panjangnya 40 karakter, untuk mengalokasikan memori yang dapat digunakan untuk memanipulasi string.

Jika larik dibuat terlalu kecil dan kami mencoba menyalin string yang lebih besar dari larik ke dalamnya, string tersebut akan disalin di akhir larik. Memori di luar akhir larik dapat berisi data penting lainnya yang digunakan dalam sketsa, yang kemudian akan ditimpa oleh string kita. Jika memori di luar ujung string dibanjiri, itu bisa merusak sketsa atau menyebabkan perilaku yang tidak terduga.

Jenis string kedua yang digunakan dalam pemrograman Arduino adalah Objek String.

Apa itu Objek?

Objek adalah konstruksi yang berisi data dan fungsi. Objek String dapat dibuat seperti variabel dan diberi nilai atau string. Objek String berisi fungsi (yang disebut "metode" dalam pemrograman berorientasi objek (OOP)) yang beroperasi pada data string yang terdapat dalam objek String.

Sketsa dan penjelasan berikut akan memperjelas apa itu objek dan bagaimana objek String digunakan.

Contoh

void setup() { 
   String my_str = "This is my string.";
   Serial.begin(9600);

   // (1) print the string
   Serial.println(my_str);

   // (2) change the string to upper-case
   my_str.toUpperCase();
   Serial.println(my_str);

   // (3) overwrite the string
   my_str = "My new string.";
   Serial.println(my_str);

   // (4) replace a word in the string
   my_str.replace("string", "Arduino sketch");
   Serial.println(my_str);

   // (5) get the length of the string
   Serial.print("String length is: ");
   Serial.println(my_str.length());
}

void loop() { 

}

Hasil

This is my string.
THIS IS MY STRING.
My new string.
My new Arduino sketch.
String length is: 22

Objek string dibuat dan diberi nilai (atau string) di bagian atas sketsa.

String my_str = "This is my string." ;

Ini membuat objek String dengan nama my_str dan memberinya nilai "Ini adalah string saya".

Ini dapat dibandingkan dengan membuat variabel dan memberikan nilai seperti integer -

int my_var = 102;

Sketsa tersebut bekerja dengan cara berikut.

Mencetak String

String dapat dicetak ke jendela Serial Monitor seperti string array karakter.

Ubah String menjadi Huruf besar

Objek string my_str yang dibuat, memiliki sejumlah fungsi atau metode yang dapat dioperasikan di atasnya. Metode ini dipanggil dengan menggunakan nama objek diikuti oleh operator titik (.) Dan kemudian nama fungsi yang akan digunakan.

my_str.toUpperCase();

Itu toUpperCase() fungsi beroperasi pada string yang terdapat dalam file my_strobjek yang berjenis String dan mengubah data string (atau teks) yang dikandung objek menjadi karakter huruf besar. Daftar fungsi yang berisi kelas String dapat ditemukan di referensi String Arduino. Secara teknis, String disebut kelas dan digunakan untuk membuat objek String.

Timpa String

Operator penugasan digunakan untuk menetapkan string baru ke my_str objek yang menggantikan string lama

my_str = "My new string." ;

Operator penugasan tidak dapat digunakan pada string larik karakter, tetapi bekerja pada objek String saja.

Mengganti Kata dalam String

Fungsi replace () digunakan untuk mengganti string pertama yang diteruskan dengannya dengan string kedua yang diteruskan ke sana. replace () adalah fungsi lain yang dibangun ke dalam kelas String dan tersedia untuk digunakan pada objek String my_str.

Mendapatkan Panjang String

Mendapatkan panjang string dengan mudah dilakukan dengan menggunakan length (). Dalam sketsa contoh, hasil yang dikembalikan oleh length () diteruskan langsung ke Serial.println () tanpa menggunakan variabel perantara.

Kapan Menggunakan Objek String

Objek String jauh lebih mudah digunakan daripada array karakter string. Objek tersebut memiliki fungsi bawaan yang dapat melakukan sejumlah operasi pada string.

Kerugian utama menggunakan objek String adalah ia menggunakan banyak memori dan dapat dengan cepat menggunakan memori RAM Arduinos, yang dapat menyebabkan Arduino hang, crash atau berperilaku tidak terduga. Jika sketsa pada Arduino kecil dan membatasi penggunaan objek, maka seharusnya tidak ada masalah.

String larik karakter lebih sulit digunakan dan Anda mungkin perlu menulis fungsi Anda sendiri untuk beroperasi pada jenis string ini. Keuntungannya adalah Anda memiliki kendali atas ukuran larik string yang Anda buat, sehingga Anda bisa menjaga larik kecil untuk menghemat memori.

Anda perlu memastikan bahwa Anda tidak menulis di luar batas akhir larik dengan larik string. Objek String tidak memiliki masalah ini dan akan mengurus batas string untuk Anda, asalkan ada cukup memori untuk dioperasikan. Objek String dapat mencoba untuk menulis ke memori yang tidak ada saat kehabisan memori, tetapi tidak akan pernah menulis di akhir string yang dioperasikan.

Dimana String Digunakan

Dalam bab ini kita mempelajari tentang string, bagaimana mereka berperilaku dalam memori dan operasinya.

Penggunaan praktis string akan dibahas di bagian selanjutnya dari kursus ini ketika kita mempelajari cara mendapatkan input pengguna dari jendela Serial Monitor dan menyimpan input dalam string.

Arduino menyediakan empat fungsi manipulasi waktu yang berbeda. Mereka adalah -

S.No. Deskripsi fungsi
1

fungsi penundaan ()

Cara delay()fungsi kerjanya cukup sederhana. Ini menerima satu argumen integer (atau angka). Angka ini mewakili waktu (diukur dalam milidetik).

2

delayMicroseconds ()

Itu delayMicroseconds()fungsi menerima argumen integer (atau angka) tunggal. Ada seribu mikrodetik dalam satu milidetik, dan satu juta mikrodetik dalam satu detik.

3

fungsi millis ()

Fungsi ini digunakan untuk mengembalikan jumlah milidetik pada saat papan Arduino mulai menjalankan program saat ini.

4

fungsi mikro ()

Fungsi mikros () mengembalikan jumlah mikrodetik dari waktu, papan Arduino mulai menjalankan program saat ini. Jumlah ini meluap, yaitu kembali ke nol setelah kira-kira 70 menit.

Array adalah grup lokasi memori berurutan yang memiliki tipe yang sama. Untuk merujuk ke lokasi atau elemen tertentu dalam larik, kami menentukan nama larik dan nomor posisi elemen tertentu dalam larik.

Ilustrasi yang diberikan di bawah ini menunjukkan array integer yang disebut C yang berisi 11 elemen. Anda merujuk ke salah satu elemen ini dengan memberikan nama larik diikuti dengan nomor posisi elemen tertentu dalam tanda kurung siku ([]). Nomor posisi lebih formal disebut subskrip atau indeks (nomor ini menentukan jumlah elemen dari awal larik). Elemen pertama memiliki subskrip 0 (nol) dan terkadang disebut elemen nol.

Jadi, elemen dari array C adalah C [0] (dibaca “C sub zero”), C [1], C [2] dan seterusnya. Subskrip tertinggi dalam larik C adalah 10, yaitu 1 lebih kecil dari jumlah elemen dalam larik (11). Nama array mengikuti konvensi yang sama seperti nama variabel lainnya.

Subskrip harus berupa ekspresi integer atau integer (menggunakan tipe integral apa pun). Jika program menggunakan ekspresi sebagai subskrip, maka program mengevaluasi ekspresi untuk menentukan subskrip. Sebagai contoh, jika kita mengasumsikan variabel a sama dengan 5 dan variabel b sama dengan 6, maka pernyataan tersebut menambahkan 2 ke elemen array C [11].

Sebuah nama array yang dilanggan adalah sebuah lvalue, itu bisa digunakan di sisi kiri sebuah tugas, seperti nama variabel non-larik bisa.

Mari kita periksa larik C pada gambar yang diberikan, lebih dekat. Nama seluruh array adalah C. 11 elemennya disebut sebagai C [0] hingga C [10]. Nilai C [0] adalah -45, nilai C [1] 6, nilai C [2] 0, nilai C [7] 62, dan nilai C [10] adalah 78.

Untuk mencetak jumlah nilai yang terkandung dalam tiga elemen pertama dari array C, kita akan menulis -

Serial.print (C[ 0 ] + C[ 1 ] + C[ 2 ] );

Untuk membagi nilai C [6] dengan 2 dan memberikan hasilnya ke variabel x, kita akan menulis -

x = C[ 6 ] / 2;

Mendeklarasikan Array

Array menempati ruang dalam memori. Untuk menentukan tipe elemen dan jumlah elemen yang dibutuhkan oleh sebuah array, gunakan deklarasi berbentuk -

type arrayName [ arraySize ] ;

Kompiler mencadangkan jumlah memori yang sesuai. (Ingatlah bahwa deklarasi, yang menyimpan memori lebih dikenal sebagai definisi). ArraySize harus berupa konstanta integer yang lebih besar dari nol. Misalnya, untuk memberi tahu compiler agar memesan 11 elemen untuk array bilangan bulat C, gunakan deklarasi -

int C[ 12 ]; // C is an array of 12 integers

Array dapat dideklarasikan berisi nilai dari tipe data non-referensi. Misalnya, array tipe string dapat digunakan untuk menyimpan string karakter.

Contoh Menggunakan Array

Bagian ini memberikan banyak contoh yang menunjukkan cara mendeklarasikan, menginisialisasi, dan memanipulasi array.

Contoh 1: Mendeklarasikan Array dan menggunakan Loop untuk Menginisialisasi Elemen Array

Program ini mendeklarasikan array integer 10 elemen n. Garis a – b menggunakan aForpernyataan untuk menginisialisasi elemen array ke nol. Seperti variabel otomatis lainnya, array otomatis tidak diinisialisasi secara implisit ke nol. Pernyataan keluaran pertama (baris c) menampilkan tajuk kolom untuk kolom yang dicetak di pernyataan berikutnya untuk (baris d – e), yang mencetak larik dalam format tabel.

Example

int n[ 10 ] ; // n is an array of 10 integers

void setup () {

}

void loop () {
   for ( int i = 0; i < 10; ++i ) // initialize elements of array n to 0 {
      n[ i ] = 0; // set element at location i to 0
      Serial.print (i) ;
      Serial.print (‘\r’) ;
   }
   for ( int j = 0; j < 10; ++j ) // output each array element's value {
      Serial.print (n[j]) ;
      Serial.print (‘\r’) ;
   } 
}

Result - Ini akan menghasilkan hasil sebagai berikut -

Element Value

0

1

2

3

4

5

6

7

8

9

0

0

0

0

0

0

0

0

0

0

Contoh 2: Menginisialisasi Array dalam Deklarasi dengan Daftar Penginisialisasi

Elemen array juga bisa diinisialisasi dalam deklarasi array dengan mengikuti nama array dengan tanda sama dengan dan daftar penginisialisasi yang dipisahkan koma dengan tanda kurung kurawal. Program ini menggunakan daftar penginisialisasi untuk menginisialisasi array integer dengan 10 nilai (baris a) dan mencetak array dalam format tabel (baris b – c).

Example

// n is an array of 10 integers
int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 } ;

void setup () {

}

void loop () {
   for ( int i = 0; i < 10; ++i ) {
      Serial.print (i) ;
      Serial.print (‘\r’) ;
   }
   for ( int j = 0; j < 10; ++j ) // output each array element's value {
      Serial.print (n[j]) ;
      Serial.print (‘\r’) ;
   } 
}

Result - Ini akan menghasilkan hasil sebagai berikut -

Element Value

0

1

2

3

4

5

6

7

8

9

32

27

64

18

95

14

90

70

60

37

Contoh 3: Menjumlahkan Elemen Array

Seringkali, elemen array mewakili serangkaian nilai yang akan digunakan dalam penghitungan. Misalnya, jika elemen array mewakili nilai ujian, profesor mungkin ingin menjumlahkan elemen array dan menggunakan jumlah tersebut untuk menghitung rata-rata kelas untuk ujian tersebut. Program ini menjumlahkan nilai-nilai yang terkandung dalam array integer 10 elemena.

Example

const int arraySize = 10; // constant variable indicating size of array
int a[ arraySize ] = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87 };
int total = 0;

void setup () {

}
void loop () {
   // sum contents of array a
   for ( int i = 0; i < arraySize; ++i )
      total += a[ i ];
   Serial.print (“Total of array elements : ”) ;
   Serial.print(total) ;
}

Result - Ini akan menghasilkan hasil sebagai berikut -

Total of array elements: 849

Array penting untuk Arduino dan harus membutuhkan lebih banyak perhatian. Konsep penting berikut yang terkait dengan array harus jelas bagi Arduino -

S.NO. Konsep & Deskripsi
1 Meneruskan Array ke Fungsi

Untuk meneruskan argumen array ke suatu fungsi, tentukan nama array tanpa tanda kurung apa pun.

2 Array Multi-Dimensi

Array dengan dua dimensi (yaitu, subskrip) sering mewakili tabel nilai yang terdiri dari informasi yang disusun dalam baris dan kolom.

Pin pada papan Arduino dapat dikonfigurasi sebagai input atau output. Kami akan menjelaskan fungsi pin dalam mode tersebut. Penting untuk dicatat bahwa sebagian besar pin analog Arduino, dapat dikonfigurasi, dan digunakan, dengan cara yang persis sama seperti pin digital.

Pin Dikonfigurasi sebagai INPUT

Pin Arduino secara default dikonfigurasi sebagai input, jadi pin tersebut tidak perlu secara eksplisit dideklarasikan sebagai input pinMode()saat Anda menggunakannya sebagai input. Pin yang dikonfigurasi dengan cara ini dikatakan dalam keadaan impedansi tinggi. Pin input membuat tuntutan yang sangat kecil pada sirkuit yang mereka ambil sampelnya, setara dengan resistor seri 100 megaohm di depan pin.

Ini berarti dibutuhkan arus yang sangat sedikit untuk mengalihkan pin input dari satu kondisi ke kondisi lainnya. Ini membuat pin berguna untuk tugas-tugas seperti menerapkan sensor sentuh kapasitif atau membaca LED sebagai fotodioda.

Pin dikonfigurasikan sebagai pinMode (pin, INPUT) tanpa ada yang terhubung dengannya, atau dengan kabel yang terhubung ke pin yang tidak terhubung ke sirkuit lain, melaporkan perubahan status pin yang tampak acak, menangkap gangguan listrik dari lingkungan, atau menghubungkan status secara kapasitif dari pin terdekat.

Resistor Pull-up

Resistor pull-up sering kali berguna untuk mengarahkan pin input ke keadaan yang diketahui jika tidak ada input. Ini dapat dilakukan dengan menambahkan resistor pull-up (ke + 5V), atau resistor pull-down (resistor ke ground) pada input. Resistor 10K adalah nilai yang baik untuk resistor pull-up atau pull-down.

Menggunakan Resistor Penarik Terpasang dengan Pin yang Dikonfigurasi sebagai Input

Ada 20.000 resistor pull-up yang terpasang pada chip Atmega yang dapat diakses dari perangkat lunak. Resistor pull-up internal ini diakses dengan mengaturpinMode()sebagai INPUT_PULLUP. Ini secara efektif membalikkan perilaku mode INPUT, di mana HIGH berarti sensor OFF dan LOW berarti sensor ON. Nilai pull-up ini tergantung pada mikrokontroler yang digunakan. Pada kebanyakan papan berbasis AVR, nilainya dijamin antara 20kΩ dan 50kΩ. Pada Arduino Due, itu antara 50kΩ dan 150kΩ. Untuk nilai pastinya, lihat lembar data mikrokontroler di papan Anda.

Saat menghubungkan sensor ke pin yang dikonfigurasi dengan INPUT_PULLUP, ujung lainnya harus dihubungkan ke tanah. Dalam kasus sakelar sederhana, ini menyebabkan pin terbaca TINGGI saat sakelar terbuka dan RENDAH saat sakelar ditekan. Resistor pull-up memberikan arus yang cukup untuk menyalakan LED yang terhubung secara redup ke pin yang dikonfigurasi sebagai input. Jika LED dalam sebuah proyek tampaknya berfungsi, tetapi sangat redup, inilah yang mungkin terjadi.

Register yang sama (lokasi memori chip internal) yang mengontrol apakah pin TINGGI atau RENDAH mengontrol resistor pull-up. Akibatnya, pin yang dikonfigurasi untuk menyalakan resistor pull-up ketika pin dalam mode INPUT, akan memiliki pin yang dikonfigurasi sebagai TINGGI jika pin kemudian dialihkan ke mode OUTPUT dengan pinMode (). Ini bekerja ke arah lain juga, dan pin output yang dibiarkan dalam keadaan TINGGI akan memiliki resistor pull-up yang disetel jika dialihkan ke input dengan pinMode ().

Example

pinMode(3,INPUT) ; // set pin to input without using built in pull up resistor
pinMode(5,INPUT_PULLUP) ; // set pin to input using built in pull up resistor

Pin Dikonfigurasi sebagai OUTPUT

Pin yang dikonfigurasi sebagai OUTPUT dengan pinMode () dikatakan dalam status impedansi rendah. Ini berarti bahwa mereka dapat memberikan sejumlah besar arus ke sirkuit lain. Pin atmega dapat menjadi sumber (memberikan arus positif) atau tenggelam (memberikan arus negatif) hingga 40 mA (miliampere) arus ke perangkat / sirkuit lain. Arus ini cukup untuk menerangi LED (jangan lupa resistor seri), atau menjalankan banyak sensor tetapi tidak cukup arus untuk menjalankan relai, solenoida, atau motor.

Mencoba menjalankan perangkat arus tinggi dari pin keluaran, dapat merusak atau menghancurkan transistor keluaran pada pin, atau merusak seluruh chip Atmega. Seringkali, hal ini mengakibatkan pin "mati" di mikrokontroler tetapi chip yang tersisa masih berfungsi dengan baik. Untuk alasan ini, sebaiknya sambungkan pin OUTPUT ke perangkat lain melalui resistor 470Ω atau 1k, kecuali jika arus maksimum yang ditarik dari pin diperlukan untuk aplikasi tertentu.

PinMode () Fungsi

Fungsi pinMode () digunakan untuk mengkonfigurasi pin tertentu agar berperilaku baik sebagai masukan atau keluaran. Dimungkinkan untuk mengaktifkan resistor pull-up internal dengan mode INPUT_PULLUP. Selain itu, mode INPUT secara eksplisit menonaktifkan pull-up internal.

pinMode () Fungsi Sintaks

Void setup () {
   pinMode (pin , mode);
}
  • pin - jumlah pin yang modenya ingin Anda atur

  • mode - INPUT, OUTPUT, atau INPUT_PULLUP.

Example

int button = 5 ; // button connected to pin 5
int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(button , INPUT_PULLUP); 
   // set the digital pin as input with pull-up resistor
   pinMode(button , OUTPUT); // set the digital pin as output
}

void setup () {
   If (digitalRead(button ) == LOW) // if button pressed {
      digitalWrite(LED,HIGH); // turn on led
      delay(500); // delay for 500 ms
      digitalWrite(LED,LOW); // turn off led
      delay(500); // delay for 500 ms
   }
}

Fungsi digitalWrite ()

Itu digitalWrite()fungsi digunakan untuk menulis nilai HIGH atau LOW ke pin digital. Jika pin telah dikonfigurasi sebagai OUTPUT dengan pinMode () , tegangannya akan disetel ke nilai yang sesuai: 5V (atau 3,3V pada papan 3,3V) untuk TINGGI, 0V (arde) untuk RENDAH. Jika pin dikonfigurasi sebagai INPUT, digitalWrite () akan mengaktifkan (HIGH) atau menonaktifkan (LOW) internal pullup pada pin input. Direkomendasikan untuk menyetel pinMode () ke INPUT_PULLUP untuk mengaktifkan resistor pull-up internal.

Jika Anda tidak mengatur pinMode () ke OUTPUT, dan menghubungkan LED ke pin, saat memanggil digitalWrite (HIGH), LED mungkin tampak redup. Tanpa secara eksplisit mengatur pinMode (), digitalWrite () akan mengaktifkan resistor pull-up internal, yang bertindak seperti resistor pembatas arus yang besar.

sintaks Fungsi digitalWrite ()

Void loop() {
   digitalWrite (pin ,value);
}
  • pin - jumlah pin yang modenya ingin Anda atur

  • value - TINGGI, atau RENDAH.

Example

int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(LED, OUTPUT); // set the digital pin as output
}

void setup () { 
   digitalWrite(LED,HIGH); // turn on led
   delay(500); // delay for 500 ms
   digitalWrite(LED,LOW); // turn off led
   delay(500); // delay for 500 ms
}

analogRead ()

Arduino dapat mendeteksi apakah ada tegangan yang diterapkan ke salah satu pinnya dan melaporkannya melalui fungsi digitalRead (). Terdapat perbedaan antara sensor on / off (yang mendeteksi keberadaan suatu objek) dan sensor analog yang nilainya terus berubah. Untuk membaca jenis sensor ini, kita membutuhkan jenis pin yang berbeda.

Di bagian kanan bawah papan Arduino, Anda akan melihat enam pin bertanda "Analog In". Pin khusus ini tidak hanya memberi tahu apakah ada tegangan yang diterapkan padanya, tetapi juga nilainya. Dengan menggunakananalogRead() fungsi, kita dapat membaca tegangan yang diterapkan ke salah satu pin.

Fungsi ini mengembalikan angka antara 0 dan 1023, yang mewakili tegangan antara 0 dan 5 volt. Misalnya, jika ada tegangan 2,5 V diterapkan ke pin nomor 0, analogRead (0) mengembalikan 512.

analogRead () function Sintaks

analogRead(pin);
  • pin - jumlah pin input analog untuk dibaca (0 hingga 5 pada kebanyakan papan, 0 hingga 7 pada Mini dan Nano, 0 hingga 15 pada Mega)

Example

int analogPin = 3;//potentiometer wiper (middle terminal) 
   // connected to analog pin 3 
int val = 0; // variable to store the value read

void setup() {
   Serial.begin(9600); // setup serial
} 

void loop() {
   val = analogRead(analogPin); // read the input pin
   Serial.println(val); // debug value
}

Dalam bab ini, kita akan mempelajari beberapa Fungsi Input dan Output lanjutan.

analogReference () Fungsi

Mengonfigurasi tegangan referensi yang digunakan untuk input analog (yaitu nilai yang digunakan sebagai puncak kisaran input). Opsinya adalah -

  • DEFAULT - Referensi analog default 5 volt (pada papan Arduino 5V) atau 3,3 volt (pada papan Arduino 3,3V)

  • INTERNAL - Referensi bawaan, sama dengan 1,1 volt pada ATmega168 atau ATmega328 dan 2,56 volt pada ATmega8 (tidak tersedia di Arduino Mega)

  • INTERNAL1V1 - Referensi 1.1V built-in (Arduino Mega saja)

  • INTERNAL2V56 - Referensi 2.56V built-in (Arduino Mega saja)

  • EXTERNAL - Tegangan yang diterapkan ke pin AREF (hanya 0 hingga 5V) digunakan sebagai referensi

analogReference () Fungsi Sintaks

analogReference (type);

type - dapat menggunakan semua jenis berikut (DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56, EXTERNAL)

Jangan gunakan apapun yang kurang dari 0V atau lebih dari 5V untuk tegangan referensi eksternal pada pin AREF. Jika Anda menggunakan referensi eksternal pada pin AREF, Anda harus mengatur referensi analog ke EXTERNAL sebelum memanggilanalogRead()fungsi. Jika tidak, Anda akan menyingkat tegangan referensi aktif (yang dihasilkan secara internal) dan pin AREF, mungkin merusak mikrokontroler pada papan Arduino Anda.

Sebagai alternatif, Anda dapat menghubungkan tegangan referensi eksternal ke pin AREF melalui resistor 5K, memungkinkan Anda untuk beralih antara tegangan referensi eksternal dan internal.

Perhatikan bahwa resistor tersebut akan merubah tegangan yang digunakan sebagai acuan karena terdapat resistor internal 32K pada pin AREF. Keduanya bertindak sebagai pembagi tegangan. Misalnya, 2.5V yang diterapkan melalui resistor akan menghasilkan 2.5 * 32 / (32 + 5) = ~ 2.2V pada pin AREF.

Example

int analogPin = 3;// potentiometer wiper (middle terminal) connected to analog pin 3 
int val = 0; // variable to store the read value

void setup() {
   Serial.begin(9600); // setup serial
   analogReference(EXTERNAL); // the voltage applied to the AREF pin (0 to 5V only) 
      // is used as the reference.
}

void loop() {
   val = analogRead(analogPin); // read the input pin
   Serial.println(val); // debug value
}

Semua data dimasukkan ke dalam komputer sebagai karakter, yang meliputi huruf, angka, dan berbagai simbol khusus. Pada bagian ini, kami membahas kemampuan C ++ untuk memeriksa dan memanipulasi karakter individu.

Pustaka penanganan karakter mencakup beberapa fungsi yang melakukan pengujian dan manipulasi data karakter yang berguna. Setiap fungsi menerima karakter, direpresentasikan sebagai int, atau EOF sebagai argumen. Karakter sering dimanipulasi sebagai bilangan bulat.

Ingatlah bahwa EOF biasanya memiliki nilai –1 dan beberapa arsitektur perangkat keras tidak mengizinkan penyimpanan nilai negatif dalam variabel char. Oleh karena itu, fungsi penanganan karakter memanipulasi karakter sebagai bilangan bulat.

Tabel berikut ini merangkum fungsi pustaka penanganan karakter. Saat menggunakan fungsi dari pustaka penanganan karakter, sertakan<cctype> header.

S.No. Prototipe & Deskripsi
1

int isdigit( int c )

Mengembalikan 1 jika c adalah digit dan 0 jika sebaliknya.

2

int isalpha( int c )

Mengembalikan 1 jika c adalah huruf dan 0 sebaliknya.

3

int isalnum( int c )

Mengembalikan 1 jika c adalah angka atau huruf dan 0 jika sebaliknya.

4

int isxdigit( int c )

Mengembalikan 1 jika c adalah karakter digit heksadesimal dan 0 jika sebaliknya.

(Lihat Lampiran D, Sistem Bilangan, untuk penjelasan rinci tentang bilangan biner, oktal, desimal, dan heksadesimal.)

5

int islower( int c )

Mengembalikan 1 jika c adalah huruf kecil dan 0 sebaliknya.

6

int isupper( int c )

Mengembalikan 1 jika c adalah huruf besar; 0 sebaliknya.

7

int isspace( int c )

Mengembalikan 1 jika c adalah karakter spasi — baris baru ('\ n'), spasi

(''), form feed ('\ f'), carriage return ('\ r'), tab horizontal ('\ t'), atau tab vertical ('\ v') - dan 0 sebaliknya.

8

int iscntrl( int c )

Mengembalikan 1 jika c adalah karakter kontrol, seperti baris baru ('\ n'), umpan formulir ('\ f'), carriage return ('\ r'), tab horizontal ('\ t'), tab vertikal (' \ v '), alert (' \ a '), atau backspace (' \ b ') - dan 0 sebaliknya.

9

int ispunct( int c )

Mengembalikan 1 jika c adalah karakter pencetakan selain spasi, digit, atau huruf dan 0 sebaliknya.

10

int isprint( int c )

Mengembalikan 1 jika c adalah karakter pencetakan termasuk spasi ('') dan 0 sebaliknya.

11

int isgraph( int c )

Mengembalikan 1 jika c adalah karakter pencetakan selain spasi ('') dan 0 jika tidak.

Contoh

Contoh berikut menunjukkan penggunaan fungsi isdigit, isalpha, isalnum dan isxdigit. Fungsiisdigitmenentukan apakah argumennya berupa digit (0–9). Fungsinyaisalphamenentukan apakah argumennya adalah huruf besar (AZ) atau huruf kecil (a – z). Fungsinyaisalnummenentukan apakah argumennya berupa huruf besar, huruf kecil, atau angka. Fungsiisxdigit menentukan apakah argumennya adalah digit heksadesimal (A – F, a – f, 0–9).

Contoh 1

void setup () {
   Serial.begin (9600);
   Serial.print ("According to isdigit:\r");
   Serial.print (isdigit( '8' ) ? "8 is a": "8 is not a");
   Serial.print (" digit\r" );
   Serial.print (isdigit( '8' ) ?"# is a": "# is not a") ;
   Serial.print (" digit\r");
   Serial.print ("\rAccording to isalpha:\r" );
   Serial.print (isalpha('A' ) ?"A is a": "A is not a");
   Serial.print (" letter\r");
   Serial.print (isalpha('A' ) ?"b is a": "b is not a");
   Serial.print (" letter\r");
   Serial.print (isalpha('A') ?"& is a": "& is not a");
   Serial.print (" letter\r");
   Serial.print (isalpha( 'A' ) ?"4 is a":"4 is not a");
   Serial.print (" letter\r");
   Serial.print ("\rAccording to isalnum:\r");
   Serial.print (isalnum( 'A' ) ?"A is a" : "A is not a" );

   Serial.print (" digit or a letter\r" );
   Serial.print (isalnum( '8' ) ?"8 is a" : "8 is not a" ) ;
   Serial.print (" digit or a letter\r");
   Serial.print (isalnum( '#' ) ?"# is a" : "# is not a" );
   Serial.print (" digit or a letter\r");
   Serial.print ("\rAccording to isxdigit:\r");
   Serial.print (isxdigit( 'F' ) ?"F is a" : "F is not a" );
   Serial.print (" hexadecimal digit\r" );
   Serial.print (isxdigit( 'J' ) ?"J is a" : "J is not a" ) ;
   Serial.print (" hexadecimal digit\r" );
   Serial.print (isxdigit( '7' ) ?"7 is a" : "7 is not a" ) ;

   Serial.print (" hexadecimal digit\r" );
   Serial.print (isxdigit( '$' ) ? "$ is a" : "$ is not a" );
   Serial.print (" hexadecimal digit\r" );
   Serial.print (isxdigit( 'f' ) ? “f is a" : "f is not a");
   
}

void loop () {

}

Hasil

According to isdigit:
8 is a digit
# is not a digit
According to isalpha:
A is a letter
b is a letter
& is not a letter
4 is not a letter
According to isalnum:
A is a digit or a letter

8 is a digit or a letter
# is not a digit or a letter
According to isxdigit:
F is a hexadecimal digit
J is not a hexadecimal digit
7 is a hexadecimal digit

$ is not a hexadecimal digit
f is a hexadecimal digit

Kami menggunakan operator bersyarat (?:)dengan setiap fungsi untuk menentukan apakah string "adalah" atau string "bukan a" harus dicetak dalam output untuk setiap karakter yang diuji. Misalnya, garisa menunjukkan bahwa jika '8' adalah digit — yaitu, jika isdigitmengembalikan nilai true (bukan nol) — string "8 adalah" dicetak. Jika '8' bukan angka (mis., Jikaisdigit mengembalikan 0), string "8 bukan a" dicetak.

Contoh 2

Contoh berikut menunjukkan penggunaan fungsi islower dan isupper. Fungsinyaislowermenentukan apakah argumennya adalah huruf kecil (a – z). Fungsiisupper menentukan apakah argumennya adalah huruf besar (A – Z).

int thisChar = 0xA0;

void setup () {
   Serial.begin (9600);
   Serial.print ("According to islower:\r") ;
   Serial.print (islower( 'p' ) ? "p is a" : "p is not a" );
   Serial.print ( " lowercase letter\r" );
   Serial.print ( islower( 'P') ? "P is a" : "P is not a") ;
   Serial.print ("lowercase letter\r");
   Serial.print (islower( '5' ) ? "5 is a" : "5 is not a" );
   Serial.print ( " lowercase letter\r" );
   Serial.print ( islower( '!' )? "! is a" : "! is not a") ;
   Serial.print ("lowercase letter\r");

   Serial.print ("\rAccording to isupper:\r") ;
   Serial.print (isupper ( 'D' ) ? "D is a" : "D is not an" );
   Serial.print ( " uppercase letter\r" );
   Serial.print ( isupper ( 'd' )? "d is a" : "d is not an") ;
   Serial.print ( " uppercase letter\r" );
   Serial.print (isupper ( '8' ) ? "8 is a" : "8 is not an" );
   Serial.print ( " uppercase letter\r" );
   Serial.print ( islower( '$' )? "$ is a" : "$ is not an") ;
   Serial.print ("uppercase letter\r ");
}

void setup () {

}

Hasil

According to islower:
p is a lowercase letter
P is not a lowercase letter
5 is not a lowercase letter
! is not a lowercase letter

According to isupper:
D is an uppercase letter
d is not an uppercase letter
8 is not an uppercase letter
$ is not an uppercase letter

Contoh 3

Contoh berikut menunjukkan penggunaan fungsi isspace, iscntrl, ispunct, isprint dan isgraph.

  • Fungsinya isspace menentukan apakah argumennya adalah karakter spasi putih, seperti spasi (''), umpan formulir ('\ f'), baris baru ('\ n'), carriage return ('\ r'), tab horizontal ('\ t ') atau tab vertikal (' \ v ').

  • Fungsinya iscntrl menentukan apakah argumennya adalah karakter kontrol seperti tab horizontal ('\ t'), tab vertikal ('\ v'), form feed ('\ f'), alert ('\ a'), backspace ('\ b '), carriage return (' \ r ') atau baris baru (' \ n ').

  • Fungsinya ispunct menentukan apakah argumennya adalah karakter pencetakan selain spasi, digit atau huruf, seperti $, #, (,), [,], {,},;,: atau%.

  • Fungsinya isprint menentukan apakah argumennya adalah karakter yang dapat ditampilkan di layar (termasuk karakter spasi).

  • Fungsinya isgraph tes untuk karakter yang sama seperti isprint, tetapi karakter spasi tidak disertakan.

void setup () {
   Serial.begin (9600);
   Serial.print ( " According to isspace:\rNewline ") ;
   Serial.print (isspace( '\n' )? " is a" : " is not a" );
   Serial.print ( " whitespace character\rHorizontal tab") ;
   Serial.print (isspace( '\t' )? " is a" : " is not a" );
   Serial.print ( " whitespace character\n") ;
   Serial.print (isspace('%')? " % is a" : " % is not a" );
   
   Serial.print ( " \rAccording to iscntrl:\rNewline") ;
   Serial.print ( iscntrl( '\n' )?"is a" : " is not a" ) ;
   Serial.print (" control character\r");
   Serial.print (iscntrl( '$' ) ? " $ is a" : " $ is not a" );
   Serial.print (" control character\r");
   Serial.print ("\rAccording to ispunct:\r");
   Serial.print (ispunct(';' ) ?"; is a" : "; is not a" ) ;
   Serial.print (" punctuation character\r");
   Serial.print (ispunct('Y' ) ?"Y is a" : "Y is not a" ) ;
   Serial.print ("punctuation character\r");
   Serial.print (ispunct('#' ) ?"# is a" : "# is not a" ) ;
   Serial.print ("punctuation character\r");

   Serial.print ( "\r According to isprint:\r");
   Serial.print (isprint('$' ) ?"$ is a" : "$ is not a" );
   Serial.print (" printing character\rAlert ");
   Serial.print (isprint('\a' ) ?" is a" : " is not a" );
   Serial.print (" printing character\rSpace ");
   Serial.print (isprint(' ' ) ?" is a" : " is not a" );
   Serial.print (" printing character\r");
   
   Serial.print ("\r According to isgraph:\r");
   Serial.print (isgraph ('Q' ) ?"Q is a" : "Q is not a" );
   Serial.print ("printing character other than a space\rSpace ");
   Serial.print (isgraph (' ') ?" is a" : " is not a" );
   Serial.print ("printing character other than a space ");
}

void loop () {

}

Hasil

According to isspace:
Newline is a whitespace character
Horizontal tab is a whitespace character
% is not a whitespace character
According to iscntrl:
Newline is a control character
$ is not a control character
According to ispunct:
; is a punctuation character
Y is not a punctuation character
# is a punctuation character
According to isprint:
$ is a printing character
Alert is not a printing character
Space is a printing character
According to isgraph:
Q is a printing character other than a space
Space is not a printing character other than a space

Pustaka Arduino Math (math.h) menyertakan sejumlah fungsi matematika yang berguna untuk memanipulasi bilangan floating-point.

Makro Perpustakaan

Berikut adalah makro yang ditentukan di header math.h -

Makro Nilai Deskripsi
SAYA 2.7182818284590452354 Konstanta e.
M_LOG2E

1.4426950408889634074

/ * log_2 e * /

Logaritma dari e ke basis 2
M_1_PI

0,31830988618379067154

/ * 1 / pi * /

Konstanta 1 / pi
M_2_PI

0.63661977236758134308

/ * 2 / pi * /

Konstanta 2 / pi
M_2_SQRTPI

1.12837916709551257390

/ * 2 / akar persegi (pi) * /

Konstanta 2 / akar persegi (pi)
M_LN10

2.30258509299404568402

/ * log_e 10 * /

Logaritma natural dari 10
M_LN2

0.69314718055994530942

/ * log_e 2 * /

Logaritma natural dari 2
M_LOG10E

0.43429448190325182765

/ * log_10 e * /

Logaritma dari e ke basis 10
M_PI

3.14159265358979323846

/ * pi * /

Pi konstanta
M_PI_2

3.3V1.57079632679489661923

/ * pi / 2 * /

Konstanta pi / 2
M_PI_4

0.78539816339744830962

/ * pi / 4 * /

Konstanta pi / 4
M_SQRT1_2

0.70710678118654752440

/ * 1 / sqrt (2) * /

Konstanta 1 / sqrt (2)
M_SQRT2

1.41421356237309504880

/ * sqrt (2) * /

Akar kuadrat dari 2
acosf - Alias ​​untuk fungsi acos ()
asinf - Alias ​​untuk fungsi asin ()
atan2f - Alias ​​untuk fungsi atan2 ()
cbrtf - Alias ​​untuk fungsi cbrt ()
ceilf - Alias ​​untuk fungsi ceil ()
copysignf - Alias ​​untuk fungsi copysign ()
coshf - Alias ​​untuk fungsi cosh ()
expf - Alias ​​untuk fungsi exp ()
fabsf - Alias ​​untuk fungsi fabs ()
fdimf - Alias ​​untuk fungsi fdim ()
floorf - Alias ​​untuk fungsi floor ()
fmaxf - Alias ​​untuk fungsi fmax ()
fminf - Alias ​​untuk fungsi fmin ()
fmodf - Alias ​​untuk fungsi fmod ()
frexpf - Alias ​​untuk fungsi frexp ()
hypotf - Alias ​​untuk fungsi hypot ()
INFINITY - Konstanta INFINITY
isfinitef - Alias ​​untuk fungsi isfinite ()
isinff - Alias ​​untuk fungsi isinf ()
isnanf - Alias ​​untuk fungsi isnan ()
ldexpf - Alias ​​untuk fungsi ldexp ()
log10f - Alias ​​untuk fungsi log10 ()
logf - Alias ​​untuk fungsi log ()
lrintf - Alias ​​untuk fungsi lrint ()
lroundf - Alias ​​untuk fungsi lround ()

Fungsi Perpustakaan

Fungsi-fungsi berikut ditentukan di header math.h -

S.No. Fungsi & Deskripsi Perpustakaan
1

double acos (double __x)

Fungsi acos () menghitung nilai utama dari cosinus busur __x. Nilai yang dikembalikan berada dalam kisaran [0, pi] radian. Terjadi kesalahan domain untuk argumen yang tidak dalam rentang [-1, +1].

2

double asin (double __x)

Fungsi asin () menghitung nilai utama arc sine dari __x. Nilai yang dikembalikan berada dalam rentang [-pi / 2, pi / 2] radian. Terjadi kesalahan domain untuk argumen yang tidak dalam rentang [-1, +1].

3

double atan (double __x)

Fungsi atan () menghitung nilai utama dari busur tangen __x. Nilai yang dikembalikan berada dalam rentang [-pi / 2, pi / 2] radian.

4

double atan2 (double __y, double __x)

Fungsi atan2 () menghitung nilai utama dari busur tangen __y / __x, menggunakan tanda dari kedua argumen untuk menentukan kuadran dari nilai yang dikembalikan. Nilai yang dikembalikan berada dalam rentang [-pi, + pi] radian.

5

double cbrt (double __x)

Fungsi cbrt () mengembalikan akar pangkat tiga dari __x.

6

double ceil (double __x)

Fungsi ceil () mengembalikan nilai integral terkecil yang lebih besar dari atau sama dengan __x, yang dinyatakan sebagai bilangan floating-point.

7

static double copysign (double __x, double __y)

Fungsi copysign () mengembalikan __x tetapi dengan tanda __y. Mereka bekerja meskipun __x atau __y adalah NaN atau nol.

8

double cos(double __x)

Fungsi cos () mengembalikan kosinus __x, diukur dalam radian.

9

double cosh (double __x)

Fungsi cosh () mengembalikan kosinus hiperbolik __x.

10

double exp (double __x)

Fungsi exp () mengembalikan nilai eksponensial dari __x.

11

double fabs (double __x)

Fungsi fabs () menghitung nilai absolut dari angka floating-point __x.

12

double fdim (double __x, double __y)

Fungsi fdim () mengembalikan max (__ x - __y, 0). Jika __x atau __y atau keduanya NaN, NaN dikembalikan.

13

double floor (double __x)

Fungsi floor () mengembalikan nilai integral terbesar kurang dari atau sama dengan __x, dinyatakan sebagai bilangan floating-point.

14

double fma (double __x, double __y, double __z)

Fungsi fma () melakukan penambahan-perkalian floating-point. Ini adalah operasi (__x * __y) + __z, tetapi hasil antara tidak dibulatkan ke jenis tujuan. Ini terkadang dapat meningkatkan presisi penghitungan.

15

double fmax (double __x, double __y)

Fungsi fmax () mengembalikan nilai terbesar dari dua nilai __x dan __y. Jika argumen adalah NaN, argumen lainnya dikembalikan. Jika kedua argumen adalah NaN, NaN dikembalikan.

16

double fmin (double __x, double __y)

Fungsi fmin () mengembalikan nilai yang lebih rendah dari dua nilai __x dan __y. Jika argumen adalah NaN, argumen lainnya dikembalikan. Jika kedua argumen adalah NaN, NaN dikembalikan.

17

double fmod (double __x, double__y)

Fungsi fmod () mengembalikan sisa floating-point dari __x / __y.

18

double frexp (double __x, int * __pexp)

Fungsi frexp () memecah bilangan floating-point menjadi pecahan yang dinormalisasi dan kekuatan integral 2. Ia menyimpan bilangan bulat dalam objek int yang ditunjukkan oleh __pexp. Jika __x adalah angka float point normal, fungsi frexp () mengembalikan nilai v, sehingga v memiliki besaran dalam interval [1/2, 1) atau nol, dan __x sama dengan v kali 2 yang dipangkatkan __pexp. Jika __x adalah nol, kedua bagian hasilnya adalah nol. Jika __x bukan bilangan terbatas, frexp () mengembalikan __x sebagaimana adanya dan menyimpan 0 dengan __pexp.

Note - Implementasi ini memungkinkan penunjuk nol sebagai petunjuk untuk melewati penyimpanan eksponen.

19

double hypot (double __x, double__y)

Fungsi hypot () mengembalikan sqrt (__ x * __ x + __y * __ y). Ini adalah panjang hipotenusa segitiga siku-siku dengan panjang sisi __x dan __y, atau jarak titik (__x, __y) dari titik awal. Sebaiknya gunakan fungsi ini sebagai ganti rumus langsung, karena kesalahannya jauh lebih kecil. Tidak ada aliran bawah dengan __x dan __y kecil. Tidak ada luapan jika hasil dalam jangkauan.

20

static int isfinite (double __x)

Fungsi isfinite () mengembalikan nilai bukan nol jika __x terbatas: tidak plus atau minus tak terhingga, dan tidak NaN.

21

int isinf (double __x)

Fungsi isinf () mengembalikan 1 jika argumen __x adalah positif tak terhingga, -1 jika __x adalah tak terhingga negatif, dan 0 sebaliknya.

Note - GCC 4.3 dapat mengganti fungsi ini dengan kode sebaris yang mengembalikan nilai 1 untuk kedua angka tak terbatas (gcc bug # 35509).

22

int isnan (double __x)

Fungsi isnan () mengembalikan 1 jika argumen __x mewakili "bukan-angka" (NaN) objek, jika tidak 0.

23

double ldexp (double __x, int __exp )

Fungsi ldexp () mengalikan bilangan floating-point dengan pangkat integral 2. Ia mengembalikan nilai __x dikali 2 pangkat __exp.

24

double log (double __x)

Fungsi log () mengembalikan logaritma natural dari argumen __x.

25

double log10(double __x)

Fungsi log10 () mengembalikan logaritma argumen __x ke basis 10.

26

long lrint (double __x)

Fungsi lrint () membulatkan __x ke bilangan bulat terdekat, membulatkan separuh kasus ke arah bilangan bulat genap. (Artinya, nilai 1,5 dan 2,5 dibulatkan menjadi 2). Fungsi ini mirip dengan fungsi rint (), tetapi berbeda dalam jenis nilai yang dikembalikan dan kemungkinan luapan.

Returns

Nilai bilangan bulat panjang yang dibulatkan. Jika __x bukan angka terbatas atau luapan, realisasi ini mengembalikan nilai LONG_MIN (0x80000000).

27

long lround (double __x)

Fungsi lround () membulatkan __x ke bilangan bulat terdekat, tetapi membulatkan separuh kasus dari nol (bukan ke bilangan bulat genap terdekat). Fungsi ini mirip dengan fungsi round (), tetapi berbeda dalam jenis nilai yang dikembalikan dan kemungkinan overflow.

Returns

Nilai bilangan bulat panjang yang dibulatkan. Jika __x bukan angka terbatas atau overflow, realisasi ini mengembalikan nilai LONG_MIN (0x80000000).

28

double modf (double __x, double * __iptr )

Fungsi modf () memecah argumen __x menjadi bagian integral dan pecahan, yang masing-masing memiliki tanda yang sama dengan argumen. Ini menyimpan bagian integral sebagai dobel di objek yang ditunjukkan oleh __iptr.

Fungsi modf () mengembalikan bagian pecahan bertanda dari __x.

Note- Implementasi ini melompati penulisan dengan penunjuk nol. Namun, GCC 4.3 dapat menggantikan fungsi ini dengan kode inline yang tidak mengizinkan penggunaan alamat NULL untuk menghindari penyimpanan.

29

float modff (float __x, float * __iptr)

Alias ​​untuk modf ().

30

double pow (double __x, double __y)

Fungsi pow () mengembalikan nilai __x ke eksponen __y.

31

double round (double __x)

Fungsi round () membulatkan __x ke bilangan bulat terdekat, tetapi membulatkan separuh kasus dari nol (bukan ke bilangan bulat genap terdekat). Tidak mungkin melimpah.

Returns

Nilai yang dibulatkan. Jika __x adalah integral atau tak terbatas, __x itu sendiri dikembalikan. Jika __x adalahNaN, kemudian NaN dikembalikan.

32

int signbit (double __x)

Fungsi signbit () mengembalikan nilai bukan nol jika nilai __x memiliki set tanda bitnya. Ini tidak sama dengan `__x <0,0 ', karena titik mengambang IEEE 754 memungkinkan nol untuk ditandatangani. Perbandingan `-0.0 <0.0 'salah, tetapi` signbit (-0.0)' akan mengembalikan nilai bukan nol.

33

double sin (double __x)

Fungsi sin () mengembalikan sinus __x, diukur dalam radian.

34

double sinh (double __x)

Fungsi sinh () mengembalikan sinus hiperbolik __x.

35

double sqrt (double __x)

Fungsi sqrt () mengembalikan akar kuadrat non-negatif dari __x.

36

double square (double __x)

Fungsi persegi () mengembalikan __x * __x.

Note - Fungsi ini tidak termasuk dalam definisi standar C.

37

double tan (double __x)

Fungsi tan () mengembalikan tangen __x, diukur dalam radian.

38

double tanh ( double __x)

Fungsi tanh () mengembalikan tangen hiperbolik __x.

39

double trunc (double __x)

Fungsi trunc () membulatkan __x ke bilangan bulat terdekat yang tidak lebih besar dalam nilai absolut.

Contoh

Contoh berikut menunjukkan cara menggunakan fungsi perpustakaan math.h yang paling umum -

double double__x = 45.45 ;
double double__y = 30.20 ;

void setup() {
   Serial.begin(9600);
   Serial.print("cos num = ");
   Serial.println (cos (double__x) ); // returns cosine of x
   Serial.print("absolute value of num = ");
   Serial.println (fabs (double__x) ); // absolute value of a float
   Serial.print("floating point modulo = ");
   Serial.println (fmod (double__x, double__y)); // floating point modulo
   Serial.print("sine of num = ");
   Serial.println (sin (double__x) ) ;// returns sine of x
   Serial.print("square root of num : ");
   Serial.println ( sqrt (double__x) );// returns square root of x
   Serial.print("tangent of num : ");
   Serial.println ( tan (double__x) ); // returns tangent of x
   Serial.print("exponential value of num : ");
   Serial.println ( exp (double__x) ); // function returns the exponential value of x.
   Serial.print("cos num : ");

   Serial.println (atan (double__x) ); // arc tangent of x
   Serial.print("tangent of num : ");
   Serial.println (atan2 (double__y, double__x) );// arc tangent of y/x
   Serial.print("arc tangent of num : ");
   Serial.println (log (double__x) ) ; // natural logarithm of x
   Serial.print("cos num : ");
   Serial.println ( log10 (double__x)); // logarithm of x to base 10.
   Serial.print("logarithm of num to base 10 : ");
   Serial.println (pow (double__x, double__y) );// x to power of y
   Serial.print("power of num : ");
   Serial.println (square (double__x)); // square of x
}

void loop() {

}

Hasil

cos num = 0.10
absolute value of num = 45.45
floating point modulo =15.25
sine of num = 0.99
square root of num : 6.74
tangent of num : 9.67
exponential value of num : ovf
cos num : 1.55
tangent of num : 0.59
arc tangent of num : 3.82
cos num : 1.66
logarithm of num to base 10 : inf
power of num : 2065.70

Anda perlu menggunakan Trigonometri secara praktis seperti menghitung jarak untuk benda bergerak atau kecepatan sudut. Arduino menyediakan fungsi trigonometri tradisional (sin, cos, tan, asin, acos, atan) yang dapat diringkas dengan menulis prototipe mereka. Math.h berisi prototipe fungsi trigonometri.

Sintaks Tepat Trigonometri

double sin(double x); //returns sine of x radians
double cos(double y); //returns cosine of y radians
double tan(double x); //returns the tangent of x radians
double acos(double x); //returns A, the angle corresponding to cos (A) = x
double asin(double x); //returns A, the angle corresponding to sin (A) = x
double atan(double x); //returns A, the angle corresponding to tan (A) = x

Contoh

double sine = sin(2); // approximately 0.90929737091
double cosine = cos(2); // approximately -0.41614685058
double tangent = tan(2); // approximately -2.18503975868

Arduino Due adalah papan mikrokontroler berdasarkan CPU Atmel SAM3X8E ARM Cortex-M3. Ini adalah papan Arduino pertama yang didasarkan pada mikrokontroler inti ARM 32-bit.

Fitur penting -

  • Ini memiliki 54 pin input / output digital (12 di antaranya dapat digunakan sebagai output PWM)
  • 12 masukan analog
  • 4 UART (port serial perangkat keras)
  • Jam 84 MHz, koneksi yang mendukung USB OTG
  • 2 DAC (digital ke analog), 2 TWI, colokan listrik, header SPI, header JTAG
  • Tombol reset dan tombol hapus

Karakteristik Dewan Arduino Due

Volt operasi Kecepatan CPU Analog masuk / keluar IO / PWM digital EEPROM [KB] SRAM [KB] Flash [KB] USB UART
3,3 Volt 84 Mhz 12/2 54/12 - 96 512 2 mikro 4

Komunikasi

  • 4 UART Perangkat Keras
  • 2 I2C
  • 1 Antarmuka CAN (protokol komunikasi Otomotif)
  • 1 SPI
  • 1 Antarmuka JTAG (10 pin)
  • 1 Host USB (seperti Leonardo)
  • 1 Port Pemrograman

Tidak seperti kebanyakan papan Arduino, papan Arduino Due berjalan pada 3.3V. Tegangan maksimum yang dapat ditoleransi oleh pin I / O adalah 3,3V. Menerapkan voltase yang lebih tinggi dari 3,3V ke pin I / O mana pun dapat merusak papan.

Papan berisi semua yang dibutuhkan untuk mendukung mikrokontroler. Anda cukup menghubungkannya ke komputer dengan kabel mikro-USB atau menyalakannya dengan adaptor AC-ke-DC atau baterai untuk memulai. Due kompatibel dengan semua perisai Arduino yang bekerja pada 3.3V.

Arduino Zero

Zero adalah ekstensi 32-bit yang sederhana dan kuat dari platform yang dibuat oleh UNO. Papan Zero memperluas keluarga dengan memberikan peningkatan kinerja, memungkinkan berbagai peluang proyek untuk perangkat, dan bertindak sebagai alat pendidikan yang hebat untuk mempelajari tentang pengembangan aplikasi 32-bit.

Fitur penting adalah -

  • Aplikasi Zero berkisar dari perangkat IoT pintar, teknologi wearable, otomatisasi teknologi tinggi, hingga robotika gila.

  • Papan ini didukung oleh Atmel's SAMD21 MCU, yang menampilkan inti ARM Cortex® M0 + 32-bit.

  • Salah satu fitur terpentingnya adalah Atmel's Embedded Debugger (EDBG), yang menyediakan antarmuka debug lengkap tanpa memerlukan perangkat keras tambahan, secara signifikan meningkatkan kemudahan penggunaan untuk debugging perangkat lunak.

  • EDBG juga mendukung port COM virtual yang dapat digunakan untuk perangkat dan pemrograman bootloader.

Karakteristik papan Arduino Zero

Volt operasi Kecepatan CPU Analog masuk / keluar IO / PWM digital EEPROM [KB] SRAM [KB] Flash [KB] USB UART
3,3 Volt 48 Mhz 6/1 14/10 - 32 256 2 mikro 2

Tidak seperti kebanyakan board Arduino dan Genuino, Zero beroperasi pada 3.3V. Tegangan maksimum yang dapat ditoleransi oleh pin I / O adalah 3,3V. Menerapkan voltase yang lebih tinggi dari 3,3V ke pin I / O mana pun dapat merusak papan.

Papan berisi semua yang dibutuhkan untuk mendukung mikrokontroler. Anda cukup menghubungkannya ke komputer dengan kabel mikro-USB atau menyalakannya dengan adaptor AC-ke-DC atau baterai untuk memulai. Zero kompatibel dengan semua pelindung yang bekerja pada 3.3V.

Pulse Width Modulation atau PWM adalah teknik umum yang digunakan untuk memvariasikan lebar pulsa dalam rangkaian pulsa. PWM memiliki banyak aplikasi seperti mengendalikan servo dan pengontrol kecepatan, membatasi daya efektif motor dan LED.

Prinsip Dasar PWM

Modulasi lebar pulsa pada dasarnya adalah gelombang persegi dengan waktu tinggi dan waktu rendah yang bervariasi. Sinyal PWM dasar ditunjukkan pada gambar berikut.

Ada berbagai istilah yang terkait dengan PWM -

  • On-Time - Durasi sinyal tinggi.

  • Off-Time - Sinyal durasi waktu rendah.

  • Period - Ini direpresentasikan sebagai jumlah sinyal PWM on-time dan off-time.

  • Duty Cycle - Ini direpresentasikan sebagai persentase sinyal waktu yang tetap menyala selama periode sinyal PWM.

Titik

Seperti yang ditunjukkan pada gambar, T on menunjukkan on-time dan T off menunjukkan sinyal off-time. Periode adalah jumlah waktu hidup dan mati dan dihitung seperti yang ditunjukkan pada persamaan berikut -

Siklus

Siklus kerja dihitung sebagai tepat waktu dari periode waktu tertentu. Menggunakan periode yang dihitung di atas, siklus kerja dihitung sebagai -

Fungsi analogWrite ()

Itu analogWrite()fungsi menulis nilai analog (gelombang PWM) ke pin. Ini dapat digunakan untuk menyalakan LED pada berbagai kecerahan atau menggerakkan motor dengan berbagai kecepatan. Setelah panggilan fungsi analogWrite (), pin akan menghasilkan gelombang persegi yang stabil dari siklus tugas yang ditentukan hingga panggilan berikutnya ke analogWrite () atau panggilan ke digitalRead () atau digitalWrite () pada pin yang sama. Frekuensi sinyal PWM pada kebanyakan pin kira-kira 490 Hz. Pada papan Uno dan sejenisnya, pin 5 dan 6 memiliki frekuensi sekitar 980 Hz. Pin 3 dan 11 pada Leonardo juga bekerja pada 980 Hz.

Pada sebagian besar papan Arduino (yang memiliki ATmega168 atau ATmega328), fungsi ini berfungsi pada pin 3, 5, 6, 9, 10, dan 11. Pada Arduino Mega, berfungsi pada pin 2 - 13 dan 44 - 46. Arduino yang lebih lama papan dengan dukungan hanya ATmega8 analogWrite() pada pin 9, 10, dan 11.

Dukungan Arduino Due analogWrite()pada pin 2 hingga 13, dan pin DAC0 dan DAC1. Berbeda dengan pin PWM, DAC0 dan DAC1 adalah konverter Digital ke Analog, dan bertindak sebagai keluaran analog yang sebenarnya.

Anda tidak perlu memanggil pinMode () untuk menyetel pin sebagai keluaran sebelum memanggil analogWrite ().

analogWrite () Fungsi Sintaks

analogWrite ( pin , value ) ;

value - siklus kerja: antara 0 (selalu mati) dan 255 (selalu aktif).

Example

int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value

void setup() {
   pinMode(ledPin, OUTPUT); // sets the pin as output
}

void loop() {
   val = analogRead(analogPin); // read the input pin
   analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023, 
      // analogWrite values from 0 to 255
}

Untuk menghasilkan angka acak, Anda dapat menggunakan fungsi angka acak Arduino. Kami memiliki dua fungsi -

  • randomSeed(seed)
  • random()

randomSeed (benih)

Fungsi randomSeed (seed) menyetel ulang generator nomor pseudorandom Arduino. Meskipun distribusi angka yang dikembalikan oleh random () pada dasarnya acak, urutannya dapat diprediksi. Anda harus mengatur ulang generator ke nilai acak. Jika Anda memiliki pin analog yang tidak tersambung, pin tersebut mungkin menangkap derau acak dari lingkungan sekitar. Ini mungkin gelombang radio, sinar kosmik, gangguan elektromagnetik dari ponsel, lampu fluorescent, dan sebagainya.

Contoh

randomSeed(analogRead(5)); // randomize using noise from analog pin 5

acak ()

Fungsi acak menghasilkan bilangan pseudo-random. Berikut adalah sintaksnya.

random () Pernyataan Sintaks

long random(max) // it generate random numbers from 0 to max
long random(min, max) // it generate random numbers from min to max

Contoh

long randNumber;

void setup() {
   Serial.begin(9600);
   // if analog input pin 0 is unconnected, random analog
   // noise will cause the call to randomSeed() to generate
   // different seed numbers each time the sketch runs.
   // randomSeed() will then shuffle the random function.
   randomSeed(analogRead(0));
}

void loop() {
   // print a random number from 0 to 299
   Serial.print("random1=");
   randNumber = random(300);
   Serial.println(randNumber); // print a random number from 0to 299
   Serial.print("random2=");
   randNumber = random(10, 20);// print a random number from 10 to 19
   Serial.println (randNumber);
   delay(50);
}

Sekarang mari kita menyegarkan pengetahuan kita tentang beberapa konsep dasar seperti bit dan byte.

Bits

Sedikit hanyalah digit biner.

  • Sistem biner menggunakan dua digit, 0 dan 1.

  • Mirip dengan sistem bilangan desimal, di mana digit suatu bilangan tidak memiliki nilai yang sama, 'signifikansi' suatu bit bergantung pada posisinya dalam bilangan biner. Misalnya, angka pada bilangan desimal 666 sama, tetapi memiliki nilai yang berbeda.

Byte

Satu byte terdiri dari delapan bit.

  • Jika bit adalah digit, logis bahwa byte mewakili angka.

  • Semua operasi matematika dapat dilakukan padanya.

  • Angka dalam satu byte juga tidak memiliki signifikansi yang sama.

  • Bit paling kiri memiliki nilai terbesar yang disebut Bit Paling Signifikan (MSB).

  • Bit paling kanan memiliki nilai paling kecil dan oleh karena itu disebut Least Significant Bit (LSB).

  • Karena delapan nol dan satu byte dapat digabungkan dalam 256 cara yang berbeda, angka desimal terbesar yang dapat diwakili oleh satu byte adalah 255 (satu kombinasi mewakili nol).

Interupsi menghentikan pekerjaan Arduino saat ini sehingga beberapa pekerjaan lain dapat dilakukan.

Misalkan Anda sedang duduk di rumah, mengobrol dengan seseorang. Tiba-tiba telepon berdering. Anda berhenti mengobrol, dan mengangkat telepon untuk berbicara dengan penelepon. Setelah Anda menyelesaikan percakapan telepon, Anda kembali mengobrol dengan orang tersebut sebelum telepon berdering.

Demikian pula, Anda dapat menganggap rutinitas utama seperti mengobrol dengan seseorang, dering telepon menyebabkan Anda berhenti mengobrol. Rutinitas layanan interupsi adalah proses berbicara di telepon. Ketika percakapan telepon berakhir, Anda kemudian kembali ke rutinitas utama Anda yaitu mengobrol. Contoh ini menjelaskan dengan tepat bagaimana interupsi menyebabkan prosesor bertindak.

Program utama sedang menjalankan dan menjalankan beberapa fungsi dalam suatu rangkaian. Namun, ketika terjadi interupsi, program utama terhenti sementara rutinitas lain dijalankan. Saat rutinitas ini selesai, prosesor kembali ke rutinitas utama lagi.

Fitur penting

Berikut beberapa fitur penting tentang interupsi -

  • Interupsi dapat berasal dari berbagai sumber. Dalam hal ini, kami menggunakan interupsi perangkat keras yang dipicu oleh perubahan status pada salah satu pin digital.

  • Sebagian besar desain Arduino memiliki dua interupsi perangkat keras (disebut sebagai "interrupt0" dan "interrupt1") masing-masing ke pin I / O digital 2 dan 3.

  • Arduino Mega memiliki enam interupsi perangkat keras termasuk interupsi tambahan ("interupsi2" hingga "interupsi5") pada pin 21, 20, 19, dan 18.

  • Anda dapat menentukan rutinitas menggunakan fungsi khusus yang disebut sebagai "Rutin Layanan Interupsi" (biasanya dikenal sebagai ISR).

  • Anda dapat menentukan rutinitas dan menentukan kondisi di tepi naik, tepi jatuh, atau keduanya. Pada kondisi khusus ini, interupsi akan diperbaiki.

  • Dimungkinkan untuk menjalankan fungsi itu secara otomatis, setiap kali suatu peristiwa terjadi pada pin input.

Jenis Interupsi

Ada dua jenis interupsi -

  • Hardware Interrupts - Terjadi sebagai respons terhadap peristiwa eksternal, seperti pin interupsi eksternal yang naik atau turun.

  • Software Interrupts- Mereka terjadi sebagai tanggapan atas instruksi yang dikirim dalam perangkat lunak. Satu-satunya jenis interupsi yang didukung "bahasa Arduino" adalah fungsi attachInterrupt ().

Menggunakan Interupsi di Arduino

Interupsi sangat berguna dalam program Arduino karena membantu memecahkan masalah pengaturan waktu. Aplikasi interupsi yang baik adalah membaca encoder putar atau mengamati input pengguna. Umumnya, ISR harus sesingkat dan secepat mungkin. Jika sketsa Anda menggunakan beberapa ISR, hanya satu yang dapat dijalankan dalam satu waktu. Interupsi lain akan dieksekusi setelah interupsi saat ini selesai dalam urutan yang bergantung pada prioritasnya.

Biasanya, variabel global digunakan untuk melewatkan data antara ISR dan program utama. Untuk memastikan variabel yang dibagi antara ISR dan program utama diperbarui dengan benar, nyatakan sebagai volatile.

AttachInterrupt Statement Syntax

attachInterrupt(digitalPinToInterrupt(pin),ISR,mode);//recommended for arduino board
attachInterrupt(pin, ISR, mode) ; //recommended Arduino Due, Zero only
//argument pin: the pin number
//argument ISR: the ISR to call when the interrupt occurs; 
   //this function must take no parameters and return nothing. 
   //This function is sometimes referred to as an interrupt service routine.
//argument mode: defines when the interrupt should be triggered.

Tiga konstanta berikut ditentukan sebelumnya sebagai nilai yang valid -

  • LOW untuk memicu interupsi setiap kali pin rendah.

  • CHANGE untuk memicu interupsi setiap kali nilai pin berubah.

  • FALLING kapan pun pin berubah dari tinggi ke rendah.

Example

int pin = 2; //define interrupt pin to 2
volatile int state = LOW; // To make sure variables shared between an ISR
//the main program are updated correctly,declare them as volatile.

void setup() {
   pinMode(13, OUTPUT); //set pin 13 as output
   attachInterrupt(digitalPinToInterrupt(pin), blink, CHANGE);
   //interrupt at pin 2 blink ISR when pin to change the value
} 
void loop() { 
   digitalWrite(13, state); //pin 13 equal the state value
} 

void blink() { 
   //ISR function
   state = !state; //toggle the state when the interrupt occurs
}

Ratusan protokol komunikasi telah ditetapkan untuk mencapai pertukaran data ini. Setiap protokol dapat dikategorikan menjadi salah satu dari dua kategori: paralel atau serial.

Komunikasi Paralel

Koneksi paralel antara Arduino dan periferal melalui port input / output adalah solusi ideal untuk jarak yang lebih pendek hingga beberapa meter. Namun, dalam kasus lain ketika diperlukan untuk membangun komunikasi antara dua perangkat untuk jarak yang lebih jauh, tidak mungkin menggunakan koneksi paralel. Antarmuka paralel mentransfer banyak bit secara bersamaan. Mereka biasanya membutuhkan bus data - transmisi melalui delapan, enam belas, atau lebih kabel. Data ditransfer dalam gelombang 1 dan 0 yang besar dan menerjang.

Keuntungan dan Kerugian Komunikasi Paralel

Komunikasi paralel tentunya memiliki kelebihan. Ini lebih cepat dari serial, langsung, dan relatif mudah diterapkan. Namun, ini membutuhkan banyak port dan jalur input / output (I / O). Jika Anda pernah harus memindahkan proyek dari Arduino Uno dasar ke Mega, Anda tahu bahwa jalur I / O pada mikroprosesor bisa sangat berharga dan sedikit. Oleh karena itu, kami lebih memilih komunikasi serial, mengorbankan kecepatan potensial untuk real estate pin.

Modul Komunikasi Serial

Saat ini, sebagian besar papan Arduino dibuat dengan beberapa sistem berbeda untuk komunikasi serial sebagai perlengkapan standar.

Manakah dari sistem berikut yang digunakan bergantung pada faktor-faktor berikut -

  • Berapa banyak perangkat yang dimiliki mikrokontroler untuk bertukar data?
  • Seberapa cepat pertukaran data harus dilakukan?
  • Berapa jarak antara perangkat ini?
  • Apakah perlu mengirim dan menerima data secara bersamaan?

Salah satu hal terpenting tentang komunikasi serial adalah Protocol, yang harus diperhatikan dengan ketat. Ini adalah seperangkat aturan, yang harus diterapkan sedemikian rupa sehingga perangkat dapat menafsirkan data dengan benar yang saling dipertukarkan. Untungnya, Arduino secara otomatis mengurus ini, sehingga pekerjaan programmer / pengguna direduksi menjadi tulis sederhana (data yang akan dikirim) dan dibaca (data yang diterima).

Jenis Komunikasi Serial

Komunikasi serial dapat diklasifikasikan lebih lanjut sebagai -

  • Synchronous - Perangkat yang disinkronkan menggunakan jam yang sama dan waktunya sinkron satu sama lain.

  • Asynchronous - Perangkat yang asinkron memiliki jamnya sendiri dan dipicu oleh keluaran dari keadaan sebelumnya.

Sangat mudah untuk mengetahui apakah sebuah perangkat sinkron atau tidak. Jika jam yang sama diberikan ke semua perangkat yang terhubung, maka mereka sinkron. Jika tidak ada garis jam, itu asynchronous.

Misalnya, modul UART (Universal Asynchronous Receiver Transmitter) bersifat asynchronous.

Protokol serial asinkron memiliki sejumlah aturan bawaan. Aturan ini tidak lain adalah mekanisme yang membantu memastikan transfer data yang kuat dan bebas dari kesalahan. Mekanisme ini, yang kami dapatkan untuk menghindari sinyal clock eksternal, adalah -

  • Bit sinkronisasi
  • Bit data
  • Bit paritas
  • Tingkat baud

Sinkronisasi Bits

Bit sinkronisasi adalah dua atau tiga bit khusus yang ditransfer dengan setiap paket data. Mereka adalah bit awal dan bit stop. Sesuai dengan namanya, bit-bit ini masing-masing menandai awal dan akhir paket.

Selalu hanya ada satu bit awal, tetapi jumlah bit stop dapat dikonfigurasi menjadi satu atau dua (meskipun biasanya dibiarkan di satu).

Bit awal selalu diindikasikan oleh garis data diam yang bergerak dari 1 ke 0, sedangkan bit berhenti akan beralih kembali ke keadaan diam dengan menahan garis di 1.

Bit Data

Jumlah data di setiap paket dapat diatur ke berbagai ukuran dari 5 hingga 9 bit. Tentu, ukuran data standar adalah byte 8-bit dasar Anda, tetapi ukuran lain memiliki kegunaannya. Paket data 7-bit bisa lebih efisien daripada 8, terutama jika Anda hanya mentransfer karakter ASCII 7-bit.

Paritas Bit

Pengguna dapat memilih apakah harus ada bit paritas atau tidak, dan jika ya, apakah paritas harus ganjil atau genap. Bit paritas adalah 0 jika jumlah 1 di antara bit data genap. Paritas ganjil justru sebaliknya.

Tingkat Baud

Istilah baud rate digunakan untuk menunjukkan jumlah bit yang ditransfer per detik [bps]. Perhatikan bahwa ini mengacu pada bit, bukan byte. Biasanya diperlukan oleh protokol bahwa setiap byte ditransfer bersama dengan beberapa bit kontrol. Artinya satu byte dalam aliran data serial dapat terdiri dari 11 bit. Misalnya, jika baud rate adalah 300 bps maka maksimum 37 dan minimum 27 byte dapat ditransfer per detik.

Arduino UART

Kode berikut akan membuat Arduino mengirim halo dunia saat dijalankan.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
   Serial.println("hello world"); //print hello world
}

void loop() {

}

Setelah sketsa Arduino diunggah ke Arduino, buka monitor Serial

di bagian kanan atas Arduino IDE.

Ketik apa pun di kotak atas Monitor Serial dan tekan kirim atau enter pada keyboard Anda. Ini akan mengirim serangkaian byte ke Arduino.

Kode berikut mengembalikan apa pun yang diterimanya sebagai masukan.

Kode berikut akan membuat Arduino mengirimkan output tergantung pada input yang diberikan.

void setup() {
   Serial.begin(9600); //set up serial library baud rate to 9600
}

void loop() {
   if(Serial.available()) //if number of bytes (characters) available for reading from { 
      serial port
      Serial.print("I received:"); //print I received
      Serial.write(Serial.read()); //send what you read
   }
}

Perhatikan itu Serial.print dan Serial.println akan mengirimkan kembali kode ASCII yang sebenarnya, sedangkan Serial.writeakan mengirim kembali teks yang sebenarnya. Lihat kode ASCII untuk informasi lebih lanjut.

Inter-integrated circuit (I2C) adalah sistem untuk pertukaran data serial antara mikrokontroler dan sirkuit terintegrasi khusus dari generasi baru. Ini digunakan ketika jarak antara mereka pendek (penerima dan pemancar biasanya pada papan cetak yang sama). Koneksi dibuat melalui dua konduktor. Satu digunakan untuk transfer data dan yang lainnya digunakan untuk sinkronisasi (sinyal jam).

Seperti yang terlihat pada gambar berikut, satu perangkat selalu menjadi master. Ini melakukan pengalamatan satu chip budak sebelum komunikasi dimulai. Dengan cara ini, satu mikrokontroler dapat berkomunikasi dengan 112 perangkat yang berbeda. Kecepatan baud biasanya 100 Kb / detik (mode standar) atau 10 Kb / detik (mode kecepatan baud lambat). Sistem dengan baud rate 3.4 Mb / detik baru-baru ini muncul. Jarak antar perangkat, yang berkomunikasi melalui bus I2C dibatasi hingga beberapa meter.

Papan Pin I2C

Bus I2C terdiri dari dua sinyal - SCL dan SDA. SCL adalah sinyal clock, dan SDA adalah sinyal data. Master bus saat ini selalu menghasilkan sinyal clock. Beberapa perangkat pendukung mungkin memaksa jam rendah pada waktu-waktu tertentu untuk menunda master mengirim lebih banyak data (atau membutuhkan lebih banyak waktu untuk menyiapkan data sebelum master mencoba untuk menghentikannya). Ini dikenal sebagai "peregangan jam".

Berikut adalah pin untuk berbagai papan Arduino -

  • Uno, Pro Mini A4 (SDA), A5 (SCL)
  • Mega, Jatuh Tempo 20 (SDA), 21 (SCL)
  • Leonardo, Yun 2 (SDA), 3 (SCL)

Arduino I2C

Kami memiliki dua mode - kode master dan kode slave - untuk menghubungkan dua papan Arduino menggunakan I2C. Mereka adalah -

  • Master Transmitter / Slave Receiver
  • Master Receiver / Slave Transmitter

Master Transmitter / Slave Receiver

Sekarang mari kita lihat apa itu pemancar utama dan penerima budak.

Pemancar Utama

Fungsi berikut digunakan untuk menginisialisasi pustaka Wire dan bergabung dengan bus I2C sebagai master atau slave. Ini biasanya hanya dipanggil sekali.

  • Wire.begin(address) - Alamat adalah alamat budak 7-bit dalam kasus kami karena master tidak ditentukan dan akan bergabung dengan bus sebagai master.

  • Wire.beginTransmission(address) - Mulai transmisi ke perangkat slave I2C dengan alamat yang diberikan.

  • Wire.write(value) - Antrian byte untuk transmisi dari master ke perangkat slave (di antara panggilan ke beginTransmission () dan endTransmission ()).

  • Wire.endTransmission() - Mengakhiri transmisi ke perangkat slave yang dimulai oleh beginTransmission () dan mengirimkan byte yang diantrekan oleh wire.write ().

Example

#include <Wire.h> //include wire library

void setup() //this will run only once { 
   Wire.begin(); // join i2c bus as master
} 

short age = 0; 

void loop() {   
   Wire.beginTransmission(2); 
   // transmit to device #2
   Wire.write("age is = ");
   Wire.write(age); // sends one byte
   Wire.endTransmission(); // stop transmitting
   delay(1000); 
}

Penerima Budak

Fungsi berikut digunakan -

  • Wire.begin(address) - Alamat adalah alamat budak 7-bit.

  • Wire.onReceive(received data handler) - Fungsi untuk dipanggil ketika perangkat slave menerima data dari master.

  • Wire.available() - Mengembalikan jumlah byte yang tersedia untuk pengambilan dengan Wire.read (). Ini harus dipanggil di dalam penangan Wire.onReceive ().

Example

#include <Wire.h> //include wire library

void setup() {  //this will run only once
   Wire.begin(2); // join i2c bus with address #2
   Wire.onReceive(receiveEvent); // call receiveEvent when the master send any thing 
   Serial.begin(9600); // start serial for output to print what we receive 
}

void loop() {   
   delay(250); 
}

//-----this function will execute whenever data is received from master-----//

void receiveEvent(int howMany) { 
   while (Wire.available()>1) // loop through all but the last {
      char c = Wire.read(); // receive byte as a character
      Serial.print(c); // print the character
   }
}

Master Receiver / Slave Transmitter

Sekarang mari kita lihat apa itu master receiver dan slave transmitter.

Penerima Master

Master, diprogram untuk meminta, dan kemudian membaca byte data yang dikirim dari Slave Arduino yang dialamatkan secara unik.

Fungsi berikut digunakan -

Wire.requestFrom(address,number of bytes)- Digunakan oleh master untuk meminta byte dari perangkat slave. Byte kemudian dapat diambil dengan fungsi wire.available () dan fungsi wire.read ().

Example

#include <Wire.h> //include wire library void setup() { 
   Wire.begin(); // join i2c bus (address optional for master) 
   Serial.begin(9600); // start serial for output
} 

void loop() { 
   Wire.requestFrom(2, 1); // request 1 bytes from slave device #2
   while (Wire.available()) // slave may send less than requested {
      char c = Wire.read(); // receive a byte as character
      Serial.print(c); // print the character
   } 
   delay(500); 
}

Slave Transmitter

Fungsi berikut digunakan.

Wire.onRequest(handler) - Sebuah fungsi dipanggil ketika master meminta data dari perangkat slave ini.

Example

#include <Wire.h> 

void setup() { 
   Wire.begin(2); // join i2c bus with address #2
   Wire.onRequest(requestEvent); // register event
} 

Byte x = 0;

void loop() { 
   delay(100); 
} 

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()

void requestEvent() { 
   Wire.write(x); // respond with message of 1 bytes as expected by master
   x++; 
}

Bus Serial Peripheral Interface (SPI) adalah sistem untuk komunikasi serial, yang menggunakan hingga empat konduktor, biasanya tiga. Satu konduktor digunakan untuk menerima data, satu untuk pengiriman data, satu untuk sinkronisasi dan satu alternatif untuk memilih perangkat untuk berkomunikasi. Ini adalah koneksi dupleks penuh, yang berarti bahwa data dikirim dan diterima secara bersamaan. Baud rate maksimum lebih tinggi dari pada sistem komunikasi I2C.

Papan Pin SPI

SPI menggunakan empat kabel berikut -

  • SCK - Ini adalah jam serial yang digerakkan oleh master.

  • MOSI - Ini adalah output master / input slave yang digerakkan oleh master.

  • MISO - Ini adalah input master / output slave yang digerakkan oleh master.

  • SS - Ini adalah kabel pemilihan budak.

Fungsi berikut digunakan. Anda harus menyertakan SPI.h.

  • SPI.begin() - Menginisialisasi bus SPI dengan mengatur SCK, MOSI, dan SS ke keluaran, menarik SCK dan MOSI rendah, dan SS tinggi.

  • SPI.setClockDivider(divider)- Untuk mengatur pembagi jam SPI relatif terhadap jam sistem. Pada papan berbasis AVR, pembagi yang tersedia adalah 2, 4, 8, 16, 32, 64 atau 128. Pengaturan default adalah SPI_CLOCK_DIV4, yang menyetel jam SPI ke seperempat frekuensi jam sistem (5 Mhz untuk papan pada 20 MHz).

  • Divider - Bisa jadi (SPI_CLOCK_DIV2, SPI_CLOCK_DIV4, SPI_CLOCK_DIV8, SPI_CLOCK_DIV16, SPI_CLOCK_DIV32, SPI_CLOCK_DIV64, SPI_CLOCK_DIV128).

  • SPI.transfer(val) - Transfer SPI didasarkan pada pengiriman dan penerimaan simultan: data yang diterima dikembalikan dalam acceptVal.

  • SPI.beginTransaction(SPISettings(speedMaximum, dataOrder, dataMode)) - speedMaximum adalah jam, dataOrder (MSBFIRST atau LSBFIRST), dataMode (SPI_MODE0, SPI_MODE1, SPI_MODE2, atau SPI_MODE3).

Kami memiliki empat mode operasi di SPI sebagai berikut -

  • Mode 0 (the default) - Jam biasanya rendah (CPOL = 0), dan data diambil sampelnya pada transisi dari rendah ke tinggi (tepi depan) (CPHA = 0).

  • Mode 1 - Jam biasanya rendah (CPOL = 0), dan data diambil sampelnya pada transisi dari tinggi ke rendah (tepi belakang) (CPHA = 1).

  • Mode 2 - Jam biasanya tinggi (CPOL = 1), dan data diambil sampelnya pada transisi dari tinggi ke rendah (tepi depan) (CPHA = 0).

  • Mode 3 - Jam biasanya tinggi (CPOL = 1), dan data diambil sampelnya pada transisi dari rendah ke tinggi (tepi belakang) (CPHA = 1).

  • SPI.attachInterrupt(handler) - Fungsi untuk dipanggil ketika perangkat slave menerima data dari master.

Sekarang, kita akan menghubungkan dua papan Arduino UNO bersama; satu sebagai tuan dan yang lainnya sebagai budak.

  • (SS): pin 10
  • (MOSI): pin 11
  • (MISO): pin 12
  • (SCK): pin 13

Dasarnya biasa. Berikut adalah representasi diagram dari koneksi antara kedua papan -

Mari kita lihat contoh SPI sebagai Master dan SPI sebagai Slave.

SPI sebagai MASTER

Contoh

#include <SPI.h>

void setup (void) {
   Serial.begin(115200); //set baud rate to 115200 for usart
   digitalWrite(SS, HIGH); // disable Slave Select
   SPI.begin ();
   SPI.setClockDivider(SPI_CLOCK_DIV8);//divide the clock by 8
}

void loop (void) {
   char c;
   digitalWrite(SS, LOW); // enable Slave Select
   // send test string
   for (const char * p = "Hello, world!\r" ; c = *p; p++) {
      SPI.transfer (c);
      Serial.print(c);
   }
   digitalWrite(SS, HIGH); // disable Slave Select
   delay(2000);
}

SPI sebagai BUDAK

Contoh

#include <SPI.h>
char buff [50];
volatile byte indx;
volatile boolean process;

void setup (void) {
   Serial.begin (115200);
   pinMode(MISO, OUTPUT); // have to send on master in so it set as output
   SPCR |= _BV(SPE); // turn on SPI in slave mode
   indx = 0; // buffer empty
   process = false;
   SPI.attachInterrupt(); // turn on interrupt
}
ISR (SPI_STC_vect) // SPI interrupt routine { 
   byte c = SPDR; // read byte from SPI Data Register
   if (indx < sizeof buff) {
      buff [indx++] = c; // save data in the next index in the array buff
      if (c == '\r') //check for the end of the word
      process = true;
   }
}

void loop (void) {
   if (process) {
      process = false; //reset the process
      Serial.println (buff); //print the array on serial monitor
      indx= 0; //reset button to zero
   }
}

LED adalah lampu kecil dan kuat yang digunakan dalam banyak aplikasi berbeda. Untuk memulai, kami akan bekerja untuk mengedipkan LED, Halo Dunia mikrokontroler. Ini sesederhana menyalakan dan mematikan lampu. Menetapkan dasar penting ini akan memberi Anda dasar yang kokoh saat kami mengerjakan eksperimen yang lebih kompleks.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Uno R3
  • 1 × LED
  • 1 × 330Ω Resistor
  • 2 × Jumper

Prosedur

Ikuti diagram sirkuit dan sambungkan komponen pada papan tempat memotong roti seperti yang ditunjukkan pada gambar di bawah ini.

Note- Untuk mengetahui polaritas sebuah LED, perhatikan baik-baik. Yang lebih pendek dari kedua kaki, menuju tepi datar bohlam menunjukkan terminal negatif.

Komponen seperti resistor harus memiliki terminal yang ditekuk menjadi sudut 90 ° agar pas dengan soket papan tempat memotong roti dengan benar. Anda juga dapat memotong terminal lebih pendek.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik New.

Kode Arduino

/*
   Blink
   Turns on an LED on for one second, then off for one second, repeatedly.
*/

// the setup function runs once when you press reset or power the board

void setup() {  // initialize digital pin 13 as an output.
   pinMode(2, OUTPUT);
}

// the loop function runs over and over again forever

void loop() {
   digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level)
   delay(1000); // wait for a second
   digitalWrite(2, LOW); // turn the LED off by making the voltage LOW
   delay(1000); // wait for a second
}

Kode untuk Dicatat

pinMode(2, OUTPUT)- Sebelum Anda dapat menggunakan salah satu pin Arduino, Anda perlu memberi tahu Arduino Uno R3 apakah itu INPUT atau OUTPUT. Kami menggunakan "fungsi" built-in yang disebut pinMode () untuk melakukan ini.

digitalWrite(2, HIGH) - Saat Anda menggunakan pin sebagai OUTPUT, Anda dapat memerintahkannya menjadi TINGGI (keluaran 5 volt), atau RENDAH (keluaran 0 volt).

Hasil

Anda akan melihat LED menyala dan mati. Jika output yang diperlukan tidak terlihat, pastikan Anda telah memasang sirkuit dengan benar, dan memverifikasi dan mengunggah kode ke papan Anda.

Contoh ini mendemonstrasikan penggunaan fungsi analogWrite () dalam memudarkan LED. AnalogWrite menggunakan modulasi lebar pulsa (PWM), menyalakan dan mematikan pin digital dengan sangat cepat dengan rasio yang berbeda antara hidup dan mati, untuk menciptakan efek memudar.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Uno R3
  • 1 × LED
  • 1 × 330Ω Resistor
  • 2 × Jumper

Prosedur

Ikuti diagram sirkuit dan sambungkan komponen pada papan tempat memotong roti seperti yang ditunjukkan pada gambar di bawah ini.

Note- Untuk mengetahui polaritas sebuah LED, perhatikan baik-baik. Yang lebih pendek dari kedua kaki, menuju tepi datar bohlam menunjukkan terminal negatif.

Komponen seperti resistor harus memiliki terminal yang ditekuk menjadi sudut 90 ° agar pas dengan soket papan tempat memotong roti dengan benar. Anda juga dapat memotong terminal lebih pendek.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik New.

Kode Arduino

/*
   Fade
   This example shows how to fade an LED on pin 9 using the analogWrite() function.

   The analogWrite() function uses PWM, so if you want to change the pin you're using, be
   sure to use another PWM capable pin. On most Arduino, the PWM pins are identified with
   a "~" sign, like ~3, ~5, ~6, ~9, ~10 and ~11.
*/

int led = 9; // the PWM pin the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by
// the setup routine runs once when you press reset:

void setup() {
   // declare pin 9 to be an output:
   pinMode(led, OUTPUT);
}

// the loop routine runs over and over again forever:

void loop() {
   // set the brightness of pin 9:
   analogWrite(led, brightness);
   // change the brightness for next time through the loop:
   brightness = brightness + fadeAmount;
   // reverse the direction of the fading at the ends of the fade:
   if (brightness == 0 || brightness == 255) {
      fadeAmount = -fadeAmount ;
   }
   // wait for 30 milliseconds to see the dimming effect
   delay(300);
}

Kode untuk Dicatat

Setelah mendeklarasikan pin 9 sebagai pin LED Anda, tidak ada yang perlu dilakukan dalam fungsi setup () pada kode Anda. Fungsi analogWrite () yang akan Anda gunakan di loop utama kode Anda memerlukan dua argumen: Satu, memberi tahu fungsi pin mana yang akan ditulis dan yang lainnya menunjukkan nilai PWM yang akan ditulis.

Untuk memudarkan dan menghidupkan LED, secara bertahap tingkatkan nilai PWM dari 0 (sepenuhnya mati) menjadi 255 (terus menerus), lalu kembali ke 0, untuk menyelesaikan siklus. Dalam sketsa yang diberikan di atas, nilai PWM diatur menggunakan variabel yang disebut kecerahan. Setiap kali melalui loop, itu meningkat dengan nilai variabelfadeAmount.

Jika kecerahan berada pada salah satu nilai ekstremnya (baik 0 atau 255), maka fadeAmount diubah ke negatifnya. Dengan kata lain, jika fadeAmount bernilai 5, maka disetel ke -5. Jika -5, maka diset ke 5. Kali berikutnya melalui loop, perubahan ini menyebabkan kecerahan berubah arah juga.

analogWrite()dapat mengubah nilai PWM dengan sangat cepat, jadi penundaan di akhir sketsa mengontrol kecepatan pudar. Coba ubah nilai penundaan dan lihat bagaimana itu mengubah efek memudar.

Hasil

Anda akan melihat kecerahan LED Anda berubah secara bertahap.

Contoh ini akan menunjukkan cara membaca input analog pada pin analog 0. Input diubah dari analogRead () menjadi tegangan, dan dicetak ke monitor serial Arduino Software (IDE).

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Uno R3
  • Resistor variabel 1 × 5K (potensiometer)
  • 2 × Jumper

Prosedur

Ikuti diagram sirkuit dan sambungkan komponen pada papan tempat memotong roti seperti yang ditunjukkan pada gambar di bawah ini.

Potensiometer

Potensiometer (atau pot) adalah transduser elektro-mekanis sederhana. Ini mengubah gerakan putar atau linier dari operator input menjadi perubahan resistansi. Perubahan ini (atau dapat) digunakan untuk mengontrol apa pun mulai dari volume sistem hi-fi ke arah kapal kontainer besar.

Panci seperti yang kita kenal awalnya dikenal sebagai rheostat (pada dasarnya resistor wirewound variabel). Variasi pot yang tersedia sekarang cukup mencengangkan, dan bisa sangat sulit bagi pemula (khususnya) untuk menentukan jenis mana yang cocok untuk tugas tertentu. Beberapa jenis pot yang berbeda, yang semuanya dapat digunakan untuk tugas yang sama membuat pekerjaan menjadi lebih sulit.

Gambar di sebelah kiri menunjukkan simbol skema standar pot. Gambar di sebelah kanan adalah potensiometer.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Kode Arduino

/*
   ReadAnalogVoltage
   Reads an analog input on pin 0, converts it to voltage, 
   and prints the result to the serial monitor.
   Graphical representation is available using serial plotter (Tools > Serial Plotter menu)
   Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.
*/

// the setup routine runs once when you press reset:

void setup() {
   // initialize serial communication at 9600 bits per second:
   Serial.begin(9600);
}

// the loop routine runs over and over again forever:

void loop() {
   // read the input on analog pin 0:
   int sensorValue = analogRead(A0);
   // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
   float voltage = sensorValue * (5.0 / 1023.0);
   // print out the value you read:
   Serial.println(voltage);
}

Kode untuk Dicatat

Dalam program atau sketsa yang diberikan di bawah ini, hal pertama yang Anda lakukan dalam fungsi pengaturan adalah memulai komunikasi serial, pada 9600 bit per detik, antara papan dan komputer Anda dengan jalur -

Serial.begin(9600);

Di loop utama kode Anda, Anda perlu membuat variabel untuk menyimpan nilai resistansi (yang akan antara 0 dan 1023, cocok untuk tipe data int) yang berasal dari potensiometer Anda -

int sensorValue = analogRead(A0);

Untuk mengubah nilai dari 0-1023 ke kisaran yang sesuai dengan tegangan, pin sedang membaca, Anda perlu membuat variabel lain, pelampung, dan melakukan sedikit perhitungan. Untuk menskalakan angka antara 0,0 dan 5.0, bagi 5.0 dengan 1023.0 dan kalikan dengan sensorValue -

float voltage= sensorValue * (5.0 / 1023.0);

Terakhir, Anda perlu mencetak informasi ini ke jendela serial Anda. Anda dapat melakukan ini dengan perintah Serial.println () di baris terakhir kode Anda -

Serial.println(voltage)

Sekarang, buka Serial Monitor di Arduino IDE dengan mengklik ikon di sisi kanan bilah hijau atas atau menekan Ctrl + Shift + M.

Hasil

Anda akan melihat aliran angka yang stabil mulai dari 0,0 - 5,0. Saat Anda memutar pot, nilainya akan berubah, sesuai dengan tegangan pada pin A0.

Contoh ini menunjukkan cara membaca input analog pada pin analog 0, mengubah nilai dari analogRead () menjadi tegangan, dan mencetaknya ke monitor serial Arduino Software (IDE).

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Uno R3
  • 1 × 5k ohm variabel resistor (potensiometer)
  • 2 × Jumper
  • 8 × LED atau Anda dapat menggunakan (tampilan grafik batang LED seperti yang ditunjukkan pada gambar di bawah)

Prosedur

Ikuti diagram sirkuit dan sambungkan komponen pada papan tempat memotong roti seperti yang ditunjukkan pada gambar di bawah ini.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

10 Segmen Grafik Batang LED

LED grafik batang 10 segmen ini memiliki banyak kegunaan. Dengan footprint yang ringkas, hookup sederhana, mereka mudah untuk prototipe atau produk jadi. Pada dasarnya, mereka adalah 10 LED biru individual yang ditempatkan bersama, masing-masing dengan koneksi anoda dan katoda individual.

Mereka juga tersedia dalam warna kuning, merah, dan hijau.

Note- Pin pada grafik batang ini mungkin berbeda dari yang tercantum di lembar data. Memutar perangkat 180 derajat akan memperbaiki perubahan, menjadikan pin 11 sebagai pin pertama dalam satu baris.

Kode Arduino

/*
   LED bar graph
   Turns on a series of LEDs based on the value of an analog sensor. 
   This is a simple way to make a bar graph display. 
   Though this graph uses 8LEDs, you can use any number by
      changing the LED count and the pins in the array.
   This method can be used to control any series of digital
      outputs that depends on an analog input.
*/

// these constants won't change:
const int analogPin = A0; // the pin that the potentiometer is attached to
const int ledCount = 8; // the number of LEDs in the bar graph
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // an array of pin numbers to which LEDs are attached

void setup() {
   // loop over the pin array and set them all to output:
   for (int thisLed = 0; thisLed < ledCount; thisLed++) {
      pinMode(ledPins[thisLed], OUTPUT);
   }
}

void loop() {
   // read the potentiometer:
   int sensorReading = analogRead(analogPin);
   // map the result to a range from 0 to the number of LEDs:
   int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);
   // loop over the LED array:
   for (int thisLed = 0; thisLed < ledCount; thisLed++) {
      // if the array element's index is less than ledLevel,
      // turn the pin for this element on:
      if (thisLed < ledLevel) {
         digitalWrite(ledPins[thisLed], HIGH);
      }else { // turn off all pins higher than the ledLevel:
         digitalWrite(ledPins[thisLed], LOW);
      }
   }
}

Kode untuk Dicatat

Sketsa bekerja seperti ini: pertama, Anda membaca input. Anda memetakan nilai input ke kisaran output, dalam hal ini sepuluh LED. Kemudian Anda menyiapkan filefor-loopuntuk mengulangi output. Jika nomor keluaran dalam rangkaian lebih rendah dari kisaran masukan yang dipetakan, Anda menyalakannya. Jika tidak, Anda mematikannya.

Hasil

Anda akan melihat LED menyala satu per satu ketika nilai pembacaan analog meningkat dan MATI satu per satu saat pembacaan menurun.

Contoh ini menggunakan pustaka Keyboard untuk mengeluarkan Anda dari sesi pengguna di komputer Anda saat pin 2 pada ARDUINO UNO ditarik ke ground. Sketsa tersebut mensimulasikan penekanan tombol secara berurutan dari dua atau tiga tombol secara bersamaan dan setelah jeda singkat, tombol akan melepaskannya.

Warning - Saat Anda menggunakan Keyboard.print()perintah, Arduino mengambil alih keyboard komputer Anda. Untuk memastikan Anda tidak kehilangan kendali atas komputer Anda saat menjalankan sketsa dengan fungsi ini, siapkan sistem kontrol yang andal sebelum Anda memanggil Keyboard.print (). Sketsa ini dirancang untuk hanya mengirim perintah Keyboard setelah pin ditarik ke tanah.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Leonardo, Micro, atau papan Due
  • 1 × tombol tekan
  • 1 × Jumper

Prosedur

Ikuti diagram sirkuit dan sambungkan komponen pada papan tempat memotong roti seperti yang ditunjukkan pada gambar di bawah.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Untuk contoh ini, Anda perlu menggunakan Arduino IDE 1.6.7

Note- Anda harus menyertakan perpustakaan keyboard di file perpustakaan Arduino Anda. Salin dan tempel file pustaka keypad di dalam file dengan pustaka nama (disorot) seperti yang ditunjukkan pada tangkapan layar berikut.

Kode Arduino

/*
   Keyboard logout
   This sketch demonstrates the Keyboard library.
   When you connect pin 2 to ground, it performs a logout.
   It uses keyboard combinations to do this, as follows:
   On Windows, CTRL-ALT-DEL followed by ALT-l
   On Ubuntu, CTRL-ALT-DEL, and ENTER
   On OSX, CMD-SHIFT-q
   To wake: Spacebar.
   Circuit:
   * Arduino Leonardo or Micro
   * wire to connect D2 to ground.
*/

#define OSX 0
#define WINDOWS 1
#define UBUNTU 2

#include "Keyboard.h"

// change this to match your platform:
int platform = WINDOWS;

void setup() {
   // make pin 2 an input and turn on the
   // pullup resistor so it goes high unless
   // connected to ground:
   
   pinMode(2, INPUT_PULLUP);
   Keyboard.begin();
}

void loop() {
   while (digitalRead(2) == HIGH) {
      // do nothing until pin 2 goes low
      delay(500);
   }
   
   delay(1000);
   
   switch (platform) {
      case OSX:
      Keyboard.press(KEY_LEFT_GUI);
	  
      // Shift-Q logs out:
      Keyboard.press(KEY_LEFT_SHIFT);
      Keyboard.press('Q');
      delay(100);
	  
      // enter:
      Keyboard.write(KEY_RETURN);
      break;
	  
      case WINDOWS:
      // CTRL-ALT-DEL:
      Keyboard.press(KEY_LEFT_CTRL);
      Keyboard.press(KEY_LEFT_ALT);
      Keyboard.press(KEY_DELETE);
      delay(100);
      Keyboard.releaseAll();
	  
      //ALT-l:
      delay(2000);
      Keyboard.press(KEY_LEFT_ALT);
      Keyboard.press('l');
      Keyboard.releaseAll();
      break;
	  
      case UBUNTU:
      // CTRL-ALT-DEL:
      Keyboard.press(KEY_LEFT_CTRL);
      Keyboard.press(KEY_LEFT_ALT);
      Keyboard.press(KEY_DELETE);
	  
      delay(1000);
      Keyboard.releaseAll();
	  
      // Enter to confirm logout:
      Keyboard.write(KEY_RETURN);
      break;
   }
   
   // do nothing:
   while (true);
}

Keyboard.releaseAll();

   // enter:
      Keyboard.write(KEY_RETURN);
      break;
      case WINDOWS:
	  
   // CTRL-ALT-DEL:
      Keyboard.press(KEY_LEFT_CTRL);
      Keyboard.press(KEY_LEFT_ALT);
      Keyboard.press(KEY_DELETE);
      delay(100);
      Keyboard.releaseAll();
	  
   //ALT-l:
      delay(2000);
      Keyboard.press(KEY_LEFT_ALT);
      Keyboard.press('l');
      Keyboard.releaseAll();
      break;
	  
   case UBUNTU:
      // CTRL-ALT-DEL:
      Keyboard.press(KEY_LEFT_CTRL);
      Keyboard.press(KEY_LEFT_ALT);
      Keyboard.press(KEY_DELETE);
      delay(1000);
      Keyboard.releaseAll();
	  
      // Enter to confirm logout:
      Keyboard.write(KEY_RETURN);
      break;
   }
   
// do nothing:
   while (true);
}

Kode untuk Dicatat

Sebelum Anda mengunggah program ke papan Anda, pastikan Anda menetapkan OS yang benar yang Anda gunakan saat ini ke variabel platform.

Saat sketsa sedang berjalan, menekan tombol akan menghubungkan pin 2 ke tanah dan papan akan mengirimkan urutan logout ke PC yang terhubung dengan USB.

Hasil

Saat Anda menghubungkan pin 2 ke tanah, ini melakukan operasi logout.

Ini menggunakan kombinasi keyboard berikut untuk logout -

  • Di Windows, CTRL-ALT-DEL diikuti oleh ALT-l

  • Di Ubuntu, CTRL-ALT-DEL, dan ENTER

  • Di OSX, CMD-SHIFT-q

Dalam contoh ini, saat tombol ditekan, string teks dikirim ke komputer sebagai input keyboard. String tersebut melaporkan berapa kali tombol ditekan. Setelah Anda memprogram dan menghubungkan Leonardo, buka editor teks favorit Anda untuk melihat hasilnya.

Warning - Saat Anda menggunakan Keyboard.print()perintah, Arduino mengambil alih keyboard komputer Anda. Untuk memastikan Anda tidak kehilangan kendali atas komputer Anda saat menjalankan sketsa dengan fungsi ini, siapkan sistem kontrol yang andal sebelum Anda memanggilKeyboard.print(). Sketsa ini menyertakan tombol tekan untuk mengaktifkan keyboard, sehingga hanya berjalan setelah tombol ditekan.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Leonardo, Micro, atau papan Due
  • 1 × tombol tekan sesaat
  • Resistor 1 × 10k ohm

Prosedur

Ikuti diagram sirkuit dan sambungkan komponen pada papan tempat memotong roti seperti yang ditunjukkan pada gambar di bawah ini.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Kode Arduino

/*
   Keyboard Message test For the Arduino Leonardo and Micro,
      Sends a text string when a button is pressed.
   The circuit:
   * pushbutton attached from pin 4 to +5V
   * 10-kilohm resistor attached from pin 4 to ground
*/

#include "Keyboard.h"
const int buttonPin = 4; // input pin for pushbutton
int previousButtonState = HIGH; // for checking the state of a pushButton
int counter = 0; // button push counter

void setup() {
   pinMode(buttonPin, INPUT); // make the pushButton pin an input:
   Keyboard.begin(); // initialize control over the keyboard:
}

void loop() {
   int buttonState = digitalRead(buttonPin); // read the pushbutton:
   if ((buttonState != previousButtonState)&& (buttonState == HIGH)) // and it's currently pressed: {
      // increment the button counter
      counter++;
      // type out a message
      Keyboard.print("You pressed the button ");
      Keyboard.print(counter);
      Keyboard.println(" times.");
   }
   // save the current button state for comparison next time:
   previousButtonState = buttonState;
}

Kode untuk Dicatat

Pasang satu terminal tombol tekan ke pin 4 di Arduino. Pasang pin lainnya ke 5V. Gunakan resistor sebagai pull-down, memberikan referensi ke arde, dengan memasangnya dari pin 4 ke arde.

Setelah Anda memprogram papan Anda, cabut kabel USB, buka editor teks dan letakkan kursor teks di area pengetikan. Hubungkan papan ke komputer Anda melalui USB lagi dan tekan tombol untuk menulis di dokumen.

Hasil

Dengan menggunakan editor teks apapun, maka akan ditampilkan teks yang dikirim melalui Arduino.

Dengan menggunakan perpustakaan Mouse, Anda dapat mengontrol kursor layar komputer dengan Arduino Leonardo, Micro, atau Due.

Contoh khusus ini menggunakan lima tombol tekan untuk memindahkan kursor pada layar. Empat tombol adalah arah (atas, bawah, kiri, kanan) dan satu untuk klik kiri mouse. Pergerakan kursor dari Arduino selalu relatif. Setiap kali input dibaca, posisi kursor diperbarui relatif terhadap posisinya saat ini.

Setiap kali salah satu tombol arah ditekan, Arduino akan menggerakkan mouse, memetakan input TINGGI ke kisaran 5 ke arah yang sesuai.

Tombol kelima adalah untuk mengontrol klik kiri dari mouse. Saat tombol dilepaskan, komputer akan mengenali acara tersebut.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Leonardo, papan Mikro atau Karena
  • Resistor 5 × 10k ohm
  • 5 × tombol tekan sesaat

Prosedur

Ikuti diagram sirkuit dan sambungkan komponen pada papan tempat memotong roti seperti yang ditunjukkan pada gambar di bawah.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Untuk contoh ini, Anda perlu menggunakan Arduino IDE 1.6.7

Kode Arduino

/*
   Button Mouse Control
   For Leonardo and Due boards only .Controls the mouse from 
   five pushbuttons on an Arduino Leonardo, Micro or Due.
   Hardware:
   * 5 pushbuttons attached to D2, D3, D4, D5, D6
   The mouse movement is always relative. This sketch reads
   four pushbuttons, and uses them to set the movement of the mouse.
   WARNING: When you use the Mouse.move() command, the Arduino takes
   over your mouse! Make sure you have control before you use the mouse commands.
*/

#include "Mouse.h"
// set pin numbers for the five buttons:
const int upButton = 2;
const int downButton = 3;
const int leftButton = 4;
const int rightButton = 5;
const int mouseButton = 6;
int range = 5; // output range of X or Y movement; affects movement speed
int responseDelay = 10; // response delay of the mouse, in ms

void setup() {
   // initialize the buttons' inputs:
   pinMode(upButton, INPUT);
   pinMode(downButton, INPUT);
   pinMode(leftButton, INPUT);
   pinMode(rightButton, INPUT);
   pinMode(mouseButton, INPUT);
   // initialize mouse control:
   Mouse.begin();
}

void loop() {
   // read the buttons:
   int upState = digitalRead(upButton);
   int downState = digitalRead(downButton);
   int rightState = digitalRead(rightButton);
   int leftState = digitalRead(leftButton);
   int clickState = digitalRead(mouseButton);
   // calculate the movement distance based on the button states:
   int xDistance = (leftState - rightState) * range;
   int yDistance = (upState - downState) * range;
   // if X or Y is non-zero, move:
   if ((xDistance != 0) || (yDistance != 0)) {
      Mouse.move(xDistance, yDistance, 0);
   }

   // if the mouse button is pressed:
   if (clickState == HIGH) {
      // if the mouse is not pressed, press it:
      if (!Mouse.isPressed(MOUSE_LEFT)) {
         Mouse.press(MOUSE_LEFT);
      }
   } else {                           // else the mouse button is not pressed:
      // if the mouse is pressed, release it:
      if (Mouse.isPressed(MOUSE_LEFT)) {
         Mouse.release(MOUSE_LEFT);
      }
   }
   // a delay so the mouse does not move too fast:
   delay(responseDelay);
}

Kode untuk Dicatat

Hubungkan papan Anda ke komputer dengan kabel mikro-USB. Tombol-tombol tersebut terhubung ke input digital dari pin 2 hingga 6. Pastikan Anda menggunakan resistor 10k pull-down.

Contoh ini mendengarkan byte yang berasal dari port serial. Saat diterima, papan mengirimkan penekanan tombol kembali ke komputer. Tombol yang dikirim lebih tinggi dari yang diterima, jadi jika Anda mengirim "a" dari monitor serial, Anda akan menerima "b" dari papan yang terhubung ke komputer. A "1" akan menghasilkan "2" dan seterusnya.

Warning - Saat Anda menggunakan Keyboard.print()perintah, papan Leonardo, Mikro atau Karena mengambil alih keyboard komputer Anda. Untuk memastikan Anda tidak kehilangan kendali atas komputer Anda saat menjalankan sketsa dengan fungsi ini, siapkan sistem kontrol yang andal sebelum Anda memanggil Keyboard.print (). Sketsa ini dirancang untuk hanya mengirim perintah Keyboard setelah papan menerima byte melalui port serial.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Arduino Leonardo, Micro, atau papan Due

Prosedur

Cukup sambungkan papan Anda ke komputer menggunakan kabel USB.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Notes- Anda harus menyertakan pustaka keypad di file pustaka Arduino Anda. Salin dan tempel file perpustakaan keypad di dalam file dengan nama 'perpustakaan' disorot dengan warna kuning.

Kode Arduino

/*
   Keyboard test
   For the Arduino Leonardo, Micro or Due Reads
      a byte from the serial port, sends a keystroke back. 
   The sent keystroke is one higher than what's received, e.g. if you send a, you get b, send
      A you get B, and so forth.
   The circuit:
   * none
*/

#include "Keyboard.h"

void setup() {
   // open the serial port:
   Serial.begin(9600);
   // initialize control over the keyboard:
   Keyboard.begin();
}

void loop() {
   // check for incoming serial data:
   if (Serial.available() > 0) {
      // read incoming serial data:
      char inChar = Serial.read();
      // Type the next ASCII value from what you received:
      Keyboard.write(inChar + 1);
   }
}

Kode untuk Dicatat

Setelah diprogram, buka monitor serial Anda dan kirim byte. Papan akan menjawab dengan penekanan tombol, yaitu satu angka lebih tinggi.

Hasil

Papan akan membalas dengan penekanan tombol satu angka lebih tinggi pada monitor serial Arduino IDE ketika Anda mengirim satu byte.

Di bagian ini, kita akan belajar bagaimana menghubungkan papan Arduino kita dengan sensor yang berbeda. Kami akan membahas sensor berikut -

  • Sensor kelembaban (DHT22)
  • Sensor suhu (LM35)
  • Sensor detektor air (Pemicu Air Sederhana)
  • SENSOR PIR
  • SENSOR ULTRASONIK
  • GPS

Sensor Kelembaban (DHT22)

DHT-22 (juga disebut sebagai AM2302) adalah keluaran digital, kelembaban relatif, dan sensor suhu. Ini menggunakan sensor kelembaban kapasitif dan termistor untuk mengukur udara di sekitarnya, dan mengirimkan sinyal digital pada pin data.

Dalam contoh ini, Anda akan mempelajari cara menggunakan sensor ini dengan Arduino UNO. Suhu dan kelembaban ruangan akan dicetak ke monitor serial.

Sensor DHT-22

Koneksinya sederhana. Pin pertama di kiri untuk daya 3-5V, pin kedua ke pin input data dan pin paling kanan ke ground.

Detail Teknis

  • Power - 3-5V

  • Max Current - 2.5mA

  • Humidity - 0-100%, akurasi 2-5%

  • Temperature - 40 hingga 80 ° C, akurasi ± 0,5 ° C

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Uno R3
  • 1 × DHT22
  • Resistor 1 × 10K ohm

Prosedur

Ikuti diagram sirkuit dan sambungkan komponen pada papan tempat memotong roti seperti yang ditunjukkan pada gambar di bawah.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Kode Arduino

// Example testing sketch for various DHT humidity/temperature sensors

#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
   Serial.begin(9600);
   Serial.println("DHTxx test!");
   dht.begin();
}

void loop() {
   delay(2000); // Wait a few seconds between measurements
   float h = dht.readHumidity();
   // Reading temperature or humidity takes about 250 milliseconds!
   float t = dht.readTemperature();
   // Read temperature as Celsius (the default)
   float f = dht.readTemperature(true);
   // Read temperature as Fahrenheit (isFahrenheit = true)
   // Check if any reads failed and exit early (to try again).
   if (isnan(h) || isnan(t) || isnan(f)) {
      Serial.println("Failed to read from DHT sensor!");
      return;
   }
   
   // Compute heat index in Fahrenheit (the default)
   float hif = dht.computeHeatIndex(f, h);
   // Compute heat index in Celsius (isFahreheit = false)
   float hic = dht.computeHeatIndex(t, h, false);
   Serial.print ("Humidity: ");
   Serial.print (h);
   Serial.print (" %\t");
   Serial.print ("Temperature: ");
   Serial.print (t);
   Serial.print (" *C ");
   Serial.print (f);
   Serial.print (" *F\t");
   Serial.print ("Heat index: ");
   Serial.print (hic);
   Serial.print (" *C ");
   Serial.print (hif);
   Serial.println (" *F");
}

Kode untuk Dicatat

Sensor DHT22 memiliki empat terminal (V cc , DATA, NC, GND), yang terhubung ke papan sebagai berikut -

  • Pin DATA ke pin Arduino nomor 2
  • Pin V cc ke 5 volt papan Arduino
  • Pin GND ke ground papan Arduino
  • Kita perlu menghubungkan resistor 10k ohm (resistor pull up) antara DATA dan pin V cc

Setelah koneksi perangkat keras selesai, Anda perlu menambahkan pustaka DHT22 ke file pustaka Arduino Anda seperti yang dijelaskan sebelumnya.

Hasil

Anda akan melihat tampilan suhu dan kelembaban pada monitor port serial yang diperbarui setiap 2 detik.

Sensor Suhu Seri LM35 adalah perangkat suhu sirkuit terintegrasi presisi dengan tegangan keluaran yang berbanding lurus dengan suhu Celcius.

Perangkat LM35 memiliki keunggulan dibandingkan sensor suhu linier yang dikalibrasi dalam Kelvin, karena pengguna tidak perlu mengurangi tegangan konstan yang besar dari keluaran untuk mendapatkan penskalaan Celcius yang nyaman. Perangkat LM35 tidak memerlukan kalibrasi atau pemangkasan eksternal untuk memberikan akurasi khas ± ¼ ° C pada suhu kamar dan ± ¾ ° C pada kisaran suhu −55 ° C hingga 150 ° C penuh.

Spesifikasi teknis

  • Dikalibrasi langsung dalam Celcius (Celcius)
  • Faktor skala linier + 10-mV / ° C.
  • 0,5 ° C memastikan akurasi (pada 25 ° C)
  • Dinilai untuk rentang −55 ° C hingga 150 ° C penuh
  • Cocok untuk aplikasi jarak jauh

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Uno R3
  • Sensor 1 × LM35

Prosedur

Ikuti diagram sirkuit dan sambungkan komponen pada papan tempat memotong roti seperti yang ditunjukkan pada gambar di bawah ini.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Kode Arduino

float temp;
int tempPin = 0;

void setup() {
   Serial.begin(9600);
}

void loop() {
   temp = analogRead(tempPin);
   // read analog volt from sensor and save to variable temp
   temp = temp * 0.48828125;
   // convert the analog volt to its temperature equivalent
   Serial.print("TEMPERATURE = ");
   Serial.print(temp); // display temperature value
   Serial.print("*C");
   Serial.println();
   delay(1000); // update sensor reading each one second
}

Kode untuk Dicatat

Sensor LM35 memiliki tiga terminal - V s , V out dan GND. Kami akan menghubungkan sensor sebagai berikut -

  • Hubungkan + V s ke + 5v di papan Arduino Anda.
  • Connect V keluar untuk Analog0 atau A0 di papan Arduino.
  • Hubungkan GND dengan GND di Arduino.

Konverter Analog ke Digital (ADC) mengubah nilai analog menjadi perkiraan digital berdasarkan rumus Nilai ADC = sampel * 1024 / tegangan referensi (+ 5v). Jadi dengan referensi +5 volt, pendekatan digital akan sama dengan tegangan input * 205.

Hasil

Anda akan melihat tampilan suhu pada monitor port serial yang diperbarui setiap detik.

Bata sensor air dirancang untuk deteksi air, yang dapat digunakan secara luas untuk mendeteksi curah hujan, ketinggian air, dan bahkan kebocoran cairan.

Menghubungkan sensor air ke Arduino adalah cara yang bagus untuk mendeteksi kebocoran, tumpahan, banjir, hujan, dll. Sensor dapat digunakan untuk mendeteksi keberadaan, ketinggian, volume, dan / atau tidak adanya air. Meskipun ini dapat digunakan untuk mengingatkan Anda untuk menyirami tanaman Anda, ada sensor Grove yang lebih baik untuk itu. Sensor memiliki serangkaian jejak yang terbuka, yang terbaca RENDAH saat air terdeteksi.

Dalam bab ini, kita akan menghubungkan sensor air ke Digital Pin 8 di Arduino, dan akan meminta LED yang sangat berguna untuk membantu mengidentifikasi kapan sensor air bersentuhan dengan sumber air.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Uno R3
  • 1 × Sensor Air
  • 1 × dipimpin
  • Resistor 1 × 330 ohm

Prosedur

Ikuti diagram sirkuit dan sambungkan komponen pada papan tempat memotong roti seperti yang ditunjukkan pada gambar di bawah ini.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik New.

Kode Arduino

#define Grove_Water_Sensor 8 // Attach Water sensor to Arduino Digital Pin 8
#define LED 9 // Attach an LED to Digital Pin 9 (or use onboard LED)

void setup() {
   pinMode(Grove_Water_Sensor, INPUT); // The Water Sensor is an Input
   pinMode(LED, OUTPUT); // The LED is an Output
}

void loop() {
   /* The water sensor will switch LOW when water is detected.
   Get the Arduino to illuminate the LED and activate the buzzer
   when water is detected, and switch both off when no water is present */
   if( digitalRead(Grove_Water_Sensor) == LOW) {
      digitalWrite(LED,HIGH);
   }else {
      digitalWrite(LED,LOW);
   }
}

Kode untuk Dicatat

Sensor air memiliki tiga terminal - S, V out (+), dan GND (-). Hubungkan sensor sebagai berikut -

  • Hubungkan + V s ke + 5v di papan Arduino Anda.
  • Hubungkan S ke pin digital nomor 8 pada papan Arduino.
  • Hubungkan GND dengan GND di Arduino.
  • Hubungkan LED ke pin digital nomor 9 di papan Arduino.

Saat sensor mendeteksi air, pin 8 pada Arduino menjadi RENDAH dan kemudian LED pada Arduino DIHIDUPKAN.

Hasil

Anda akan melihat indikasi LED menyala ketika sensor mendeteksi air.

Sensor PIR memungkinkan Anda merasakan gerakan. Mereka digunakan untuk mendeteksi apakah manusia telah masuk atau keluar dari jangkauan sensor. Mereka biasanya ditemukan di peralatan dan gadget yang digunakan di rumah atau untuk bisnis. Mereka sering disebut sebagai sensor PIR, "Passive Infrared", "Pyroelectric", atau "IR motion".

Berikut adalah keunggulan Sensor PIR -

  • Berukuran kecil
  • Rentang lensa lebar
  • Antarmuka yang mudah
  • Inexpensive
  • Low-power
  • Mudah digunakan
  • Jangan sampai rusak

PIR terbuat dari sensor piroelektrik, kaleng logam bulat dengan kristal persegi panjang di tengahnya, yang dapat mendeteksi tingkat radiasi infra merah. Semuanya memancarkan radiasi tingkat rendah, dan semakin panas sesuatu, semakin banyak radiasi yang dipancarkan. Sensor dalam detektor gerak dibagi menjadi dua bagian. Ini untuk mendeteksi gerakan (perubahan) dan bukan tingkat IR rata-rata. Kedua bagian tersebut dihubungkan sehingga saling meniadakan. Jika satu bagian melihat lebih banyak atau lebih sedikit radiasi IR dibandingkan yang lain, output akan berayun tinggi atau rendah.

PIR memiliki pengaturan yang dapat disesuaikan dan memiliki header yang dipasang di bantalan 3-pin ground / out / power.

Untuk banyak proyek atau produk dasar yang perlu mendeteksi ketika seseorang meninggalkan atau memasuki area, sensor PIR sangat bagus. Perhatikan bahwa PIR tidak memberi tahu Anda jumlah orang di sekitar atau kedekatan mereka dengan sensor. Lensa sering kali dipasang pada sapuan tertentu di kejauhan dan terkadang dipasang oleh hewan peliharaan di rumah.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Uno R3
  • 1 × PIR Sensor (MQ3)

Prosedur

Ikuti diagram sirkuit dan buat koneksi seperti yang ditunjukkan pada gambar di bawah ini.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Kode Arduino

#define pirPin 2
int calibrationTime = 30;
long unsigned int lowIn;
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int PIRValue = 0;

void setup() {
   Serial.begin(9600);
   pinMode(pirPin, INPUT);
}

void loop() {
   PIRSensor();
}

void PIRSensor() {
   if(digitalRead(pirPin) == HIGH) {
      if(lockLow) {
         PIRValue = 1;
         lockLow = false;
         Serial.println("Motion detected.");
         delay(50);
      }
      takeLowTime = true;
   }
   if(digitalRead(pirPin) == LOW) {
      if(takeLowTime){
         lowIn = millis();takeLowTime = false;
      }
      if(!lockLow && millis() - lowIn > pause) {
         PIRValue = 0;
         lockLow = true;
         Serial.println("Motion ended.");
         delay(50);
      }
   }
}

Kode untuk Dicatat

Sensor PIR memiliki tiga terminal - V cc , OUT dan GND. Hubungkan sensor sebagai berikut -

  • Hubungkan + V cc ke + 5v pada papan Arduino.
  • Hubungkan OUT ke pin digital 2 pada papan Arduino.
  • Hubungkan GND dengan GND di Arduino.

Anda dapat mengatur sensitivitas sensor dan waktu tunda melalui dua resistor variabel yang terletak di bagian bawah papan sensor.

Setelah sensor mendeteksi gerakan apa pun, Arduino akan mengirim pesan melalui port serial untuk mengatakan bahwa gerakan terdeteksi. Gerakan indra PIR akan menunda untuk waktu tertentu untuk memeriksa apakah ada gerakan baru. Jika tidak ada gerakan yang terdeteksi, Arduino akan mengirimkan pesan baru yang mengatakan bahwa gerakan telah berakhir.

Hasil

Anda akan melihat pesan di port serial Anda jika gerakan terdeteksi dan pesan lain ketika gerakan berhenti.

Sensor ultrasonik HC-SR04 menggunakan SONAR untuk menentukan jarak suatu objek seperti yang dilakukan kelelawar. Alat ini menawarkan deteksi jarak non-kontak yang sangat baik dengan akurasi tinggi dan pembacaan yang stabil dalam paket yang mudah digunakan dari 2 cm hingga 400 cm atau 1 "hingga 13 kaki.

Pengoperasian tidak terpengaruh oleh sinar matahari atau material hitam, meskipun secara akustik, material lembut seperti kain sulit dideteksi. Itu datang lengkap dengan pemancar ultrasonik dan modul penerima.

Spesifikasi teknis

  • Catu Daya - + 5V DC
  • Arus Diam - <2mA
  • Bekerja Saat Ini - 15mA
  • Sudut Efektif - <15 °
  • Jarak Rentang - 2cm - 400 cm / 1 ″ - 13ft
  • Resolusi - 0,3 cm
  • Mengukur Sudut - 30 derajat

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Breadboard
  • 1 × Arduino Uno R3
  • 1 × Sensor ULTRASONIC (HC-SR04)

Prosedur

Ikuti diagram sirkuit dan buat koneksi seperti yang ditunjukkan pada gambar di bawah ini.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Kode Arduino

const int pingPin = 7; // Trigger Pin of Ultrasonic Sensor
const int echoPin = 6; // Echo Pin of Ultrasonic Sensor

void setup() {
   Serial.begin(9600); // Starting Serial Terminal
}

void loop() {
   long duration, inches, cm;
   pinMode(pingPin, OUTPUT);
   digitalWrite(pingPin, LOW);
   delayMicroseconds(2);
   digitalWrite(pingPin, HIGH);
   delayMicroseconds(10);
   digitalWrite(pingPin, LOW);
   pinMode(echoPin, INPUT);
   duration = pulseIn(echoPin, HIGH);
   inches = microsecondsToInches(duration);
   cm = microsecondsToCentimeters(duration);
   Serial.print(inches);
   Serial.print("in, ");
   Serial.print(cm);
   Serial.print("cm");
   Serial.println();
   delay(100);
}

long microsecondsToInches(long microseconds) {
   return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds) {
   return microseconds / 29 / 2;
}

Kode untuk Dicatat

Sensor Ultrasonik memiliki empat terminal - + 5V, Trigger, Echo, dan GND terhubung sebagai berikut -

  • Hubungkan pin + 5V ke + 5v pada papan Arduino Anda.
  • Hubungkan Trigger ke pin 7 digital di papan Arduino Anda.
  • Hubungkan Echo ke pin digital 6 di papan Arduino Anda.
  • Hubungkan GND dengan GND di Arduino.

Dalam program kami, kami telah menampilkan jarak yang diukur oleh sensor dalam inci dan cm melalui port serial.

Hasil

Anda akan melihat jarak yang diukur oleh sensor dalam inci dan cm pada monitor serial Arduino.

Tombol tekan atau sakelar menghubungkan dua terminal terbuka dalam sebuah sirkuit. Contoh ini menyalakan LED pada pin 2 saat Anda menekan sakelar tombol tekan yang terhubung ke pin 8.

Resistor pull-down

Resistor pull-down digunakan dalam rangkaian logika elektronik untuk memastikan bahwa input ke Arduino menetap pada level logika yang diharapkan jika perangkat eksternal terputus atau berada pada impedansi tinggi. Karena tidak ada yang terhubung ke pin input, itu tidak berarti bahwa itu adalah nol logis. Resistor pull down dihubungkan antara ground dan pin yang sesuai pada perangkat.

Contoh resistor pull-down dalam rangkaian digital ditunjukkan pada gambar berikut. Sakelar tombol tekan dihubungkan antara tegangan suplai dan pin mikrokontroler. Dalam rangkaian seperti itu, ketika sakelar ditutup, input pengontrol mikro berada pada nilai logis tinggi, tetapi ketika sakelar terbuka, resistor pull-down menarik tegangan input ke tanah (nilai nol logis), mencegah keadaan tak terdefinisi di input.

Resistor pull-down harus memiliki resistansi yang lebih besar daripada impedansi rangkaian logika, atau mungkin akan menarik tegangan terlalu banyak dan tegangan input pada pin akan tetap pada nilai logis rendah yang konstan, terlepas dari posisi sakelar.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × papan Arduino UNO
  • Resistor 1 × 330 ohm
  • 1 × 4.7K ohm resistor (tarik ke bawah)
  • 1 × LED

Prosedur

Ikuti diagram sirkuit dan buat koneksi seperti yang ditunjukkan pada gambar di bawah ini.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik New.

Kode Arduino

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 8; // the number of the pushbutton pin
const int ledPin = 2; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status

void setup() {
   // initialize the LED pin as an output:
   pinMode(ledPin, OUTPUT);
   // initialize the pushbutton pin as an input:
   pinMode(buttonPin, INPUT);
}

void loop() {
   // read the state of the pushbutton value:
   buttonState = digitalRead(buttonPin);
   // check if the pushbutton is pressed.
   // if it is, the buttonState is HIGH:
   if (buttonState == HIGH) {
      // turn LED on:
      digitalWrite(ledPin, HIGH);
   } else {
      // turn LED off:
      digitalWrite(ledPin, LOW);
   }
}

Kode untuk Dicatat

Ketika sakelar terbuka, (tombol tekan tidak ditekan), tidak ada koneksi antara kedua terminal tombol tekan, jadi pin terhubung ke ground (melalui resistor pull-down) dan kami membaca LOW. Ketika sakelar ditutup (tombol tekan ditekan), itu membuat koneksi antara dua terminalnya, menghubungkan pin ke 5 volt, sehingga kami membaca TINGGI.

Hasil

LED AKTIF saat tombol ditekan dan MATI saat dilepas.

Dalam bab ini, kami akan menghubungkan berbagai jenis motor dengan papan Arduino (UNO) dan menunjukkan kepada Anda cara menghubungkan motor dan mengendarainya dari papan Anda.

Ada tiga jenis motor yang berbeda -

  • Motor DC
  • Motor servo
  • Motor stepper

Motor DC (Motor Arus Searah) adalah jenis motor yang paling umum. Motor DC biasanya hanya memiliki dua lead, satu positif dan satu negatif. Jika Anda menghubungkan kedua kabel ini langsung ke baterai, motor akan berputar. Jika Anda mengganti kabel, motor akan berputar ke arah yang berlawanan.

Warning- Jangan menggerakkan motor langsung dari pin papan Arduino. Ini dapat merusak papan. Gunakan Sirkuit driver atau IC.

Kami akan membagi bab ini menjadi tiga bagian -

  • Buat saja motor Anda berputar
  • Kontrol kecepatan motor
  • Kontrol arah putaran motor DC

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1x papan Arduino UNO
  • 1x PN2222 Transistor
  • 1x Motor DC 6V Kecil
  • 1x 1N4001 dioda
  • 1x 270 Ω Resistor

Prosedur

Ikuti diagram sirkuit dan buat koneksi seperti yang ditunjukkan pada gambar di bawah ini.

Tindakan pencegahan

Lakukan tindakan pencegahan berikut saat membuat sambungan.

  • Pertama, pastikan transistor terhubung dengan cara yang benar. Sisi datar transistor harus menghadap papan Arduino seperti yang ditunjukkan pada pengaturan.

  • Kedua, ujung bergaris dioda harus mengarah ke saluran listrik + 5V sesuai dengan pengaturan yang ditunjukkan pada gambar.

Kontrol Putar Kode Arduino

int motorPin = 3;

void setup() {

}

void loop() {
   digitalWrite(motorPin, HIGH);
}

Kode untuk Dicatat

Transistor bertindak seperti sakelar, yang mengontrol daya ke motor. Arduino pin 3 digunakan untuk menghidupkan dan mematikan transistor dan diberi nama 'motorPin' pada sketsa tersebut.

Hasil

Motor akan berputar dengan kecepatan penuh saat pin Arduino nomor 3 masuk tinggi.

Kontrol Kecepatan Motor

Berikut adalah diagram skema motor DC, terhubung ke papan Arduino.

Kode Arduino

int motorPin = 9;

void setup() {
   pinMode(motorPin, OUTPUT);
   Serial.begin(9600);
   while (! Serial);
   Serial.println("Speed 0 to 255");
}

void loop() {
   if (Serial.available()) {
      int speed = Serial.parseInt();
      if (speed >= 0 && speed <= 255) {
         analogWrite(motorPin, speed);
      }
   }
}

Kode untuk Dicatat

Transistor bertindak seperti sakelar, yang mengontrol daya motor. Arduino pin 3 digunakan untuk menghidupkan dan mematikan transistor dan diberi nama 'motorPin' pada sketsa tersebut.

Saat program dimulai, Anda diminta untuk memberikan nilai untuk mengontrol kecepatan motor. Anda harus memasukkan nilai antara 0 dan 255 di Serial Monitor.

Pada fungsi 'loop', perintah 'Serial.parseInt' digunakan untuk membaca angka yang dimasukkan sebagai teks di Serial Monitor dan mengubahnya menjadi 'int'. Anda dapat mengetik nomor apa pun di sini. Pernyataan 'jika' di baris berikutnya hanya melakukan penulisan analog dengan nomor ini, jika nomor tersebut antara 0 dan 255.

Hasil

Motor DC akan berputar dengan kecepatan berbeda sesuai dengan nilai (0 hingga 250) yang diterima melalui port serial.

Kontrol Arah Putar

Untuk mengontrol arah putaran motor DC, tanpa menukar kabel, Anda dapat menggunakan rangkaian yang disebut H-Bridge. Jembatan-H adalah sirkuit elektronik yang dapat menggerakkan motor di kedua arah. H-bridge digunakan dalam banyak aplikasi berbeda. Salah satu aplikasi yang paling umum adalah mengontrol motor pada robot. Ini disebut jembatan-H karena menggunakan empat transistor yang dihubungkan sedemikian rupa sehingga diagram skematik terlihat seperti "H."

Kami akan menggunakan IC H-Bridge L298 di sini. L298 dapat mengontrol kecepatan dan arah motor DC dan motor stepper, serta dapat mengontrol dua motor secara bersamaan. Peringkat saat ini adalah 2A untuk setiap motor. Namun, pada arus ini, Anda perlu menggunakan heat sink.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • IC jembatan 1 × L298
  • 1 × motor DC
  • 1 × Arduino UNO
  • 1 × papan tempat memotong roti
  • 10 × kabel jumper

Prosedur

Berikut diagram skema interface motor DC ke board Arduino Uno.

Diagram di atas menunjukkan cara menghubungkan IC L298 untuk mengontrol dua motor. Ada tiga pin masukan untuk masing-masing motor, Input1 (IN1), Input2 (IN2), dan Enable1 (EN1) untuk Motor1 dan Input3, Input4, dan Enable2 untuk Motor2.

Karena kita hanya akan mengontrol satu motor dalam contoh ini, kita akan menghubungkan Arduino ke IN1 (pin 5), IN2 (pin 7), dan Enable1 (pin 6) dari IC L298. Pin 5 dan 7 bersifat digital, yaitu input ON atau OFF, sedangkan pin 6 membutuhkan sinyal PWM (pulse-width modulated) untuk mengontrol kecepatan motor.

Tabel berikut menunjukkan arah putaran motor berdasarkan nilai digital IN1 dan IN2.

IN1 IN2 Perilaku Motorik
REM
1 MENERUSKAN
1 KE BELAKANG
1 1 REM

Pin IN1 dari IC L298 terhubung ke pin 8 Arduino sedangkan IN2 terhubung ke pin 9. Kedua pin digital Arduino ini mengontrol arah motor. Pin EN A dari IC dihubungkan ke pin PWM 2 Arduino. Ini akan mengontrol kecepatan motor.

Untuk mengatur nilai pin Arduino 8 dan 9, kita telah menggunakan fungsi digitalWrite (), dan untuk mengatur nilai pin 2 kita harus menggunakan fungsi analogWrite ().

Langkah Koneksi

  • Hubungkan 5V dan ground IC ke 5V dan ground Arduino.
  • Hubungkan motor ke pin 2 dan 3 dari IC.
  • Hubungkan IN1 dari IC ke pin 8 dari Arduino.
  • Hubungkan IN2 dari IC ke pin 9 dari Arduino.
  • Hubungkan EN1 IC ke pin 2 Arduino.
  • Hubungkan SENS Sebuah pin IC ke ground.
  • Hubungkan Arduino menggunakan kabel USB Arduino dan upload program ke Arduino menggunakan software Arduino IDE.
  • Berikan daya ke papan Arduino menggunakan catu daya, baterai, atau kabel USB.

Kode Arduino

const int pwm = 2 ; //initializing pin 2 as pwm
const int in_1 = 8 ;
const int in_2 = 9 ;
//For providing logic to L298 IC to choose the direction of the DC motor

void setup() {
   pinMode(pwm,OUTPUT) ; //we have to set PWM pin as output
   pinMode(in_1,OUTPUT) ; //Logic pins are also set as output
   pinMode(in_2,OUTPUT) ;
}

void loop() {
   //For Clock wise motion , in_1 = High , in_2 = Low
   digitalWrite(in_1,HIGH) ;
   digitalWrite(in_2,LOW) ;
   analogWrite(pwm,255) ;
   /* setting pwm of the motor to 255 we can change the speed of rotation
   by changing pwm input but we are only using arduino so we are using highest
   value to driver the motor */
   //Clockwise for 3 secs
   delay(3000) ;
   //For brake
   digitalWrite(in_1,HIGH) ;
   digitalWrite(in_2,HIGH) ;
   delay(1000) ;
   //For Anti Clock-wise motion - IN_1 = LOW , IN_2 = HIGH
   digitalWrite(in_1,LOW) ;
   digitalWrite(in_2,HIGH) ;
   delay(3000) ;
   //For brake
   digitalWrite(in_1,HIGH) ;
   digitalWrite(in_2,HIGH) ;
   delay(1000) ;
}

Hasil

Motor akan berjalan pertama kali searah jarum jam (CW) selama 3 detik dan kemudian berlawanan arah jarum jam (CCW) selama 3 detik.

Motor Servo adalah perangkat kecil yang memiliki poros keluaran. Poros ini dapat diposisikan ke posisi sudut tertentu dengan mengirimkan sinyal kode ke servo. Selama sinyal berkode ada di jalur input, servo akan mempertahankan posisi sudut poros. Jika sinyal berkode berubah, posisi sudut poros berubah. Dalam praktiknya, servo digunakan di pesawat yang dikendalikan radio untuk memposisikan permukaan kontrol seperti elevator dan kemudi. Mereka juga digunakan dalam mobil yang dikendalikan radio, boneka, dan tentu saja, robot.

Servos sangat berguna dalam robotika. Motornya kecil, memiliki sirkuit kontrol internal, dan sangat bertenaga untuk ukurannya. Servo standar seperti Futaba S-148 memiliki torsi 42 oz / inci, yang kuat untuk ukurannya. Ini juga menarik daya yang sebanding dengan beban mekanis. Oleh karena itu, servo yang dimuat dengan ringan tidak mengonsumsi banyak energi.

Nyali dari sebuah motor servo terlihat pada gambar berikut. Anda dapat melihat sirkuit kontrol, motor, satu set roda gigi, dan casing. Anda juga dapat melihat 3 kabel yang terhubung ke dunia luar. Satu untuk power (+ 5volts), ground, dan kabel putih adalah kabel kontrol.

Cara Kerja Motor Servo

Motor servo memiliki beberapa sirkuit kontrol dan potensiometer (resistor variabel, alias pot) yang terhubung ke poros keluaran. Pada gambar di atas, pot bisa dilihat di sisi kanan papan sirkuit. Pot ini memungkinkan sirkuit kontrol untuk memantau sudut arus motor servo.

Jika poros berada pada sudut yang benar, maka motor mati. Jika rangkaian menemukan bahwa sudutnya tidak benar, itu akan memutar motor hingga mencapai sudut yang diinginkan. Poros keluaran servo mampu bergerak ke suatu tempat sekitar 180 derajat. Biasanya, itu ada di suatu tempat dalam kisaran 210 derajat, namun bervariasi tergantung pada pabrikannya. Servo normal digunakan untuk mengontrol gerakan sudut 0 hingga 180 derajat. Secara mekanis tidak dapat berputar lebih jauh karena penghenti mekanis yang dibangun pada gigi keluaran utama.

Daya yang diterapkan pada motor sebanding dengan jarak yang dibutuhkan untuk menempuh perjalanan. Jadi, jika poros perlu berbelok dalam jarak yang jauh, motor akan berjalan dengan kecepatan penuh. Jika hanya perlu berbelok sedikit, motor akan berjalan dengan kecepatan lebih lambat. Ini disebutproportional control.

Bagaimana Anda Mengkomunikasikan Sudut yang Harus Diputar Servo?

Kabel kontrol digunakan untuk mengkomunikasikan sudut. Sudut ditentukan oleh durasi pulsa yang diterapkan ke kabel kontrol. Ini disebutPulse Coded Modulation. Servo mengharapkan untuk melihat denyut setiap 20 milidetik (0,02 detik). Panjang pulsa akan menentukan seberapa jauh motor berputar. Pulsa 1,5 milidetik, misalnya, akan membuat motor berputar ke posisi 90 derajat (sering disebut posisi netral). Jika pulsa lebih pendek dari 1,5 milidetik, maka motor akan memutar poros lebih dekat ke 0 derajat. Jika denyut nadi lebih panjang dari 1,5 milidetik, poros berputar mendekati 180 derajat.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × papan Arduino UNO
  • 1 × Motor Servo
  • 1 × ULN2003 IC penggerak
  • Resistor 1 × 10 KΩ

Prosedur

Ikuti diagram sirkuit dan buat koneksi seperti yang ditunjukkan pada gambar di bawah ini.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik New.

Kode Arduino

/* Controlling a servo position using a potentiometer (variable resistor) */

#include <Servo.h>
   Servo myservo; // create servo object to control a servo
   int potpin = 0; // analog pin used to connect the potentiometer
   int val; // variable to read the value from the analog pin

void setup() {
   myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop() {
   val = analogRead(potpin);
   // reads the value of the potentiometer (value between 0 and 1023)
   val = map(val, 0, 1023, 0, 180);
   // scale it to use it with the servo (value between 0 and 180)
   myservo.write(val); // sets the servo position according to the scaled value
   delay(15);
}

Kode untuk Dicatat

Motor servo memiliki tiga terminal - daya, arde, dan sinyal. Kabel listrik biasanya berwarna merah, dan harus dihubungkan ke pin 5V di Arduino. Kabel pembumian biasanya berwarna hitam atau coklat dan harus dihubungkan ke salah satu terminal IC ULN2003 (10-16). Untuk melindungi papan Arduino Anda dari kerusakan, Anda memerlukan beberapa IC driver untuk melakukan itu. Di sini kami telah menggunakan IC ULN2003 untuk menggerakkan motor servo. Pin sinyal biasanya berwarna kuning atau oranye dan harus dihubungkan ke pin Arduino nomor 9.

Menghubungkan Potensiometer

Pembagi tegangan / pembagi potensial adalah resistor dalam rangkaian seri yang menskalakan tegangan output ke rasio tertentu dari tegangan input yang diterapkan. Berikut diagram rangkaiannya -

$$ V_ {keluar} = (V_ {in} \ kali R_ {2}) / (R_ {1} + R_ {2}) $$

V out adalah potensi keluaran, yang bergantung pada tegangan masukan yang diterapkan (V in ) dan resistor (R 1 dan R 2 ) di seri. Ini berarti bahwa arus yang mengalir melalui R 1 juga akan mengalir melalui R 2 tanpa dibagi. Dalam persamaan di atas, sebagai nilai R 2 perubahan, V keluar timbangan sesuai sehubungan dengan tegangan input, V di .

Biasanya, potensiometer adalah pembagi potensial, yang dapat menskalakan tegangan output rangkaian berdasarkan nilai resistor variabel, yang diskalakan menggunakan kenop. Ini memiliki tiga pin: GND, Signal, dan + 5V seperti yang ditunjukkan pada diagram di bawah ini -

Hasil

Dengan mengubah posisi NOP pot, motor servo akan mengubah sudutnya.

Motor Stepper atau motor langkah adalah motor sinkron tanpa sikat, yang membagi putaran penuh menjadi beberapa langkah. Tidak seperti motor DC tanpa sikat, yang berputar terus menerus ketika tegangan DC tetap diterapkan padanya, motor langkah berputar dalam sudut langkah terpisah.

Oleh karena itu, Stepper Motors diproduksi dengan langkah per revolusi 12, 24, 72, 144, 180, dan 200, menghasilkan sudut loncatan 30, 15, 5, 2,5, 2, dan 1,8 derajat per langkah. Motor stepper dapat dikontrol dengan atau tanpa umpan balik.

Bayangkan sebuah motor di pesawat RC. Motor berputar sangat cepat ke satu arah atau lainnya. Anda dapat memvariasikan kecepatan dengan jumlah daya yang diberikan ke motor, tetapi Anda tidak dapat memerintahkan baling-baling untuk berhenti pada posisi tertentu.

Sekarang bayangkan printer. Ada banyak sekali komponen bergerak di dalam printer, termasuk motor. Salah satu motor bertindak sebagai pengumpanan kertas, penggulung berputar yang menggerakkan selembar kertas saat tinta sedang dicetak di atasnya. Motor ini harus dapat menggerakkan kertas dengan jarak yang tepat untuk dapat mencetak baris teks berikutnya atau baris gambar berikutnya.

Ada motor lain yang terpasang pada batang berulir yang menggerakkan print head maju mundur. Sekali lagi, batang berulir itu perlu dipindahkan dalam jumlah yang tepat untuk mencetak satu huruf demi huruf. Di sinilah motor stepper berguna.

Bagaimana Motor Stepper Bekerja?

Motor DC biasa berputar hanya dalam arah sedangkan motor Stepper dapat berputar dengan kecepatan yang tepat.

Motor stepper dapat memutar derajat (atau langkah) sesuai keinginan. Ini memberi Anda kendali penuh atas motor, memungkinkan Anda untuk memindahkannya ke lokasi yang tepat dan menahan posisi itu. Itu dilakukan dengan menyalakan kumparan di dalam motor untuk waktu yang sangat singkat. Kerugiannya adalah Anda harus menyalakan motor sepanjang waktu agar tetap pada posisi yang Anda inginkan.

Yang perlu Anda ketahui untuk saat ini adalah, untuk menggerakkan motor stepper, Anda menyuruhnya untuk memindahkan sejumlah langkah ke satu arah atau yang lain, dan memberi tahu kecepatan untuk melangkah ke arah itu. Ada banyak jenis motor stepper. Metode yang dijelaskan di sini dapat digunakan untuk menyimpulkan cara menggunakan motor dan driver lain yang tidak disebutkan dalam tutorial ini. Namun, selalu disarankan agar Anda membaca lembar data dan panduan motor dan driver khusus untuk model yang Anda miliki.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × papan Arduino UNO
  • 1 × motor stepper bipolar kecil seperti yang ditunjukkan pada gambar di bawah ini
  • 1 × LM298 penggerak IC

Prosedur

Ikuti diagram sirkuit dan buat koneksi seperti yang ditunjukkan pada gambar di bawah ini.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Kode Arduino

/* Stepper Motor Control */

#include <Stepper.h>
const int stepsPerRevolution = 90;
// change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

void setup() {
   // set the speed at 60 rpm:
   myStepper.setSpeed(5);
   // initialize the serial port:
   Serial.begin(9600);
}

void loop() {
   // step one revolution in one direction:
   Serial.println("clockwise");
   myStepper.step(stepsPerRevolution);
   delay(500);
   // step one revolution in the other direction:
   Serial.println("counterclockwise");
   myStepper.step(-stepsPerRevolution);
   delay(500);
}

Kode untuk Dicatat

Program ini menggerakkan motor stepper unipolar atau bipolar. Motor dipasang ke pin digital 8 - 11 Arduino.

Hasil

Motor akan melakukan satu putaran ke satu arah, kemudian satu putaran ke arah lain.

Dalam bab ini, kita akan menggunakan Arduino Tone Library. Ini tidak lain adalah Perpustakaan Arduino, yang menghasilkan gelombang persegi dengan frekuensi tertentu (dan siklus kerja 50%) pada pin Arduino mana pun. Durasi dapat ditentukan secara opsional, jika tidak gelombang berlanjut hingga fungsi stop () dipanggil. Pin dapat dihubungkan ke bel piezo atau speaker untuk memainkan nada.

Warning- Jangan menghubungkan pin secara langsung ke input audio apa pun. Voltase ini jauh lebih tinggi daripada voltase level saluran standar, dan dapat merusak input kartu suara, dll. Anda dapat menggunakan pembagi voltase untuk menurunkan voltase.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • Speaker 1 × 8-ohm
  • Resistor 1 × 1k
  • 1 × papan Arduino UNO

Prosedur

Ikuti diagram sirkuit dan buat koneksi seperti yang ditunjukkan pada gambar di bawah ini.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Untuk membuat file pitches.h, klik tombol di bawah ikon monitor serial dan pilih "Tab Baru", atau gunakan Ctrl + Shift + N.

Kemudian tempel kode berikut -

/*************************************************
* Public Constants
*************************************************/

#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978

Simpan kode yang diberikan di atas sebagai pitches.h

Kode Arduino

#include "pitches.h"
// notes in the melody:
int melody[] = {
NOTE_C4, NOTE_G3,NOTE_G3, NOTE_GS3, NOTE_G3,0, NOTE_B3, NOTE_C4};
// note durations: 4 = quarter note, 8 = eighth note, etc.:

int noteDurations[] = {
   4, 8, 8, 4,4,4,4,4 
};

void setup() {
   // iterate over the notes of the melody:
   for (int thisNote = 0; thisNote < 8; thisNote++) {
      // to calculate the note duration, take one second
      // divided by the note type.
      //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
      int noteDuration = 1000/noteDurations[thisNote];
      tone(8, melody[thisNote],noteDuration);
      //pause for the note's duration plus 30 ms:
      delay(noteDuration +30);
   }
}

void loop() {
   // no need to repeat the melody.
}

Kode untuk Dicatat

Kode tersebut menggunakan file ekstra, pitches.h. File ini berisi semua nilai nada untuk nada biasa. Misalnya, NOTE_C4 di tengah C. NOTE_FS4 adalah F kres, dan seterusnya. Tabel catatan ini aslinya ditulis oleh Brett Hagman, yang merupakan dasar dari perintah tone (). Anda mungkin merasa berguna kapan pun Anda ingin membuat not musik.

Hasil

Anda akan mendengar not musik disimpan di pitches. H. mengajukan.

Modul pemancar dan penerima nirkabel bekerja pada 315 Mhz. Mereka dapat dengan mudah masuk ke papan tempat memotong roti dan bekerja dengan baik dengan mikrokontroler untuk membuat tautan data nirkabel yang sangat sederhana. Dengan satu pasang pemancar dan penerima, modul hanya akan bekerja mengkomunikasikan data satu arah, namun, Anda memerlukan dua pasang (frekuensi berbeda) untuk bertindak sebagai pasangan pemancar / penerima.

Note- Modul ini tidak pandang bulu dan menerima cukup banyak noise. Baik pemancar dan penerima bekerja pada frekuensi yang sama dan tidak memiliki ID.

Spesifikasi Modul Penerima

  • Model Produk - MX-05V
  • Tegangan operasi - DC5V
  • Arus Diam - 4mA
  • Menerima frekuensi - 315Mhz
  • Sensitivitas penerima - -105DB
  • Ukuran - 30 * 14 * 7mm

Spesifikasi Modul Pemancar

  • Model Produk - MX-FS-03V
  • Jarak peluncuran - 20-200 meter (voltase berbeda, hasil berbeda)
  • Tegangan operasi - 3.5-12V
  • Dimensi - 19 * 19mm
  • Mode operasi - AM
  • Kecepatan transfer - 4KB / S
  • Daya pancar - 10mW
  • Frekuensi transmisi - 315Mhz
  • Antena eksternal - saluran multi-inti atau inti tunggal 25cm biasa
  • Pinout dari kiri → kanan - (DATA; V CC ; GND)

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 2 × papan Arduino UNO
  • Pemancar tautan 1 × Rf
  • 1 × penerima tautan Rf

Prosedur

Ikuti diagram sirkuit dan buat koneksi seperti yang ditunjukkan pada gambar di bawah ini.

Sketsa

Buka software Arduino IDE di komputer Anda. Pengkodean dalam bahasa Arduino akan mengontrol sirkuit Anda. Buka File sketsa baru dengan mengklik Baru.

Note- Anda harus menyertakan pustaka keypad di file pustaka Arduino Anda. Salin dan tempel file VirtualWire.lib di folder perpustakaan seperti yang disorot pada gambar di bawah ini.

Kode Arduino untuk Transmitter

//simple Tx on pin D12
#include <VirtualWire.h>
char *controller;

void setup() {
   pinMode(13,OUTPUT);
   vw_set_ptt_inverted(true);
   vw_set_tx_pin(12);
   vw_setup(4000);// speed of data transfer Kbps
}

void loop() {
   controller="1" ;
   vw_send((uint8_t *)controller, strlen(controller));
   vw_wait_tx(); // Wait until the whole message is gone
   digitalWrite(13,1);
   delay(2000);
   controller="0" ;
   vw_send((uint8_t *)controller, strlen(controller));
   vw_wait_tx(); // Wait until the whole message is gone
   digitalWrite(13,0);
   delay(2000);
}

Kode untuk Dicatat

Ini adalah kode sederhana. Pertama, itu akan mengirim karakter '1' dan setelah dua detik akan mengirim karakter '0' dan seterusnya.

Kode Arduino untuk Penerima

//simple Rx on pin D12
#include <VirtualWire.h>

void setup() {
   vw_set_ptt_inverted(true); // Required for DR3100
   vw_set_rx_pin(12);
   vw_setup(4000); // Bits per sec
   pinMode(5, OUTPUT);
   vw_rx_start(); // Start the receiver PLL running
}

void loop() {
   uint8_t buf[VW_MAX_MESSAGE_LEN];
   uint8_t buflen = VW_MAX_MESSAGE_LEN;
   if (vw_get_message(buf, &buflen)) // Non-blocking {
      if(buf[0]=='1') {
         digitalWrite(5,1);
      }
      if(buf[0]=='0') {
         digitalWrite(5,0);
      }
   }
}

Kode untuk Dicatat

LED yang terhubung ke pin nomor 5 pada papan Arduino dinyalakan ketika karakter '1' diterima dan dimatikan ketika karakter '0' diterima.

Modul WiFi CC3000 dari Texas Instruments adalah paket perak kecil, yang akhirnya menghadirkan fungsionalitas WiFi yang mudah digunakan dan terjangkau untuk proyek Arduino Anda.

Ini menggunakan SPI untuk komunikasi (bukan UART!) Sehingga Anda dapat mendorong data secepat yang Anda inginkan atau selambat yang Anda inginkan. Ini memiliki sistem interupsi yang tepat dengan pin IRQ sehingga Anda dapat memiliki koneksi asynchronous. Ini mendukung keamanan 802.11b / g, open / WEP / WPA / WPA2, TKIP & AES. Tumpukan TCP / IP built-in dengan antarmuka "soket BSD" mendukung TCP dan UDP baik dalam mode klien dan server.

Komponen Diperlukan

Anda akan membutuhkan komponen berikut -

  • 1 × Arduino Uno
  • 1 × Papan breakout Adafruit CC3000
  • Relai 1 × 5V
  • 1 × Dioda penyearah
  • 1 × LED
  • Resistor 1 × 220 Ohm
  • 1 × Breadboard dan beberapa kabel jumper

Untuk proyek ini, Anda hanya memerlukan Arduino IDE biasa, pustaka CC3000 Adafruit, dan pustaka MDNS CC3000. Kami juga akan menggunakan pustaka aREST untuk mengirim perintah ke relai melalui WiFi.

Prosedur

Ikuti diagram sirkuit dan buat koneksi seperti yang ditunjukkan pada gambar di bawah ini.

Konfigurasi perangkat keras untuk proyek ini sangat mudah.

  • Hubungkan pin IRQ dari papan CC3000 ke pin nomor 3 dari papan Arduino.
  • VBAT ke pin 5, dan CS ke pin 10.
  • Hubungkan pin SPI ke papan Arduino: MOSI, MISO, dan CLK ke pin 11, 12, dan 13.
  • V in terhubung ke Arduino 5V, dan GND ke GND.

Sekarang mari kita hubungkan relai.

Setelah menempatkan relai pada papan tempat memotong roti, Anda dapat mulai mengidentifikasi dua bagian penting pada relai Anda: bagian koil yang memerintahkan relai, dan bagian sakelar tempat kami akan memasang LED.

  • Pertama, sambungkan pin nomor 8 papan Arduino ke salah satu pin koil.
  • Hubungkan pin lain ke tanah papan Arduino.

Anda juga harus menempatkan dioda penyearah (anoda yang terhubung ke pin arde) di atas pin koil untuk melindungi sirkuit Anda saat relai beralih.

  • Hubungkan + 5V papan Arduino ke pin umum sakelar relai.

  • Terakhir, sambungkan salah satu pin sakelar lainnya (biasanya, yang tidak terhubung saat relai mati) ke LED secara seri dengan resistor 220 Ohm, dan sambungkan sisi lain LED ke ground Arduino naik.

Menguji Komponen Individual

Anda dapat menguji relai dengan sketsa berikut -

const int relay_pin = 8; // Relay pin

void setup() {
   Serial.begin(9600);
   pinMode(relay_pin,OUTPUT);
}

void loop() {
   // Activate relay
   digitalWrite(relay_pin, HIGH);
   // Wait for 1 second
   delay(1000);
   // Deactivate relay
   digitalWrite(relay_pin, LOW);
   // Wait for 1 second
   delay(1000);
}

Kode untuk Dicatat

Kode ini cukup jelas. Anda cukup mengunggahnya ke papan dan relai akan beralih status setiap detik, dan LED akan menyala dan mati.

Menambahkan Konektivitas WiFi

Mari kita sekarang mengontrol relai secara nirkabel menggunakan chip CC3000 WiFi. Perangkat lunak untuk proyek ini didasarkan pada protokol TCP. Namun, untuk proyek ini, papan Arduino akan menjalankan server web kecil, sehingga kita dapat “mendengarkan” perintah yang datang dari komputer. Pertama-tama kita akan mengurus sketsa Arduino, dan kemudian kita akan melihat cara menulis kode sisi server dan membuat antarmuka yang bagus.

Pertama, sketsa Arduino. Tujuannya di sini adalah untuk menyambung ke jaringan WiFi Anda, membuat server web, memeriksa apakah ada koneksi TCP yang masuk, dan kemudian mengubah status relai yang sesuai.

Bagian Penting dari Kode

#include <Adafruit_CC3000.h>
#include <SPI.h>
#include <CC3000_MDNS.h>
#include <Ethernet.h>
#include <aREST.h>

Anda perlu menentukan di dalam kode apa yang spesifik untuk konfigurasi Anda, yaitu nama dan kata sandi Wi-Fi, dan port untuk komunikasi TCP (kami telah menggunakan 80 di sini).

// WiFi network (change with your settings!)
   #define WLAN_SSID "yourNetwork" // cannot be longer than 32 characters!
   #define WLAN_PASS "yourPassword"
   #define WLAN_SECURITY WLAN_SEC_WPA2 // This can be WLAN_SEC_UNSEC, WLAN_SEC_WEP, 
   // WLAN_SEC_WPA or WLAN_SEC_WPA2

// The port to listen for incoming TCP connections
   #define LISTEN_PORT 80

Kami kemudian dapat membuat contoh CC3000, server dan contoh aREST -

// Server instance
   Adafruit_CC3000_Server restServer(LISTEN_PORT); // DNS responder instance
   MDNSResponder mdns; // Create aREST instance
   aREST rest = aREST();

Di bagian setup () dari sketsa, sekarang kita dapat menghubungkan chip CC3000 ke jaringan -

cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY);

Bagaimana komputer tahu ke mana harus mengirim data? Salah satu caranya adalah dengan menjalankan sketsa satu kali, kemudian mendapatkan alamat IP papan CC3000, dan memodifikasi kode server lagi. Namun, kami dapat melakukan lebih baik, dan di sanalah pustaka CC3000 MDNS berperan. Kami akan menetapkan nama tetap ke papan CC3000 kami dengan pustaka ini, sehingga kami dapat menuliskan nama ini langsung ke kode server.

Ini dilakukan dengan potongan kode berikut -

if (!mdns.begin("arduino", cc3000)) {
   while(1);
}

Kami juga perlu mendengarkan koneksi masuk.

restServer.begin();

Selanjutnya, kita akan mengkodekan fungsi loop () dari sketsa yang akan terus dijalankan. Pertama-tama kita harus memperbarui server mDNS.

mdns.update();

Server yang berjalan di papan Arduino akan menunggu koneksi masuk dan menangani permintaan.

Adafruit_CC3000_ClientRef client = restServer.available();
rest.handle(client);

Sekarang cukup mudah untuk menguji proyek melalui WiFi. Pastikan Anda memperbarui sketsa dengan nama dan kata sandi WiFi Anda sendiri, dan mengunggah sketsa ke papan Arduino Anda. Buka monitor serial Arduino IDE Anda, dan cari alamat IP papan Anda.

Mari kita asumsikan sisanya di sini adalah seperti 192.168.1.103.

Kemudian, cukup buka browser web favorit Anda, dan ketik -

192.168.1.103/digital/8/1

Anda harus melihat bahwa relai Anda secara otomatis AKTIF.

Membangun Antarmuka Relay

Kami sekarang akan membuat kode antarmuka proyek. Akan ada dua bagian di sini: file HTML yang berisi antarmuka, dan file Javascript sisi klien untuk menangani klik pada antarmuka. Antarmuka di sini didasarkan padaaREST.js proyek, yang dibuat untuk mengontrol perangkat WiFi dengan mudah dari komputer Anda.

Mari kita lihat dulu file HTMLnya, bernama interface.html. Bagian pertama terdiri dari mengimpor semua perpustakaan yang diperlukan untuk antarmuka -

<head>
   <meta charset = utf-8 />
   <title> Relay Control </title>
   <link rel = "stylesheet" type = "text/css" 
      href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
   <link rel="stylesheet" type = "text/css" href = "style.css">
   <script type = "text/javascript" 
      src = "https://code.jquery.com/jquery-2.1.4.min.js"></script>
   <script type = "text/javascript" 
      src = "https://cdn.rawgit.com/Foliotek/AjaxQ/master/ajaxq.js"></script>
   <script type = "text/javascript" 
      src = "https://cdn.rawgit.com/marcoschwartz/aREST.js/master/aREST.js"></script>
   <script type = "text/javascript" 
      src = "script.js"></script>
</head>

Kemudian, kami menentukan dua tombol di dalam antarmuka, satu untuk menghidupkan relai, dan yang lainnya untuk mematikannya lagi.

<div class = 'container'>
   <h1>Relay Control</h1>
   <div class = 'row'>
      <div class = "col-md-1">Relay</div>
      <div class = "col-md-2">
         <button id = 'on' class = 'btn btn-block btn-success'>On</button>
      </div>
      <div class = "col-md-2">
         <button id = 'off' class = 'btn btn-block btn-danger'>On</button>
      </div>
   </div>
</div>

Sekarang, kita juga membutuhkan file Javascript sisi klien untuk menangani klik pada tombol. Kami juga akan membuat perangkat yang akan kami tautkan ke nama mDNS perangkat Arduino kami. Jika Anda mengubah ini dalam kode Arduino, Anda perlu mengubahnya di sini juga.

// Create device
var device = new Device("arduino.local");
// Button

$('#on').click(function() {
   device.digitalWrite(8, 1);
});

$('#off').click(function() {
   device.digitalWrite(8, 0);
});

Kode lengkap untuk proyek ini dapat ditemukan di GitHubgudang. Masuk ke folder antarmuka, dan cukup buka file HTML dengan browser favorit Anda. Anda harus melihat sesuatu yang serupa di dalam browser Anda -

Coba klik tombol di antarmuka web; status relai harus diubah hampir seketika.

Jika Anda berhasil membuatnya bekerja, bravo! Anda baru saja membuat sakelar lampu yang dikontrol Wi-Fi. Tentu saja, Anda dapat mengontrol lebih dari sekadar lampu dengan proyek ini. Pastikan relai Anda mendukung daya yang diperlukan untuk perangkat yang ingin Anda kontrol, dan Anda siap menggunakannya.