Arduino ve NRF24L01

Bu kısa öğrenme eğrisinin ardındaki neden:

Oğlum gürültülü ailenin geri kalanından uzakta onun odasında kapatılmayı seviyor. Annesi, otistik kardeşi ve yemekleriyle yardım etmek için zaman zaman varlığına ihtiyaç duyuyor. Bana odasında annesinin onu almak için merdivenlerden yukarı ve aşağı kurtaracak bir şey olmasını istedi ve ben bir wi-fi kapı zili önerdi . Kolay çözüm. İki yollu bir şey istiyordu. Ses veya görsel gibi bundan daha fazla ayrıntı yok. NRF24L01'in çok uygun maliyetli ama yine de etkili küçük bir radyo cihazı olduğunu duymuştum, bu yüzden biraz araştırma yapmaya ve neler yapabileceğimi görmeye karar verdim.

NRF24L01 radyo modülünün Arduino ile nasıl kullanılacağını gösteren bir dizi Eğitici mevcuttur. İki Arduino'nun aynı şekilde iletişim kurabileceği basit bir kurulum bulmanın zor olduğunu gördüm. Her iki kurulumun da her iki iletimin de aynı şekilde iletilmesini ve alınmasını istedim ve bu, her iki şeyi de iki Arduino'da yapmanın en basit yolunu tanımlayacaktı. İki Arduino'yu ileri geri iletişim kurduğumda, onları başka şeyler yapmak için genişletecek temel çerçeveye sahibim.

Bu Instructable, oğlumun istediği ürünü üretmez, bunun için çerçeve ve diğer birçok basit iki yönlü uygulama üretir.

Adım 1: NRF24L01 Modülü

NRF24L01'in ana özellikleri aşağıdaki gibidir:

2.4HGz ISM bandında çalışır Besleme gerilimi 3.3V'dir (bunu hatırlamak çok önemlidir) SPI pinleri Arduino uygulamaları için yararlı olan 5V toleranslıdır. aynı frekansı kullanan yakındaki cihazlar. Deneme yanılma olabilir. 1MHz'lik adımlarla seçilebilen kanallar

Modül boyutları (yaklaşık): Dahili antenli küçük kart: - 30mm X 16mm Dikey anten montajlı küçük: - 30mm X 16mm Yatay anten montajlı büyük: - 41mm X 16mm (anten montajı başka 7mm çıkıntı yapar)

Panoları breadboard dostu değildir, bu nedenle dişi dupont kablolarla bağlanması gerekir. Ayrıca, hala breadboard dostu olmayan, ancak pimleri kendi başlarına Vcc ve GND ile tek bir sıraya ayıran bir adaptör plakası da var. Adaptör plakasının bir başka avantajı, yerleşik bir 3.3v regülatöre (ve bypass kapasitörlerine) sahip olmasıdır, bu da 5v'lik bir besleme kullanabileceğiniz anlamına gelir.

Akım dalgalanmalarına yardımcı olmak için kapasitörleri panoya lehimlemek zorunda olduğunuz için sadece Arduino'dan 3.3v besleme kullanıldığında dikkat çekti. Daha kolay bir seçenek için gittim ve adaptör plakasını kullandım ve her şeyi 5v'den çalıştırdım. Adaptör plakası boyutları: - 27mm X 19mm. Her tahtanın uzunluğuna yaklaşık 17 mm ve açıkçası biraz derinlik ekler. Erkek ve dişi pim başlıklarının lehimlenmesi ve panoların birlikte lehimlenmesi mümkündür. Size daha az yer kaplar ama hafif yürekli değildir.

Adım 2: Bir araya getirmek

Parça listesi:

  • 2 X Arduinos
  • 2 X Breadboard
  • 2 X NRF24L01
  • [isteğe bağlı] NRF24L01 için 2 X YL-105 kesme tahtası. Bu 5v bağlantı ve daha kolay kablolama sağlar
  • 2 X Anlık anahtarlar
  • 2 X Kırmızı LED
  • 2 X Sarı LED
  • 4 X 220 ohm dirençler
  • Atlama telleri

Özellikle birden fazla ürüne ihtiyacım varsa, neredeyse tüm ucuz bileşenlerim için AliExpress kullanıyorum.

Esas olarak Çin'den ucuz bileşenler, ancak henüz tek bir kötü bileşene sahip değilim.

Arduino'yu kullanmayı seviyorum ve bu nedenle yaptığım her şey düşük voltaj ve ucuz bileşenler iş başında. Ancak, daha kritik veya yüksek voltajlı bir şeye vb. Taşındıysam, büyük olasılıkla bileşenlerimi başka bir yerden tedarik ederim.

Bağlantılar:

Modül SPI protokolünü kullanarak iletişim kurar. Seri Çevresel Arabirim veriyolu

Burada kullanılan pim düzeni:

NRF24L01 Arduino pimi

VCC 3.3 V YL-105 koparma kartını kullanırsanız, Vcc ucu 5v Arduino pinine gidebilir

GND GND

CS 8 (Kullanılmayan herhangi bir pin olabilir ancak kodda tanımlanmıştır)

CE 7 (Kullanılmayan herhangi bir pin olabilir, ancak kodda tanımlanmıştır)

MOSI 11 (SPI MOSI pin 11 veya ICSP pin 4 olmalı)

MISO 12 (SPI MISO pin 12 veya ICSP pin 1 olmalı)

SCK 13 (SPI SCK pin 13 veya ICSP pin 3 olmalı)

LED'ler ve anahtar için kablolama:

  • Arduino Pin 2 - Sarı LED Uzun Kurşun - Anot
  • Sarı kısa uç - katot 220ohm direnç, daha sonra ikinci direnç GND'ye yol açar
  • Arduino Pin 3 - Kırmızı LED Uzun Kurşun - Anot
  • Kırmızı kısa kurşun - katot 220ohm direnç, daha sonra ikinci direnç GND'ye yol açar
  • Arduino pin 4 anahtarlamak için, GND'ye anahtarın diğer tarafı

İki tahtanın fiziksel yapısı aynıdır.

İlgili panoların okuma ve yazma boruları için küçük yazılım farklılıkları vardır.

3. Adım: Kod

Her iki Arduinos için oluşturduğum kod neredeyse aynı, bu yüzden sadece birini göstereceğim.

Tüm kod dosyaları indirilebilir.

#include // Arduino ile birlikte gelir

#include "RF24.h" // IDE aracılığıyla bulunabilir: Çizim / Kitaplığı Dahil Et / Kitaplıkları Yönet / RF24'ü arayın ve RF24'ü TMRh20 ile bulun / daha fazla bilgi / Yükle

// düğmeyi ve LED'leri ayarlama

#define düğmesi 4

#define confirmLed 2

#define led 3

RF24 NRF24L01 (7, 8); // NRF24L01 adlı nesne yarat. Arduino'da kullanılacak CE ve CSN pinlerinin belirlenmesi

bayt adresi [] [6] = {"boru1", "boru2"}; // okuma ve yazma için 2 borunun adreslerini ayarlama

boolean buttonState = yanlış; // hem iletim hem de alma için kullanılır

void setup () {

// Arduino pinlerini ayarlayın

pinMode (düğme, INPUT_PULLUP);

pinMode (confirmLed, OUTPUT); // sarı LED

pinMode (led, ÇIKIŞ); // kırmızı LED

NRF24L01.begin (); // tahtadan okumak ve yazmak için boruları açın 1

NRF24L01.openWritingPipe (adres [0]); // adres borusuna açık yazma borusu 1

NRF24L01.openReadingPipe (1, adres [1]); // adres borusundan okuma borusunu aç 2

// gerekli olan iki çizimdeki tek fark bu

// aşağıdaki iki satır tahta iki içindir, okuma ve yazma borularının nasıl tersine çevrildiğine dikkat edin

// NRF24L01.openReadingPipe (1, adres [0]); // adres borusundan açık okuma borusu 1

// NRF24L01.openWritingPipe (adres [1]); // 2 numaralı boruya yazma borusunu aç

NRF24L01.setPALevel (RF24_PA_MAX); // RF güç çıkışını minimum, RF24_PA_MIN olarak ayarlayın (gerekirse RF24_PA_MAX olarak değiştirin)

NRF24L01.setDataRate (RF24_250KBPS); // veri hızını 250 kbps'ye ayarlayın

// Aşağıdaki 110 frekansı diğer wi-fi ile ilgili bir sorunsa, tamam olana kadar 1 artırın

// Her iki kod kümesinin de aynı frekansa sahip olması gerektiğini unutmayın

NRF24L01.setChannel (110); // frekansı 110 kanalına ayarlayın.

}

void loop () {

// Düğmeyi diğer Arduino'ya aktar

gecikmesi (10);

) (NRF24L01.stopListening;

buttonState = digitalRead (düğme); // BU kartta düğmeye basma testi

(buttonState == LOW) // düğmesi yukarı kaldırılırsa DÜŞÜK testi yapın

{

NRF24L01.write (& buttonState, sizeof (buttonState)); // DÜŞÜK durumu diğer Arduino kartına gönder

// ilerlemeyi göstermek için sarı LED'i yanıp söner

digitalWrite (confirmLed, HIGH);

gecikmesi (100);

digitalWrite (confirmLed, LOW);

}

buttonState = YÜKSEK; // düğme durumu değişkenini sıfırla


/ / Diğer Arduino'dan Alma düğmesi değişikliği

gecikmesi (10);

) (NRF24L01.startListening;

Eğer (NRF24L01.available () ) // diğer Arduino kartından iletimimiz var mı

{

NRF24L01.read (& buttonState, sizeof (buttonState)); // değişkeni yeni durumla güncelle

) (NRF24L01.stopListening;

}

if (buttonState == HIGH) // diğer Arduino'nun düğme durumunu test et

{

digitalWrite (led, DÜŞÜK);

}

Başka

{

) (FlashLed; // düğmeye diğer kartta basıldığını belirtin

}

buttonState = YÜKSEK; // düğme durumu değişkenini sıfırla

}

// kırmızı LED'i beş kez yanıp söner

void flashLed ()

{

için (int i = 0; i <5; i ++)

{

digitalWrite (led, YÜKSEK);

gecikmesi (200);

digitalWrite (led, DÜŞÜK);

gecikmesi (200);

}

}

Adım 4: Arduino Kodu ve Fritzing Dosyaları

Kodu iki Arduino'ya ayrı zamanlarda yüklemediğiniz sürece, iki farklı COM bağlantı noktası seçtiğinizden emin olun, aksi takdirde her ikisinde de tam olarak aynı kod olacaktır.

Umarım bu ilginizi çekebilir ve yeni başlayanlara NRF24L01'in ilk uygulamaları konusunda yardımcı olabilir.

Başka bir şey yoksa, üzerine inşa edebileceğiniz bir çalışma çerçevesi verecektir.

Ekler

  • Arduino_nRF24L01_with_LED.ino İndir
  • Arduino_nRF24L01_with_LED_2.ino İndir
  • Arduino NRF24L01.fzz İndir

5. Adım: Olası Sorunlara Dayalı Güncelleme

Italia ve Andrea Tony her ikisi de bu devre bir Arduino Nano kadar kablolama sorun yaşıyorsanız birkaç yorum oldu.

Yaklaşık bir yıl önce iki Nanos aldım ama onları kullanmak için hiç uğraşmadım, bu yüzden onları lehimlemek ve kullanmaya koymak için bu fırsatı kullandım.

Orijinal yapıyı parçalara ayırdım, bu yüzden her şeyin çalıştığından emin olmak için daha önce olduğu gibi bir Arduino UNO ile Talimat'tan yeniden oluşturdum.

Bu yapının birkaç görüntüsünü ekledim.

Kablolamayı biraz farklı gösterir ve daha kolay görülebilir.

NRF24L01 kartlarından birinde hafif bir aksaklık / gecikme yaşadım, ancak kendini hallediyor gibiydi.

UNO'ları değiştirdim ve onları Nanos ile değiştirdim, bir Nano'ya bir kroki, diğer Nano'ya bir kroki yükledim ve problemler bekliyordum, ancak kodda hiçbir değişiklik olmadan çalıştı.

Farklı eskizlerin iki Arduino'ya yüklenmesi önemlidir.

Farklılıklar sadece hafif ama çok önemlidir.

Bu yapı için de birkaç resim ekledim.

Bu beni ya kötü bir bağlantı olabileceğini ya da talimatlarımın belirsiz olduğunu düşünmeye itiyor.

5V kullanabilmem için NRF24L01'ler için YL-105 koparma levhaları kullandım.

Koparma kartlarını kullanmıyorsanız, 3.3v kullanmanız gerekir.

NRF24L01 içine 5v iterseniz, büyük olasılıkla ölecektir.

NRF24L01 kartında yedi kablo kullanılıyor

  • GND
  • Olumlu 3.3v
  • CS - Arduino pin 8 (kodda tanımlanmıştır)
  • CE - Arduino pin 7 (kodda tanımlanmıştır)
  • MOSI - Arduino pin 11 (zorunlu)
  • MISO - Arduino pin 12 (zorunlu)
  • SCK - Arduino pin 13 (zorunlu)
  • IRQ kullanılmıyor
  • Sarı LED uzun uç - anot, Arduino pin 2'ye
  • Sarı kısa kurşun - katot, 220ohm direnç, daha sonra ikinci direnç GND'ye yol açar
  • Kırmızı LED uzun uç - anot, Arduino pin 3'e Kırmızı kısa uç - katot, 220ohm rezistansa, daha sonra ikinci direnç GND'ye yol açar
  • Arduino pin 4 anahtarlamak için, GND'ye anahtarın diğer tarafı

Eğer işe yaramayan bir yapıya sahipsem, onu alıp tekrar başlarım, özellikle de oldukça küçük bir yapı ile, bu şekilde önceki hataları ortadan kaldırırım.

Tony ve Andrea'nın panosunda bunun yanlış olabileceğini düşünebileceğim tek şey, MOSI ve MISO'nun takas edilmiş olabileceğidir.

Umarım bu onlara ve sorun yaşayan herkese yardımcı olur.

6. Adım: Video Gösteri Eklendi

Kurulum ve kullanımı hızlı bir şekilde göstermek için yüklenen video.

İlgi̇li̇ Makaleler