Yeni Başlayanlar için Arduino ile 10 Basit Uygulama Yapımı
|Günlük hayatımıza iyice yerleşen elektronik ve kodlama terimleri artık her yerde karşımıza çıkmaya başladı. Çocuklar için başlatılan kodlama eğitimleri, robot okulları, yarışmalar vs. derken iyice bizden biri olmaya başladı kod satırları. Bulunduğunuz yerde bu tarz eğitimler, eğitime ayıracak vakit veya kurslar için ayıracak bütçeniz yoksa işe buradaki 10 proje ile başlayabilirsiniz. Çocuklarınızla beraber eğlenerek yapabileceğiniz, yeni başlayan biriyseniz kendinizi geliştireceğiniz uygulamalar mantığı anlayıp donanımı öğrenmeniz için yardımcı olacaktır. İlerleyen aşamalarda kendinize göre düzenlemeler yaparak, kodları birleştirerek yeni yazılımlarla kendi sisteminizi oluşturabilirsiniz. Özellikle birlikte farklı şekilde kullanılarak değişik uygulamalar yapılabilecek örnekleri paylaşmaya çalıştık. İyi çalışmalar..
1-Buzzer ile melodi
int buzzer=11;// Buzzer bağlantı pini void setup() { pinMode(buzzer,OUTPUT);// } void loop() { unsigned char i,j;// while(1) { for(i=0;i<80;i++)//ses frekansı-1 { digitalWrite(buzzer,HIGH);//ses başla delay(1);//delay 1ms digitalWrite(buzzer,LOW);//sessiz delay(1);//delay 1ms } for(i=0;i<500;i++)//ses frekansı-2 { digitalWrite(buzzer,HIGH);//ses başla delay(2);//delay 2ms digitalWrite(buzzer,LOW);//sessiz delay(2);//delay 2ms } } }
2-DTH-11 ile sıcaklık ve nem göstergesi
#include <DHT11.h> int pin=4; DHT11 dht11(pin); void setup() { Serial.begin(9600); while (!Serial) { ; // Bağlantı sağlanana kadar bekle (Arduinoleonardo) } } void loop() { int err; float temp, humi; if((err=dht11.read(humi, temp))==0) { Serial.print("temperature:"); Serial.print(temp); Serial.print(" humidity:"); Serial.print(humi); Serial.println(); } else { Serial.println(); Serial.print("Error No :"); Serial.print(err); Serial.println(); } delay(DHT11_RETRY_DELAY); //delay tekrar okuma }
3-IR ile led kontrolü
#include <IRremote.h> // define IR module IRrecv irrecv(11); //ır pin 11 e bağlı decode_results results; // uzaktan kumanda üzerinden gelen değerler long grid[] = { 0x4AB5, //0 0x6897, //1 0x9867, //2 0xB04F, //3 0x30CF, //4 0x18E7, //5 0x7A85, //6 0x10EF, //7 0x38C7, //8 0x5AA5, //9 0x629D, //yukarı 0x02FD, //OK 0xA857, //aşağı 0xC23D, //sağ 0x22DD, //sol 0x42BD, //* 0x52AD //# }; char cmd[] = { '0','1','2','3','4','5','6','7','8','9','U','K','D','R','L','*','#'}; void setup() { pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(9, OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); // başla //module.setupDisplay(true, 5); } void loop() { if (irrecv.decode(&results)) { long x = results.value; x = x & 0xFFFF; if(x!=0xFFFF) { Serial.println(x, HEX); Serial.println(mapping(x)); //executeCommand(cmd[0]); } if(x==0x6897){ digitalWrite(13, HIGH); } if(x==0x52AD){ digitalWrite(13,LOW); } if(x==0x30CF){ digitalWrite(13,LOW); } if(x==0x9867){ digitalWrite(12, HIGH); } if(x==0x52AD){ digitalWrite(12,LOW); } if(x==0x18E7){ digitalWrite(12,LOW); } if(x==0xB04F){ digitalWrite(9,HIGH); } if(x==0x52AD){ digitalWrite(9,LOW); } if(x==0x7A85){ digitalWrite(9,LOW); } if(13,HIGH&&x==0xC23D){ digitalWrite(13,LOW); digitalWrite(12,HIGH); } if(12,HIGH&&x==0x22DD){ digitalWrite(12,LOW); digitalWrite(13,HIGH); } irrecv.resume(); // tekrar } } char mapping(long x) { for(int i=0; i<17; i++) { if(grid[i] == x) { return (cmd[i]); } } return '-'; } <br>
4-LCD ile kayan yazı
#include <LiquidCrystal.h> const int numRows=2; const int numCols=16; LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void setup(){ lcd.begin(numCols,numRows); } void loop(){ slideThis("www.elektrobot.net",200,1,0,000); slideThis("27,11,2018",200,1,1,000); slideThis("Takipte Kalın",200,1,0,000); slideThis("Basit Projeler",200,1,1,000); slideThis("LCD KAYAN YAZI",200,1,0,000); } int geciktir(int delayVal){ delay(delayVal); return 1; } void slideThis(String s, int delayValue, int directionTowards, int whichRow, int duration){ switch(directionTowards){ case 0 : for(int ctr=s.length(); ctr>0; ctr--){ lcd.setCursor(0,whichRow); lcd.print(s.substring(ctr)); delay(delayValue); lcd.clear(); } for(int i =0; i < 16 ; i++){ lcd.setCursor(i,whichRow); lcd.print(s); geciktir(delayValue); lcd.clear(); } break; case 1 : for(int i = 16 ; i>0 ; i--){ lcd.setCursor(i,whichRow); lcd.print(s); geciktir(delayValue); lcd.clear(); } for(int ctr=0; ctr<s.length(); ctr++){ lcd.setCursor(0,whichRow); lcd.print(s.substring(ctr)); delay(delayValue); lcd.clear(); } break; } }
5-Knocking sensör ile led
int Led=13; int Shock=3; int val; void setup() { pinMode(Led,OUTPUT); pinMode(Shock,INPUT);// } void loop() {val=digitalRead(Shock); if(val==HIGH) { digitalWrite(Led,LOW); } else { digitalWrite(Led,HIGH); } }
6-LCD shield
#include <LiquidCrystal.h> // kullanılan pinler LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // buton değer tanımlamaları int lcd_key = 0; int adc_key_in = 0; #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 // buton oku int read_LCD_buttons() { adc_key_in = analogRead(0); if (adc_key_in > 1000) return btnNONE; if (adc_key_in < 50) return btnRIGHT; if (adc_key_in < 250) return btnUP; if (adc_key_in < 450) return btnDOWN; if (adc_key_in < 650) return btnLEFT; if (adc_key_in < 850) return btnSELECT; return btnNONE; } void setup() { lcd.begin(16, 2); // kütüphane başla lcd.setCursor(0,0); lcd.print("www.elektrobot.net"); // mesajı yaz } void loop() { lcd.setCursor(9,1); lcd.print(millis()/1000); lcd.setCursor(0,1); lcd_key = read_LCD_buttons(); switch (lcd_key) { case btnRIGHT: { lcd.print("RIGHT "); break; } case btnLEFT: { lcd.print("LEFT "); break; } case btnUP: { lcd.print("UP "); break; } case btnDOWN: { lcd.print("DOWN "); break; } case btnSELECT: { lcd.print("SELECT"); break; } case btnNONE: { lcd.print("NONE "); break; } } }
7-Led parlıklığı ayarlama
int led = 9; //ledin bağlandığı pin int brightness = 0; // ilk parlaklık değeri sıfır yaptık int fadeAmount = 5; // parlaklık adımları değeri. her seferinde 5 birim artar azalır demek. //ilk kurulum değerleri. Resetten sonra bir kez yapılır. void setup() { // pin 9 u çıkış yaptık pinMode(led, OUTPUT); } // sonsuz döngü void loop() { // pin 9 parlaklığını ayarla analogWrite(led, brightness);// parlaklığı değiştir brightness = brightness + fadeAmount; // parlaklık değerleri sona gelince mantığı değiştir if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } // gözümüzün değişikliği algılaması için 30 milisaniye bekle delay(30); }
8-RGB led ile farklı renkler
int redPin = 11; int greenPin = 10; int bluePin = 9; int brightness = 0; // ilk parlaklık değeri sıfır yaptık int fadeAmount = 5; // parlaklık adımları değeri. her seferinde 5 birim artar azalır demek. //ilk kurulum değerleri. Resetten sonra bir kez yapılır. //Ortak anot led kullanıyorsanız alttaki satırı yorum satırından çıkartın //#define COMMON_ANODE void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop() { setColor(255, 0, 0); // red delay(1000); setColor(0, 255, 0); // green delay(1000); setColor(0, 0, 255); // blue delay(1000); setColor(255, 255, 0); // yellow delay(1000); setColor(80, 0, 80); // purple delay(1000); setColor(0, 255, 255); // aqua delay(1000); setColor(80, 80, 80); // farklı renkler delay(1000); setColor(255, 255, 255); // beyaz delay(1000); setColor(255, 0, 255); // güçlü mor delay(1000); } void setColor(int red, int green, int blue) { #ifdef COMMON_ANODE red = 255 - red; green = 255 - green; blue = 255 - blue; #endif analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); }
9-I2C ile LM35 sıcaklık okuma
#include <Wire.h> //i2c için yaptığımız bağlantı kütüphanesi int lm35Pin = A0; // LM35'in bağlı olduğu pin float temp102derece; //derecenin float değeri olacaktır. int tmp102adres = 0x48; // i2c ile 0x48 adresine yazılıyor void setup(){ Serial.begin(9600); //Seri monitör bağlantısı Wire.begin(); //i2c bağlantı ayarları } void loop(){ float tmp102Sicaklik = tmp102SicaklikOlcum(); // yapılan ölçüm bir float'a aktarılır. Serial.print("TMP102 Sicaklik : "); Serial.print(tmp102Sicaklik); temp102derece = analogRead(lm35Pin); //A0'dan okunan değerin bir float'a aktarılır. temp102derece = (temp102derece * 100.0 * 5.0)/1024.0; //aktarılan değer referans alınan değerin örneklenmesi ile bölünür. Serial.print(" LM35 Sicaklik :" ); Serial.println(temp102derece); delay(1000); } float tmp102SicaklikOlcum(){ Wire.requestFrom(tmp102adres,2); // adresten 2bit veri alma. byte ilkDeger = Wire.read(); // i2c ile ilk okunan değer byte sonDeger = Wire.read(); // i2c ile son okunan değer //okunan 12bit'lik verinin ilk olarak 8bit sağa kaydırılıp son değerle toplanıyor. Ardından //oluşan değer 4bit sağa kaydırılarak sonuç elde ediliyor.8 bit kaydırma negatif degerler içindir. int toplamOkunanDeger = ((ilkDeger << 8) | sonDeger) >> 4; float derece = toplamOkunanDeger*0.0625; // referans değer ile çarpılıyor ve ana fonksiyona döndürülüyor. return derece; }
10-Ultrasonik sensör ile mesafe ölçümü
#define echoPin A4 // Echo Pin #define trigPin A5 // Trigger Pin #define LEDPin 13 // LED int maximumRange = 200; // maksimum uzaklık int minimumRange = 0; // Minimum uzaklık long duration, distance; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(LEDPin, OUTPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); //ses hızını baz alarak uzaklık bulma distance = duration/58.2; if (distance >= maximumRange || distance <= minimumRange){ Serial.println("-1"); digitalWrite(LEDPin, HIGH); // makimumun dışında ledi yak } else { Serial.println(distance); digitalWrite(LEDPin, LOW); // ölçüm alanı içinde ledi söndür } delay(50); }
Takipte kalın…