Merhaba arkadaşlar arduino ile projelerde olabildiğince hızlı ilerlemeye çalışıyoruz… Bugün ki konumuz Arduino ile Nrf24l01 kullanarak potansiyometre ile servo motor kontrolü nasıl yapılır bunu öğreneceğiz 🙂
Bu Proje nerede nasıl işimize yarayacak diyen arkadaşlarım size sesleniyorum 🙂 Uzaktan kontrollü bir rc araç yada robot kol yapmak isterseniz bu proje tam size göre.. Tabi geliştirilmek koşuluyla. 🙂
Çalışma mantığı basit pottan aldığımız analog değerleri Nrf24l01 aracılığıyla servonun bağlı olduğu arduinoya göndererek direkt servo motora yazdırıyoruz.
Kısa bilgilendirmenin ardından isterseniz zaman kaybetmeden yazımıza geçelim 🙂
Her şeyden önce bir kaç malzeme lazım bunlar;
İçindekiler
Malzeme Listesi
1- Herhangi bir Arduino Modeli 2 Adet
2- Nr24l01 Modül 2 Adet
3- Potansiyometre
4- Servo Motor
5- Breadboard ve Jumper Kablolar
Not: Tüm bu malzemeleri elektronik parça satan yerlerde bulabilirsiniz yada şu ve bu adreslerden internet üzerinden güvenle sipariş edebilirsiniz
Ayrıca eğer zamanım bol diyorsanız Çin’den de Aliexpress vasıtasıyla getirtebilirsiniz. Daha uygun fiyata gelecektir. 🙂
Devre Şeması
Alt tarafta çizdiğimiz devre şemasına bakarak uygun arduino modeline göre devremizi breadboard’umuza kuralım.
Alıcı Devresi
Verici Devresi
Dikkat: Bütün bağlantıları yapıp arduino kodlarını da yükledikten sonra modüller arasında iletişim sağlanmaz ise her iki modülün de VCC ve GND pinleri arasına 10 uF değerinde kondansatör yerleştirerek tekrar deneyiniz. Yada daha önceki yazımda anlattığım gibi adaptör alınız
Yazılım
Bu modülle çalışabilmek için bir kütüphaneye ihtiyaç duyuyoruz öncelikle kütüphanemizi aşağıdan indirip aşağıda belirtilen yoldaki klasöre rar dosyasından dan çıkarıp atın.
Rar Şifresi: donanimplus.com
Belgeler > Arduino > libraries
Bu projede 2 farklı kod kullanacağız biri alıcı haliyle biride verici
Verici Kodu
//DONAIM PLUS ELEKTRONİK // MODİFİKASYON TOLGA SOYTEPE // İNSTAGRAM TOLGASYTP // TWİTTER TSytpp // Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü // 2019 // VERİCİ YAZILIMI #include <SPI.h> // Kütüphaneleri Tanımlıyoruz #include "RF24.h" int data[1]; RF24 radio(9,10);//CE -> 9 CSN -> 10 const uint64_t pipe = 0xE8E8F0F0E1LL; int potpin = 0; int Potdeger; void setup(void){ radio.begin(); radio.openWritingPipe(pipe); } void loop(void){ Potdeger = analogRead(potpin); Potdeger = map(Potdeger, 0, 1023, 0, 179); data[0] = Potdeger; radio.write(data, 1); }
Kodu aşağıdan indirebilirsiniz 🙂
Alıcı Kodu
//DONAIM PLUS ELEKTRONİK // MODİFİKASYON TOLGA SOYTEPE // İNSTAGRAM TOLGASYTP // TWİTTER TSytpp // Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü // 2019 // AlICI YAZILIMI #include <Servo.h> #include <SPI.h> #include "RF24.h" Servo ServoM; RF24 radio(9,10);//CE -> 9 CSN -> 10 const uint64_t pipe = 0xE8E8F0F0E1LL; int data[1]; void setup() { ServoM.attach(8); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop() { if (radio.available()){ bool done = false; while (!done){ done = radio.read(data, 1); ServoM.write (data[0]); } } }
Kodu aşağıdan indirebilirsiniz 🙂
Bir yazının daha sonuna geldik umarım faydalı olmuştur arkadaşlar anlamadığınız yada kafanıza takılan yerler olursa lütfen yorumda yada kişisel sosyal medya hesaplarımdan ulaşmayı ihmal etmeyin.. Kolay Gelsin.. 🙂
3 Servoyu 3 potansiyometre ile ayrı ayrı kontrol etmek istiyorum bu yazılıma neler dahil etmeliyim çok önemli benim için
3 adet servoyu 3 adet potansiyometre ile ayrı ayrı kullanmak istiyorum , yazılıma neler eklemem gerekiyor benim için çok önemli , rica ediyorum
Merhaba Fatih öncelikle şunu sormam gerek. Kontrol edeceğin servolar ayrı ayrı arduinolardamı olacak yoksa aynı projeye 2 servo dahamı eklemek istiyorsun ?
Evet tolga bey aynı projeye 2 servo daha eklemek istiyorum ve 3 adet potansiyometre ile hepsini ayrı ayrı kontrol etmek amacım
Fatih Bey o halde yapacağınız iş kolay şuan ki kod 1 data yollamak üzere tasarlanmış senin yapman gerekense bunu 3 e çıkarmak ve her bir dataya farklı değerler vermek bizim projemizde ben potdeger yazmıştım aynı şekilde seninde pot2deger gibi değişkenler eklemen gerekiyor yani bir nevi alıcı ve verici kodlarında kopyala ve yapıştır yapmak tabi bu arada bağladığınız potları ve servoların giriş çıkışlarını yapmak 🙂 Kısa bi örnek verecek olursak
data[1]; bunu data[3]; yapmanız gerek kod yollama kısmına gelincede örnek bir kod atayım if(digitalRead(3)==LOW){
data[0]=1;
} mesela burada eğer 3. dijital pin Low ise data ya 1 verisini yolla yani bizim şuan ki kodumuz senin yapan gereken if(digitalRead(5)==LOW){
data[0]=2;
}
if(digitalRead(7)==LOW){
data[0]=3;
}
gibi kodlar ekleyerek farklı veriler yollaman alıcı kısmıda aynı eğer data 1 ise ledi yak diyorsa kodda senin kaçtane veri yollayacaksan o kadar if komutu eklemen gerek işte data 2 ise şunu yap yada data 3 ise bunu gibi gibi kodu tam yazmıyorum anlayıp sen çöz diye yazılımcılık böyle birşey biraz üzerinde durursan anlıyacağını düşünüyorum ama çözemezsende yine yardım ederim Fatih Bey şimdiden size kolay gelsin 😉
Tolga bey ben sizin dediğiniz gibi çabalayacağım ve yazılımı buraya yazacağım olmaz ise yardımınızı rica edeceğim 🙂
Tabi Fatih Bey 😉
//DONAIM PLUS ELEKTRONİK
// MODİFİKASYON TOLGA SOYTEPE
// İNSTAGRAM TOLGASYTP
// TWİTTER TSytpp
// Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
// 2019
// VERİCİ YAZILIMI
#include // Kütüphaneleri Tanımlıyoruz
#include “RF24.h”
int data[3];
RF24 radio(9,10);//CE -> 9 CSN -> 10
const uint64_t pipe = 0xE8E8F0F0E1LL;
int pot1pin = 0;
int pot2pin = 1;
int pot3pin = 2;
int Pot1deger;
int Pot2deger;
int Pot3deger;
void setup(void){
radio.begin();
radio.openWritingPipe(pipe);
}
void loop(void){
Pot1deger = analogRead(pot1pin);
Pot1deger = map(Pot1deger, 0, 1023, 0, 179);
data[0] = Pot1deger;
radio.write(data, 1);
{}
{
Pot2deger = analogRead(pot2pin);
Pot2deger = map(Pot2deger, 0, 1023, 0, 179);
data[0] = Pot2deger;
radio.write(data, 2);
{}
}
Pot3deger = analogRead(pot3pin);
Pot3deger = map(Pot3deger, 0, 1023, 0, 179);
data[0] = Pot3deger;
radio.write(data, 3);
{}
}
VERİCİ DEVRESİNİ BU ŞEKİLDE YAZDIM TOLGA BEY
Aynen mantık böyle baya güzel kod olmuş Fatih Bey ama bir takım hatalar var mesela servo kütüphanesinde eklememişsin ve radio.write(data, 1); bu koddaki “1” gönder anlamında yani radio.write(data, 2 ); olanda 1 yazılmalı aynı şekilde 3. de 🙂 pot pinlerini girerken 0,1,2 derken A0, A1, A2 derseniz arduino kodu daha iyi anlayacaktır 🙂 birde fazladan parantezler “{}” var onları da kaldırırsan kodu deneyebilirsin 😉
//DONAIM PLUS ELEKTRONİK
// MODİFİKASYON TOLGA SOYTEPE
// İNSTAGRAM TOLGASYTP
// TWİTTER TSytpp
// Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
// 2019
// VERİCİ YAZILIMI
#include // Kütüphaneleri Tanımlıyoruz
#include “RF24.h”
int data[3];
RF24 radio(9,10);//CE -> 9 CSN -> 10
const uint64_t pipe = 0xE8E8F0F0E1LL;
int pot1pin = 0;
int pot2pin = 1;
int pot3pin = 2;
int Pot1deger;
int Pot2deger;
int Pot3deger;
void setup(void){
radio.begin();
radio.openWritingPipe(pipe);
}
void loop(void){
Pot1deger = analogRead(pot1pin);
Pot1deger = map(Pot1deger, 0, 1023, 0, 179);
data[0] = Pot1deger;
radio.write(data, 1);
{}
{
Pot2deger = analogRead(pot2pin);
Pot2deger = map(Pot2deger, 0, 1023, 0, 179);
data[0] = Pot2deger;
radio.write(data, 2);
{}
}
Pot3deger = analogRead(pot3pin);
Pot3deger = map(Pot3deger, 0, 1023, 0, 179);
data[0] = Pot3deger;
radio.write(data, 3);
{}
}
ALICIYIDA BU ŞEKİLDE YAZDIM TOLGA BEY
//DONAIM PLUS ELEKTRONİK
// MODİFİKASYON TOLGA SOYTEPE
// İNSTAGRAM TOLGASYTP
// TWİTTER TSytpp
// Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
// 2019
// AlICI YAZILIMI
#include
#include
#include “RF24.h”
Servo ServoM1,ServoM2,ServoM3 ;
RF24 radio(9,10);//CE -> 9 CSN -> 10
const uint64_t pipe = 0xE8E8F0F0E1LL;
int data[3];
void setup()
{
ServoM1.attach(8);
ServoM2.attach(7);
ServoM3.attach(6);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if (radio.available()){
bool done = false;
while (!done){
done = radio.read(data, 1);
ServoM1.write (data[0]);
{
done = radio.read(data, 2);
ServoM2.write (data[0]);
{
}
done = radio.read(data, 3);
ServoM3.write (data[0]);
}
}
}
}
PARDON ALICIDA BU ŞEKİLDE ALICI İÇİME HİÇ SİNMEDİ YALNIZ 🙂
Merhaba Fatih Bey kodunuzu derledim ve eksiklerini giderdim şuanda test etme şansım yok fakat büyük ihtimalle çalışacaktır 🙂 Kodları anlayabileceğiniz şekilde türkçeleştirdim kodu anlamaya çalışın 😉
//———————————-ALICI KODU—————————————————–//
//DONAIM PLUS ELEKTRONİK
// MODİFİKASYON TOLGA SOYTEPE
// İNSTAGRAM TSYTPP
// TWİTTER TSytpp
// Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
// 2019
//ALICII
#include
#include
#include
#include
Servo servo1,servo2;
RF24 radio(7, 8); // CSN, CE
const byte address[6] = “00001”;
int servo1_pin = 6;
int servo2_pin = 5;
int servo3_pin = 4;
int led=2;
struct Data {
byte pot1data;
byte pot2data;
byte pot3data;
byte butondata;
};
Data data;
void setup() {
Serial.begin(9600);
radio.begin();
radio.setAutoAck(false);
servo1.attach (servo1_pin);
servo2.attach (servo2_pin);
servo2.attach (servo3_pin);
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_LOW);
radio.startListening();
}
void loop() {
while (radio.available()) {
radio.read(&data, sizeof(Data));
servo1.write (data.pot1data);
servo2.write (data.pot2data);
servo2.write (data.pot3data);
if(data.butondata==0){
digitalWrite(led, HIGH);
}
else{
digitalWrite(led,LOW);
}
Serial.println(data.pot1data);
Serial.println(data.pot2data);
Serial.println(data.pot3data);
Serial.println(data.butondata);
delay(50);
}
}
//—————————————-VERİCİ KODU————————————————//
//DONAIM PLUS ELEKTRONİK
// MODİFİKASYON TOLGA SOYTEPE
// İNSTAGRAM TSYTPP
// TWİTTER TSytpp
// Arduino, Nrf24l01 ile uzaktan pot ile servo kontrolü
// 2019
//VERİCİ
#include
#include
#include
RF24 radio(7, 8); // CSN, CE
const byte address[6] = “00001”;
int pot1 = A0;
int pot2 = A1;
int pot3 = A2;
int pot1deger;
int pot2deger;
int pot3deger;
int buton=2;
struct Data {
byte pot1data;
byte pot2data;
byte pot3data;
byte butondata;
};
Data data;
void setup() {
Serial.begin(9600);
radio.begin();
pinMode(buton,INPUT);
radio.setAutoAck(false);
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_LOW);
radio.stopListening();
}
void loop() {
data.pot1data = map(analogRead(pot1),0,1023,0,179);
data.pot2data = map(analogRead(pot2),0,1023,0,179);
data.pot3data= map(analogRead(pot3),0,1023,0,179);
data.butondata= digitalRead(buton);
//———————-SERİAL MONİTÖRE YAZDIRMA————————–
Serial.println(data.pot1data);
Serial.println(data.pot2data);
Serial.println(data.pot3data);
Serial.println(butondata);
//————————————————–
radio.write(&data, sizeof(Data));
delay(100);
}
Kolay Gelsin 😉
Fatih bey site yapısı gereği koddaki bağzı yerleri almıyor bende kodları upload ettim linklerden alıcı ve verici kodlarını indirebilirsiniz 🙂
//—————–ALICI KODU———————————//
https://www.mediafire.com/file/pb7i796tv9cma23/nRF24_ALICI.ino
//—————-VERİCİ KODU——————————//
https://www.mediafire.com/file/hrdy564l11i954u/nRF24_VERICI.ino
ellerinize sağlık , adamın dibisiniz hakkınız ödenmez , ancak problemler var tolga bey nrf pinleri değişti mi , haberleşmiyorlar
Fatih Bey CE -> 9 CSN -> 10 iken 7, 8 oldu düzeltirseniz çalışacaktır. Koddan bakarsınız diye eklememiştim 🙂
çalışmıyor
Merhaba Ahmet bu yazımdan faydalanabilirsin 🙂
Anladım, tolga bey yine çalışmadı farklı bir sebebi olmalı 😞
hocam kodu atmaya çalıştığımda done kısmının hatalı oldugunu söylüyor ne yapmalıyım yardımcı olursanız sevinirim
Merhaba Emir Bey kodda bir yanlışlık gözükmüyor eğer kodu siteden direkt kopyala yapıştır yaptıysanız “noktalama işaretlerini ” kontrol ediniz yada direkt verdiğim linkten kodu indirebilirsiniz 🙂