Professional Documents
Culture Documents
Temel Elektronik Arduino
Temel Elektronik Arduino
facebook.com/flashasbi
hasbi.sevinc@gmail.com
hasbisevinc.com
2
T ARI TEKNOLOJ GELTRME KULB [ARIGE]
3
NSZ
Hibir kitabn nszn okumam. Fakat okuyanlar iin kitab tantan ksa bir yaz
yazmak istedim. Trkiye ne yazk ki teknolojiyi geriden izleyen bir toplum
konumundadr. Bu durumdan kurtulmamz iin herkesin bildiini paylamas
gerektiini dnmekteyim. Bu yzden bu kitab yazmaya karar verdim. Kitapta
anlattklarm anlatan web siteleri internette mevcut. Ben bu kitapta temel dzeyde
lazm olacak tm bilgileri bir yerde toplamak istedim.
4
NDEKLER
Temel Elektronik......................................................................................................................... 1
5
Neden Arduino?
Arduino Atmel marka ilemcilerin kullanld hazr bir devre kartdr. Ak kaynak kodludur ve
isteyen kii kendi Arduinosunu yapabilir. Arduino projelerde kullanm kolayl salar ve
projelerin daha hzl ve stabil olarak yaplmasn salar. Arduino yap ve zelliklerine gre
eitli trlerden olumaktadr. Biz projemizde Arduino Uno modelini kullanacaz.
Temel Elektronik
Breadboard
1
Diren
Voltaj Blc
Giri voltajnn istenilen voltaja drlmesini salayan devredir. ekildeki gibi kurulur. k
voltaj R1 ve R2 direnlerine baldr. Vout = Vgiri*R2/(R1+R2) eklinde yazlr. rnein
R1=10k R2= 10k ohm olarak seilir ve giri voltajmz da 5 volt olursa, k voltajmz =
5*10K/(10K+10K) = 2.5 Volt olarak bulunur.
Diyotlar
Kullanm alanlarna gre eitli diyotlar bulunmaktadr. Led, fotosel, zener diyotlar bunlara
rnek olarak verilebilir. Lise bilgilerimizden de bildiimiz gibi diyotlar tek ynde geirgendir.
ekildeki resimde akm geirme yn belirtilmitir. Fakat ne yazk ki gerek dnyada diyotlar
kat zerindeki gibi ideal davranmazlar. Diyot akm geirme ynnde kullanlsa bile bir voltaj
farkna neden olmaktadr. Bu voltaj fark diyotun yapsna gre deimekle beraber genellikle
0,6 0,7 Volt arasnda olmaktadr.
Zener Diyotlar
Genellikle devreye dier diyotlardan farkl olarak ters balanrlar. Ters (tkama) ynnde
oluturduklar gerilim fark sayesinde kol zerindeki gerilim sabitlenmektedir. Devre zerinde
kullanm ekildeki gibi gsterilmitir. Voltaj fark diyotun yapsna gre deimektedir.
Genellikle 5.1 Voltluk diyotlar kullanacaz. Bu diyotlar ile devre zerindeki fazla gerilimi ve
olas dalgalanmalar engellemeyi umuyoruz.
Tranzistr
2
Temel Yazlm Bilgileri
Koullar (if-else-elseif): Yazlm dillerinin en temel komutlarndan birisidir. Elinizde bir durum
var ve bu durum doru ise a iini yapmasn eer yanl ise b iini yapmasn istiyorsanz, bu
kod sistemi tam bu ie uygun. Ksaca kod emasna bakalm.
f( a == 5 ){
}else{
Koullarmza else kullanm zorunlu deildir. Sadece if kullanm yaplabilir, bylece koul
doru deilse extradan bir kod almaz. Birden fazla koulumuz var ise elseif ile yeni koullar
ekleyebiliriz.
f( a == 1 ){
3
elseif (a == 2 ) {
elseif (a == 3 ) {
For dngs: Yazdmz kodlarn belli bir sre tekrar etmesini isteyebiliriz. Bunun iin
dngler kullanmalyz.
b = 20;
4
Arduinonun Kurulumu ve Arduino Program
5
Program compile: Bu buton ile yazdmz program kontrol edebiliriz. Eer kodda hata
varsa alttaki siyah blmde turuncu yaz eklinde yaptmz hata ve satr yazacaktr.
Hatrlatma: Bulunduumuz satrn says sol atta yazmaktadr.
Program Compile & Upload: Bu buton ile nce yazdmz kod derlenir. Eer kodda hata
yoksa yazlan kod Arduinonun anlayaca dile evrilir ve otomatik olarak Arduinoya atlr.
lem srasnda ilerleyen ubuktan ilem durumunu grebilirsiniz. Ayrca Tam program atlma
srecinde Arduino zerinde bulunan Tx ve Rx LEDleri hzl bir ekilde yanp snecektir.
Serial Monitor: Yeni pencere aan bu buton ile Arduinodan yolladmz verileri
grebiliriz. lerleyen konularmzda bu butonu ska kullanacaz.
Haydi Balayalm.
6
Arduino ile Yanp Snen Led Yapm
imdi programlamaya giri yapabiliriz. Arduino programlar iki ana fonksiyondan oluur.
void setup() fonksiyonu: Bu fonksiyon program ilk aldnda bir kere alr ve gerekli
kalibrasyon, setup komutlarn buraya yazarz.
void loop() fonksiyonu: dier programlama dillerinden alk olduumuz main() fonksiyonu
gibidir. Farkl olarak loop fonksiyonu ilevi bitince tekrar batan balar yani sonsuz bir
dngdr aslnda.
void setup(){
void loop(){
7
// program buraya yazyoruz
Arduinoyu test etmek ve ilk programmz yazmak iin bu projeyi yapabiliriz. 1 Saniye
aralklar ile LEDimiz yanp snecektir.
void setup(){
pinMode(LED, OUTPUT); // LED pini yani Arduinonun 10. Aya k
yapld
}
void loop(){
digitalWrite(LED,HIGH); // LEDin bal olduu pinden 5 volt gerilim
saland
delay(1000); // 1000 ms yani 1 saniye program duruyor
digitalWrite(LED,LOW); // LED sndrlyor
delay(1000); // bir saniye bekliyoruz
}
8
Arduino ile Kara imek Devre
Arduinoya pratik olarak kara imek diye tabir edilen, paralel bal ledlerden oluan rnek
devremizle balayalm. Devremizi istediimiz kadar ledle oluturabiliriz. Biz bu rnekte 5 adet
led ile kurulum yapm gibi davranacaz.
void setup(){
pinMode (13, OUTPUT);
pinMode (12, OUTPUT);
pinMode (11,OUTPUT);
pinMode (10, OUTPUT);
pinMode (9, OUTPUT);
}
void loop(){
digitalWrite (9, HIGH);
delay (10);
digitalWrite (9, LOW);
digitalWrite (10, HIGH);
delay(10);
digitalWrite (10, LOW);
digitalWrite (11 , HIGH);
delay(10);
digitalWrite (11, LOW);
digitalWrite (12, HIGH);
delay(10);
digitalWrite (12, LOW);
digitalWrite (13, HIGH);
delay(10);
digitalWrite (13, LOW);
}
Kara imek uygulamasnn alma mantnn kavranmas iin yukarda verilen kodlarn
aklayc olduunu dnmekteyim. Fakat bu kodlar balang dzeyindedir ve gereksiz
olarak her led tek tek kontrol edilmitir. Bir sonraki aama olarak yukardaki uygulamay
yapan fakat daha profesyonel olan bir program yazalm.
9
Arduino ile Buton Kullanm
Pull-Down Diren
Pull-up Diren
10
const int buttonPin = 2; // Butonun pin numaras
const int ledPin = 13; // Ledin baland pin numaras
int buttonState = 0; // Butonun durumu
void setup() {
pinMode(ledPin, OUTPUT); // Ledin bal olduu pini k olarak
ayarlyoruz.
pinMode(buttonPin, INPUT); // Butonun bal olduu pini k olarak
ayarlyoruz.
}
void loop(){
buttonState = digitalRead(buttonPin); // butonun basl olup olmadn
kontrol ediyoruz.
// Buton basl ise bize HIGH deil ise LOW olarak geri dnmektedir (1 veya
0)
if (buttonState == HIGH) { //buton basl m?
digitalWrite(ledPin, HIGH); // ledi yak
}
else {
digitalWrite(ledPin, LOW); // buton basl deil ledi sndr
}
}
Ark olaylarn engellemek iin digitalWrite kodlarndan sonra az bir bekleme verilebilir,
delay(100) eklinde.
Buton kontrol etmeyi rendiimize gre bir adm daha ileriye gidelim ve saya yapalm.
Fakat bunun iin ncelikle bilgisayar ile arduinomuzu nasl haberletireceimize bakalm.
11
Arduino ile SeriPort zerinden Bilgisayara Veri Yollama
void setup() {
Serial.begin(9600); // bilgisayar ile arduinomuzun haberlemesini
balatyoruz.
// Bilgisayarn ve arduinonun ayn hzda almas iin 9600 yazdk.
// Yani saniyede 9600 tane bit transferi olacaktr.
}
int sayici = 0;
void loop() {
Serial.print(Sayicimizin degeri= ); // Ekrana mesajmz yazdryoruz.
Serial.println(sayici); // saya deerimizi ekrana yazdrp yeni satra
geiyoruz.
delay(1000); // Bir saniye bekle
}
Btn ilem bu kadar kolay. Bundan sonras tamamen size kalm. Bu balant ile yazdnz
program kolaylkla test etme debug etme imkan salamaktasnz.
imdi daha nce rendiimiz buton kontrolyle haberlememizi birletirelim ve butona her
basldnda artan bir saya yapalm.
12
}
}
Hep arduino mu veri yollayacak, biraz da kardan veri bekleyelim. Bu kod ile bilgisayardan
gelen veriler arduinoda ilenmektedir. Unutmayn ki tm veriler karakter olarak tek tek
gelmektedir.
13
Arduino ile Bluetooth Haberlemesi
Temel olarak yaptmz i bilgisayar ile arduino zerinden haberlemeye benzemektedir. Tek
fark donanmsal olarak bluetooth modlmz arduinomuza balayacaz. Piyasada eitli
modelleri bluetooth modlleri genellikle 4 ayaa sahiptir. zerinde yazanlardan da
anlalaca gibi 2 besleme 2 haberleme aya vardr. Beslemeleri modlmzn
datasheetine gre 5 veya 3.3 volta balayalm. Hatal balant yaplmas durumunda
modlmz p olabilir. Geriye kalan 2 ayak arduinomuza balanacaktr. lk uygulama olarak
bu ayakalrmz arduinomuzun Rx ve Tx ayaklarna balayalm. Bluetoothun Tx aya
arduinonun Rx ayana, Bluetoothun Rx aya ise arduinonun Tx ayana balanacaktr. Yani
ters olarak balanmas gerekmektedir. Hep yaplan ve yaplamaya devam edecek bir hata var
burada. Arduinomuzun Rx ve Tx ayaklarna bir eyler bal iken arduinoyu bilgisayara
balayarak kod atmaya alrsanz hata alrsnz. nk bu ayaklar ayn zamanda bilgisayarn
kulland ayaklardr ve oraya baka bir modln bal olmas iletiiminizi bozar. Eer bu
ayaklar kullanacaksak kod atacamz zaman bu kablolar skmeyi unutmayn.
http://www.mcu-turkey.com/stm8s-hc-06-bluetooth-modul-ile-haberlesme-uygulamasi/
Artk kod yazalm. Aslnda ok farkl bir ey yapmayacaz. Seri haberleme konusundaki
rnek kodu ykleyebiliriz arduinomuza.
void setup() {
Serial.begin(9600);
}
int sayici = 0;
void loop() {
Serial.print("Sayicimizin degeri= ");
Serial.println(sayici);
delay(1000);
14
}
http://download.cnet.com/Tera-Term/3000-20432_4-75766675.html
#include <SoftwareSerial.h>
SoftwareSerial yeniHaberlesmeKanali(10, 11); // 10 = RX, 11 = TX yani 10 -
> bluetoohtu Txine 11 -> Rxine
void setup()
{
Serial.begin(9600); // bilgisayar ile haberlememiz
yeniHaberlesmeKanali.begin(4800); // yeni haberleme kanalmz
}
void loop()
{
Serial.println("Bu yazi bilgisayara");
yeniHaberlesmeKanali.println("Bu yazi bluetootha");
delay(100);
}
Yukardaki kod yardm ile arduino hem bluetootha hemde bilgisayara farkl mesajlar
yollamaktadr. Mesajlar grmek iin Tera Term ve arduinonun kendi Serial Monitorn
aabilirsiniz.
15
Arduino ile Analog Veri Okuma
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorDegeri = analogRead(A0); // Arduinonun A0 ayana balanan
kablodaki gerilim llyor
Serial.println(sensorDegeri); // Okuduumuz deer ekrana yazdrlyor
delay(1); // Dzgn alabilmesi iin ksa bir bekleme veriyoruz.
}
16
Arduino ile Siyah Beyaz Kontrol
ncelikle devremizi kurmamz gerekiyor. Bunun iin delikli pertinaksa yandaki gibi devremizi
kuralm. Sensr yerletirirken ayaklarnn ekildeki gibi olmasna dikkat ediniz.
17
rnek olarak ilk bata bir tane sensrn balantlarn yapalm ve tek sensr ile bir proje
gerekletirelim. lerleyen projelerimizde 3 tane sensr birletirip izgi izleyen basit bir
robot yapacaz.
18
Arduino ile LCD Kullanm
Arduino ile sklkla kullanmasam bile LCD kullanmn renmek yararl olacaktr. Her zaman
verilerimizi gstermek iin bilgisayar bulamayabiliriz. Bu gibi durumlarda LCDmizi kullanarak
elde ettiimiz durumlar ekrana yazdrabiliriz. Kablo balantlar biraz kark olabilir ve ilk
denemenizde hata yapabilir ve LCDyi dzgn bir ekilde kullanamayabilirsiniz. Bu yzden
devre balantlarnz dikkatli yapn.
Devremizi dikkatli bir ekilde kurduysak artk programlamaya geebiliriz. Btn karakterler
daha nceden bizim iin tanmlanm. Bu karakterlere ulamak iin ncelikle ktphanemizi
programmza dahil edeceiz. Daha sonra balang ayarlarmz yapacaz ve LCDmizi
kullanmaya balayacaz.
Haydi ekranmza bir eyler yazalm.
19
Dahili EEPROMa Yazma ve Okuma
Bu depolama alanlar programmz iin gerekli deerlerin depolanmas iin yeterli olmaktadr.
20
Arduino ile Servo Kullanm
Yava yava arduinomuzla d dnyay kontrol etmeye balyoruz. Arduino ile servo motor
srmek dier mikrokontrolclere gre (zellikle PICe gre) daha kolaydr. PIC ile haftalarca
sren servo motor kontrol arduino ile dakikalar srmektedir.
Servo Motor: 1 derece hassasiyetle alan 0-180 dereceler arasnda hareket edebilen bir
motor eididir. Dediim gibi sadece 0 ile 180 derece arasnda dnmektedir. Yani tam bir tur
atamamaktadr. Genellikle robot kollarda kullanlmaktadr. Servonun eitleri genellikle
tayabilecei yke gre belirlenmektedir. Piyasada genellikle 1.4 kg*cm torkundaki servolar
bulunmaktadr. Bu demek oluyor ki motor milinize bal 1 CM uzunluunda bir ubuk ucuna
bal yk 1.4 KGdan fazla ise motorunuzun gc mili dndrmeye yetmez. Eer ubuunuz
10 CM ise 140 gram kaldrabilirsiniz. Birok kii burada hata yapmaktadr. Kullanacanz yke
gre servo semelisiniz. Piyasada ayn mantkla alan daha kuvvetli servo motorlar vardr.
Peki Servo motoru nasl kontrol ediyoruz derseniz, teorik olarak yle zetleyebilirim. PWM
adn verdiimiz kare dalga sinyali vardr. Bu sinyalin HIGH ve LOW olduu yerlere gre
servomuzun konumu deimektedir.
Servonun 3 balant kablosu bulunmaktadr. Krmz kablomuzu +5 volta balayalm,
kahverengi kablomuzu topraa (- uca) ve turuncu kablomuzu da arduinomuzun PWN (~)
yazan ayaklarna balayalm. Turuncu kablomuz data kablomuz olmaktadr ve konumumuz
bu kablo zerinden aktarlr. Unutulmamaldr ki servolar vb mekanik elemanlar fazla akmla
almaktadr. Arduinomuzun 5 volt k servomuzu beslemeye yeterli olmad durumlar
olabilir. Ayrca servo yznden devrede grlt oluabilir. Bu yzden devremizin + ve
ularna kapasite balamamz bu grlty engelleyebilir.
void loop()
{
servoNesnesi.write(100); // Servomuzu 100 dereceye
dndrdk
delay(1000); // biraz bekleyelim
servoNesnesi.write(20); // Servomuzu 20 dereceye dndrdk
delay(1000); // biraz bekleyelim
}
21
Arduino ile DC Motor Srme
Arduinonun pin klarn dorudan motora balamamz motor iin gerekli akm
salamamaktadr. Arduinonun pin klar ancak bir ledi yakacak kadar akm vermektedir.
Fakat biz bu akm tetikleme ilevinde kullanp DC motorlar ileri veya geri ynde
altrabiliriz. Bunun iin hazr devre kartlar vardr. Bunlardan birini alp kolaylkla
kullanabiliriz. rnek hazr karta linkten ulaabilirsiniz.
http://www.aliexpress.com/item/Special-promotions-5pcs-lot-L298N-motor-driver-board-
module-L298-for-arduino-stepper-motor-smart-car/1827893830.html
H Kprs:
22
Ksaca balayacamz pinleri tantmak istiyorum;
INPUT 3 ve INPUT 4 (10. ve 12. Ayaklar): Bu pinler de INPUT 1 ve INPUT 2 gibi almaktadr.
OUTPUT 1 ve OUTPUT 2 (2. Ve 3. Ayaklar): Bu iki pin motorun iki ucuna balanmas
gerekmektedir.
OUTPUT 3 ve OUTPUT 4 (13. Ve 14. Ayaklar): Bu iki pin dier motorun iki ucuna balanmas
gerekmektedir.
ENABLE A ve ENABLE B (6. ve 11. Ayaklar): Bu iki pin bizim hzmz ayarlayacak pinlerdir. Bu
yzden bu pinleri Arduinonun PWM ayaklarna balamamz gerekir. Verilen PWM sinyaline
gre hzmz belli olacak ve INPUT ayaklarna verdiimiz veya vermediimiz 5 volta gre de
motorun yn belli olacaktr.
23
PWM ile Hz Kontrol: PWM sinyali LOGIC-
HIGH (5 Volt) ve LOGIC-LOW (0 Volt)
sinyallerden olumaktadr. HIGH ve LOW
sinyalin oranna gre belli olan ortalama
k sinyali sayesinde motorumuzun hz 0-
255 arasnda deerler alabilmektedir.
VSS (LOGIC SUPPLY VOLTAGE 9. Ayak): Adndan da anlald gibi bu pinin 5 volta
balanmas gerekmektedir. Devrenin kararszln azaltmak iin bu pin ile toprak arasna
100nFlk kondansatr balanabilir.
GND (8. Ayak) : Bu pini topraa balamamz gerekmektedir. Ayrca entegrenin tepesindeki
metal de toprak olmaktadr. Bunu belirtmemin nedeni yanllkla ksa devre yapmamanz
iindir.
VS (4. Ayak): Entegremizin motorlara gidecek enerjiyi salad asl besleme ayadr. Buraya
verdiimiz motor kontrolmz dorultusunda motorlara verilecektir. Motorumuzun
zellikleri gze alnarak uygulamalarmzda buraya 12 Volt balayacaz.
24
Sra geldi Arduino programn yazmaya. Aadaki kodda oluturuum fonksiyonlar dier
uygulamalarmzda da kullanacaz. ncelikle INPUT ayaklar iin deikenlerimizi
tanmlyoruz.
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void geri(int hizsag, int hizsol){ // ilk deikenimiz sag motorun ikincisi
sol motorun hzn gstermektedir.
// motorlarmzn hz 0-255 arasnda olmaldr.
// Fakat baz motorlarn torkunun yetersizliiniden 60-
255 arasnda almaktadr.
// Eer motorunuzdan tiz bir ses kyorsa hzn arttrmanz gerekmektedir
.
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);
}
void dur()
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
void setup(){
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
}
void loop(){
ileri(100,100); // ileri gidiyoruz
delay(1000);
dur(); // durduk
delay(1000);
ileri(150,100) // hafif sola doru gidiyoruz
delay(1000);
25
dur(); // durduk
delay(1000);
ileri(100,150) // hafif saa doru gidiyoruz
delay(1000);
dur(); // durduk
delay(1000);
geri(100,100); // geri gidiyoruz
delay(1000);
dur(); // durduk
delay(1000);
}
Umarm kodlar yararl olmutur. imdi bir de yazlmda yazdmz kodlarla yani Arduino
ayaklaryla motor srcmzn ayaklar arasndaki balantlar bir tabloda gsterelim.
26
Arduino ile Uzaklk Sensr
Kitabmzda HC-SR04 Mesafe Sensr ile uygulama yapacaz. Bu sensr piyasada bolca
bulunan fakat lkemizde pahal olan bir sensrdr. inden tanesini 1-2$a alabilirsiniz.
Sensr 2-200 CM arasndaki uzaklklar lmektedir. Fakat 200 CMe doru sensr kalitesi
bozulmaktadr.
Sensr insan kulann duyamayaca bir frekansta ses yollar. Ses eer bir yere arpar ise geri
yansz ve sensrmze gelir. Sensr bu sesin gidip gelme sresini hesaplar ve bylece cismin
uzakln bulur. Bu yzden bu sensre ultrasonik ses sensr de denir.
imdi sensrden aldmz uzakl bilgisayar ekranna yazdran bir uygulama programlayalm.
27
int trigPin = 6; // sensrn trig pinine balanacak arduino pini
int echoPin = 7; // sensrn echo pinine balanacak arduino pini
long olcum;
long cm; // sensrmzden okuduumuz uzaklk
void setup(){
pinMode(trigPin, OUTPUT);
pinMode(echoPin,INPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(trigPin, LOW); // sensr ilk bata ses yollamasn
delayMicroseconds(5);
digitalWrite(trigPin, HIGH); // Burada ses dalgasn yolluyoruz
delayMicroseconds(10);
digitalWrite(trigPin, LOW); // Tek bir ses dalgas yolladk
olcum = pulseIn(echoPin, HIGH); // Eer ses geri dnerse echo pinine geri
dnecektir.
// Burada geen sreyi hesaplyoruz.
cm= olcum /29.1/2; // lm deerini zamandan -> CMye eviriyoruz
Serial.println(cm); // sonucu Serial Monitorden grmek iin bilgisayara
yolluyoruz
delay(100);
}
Eer sensrn nnde engel yoksa sensrde bir miktar yavalama olacaktr. Bundan
kurtulmak iin MAX bekleme deerini girmemiz lazmdr. Bu deeri arttrp azaltarak kendi
sensrnze uygulayabilirsiniz. Deitirmeniz gereken kod:
28
Arduino ile vme lm
#include <Wire.h>
#include <ADXL345.h>
ADXL345 adxl; //adxl adnda nesne yaratyoruz
void setup(){
Serial.begin(9600);
adxl.powerOn(); // sensr altryoruz
}
void loop(){
int x,y,z;
adxl.readAccel(&x, &y, &z); //sensrden gelen deerleri okuyoruz
Serial.print(x);
Serial.print(y);
Serial.println(z); // sensr deerlerini ekrana yazdrdk.
Delay(10);
// sensrler hem yer ekim ivmesini hemde aktif ivmeyi vermektedir
}
29
ARDUNO UYGULAMALARI
Trafik Lambalar
30
Arduino ile Voltmetre Robot Yapm
Hemen yazlma geelim. ADC rneimizden farkl olarak bu sefer saysal deere kar gelen
gerilimi hesaplayp bilgisayar ekranna yazdracaz.
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorDegeri = analogRead(A0); // A0daki gerilimin saysal deeri
float gerilim = (5/1023)*sensorDegeri; // 5 volt max. 1023 ile
llyordu. Bu yzden adm araln bulmak iin 5/1023 ilemini yaptk.
Bu sonucuda ADCnin deeri ile arptk Bylece gerilimi bulmu olduk.
Serial.print(gerilim);
Serial.println(" Volt");
delay(100);
}
lm iin gerilimi lmek istediiniz yere A0dan gelen kabloyu, devrenizin toprana da
GNDden gelen ucu balaynz.
DKKAT: Asla ve Asla 5 volt zerindeki deerleri lmeye almayn. Byle bir hatay
engellemek iin devrenize 5 Volt deerinde bir Zenner Diyotu ters balamanz yararl
olabilir.
31
LM35 ile Scaklk lm
Balantlar ekildeki gibi yapalm. Sensrn gbekli yeri arkaya baktnda, yani yazs bize
baktnda ilk Pin 5 Volt, ortadaki pin Arduinonun analog giriine ve 3. Pin ise topraa (GND)
balanmaldr.
Haydi, yazlma geelim Yapmamz gereken analog sinyali okumak ve matematiksel ilem ile
scakla evirmektir. evirdiimiz deeri bilgisayara yollayalm.
float sicaklik;
void setup()
{
Serial.begin(9600);
}
void loop()
{
sicaklik = analogRead(A0);
sicaklik = sicaklik * 0.48828125;
Serial.print("SICAKLIK = ");
Serial.print(sicaklik);
Serial.println(" C");
delay(500);
}
32
Arduino ile arpmayan Robot Yapm
33
Kablolamay bitirdiimize gre yazlma geelim ve robotumuzu test edelim.
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void geri(int hizsag, int hizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);
}
void dur()
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
void setup(){
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
34
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1,INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2,INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3,INPUT);
}
void loop(){
while( uzaklik(trigPin2, echoPin2 ) < 10 ){ // nne engel gelene kadar
dz git
ileri(100,100);
}
dur(); // engel geldikten sonra dur
delay(1000); // 1 saniye bekle
if( uzaklik(trigPin1, echoPin1) > 10 ){ // soluna bak
ileri(150,0); // engel yoksa sola dn
delay(500); // 90 derece dnene kadar geecek sre. Bu sreyi kendinize
gre ayarlayn
dur(); // dur
delay(1000);
}else if(uzaklik(trigPin3, echoPin3) > 10 ){ // sol dolu ise saa bak
ileri(0,150); // engel yoksa saa dn
delay(500); // 90 derece dnene kadar geecek sre. Bu sreyi
kendinize gre ayarlayn
dur(); // dur
delay(1000);
}else { // sa ve solda engel varsa geri gidip dnelim
geri(100,100);
delay(1000);
ileri(150,0);
delay(500);
dur();
delay(1000);
}
}
Yaptnz robot ve kodlarn uygun olarak almas iin kodlar zerinde baz deiiklikler
yapmak gerekebilir.
Bu robot ile labirent zen robot yaplabilir. Burada tek nemli olan robotun tam 90 derece
dnmesini salamaktr.
35
Arduino ile Basit izgi zleyen Robot Yapm
Bir nceki projemizdekine benzer bir robot tasarlayalm. Fakat bu sefer uzaklk sensrlerini
skelim ve robotun en nne yere bakacak ve yerden 1-2 CM yukarda olacak ekilde,
siyah/beyaz sensrlerimizi koyalm. Bu robotumuzda 3 tane CNY70 kullanacaz. Bu yzden
daha nce anlattmz ekilde bu sensrlerden 3 tane balayalm.
ncelikle sylemeliyim ki robot yarmalarnda grdmz kadar kaliteli bir izgi izleyen
yapmayacaz. O tarz bir robot yapmak iin PID kullanmamz gerekir. Fakat biz buna gerek
kalmadan daha basit bir robot yapacaz.
36
break;
case 1:
esikdegeri = 820;
break;
case 2:
esikdegeri = 820;
break;
}
if (esikdegeri <deger)
return 1;
else
return 0;
}
void ileri(int hizsag, int hizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void setup(){
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
}
void loop(){
if(dijitalize(analogRead(sensorpin[1]),1)){
ileri(100,100);
}
if(dijitalize(analogRead(sensorpin[0]),0)){
ileri(0,100);
while(!dijitalize(analogRead(sensorpin[0]),0));
}
if(dijitalize(analogRead(sensorpin[2]),2)){
ileri(100,0);
while(!dijitalize(analogRead(sensorpin[2]),2));
}
}
37
Arduino ile Bluetooth Kontroll Robot Yapm
Eer her eyi doru yaptysak Bluetooth modlndeki k yanp snecektir. Laf fazla
uzatmadan programlamaya gemek istiyorum. Robotumuz harekete gemek iin
bilgisayardan komut bekleyecektir. Bu komutu TERA TERM program zerinden klavyemizle
vereceiz. Robotumuz w ile ileri, x ile geri gidecek; a ile sola, d ile saa dnecek ve s
tuu ile duracaktr.
Haydi balayalm
const int sagileri = 9;
const int saggeri = 8;
const int solileri = 12;
const int solgeri = 13;
const int solenable = 11;
const int sagenable = 10;
void ileri(int hizsag, int hizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void geri(int hizsag, int hizsol){
38
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);
}
void dur()
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
void setup(){
Serial.begin(9600);
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
}
void loop(){
if (Serial.available() > 0) { //Bluetoothtan veri bekliyoruz
char tus = (char)Serial.read();
if( tus == 'w' )
ileri(100,100);
if( tus == 's' )
dur();
if( tus == 'a' )
ileri(0,100);
if( tus == 'd' )
ileri(100,0);
if( tus == 'x' )
geri(100,100);
}
}
39