void setup() {            // Portların giriş-çıkış olarak tanımladığı fonksiyon. (Bir kez çalışır.)
  pinMode(13, OUTPUT);    //13 numaralı pin çıkış olarak ayalandı.
}
void loop() {             // Loop sonsuz döngüsü
  digitalWrite(13, HIGH); //13 numaralı pinden 5 V (digital 1) gönderildi.
  delay(1000);            // Zaman gecikmesi // Bekle 1000 ms = 1 sn
  digitalWrite(13, LOW);  //13 numaralı pin 0 V'a (GND) çekildi. (digital 0)
  delay(1000);            // Zaman gecikmesi // Bekle 1000 ms = 1 sn
}


void setup() {            // Portların giriş-çıkış olarak tanımladığı fonksiyon. (Bir kez çalışır.)
  pinMode(7, OUTPUT);    //7 numaralı pin çıkış olarak ayalandı.
}
void loop() {             // Loop sonsuz döngüsü
  digitalWrite(7, HIGH); //7 numaralı pinden 5 V (digital 1) gönderildi.
  delay(1000);            // Zaman gecikmesi // Bekle 1000 ms = 1 sn
  digitalWrite(7, LOW);  //7 numaralı pin 0 V'a (GND) çekildi. (digital 0)
  delay(1000);            // Zaman gecikmesi // Bekle 1000 ms = 1 sn
}

void setup() {
  pinMode(10, OUTPUT); //led bağlı
  pinMode(7, INPUT); // buton bağlı
}
void loop() {
  digitalWrite(10, digitalRead(7));
}

void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, digitalRead(2));
}

void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(“Merhaba Dünya”);
}

Önceki uygulamadaki butonun durumunu seri monitörde gözlemleyelim.

void setup() {
Serial.begin(9600);
pinMode(2,INPUT_PULLUP);
}
void loop() {
boolean buton=digitalRead(2);
Serial.println(buton);
}

int led = 13;
int ldr;
void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  ldr = analogRead(A2);
  if (ldr < 700)
    digitalWrite(led, 1);
  else
    digitalWrite(led, 0);
  Serial.println(ldr);
}



byte LED = 3;
void setup() {
  pinMode(LED, OUTPUT);
}
void loop() {
  analogWrite(LED, 255);
  delay(1000);
  analogWrite(LED, 128);
  delay(1000);
  analogWrite(LED, 64);
  delay(1000);
  analogWrite(LED, 0);
  delay(1000);
}

stdint.h kütüphanesinde en çok kullanılan değişkenler aşağıdadır:

Değişkenler               Alabilecekleri değerler

bool                             true ile false

boolean                       true ile false

char                            -128 ile 127

byte                             0 ile 255

int                                -32768 ile 32768

unsigned int                0 ile 65535

float                            3.4E +/-38 (7 haneli)

double                         3.4E +/- 308 (15 haneli)

int8_t                           -128 ile 127

uint8_t                          0 ile 255

int16_t                         -32,768 ile 32,767

uint16_t                       0 ile 65,535

int32_t                         -2,147,483,648 ile 2,147,483,647

uint32_t                       0 ile 4,294,967,295

int64_t                         −9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807

uint64_t                     0 ile 18,446,744,073,709,551,615

Önceki uygulamayı değişkenleri kullanarak tekrar yazalım.

const byte buton = 2;
const byte led = 13;
boolean durum;

void setup() {
  pinMode(buton, INPUT_PULLUP);
  pinMode(led, OUTPUT);
}

void loop() {
  durum = digitalRead(2);
  digitalWrite(13, durum);
}



Arduino pinlerine bağlanan kırmızı, sarı ve yeşil LED’ler trafik lambalarının sırasına göre kontrol edilecek. Buna göre program ilk başta kırmızı ışığı yakacak. Kırmızı ışık 3 saniye yandıktan sonra sönecek ve 1 saniye boyunca sarı ışık yanacak. Sarı ışık söndükten sonra da 5 saniye boyunca yeşil ışık yanacak.

byte yesil = 10, sari = 11, kirmizi = 12;

void setup() {
  pinMode(yesil, OUTPUT);
  pinMode(sari, OUTPUT);
  pinMode(kirmizi, OUTPUT);
}

void loop() {

  digitalWrite(yesil, 0);
  digitalWrite(sari, 0);
  digitalWrite(kirmizi, 1);
  delay(3000);

  digitalWrite(yesil, 0);
  digitalWrite(sari, 1);
  digitalWrite(kirmizi, 0);
  delay(1000);

  digitalWrite(yesil, 1);
  digitalWrite(sari, 0);
  digitalWrite(kirmizi, 0);
  delay(5000);
}


https://youtu.be/Uwa2ic6VLPA

 

const byte LED = 13;
const byte buton = 2;
boolean butonDurum; 

void setup() {
  pinMode(buton, INPUT_PULLUP); 
  pinMode(LED, OUTPUT); 
}

void loop() {
  butonDurum = digitalRead(buton); 
  if (butonDurum == 0) 
    digitalWrite(LED, HIGH);
    else digitalWrite(LED, LOW);
}

https://youtu.be/NAeq-ZlcU7U
: 0 ve 5 volt arasındaki gerilimin değerinin ölçülmesi için analogRead fonksiyonu kullanılmalıdır. Fakat bu fonksiyon, tüm pinler için kullanılamaz. Bu fonksiyonun kullanılabileceği özel pinler vardır. Bunlara analog pinler denir ve genellikle A harfi ile başlarlar: A0, A1, A2… gibi. Kullanılan Arduino türüne göre bu pinlerin sayısı değişiklik gösterir. Arduino Uno’da 6, Arduino Nano’da 8, Arduino Mega’da 16 tane analog giriş bulunur.
Bir pot ile 0-5V arasındaki gerilim değerini A3 girişinden okuyalım. Pot’un orta ucunda 0 ve 5 volt arasında değişen analog bir sinyalimiz vardır. Bu sinyalin dijital sinyale çevrilmesi için Arduino’da 10 bitlik bir saklayıcı bulunmaktadır. Bu saklayıcı 0 volt giriş için 0, 5 volt giriş için ise 1023 değerini almaktadır. Bu artış doğrusaldır yani girişteki 0,005 voltluk bir değişim saklayıcının değerini bir artırmaktadır. Örneğin sinyal girişimiz 3,3 volt ise okuyacağımız değer yaklaşık olarak 675’tir. ADC, 0 ve 5 volt arasındaki sinyali oranlayarak 0 ve 1023 arasında sayısal bir değer döndürmektedir

void setup() {
  Serial.begin(9600);
  pinMode(3, OUTPUT);
}

void loop() {
  int pot = analogRead(A3);
  float gerilim = (5 / 1023) * pot;
  Serial.print(gerilim);
  Serial.println(" Volt");
}

const byte cikisPini = 13;

void setup() {
  Serial.begin(9600); //Seri iletişim başlatıldı.
  pinMode(cikisPini, OUTPUT);
}

void loop() {
  int analogGirisDegeri = analogRead(A0); //A0 girişinden okunan 0-1023 arası veriyi analogGirisDegeri değişkenine yükle.
  Serial.println(analogGirisDegeri); //analogGirisDegeri değişkeninin içeriğini yazdır.
  if (analogGirisDegeri < 800) { // Karşılaştırma satırı.
    digitalWrite(cikisPini, HIGH); // Karşılaştırma geçerliyse yapılacaklar.
  }
  else { // Karşılaştırma geçerliyse değilse yapılacaklar.
    digitalWrite(cikisPini, LOW);
  }
}

Potansiyometrenin çıkışındaki analog değeri ADC kullanarak ölçmeyi öğrendik. Ölçtüğümüz bu değer 0 ile 1023 arasındaydı. Yapacağımız voltmetre uygulaması ile bu değeri daha anlamlı bir şekle getireceğiz.  Bunun için öncelikle adım aralığını bulmamız gerekir. 5 volt 1023’e karşılık geldiği için adım aralığımız 5/1023 olmaktadır.  Eğer bu kesir ADC ölçümü ile çarpılırsa ölçülen değerin gerilim karşılığı bulunur. Bulduğumuz bu sonucu ekrana yazdıralım. 

 

void setup() {
  Serial.begin(9600); //Seri haberleşmeyi başlattık.
}

void loop() {
  int pot = analogRead(A3); //Analog A3 girişinden alınan 0-1023
  //arasındaki değeri pot değişkenine atadık.
  float gerilim = (5 / 1023) * pot;
  /*
    float (noktalı sayı)
    tipindeki gerilim değişkenine
    5/1023 yani 0,005'i pot'tan alınan 0-1023 arasındaki
    değerle çarpıp sonucunu yükledik.
  */
  Serial.print(gerilim);
  Serial.println(" Volt");
}

LDR sensörü ışık arttıkça direnç değeri azalan bir değişken dirençtir. Ldr sensörü ile ışık şiddeti ölçmek için Ldr sensörünü 10 kΩ direnç ile seri bağladıktan sonra Ldr’’nin bir ucuna Arduino Uno R3 kartının 5 V pinine, 10 kΩ direncin ucunu Arduino Uno R3 kartının Gnd pinine ve Ldr ile 10 kΩ direncin birleşme noktasını Arduino Uno R3 kartının A0 analog pinine bağlıyoruz. Arduino’nun analog pinleri 0-1023 değerleri arasında değişmektedir. Kısacası dijital 0 V’u analog olarak 0 değerine çevirirken, dijital 5 V’u 1023 değeri olarak çevirmektedir.
Kullanılan Malzemeler
• 1 adet Arduino Uno R3
• 1 adet Ldr
• 1 adet 10 kΩ direnç
• 1 adet 220 Ω direnç
• 1 adet kırmızı Led
• Bağlantı kabloları

const byte buton = 2;
const byte led = 13;
boolean durum;

void setup() {
  pinMode(buton, INPUT_PULLUP);
  pinMode(led, OUTPUT);
}

void loop() {
  durum = digitalRead(2);
  digitalWrite(13, durum);
}


https://youtu.be/TECCqWDkDeI

void setup() {
  Serial.begin(9600);
  pinMode(3, OUTPUT);
}

void loop() {
  int pot = analogRead(A3);
  Serial.println(pot);
  int pwm = map(pot, 0, 1023, 0, 255);
  analogWrite(3, pwm);
}

https://youtu.be/lnEvS9UFKes

const int trig = 12;
const int echo = 11;

long sure;
int uzaklik;

void setup() {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(trig, 0);
  delayMicroseconds(10);
  digitalWrite(trig, 1);
  delayMicroseconds(10);

  sure = pulseIn(echo, 1);
  uzaklik = (0.0343 * sure) / 2;

  Serial.print(uzaklik);
  Serial.println(" cm");
}

https://youtu.be/z5Z8c2HNMo0

 

 

const int trig = 12;
const int echo = 11;
const int buzer = 2;

long sure;
int uzaklik;

void setup() {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(buzer, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(buzer, 1);
  delay(5 * uzaklik);
  digitalWrite(buzer, 0);
  delay(5 * uzaklik);

  digitalWrite(trig, 0);
  delayMicroseconds(10);
  digitalWrite(trig, 1);
  delayMicroseconds(10);

  sure = pulseIn(echo, 1);
  uzaklik = (0.0343 * sure) / 2;
  if (uzaklik > 200) uzaklik = 200;

  Serial.print(uzaklik);
  Serial.println(" cm");
}



1. DC motor 1 “+” veya stepper motor A+
2. DC motor 1 “-” veya stepper motor A-
3. 12V jumper –Besleme voltajı 12V dan daha fazla ise bu jumper ı kaldırın. Regülatör devre dışı kalacaktır. Bu sebeple harici olarak 5V besleme yapmanız gerekir.
4. Motor Beslemesini buradan verin. Maksimum 35V DC. 12V dan fazla verirseniz 3 teki jumper ı kaldırın.
5. GND
6. 12V jumper takılı ise 5V çıkış alabilirsiniz. Arduino ve diğer devreleri besleyebilirsiniz.
7. Step motor kullanırken burayı kullanmayın. PWM çıkışı ile DC motorda hız kontrolü yapabilirsiniz.
8. IN1 1.motor yön belirleme pinleri / step motor komutasyon pinleri
9. IN2 1.motor yön belirleme pinleri / step motor komutasyon pinleri
10. IN3 2.motor yön belirleme pinleri / step motor komutasyon pinleri
11. IN4 2.motor yön belirleme pinleri / step motor komutasyon pinleri
12. Step motor kullanırken burayı kullanmayın. PWM çıkışı ile 2. DC motorda hız kontrolü yapabilirsiniz.
13. DC motor 2 “+” veya stepper motor B+
14. DC motor 2 “-” veya stepper motor B-

const int IN1 = 2;
const int IN2 = 3;
const int IN3 = 4;
const int IN4 = 5;

const int enA = 10;
const int enB = 9;
int hiz = 100;

void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop() {

  //ileri
  digitalWrite(IN1, 1);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 1);
  digitalWrite(IN4, 0);
  analogWrite(enA, hiz);
  analogWrite(enB, hiz);
  delay(1000);
  //geri
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
  analogWrite(enA, 70);
  analogWrite(enB, 70);
  delay(1000);
  //sol
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 1);
  digitalWrite(IN3, 1);
  digitalWrite(IN4, 0);
  analogWrite(enA, hiz / 2);
  analogWrite(enB, hiz / 2);
  delay(1000);
  //sag
  digitalWrite(IN1, 1);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 1);
  analogWrite(enA, hiz / 2);
  analogWrite(enB, hiz / 2);
  delay(1000);
}

https://youtu.be/YbOozz1z0rg

ENGELDEN KAÇAN ROBOT KODU

const int IN1 = 2;
const int IN2 = 3;
const int IN3 = 4;
const int IN4 = 5;

const int enA = 10;
const int enB = 9;

int hiz = 255;

const int trig = 12;
const int echo = 11;

long sure;
int uzaklik;

void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(trig, 0);
  delayMicroseconds(10);
  digitalWrite(trig, 1);
  delayMicroseconds(10);

  sure = pulseIn(echo, 1);
  uzaklik = (0.0343 * sure) / 2;

  if (uzaklik < 30) {
    digitalWrite(IN1, 0);
    digitalWrite(IN2, 1);

    analogWrite(enA, hiz);
    analogWrite(enB, hiz);
  }
  else {
    digitalWrite(IN1, 1);
    digitalWrite(IN2, 0);
    digitalWrite(IN3, 1);
    digitalWrite(IN4, 0);
    analogWrite(enA, hiz);
    analogWrite(enB, hiz);
  }
}

Aşağıdaki kodda ENA ve ENB jumperları takılı kalır.

const byte IN1 = 5, IN2 = 6, IN3 = 9, IN4 = 10; // Motor sürücü yön pinleri (PWM pinleri.)
const byte echo = 11, trig = 12; // Ultrasonik sensör pinleri

byte hiz = 150; // PWM.
unsigned long sure;
int uzaklik;

void setup() {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop() {
  digitalWrite(trig, 0); // Darbe sinyali gönder.
  delayMicroseconds(10);
  digitalWrite(trig, 1);
  delayMicroseconds(10);

  sure = pulseInLong(echo, 1); // Gelen sinyalin HIGH'da kalma süresini oku.
  uzaklik = (0.0343 * sure) / 2; // Mesafeyi hesapla.

  if (uzaklik < 30) { // Uzaklık 30 cm'den yakınsa sola dön.
    analogWrite(IN1, 0);
    analogWrite(IN2, hiz);
    analogWrite(IN3, hiz);
    analogWrite(IN4, 0);
  }
  else { // Uzaklık 30 cm'den yakın değilse düz git.
    analogWrite(IN1, hiz);
    analogWrite(IN2, 0);
    analogWrite(IN3, hiz);
    analogWrite(IN4, 0);
  }
}

Verici modülde kullanılan malzemeler:

  • MPU6050
  • NRF24L01
  • ARDUINO NANO
  • 9V PİL
  • MINI BOARD

verici kodu

kutuphaneler indir.

#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // nRF24L01+ kütüphanesi v1.4.1
#include <Wire.h> // Mpu6050 ile I2C iletişim.
#include <MPU6050.h> //Mpu6050 kütüphanesi v0.3.0

MPU6050 ivme_sensor; // ivme_sensor isimli nesne oluştur.
int x, y, z; // x, y, z düzlemlerinin ivme değişkenleri.

RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
int veri[2]; // X ve y düzlemi için dizi tanımlama.

void setup() {
  Wire.begin(); // I2C iletişimi başlat.
  ivme_sensor.initialize(); // Mpu6050'yi başlat.

  radio.begin(); // nRF24L01+'yı başlat.
  radio.openWritingPipe(1234); // İletişim anahtarı 1234.
}

void loop() {
  ivme_sensor.getAcceleration(&x, &y, &z); // Sensörden ivme bilgilerini al.

  veri[0] = map(x, -17000, 17000, -255, 255 ); //X düzleminin verisi (ileri-geri)
  veri[1] = map(y, -17000, 17000, -255, 255); //Y düzeleminin verisi (sağ-sol)
  radio.write(veri, sizeof(veri)); // veri değişkenindeki bilgiyi nRF24L01+'ya gönder.
}

Alıcı modülde kullanılan malzemeler:

  • NRF24L01
  • L298 MOTOR SÜRÜCÜ
  • 3S LIPO PİL
  • ARDUINO NANO
  • MINI BOARD

Araç için:

  • 6V 250 Rpm Motor ve Tekerlek Seti
  • Araç gövdesi
  • Sarhoş teker

veya hepsi bir arada 2WD Robot Araba Kit

veya aşağıdan 3B yazıcı için .stl dosyasını indirebilirsiniz.

Alıcı kodu

 

#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // nRF24L01+ kütüphanesi v1.4.1

 

RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.

int veri[2];// X ve Y düzlemi için dizi tanımlama
const byte IN1 = 5, IN2 = 6, IN3 = 9, IN4 = 10; // PWM pinleri. (enA ve enB’de jumper takılı).

void setup() {
 radio.begin(); // nRF24L01+’yı başlat.
 radio.openReadingPipe(0, 1234); // İletişim anahtarı 1234.
 radio.startListening(); // Alıcı moda geç.
}

void loop() {
 if (radio.available()) { // Veri geliyorsa…
   radio.read(veri, sizeof(veri)); // Gelen veriyi veri değişkenine yükle.

   if (veri[0] > 50) { //İleri.
     analogWrite(IN1, veri[0]);
     analogWrite(IN2, 0);
     analogWrite(IN3, veri[0]);
     analogWrite(IN4, 0);
   }
   if (veri[0] < 50) { //Geri.
     analogWrite(IN1, 0);
     analogWrite(IN2, veri[0]);
     analogWrite(IN3, 0);
     analogWrite(IN4, veri[0]);
   }
   if (veri[1] > 50) { //Sol.
     analogWrite(IN1, 0);
     analogWrite(IN2, veri[1]);
     analogWrite(IN3, veri[1]);
     analogWrite(IN4, 0);
   }
   if (veri[1] < 50) { // Sağ.
     analogWrite(IN1, veri[1]);
     analogWrite(IN2, 0);
     analogWrite(IN3, 0);
     analogWrite(IN4, veri[1]);
   }
   if (veri[0] > 50 && veri[0] < 50 && veri[1] > 50 && veri[1] < 50) { // Dur.
     analogWrite(IN1, 0);
     analogWrite(IN2, 0);
     analogWrite(IN3, 0);
     analogWrite(IN4, 0);
   }
 }
}

nRF24L01+ modülü test etme kodları

Verici kodu

#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // v1.4.2

RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.

void setup() {
  Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
  if (!radio.begin()) { // nRF24L01+'yı başlat.
    Serial.println("nRF24L01+ bağlantıları yanlış veya temazsızlık var. nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
    while (1) {}
  }
  radio.openWritingPipe(1234); // İletişim anahtarı 1234.
}

void loop() {
  char veri[] = "Test tamam.";
  radio.write(&veri, sizeof(veri)); //Veriyi gönder.
}

Alıcı kodu

#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // v1.4.2

RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.

void setup() {
  Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
  if (!radio.begin()) { // nRF24L01+'yı başlat.
    Serial.println("nRF24L01+ bağlantıları yanlış veya nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
    while (1) {}
  }
  radio.openReadingPipe(0, 1234); // İletişim anahtarı 1234.
  radio.startListening(); // Alıcı moda geç.
}

void loop() {
  if (radio.available()) { // Veri geliyorsa...
    char veri[12];
    radio.read(&veri, sizeof(veri));
    Serial.println(veri); //Seri ekrana gelen veriyi yazdır.
  }
}

aracGovde.stl dosyası