Transmisi Sensor Nirkabel 3-Pin Efisien dengan nRF24L01+ dan ATtiny85
Komponen dan Perlengkapan
nRF24L01+ – 2 unit
ATtiny85 – 1 unit
Arduino UNO – 1 unit
Kapasitor Keramik - 10nF – 1 unit
Resistor Film Karbon - 22kΩ – 1 unit
Dioda Switching - 1n4148 – 1 unit
Sumber Daya - 3v3 – 1 unit
Adapter Soket nRF24L01+ (Opsional) – 1 unit
Tentang Proyek Ini
Ini akan menjadi lanjutan dari proyek saya sebelumnya Memprogram ATtiny85 dengan Arduino Uno. Sekarang dengan ATtiny85 yang lebih murah, saya mencari cara yang lebih murah untuk mentransmisikan data sensor. Itu membawa saya ke nRF24L01+ transceiver RF yang murah dan hemat daya. Ini tampaknya menjadi solusi yang lebih baik bagi saya. Namun ada satu masalah, keterbatasan jumlah pin pada ATtiny85. Saya tidak dapat menghubungkan baik nRF24L01+ maupun sensor padanya. Jadi saya mencari solusi dan menemukan "nrf24l01+ control with 3 ATtiny85 pins". Di sini saya membahas bagaimana saya mengimplementasikannya.
Modul
Akan ada dua modul di sini: pengirim dan penerima. Pengirim akan menjadi ATtiny85 yang mengirim beberapa data dan penerima akan menjadi Arduino Uno yang menerima data melalui nRF24L01+. Saya menggunakan perpustakaan RF24 (https://tmrh20.github.io/RF24/). Ikuti petunjuk yang diberikan di sana dan tambahkan ke Arduino IDE sebelum memulai dengan ini. Saya tidak akan menjelaskan banyak tentang RF24 karena ada dokumentasi yang sangat baik tentang itu.
Pengirim
Pengirim mengirimkan nomor yang bertambah setiap detik. ATtiny85 akan mengirim data melalui nRF24L01+ menggunakan hanya 3 pin. Saya mengikuti petunjuk yang diberikan oleh Ralph Doncaster untuk mengimplementasikannya.
Komponen yang diperlukan adalah
ATtiny85
nRF24L01+
Kapasitor Keramik - 10nF
Resistor Film Karbon - 22kΩ
Dioda Switching - 1n4148
Unggah kode di bawah ke ATtiny85 (lihat proyek saya sebelumnya Memprogram ATtiny85 dengan Arduino Uno jika Anda ingin tahu caranya)
sender.ino
Hubungkan komponen seperti yang ditunjukkan di bawah ini
Saat sumber daya terhubung, pengirim akan mulai mengirim urutan angka setiap 1 detik.
Penerima
Penerima menerima data yang dikirim oleh pengirim dan data yang diterima dapat dilihat di Serial Monitor.
Komponen yang diperlukan adalah
Arduino Uno
nRF24L01+
nRF24L01+ Socket Adapter (Opsional)
Unggah kode di bawah ke Uno
receiver.ino
Hubungkan komponen seperti yang ditunjukkan di bawah ini
Jika ini tidak jelas, lihat file fritzing yang dilampirkan dengan proyek ini. Perhatikan bahwa Vcc harus selalu 3v3. Pada beberapa klon Arduino Uno, daya 3v3 mungkin tidak memiliki arus yang cukup yang mengakibatkan nRF24L01+ tidak bekerja. Salah satu metode di bawah ini disarankan untuk mengatasi ini
Gunakan sumber daya 3v3 terpisah
Tambahkan kapasitor 10uF antara Vcc dan Gnd pada modul itu sendiri.
Gunakan nRF24L01+ Socket Adapter
Dengan pengirim dan penerima siap, saatnya untuk menguji. Pastikan suplai daya ke pengirim ON. Hubungkan Arduino Uno ke PC dan buka serial monitor di arduino ide. Ini seharusnya bekerja seperti di bawah ini
Membuatnya Permanen
Dengan pengetahuan sedikit saya dalam soldering, saya membuatnya permanen menggunakan perfboard.
Ini adalah modul yang lebih sederhana untuk menunjukkan bagaimana nRF24L01+ dan bagaimana kita dapat menggunakan hanya 3 pin ATtiny85 untuk menghubungkannya sehingga pin yang tersisa tersedia untuk membaca data sensor. Masukan/Saran dipersilakan.
Kode
Pengirim
Penerima
PengirimC/C++
#define CE_PIN 3 #define CSN_PIN 3 //Since we are using 3 pin configuration we will use same pin for both CE and CSN #include "RF24.h" RF24 radio(CE_PIN, CSN_PIN); byte address[11] = "SimpleNode"; unsigned long payload = 0; void setup() { radio.begin(); // Start up the radio radio.setAutoAck(1); // Ensure autoACK is enabled radio.setRetries(15,15); // Max delay between retries & number of retries radio.openWritingPipe(address); // Write to device address 'SimpleNode' } void loop(void){ payload++; radio.write( &payload, sizeof(unsigned long) ); //Send data to 'Receiver' ever second delay(1000); }
PenerimaC/C++
#define CE_PIN 7 #define CSN_PIN 8 #include <SPI.h> #include "RF24.h" RF24 radio(CE_PIN, CSN_PIN); byte address[11] = "SimpleNode"; unsigned long payload = 0; void setup() { Serial.begin(115200); radio.begin(); // Start up the radio radio.setAutoAck(1); // Ensure autoACK is enabled radio.setRetries(15,15); // Max delay between retries & number of retries radio.openReadingPipe(1, address); // Write to device address 'SimpleNode' radio.startListening(); } void loop(void){ radio.stopListening(); radio.startListening(); radio.read( &payload, sizeof(unsigned long) ); if(payload != 0){ Serial.print("Got Payload "); Serial.println(payload); } delay(1000); }