- Arduino led yakma
- Arduino harici led yakma
- Arduino pullup pulldown ve digitalRead komutu
- SERİ MONİTÖR KULLANIMI
- AnalogWrite Komutu
- DEĞİŞKENLER
- Trafik ışıkları
- IF ELSE (EĞER) KULLANIMI
- ANALOGREAD KOMUTU
- ARDUİNO İLE VOLTMETRE YAPIMI
- LDR İLE KARANLIKTA ÇALIŞAN LED
- MAP KOMUTU
- HC-SR04 ULTRASONİK SES SENSÖRÜ İLR MESAFE ÖLÇÜMÜ
- ARDUİNO İLE PARK SENSÖRÜ YAPAMI
- L298N MOTOR SÜRÜCÜ KULLANIMI
- ENGELDEN KAÇAN ROBOT
- Arduino elle uzaktan kontrollü araba (Deney bordu) yapımı
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() {
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/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); }
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"); }
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); }
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
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.
#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ı