9 Ağustos 2014 Cumartesi

Arduino - Android Arayüzünden Bluetooth Haberleşmesi


Kablosuz haberleşme neden bilmiyorum diğer haberleşmelere göre daha heyecan verici geliyor bana. Özellikle son zamanlarda kullandığımız akıllı telefonları Arduino ile haberleştirebilmek gerçekten büyük zevk. Zaten basit bir uygulama olsa bile bu yazımdaki uygulamayı yaptığınızda ne demek istediğimi daha iyi anlayacaksınız :). 




Yazılımdaki mantık C# uygulamasındaki mantık ile aynı. 3 adet butonumuz var, 1 tanesi ile bluetooth haberleşmesi ile mikrodenetleyicimize bağlanıyoruz. 2.buton ile led yakıyor, 3.buton ile led söndürüyoruz.

Bu uygulamayı ilerleterek android kontrollü bir araba, akıllı ev uygulamaları vb. projeler gerçekleştirebilirsiniz. Tabii android bilmekte gerçekten büyük fayda var. Size mutlaka + katkıda bulunacaktır.


Eclipse öğrenmeye başladım fakat henüz başlangıç aşamasındayım. Buradaki kullanacağıız programı Selim Erkan OĞUZ arkadaşımın yardımıyla Google'ın App Inventor isimli programı yardımıyla yaptık. İster kendiniz oluşturursunuz isterseniz vereceğim link ile programı direkt android telefonunuza yükleyerek uygulamayı gerçekleştirebilirsiniz.



Yukardaki resimde uygulamanın kodlarını yazabildiğimiz bir arayüz var. Sağ taraftaki resimde de uygulamamızın basit bir arayüzü var. 

İndirme linki burda ; arduinotooth indirme linki









HC-06/07 BLUETOOTH MODÜLÜ
Anrdoid telefonumuzla Arduino'muz arasındaki haberleşmeyi HC-06 modülümüz sayesinde gerçekleştireceğiz.Bu sayede istediğimiz dataları Arduino'ya gönderip ışık yakıp söndüreceğiz.

Bluetooth'un RXD pinini Arduino'da TXD'ye, Bluetooth TXT pinini, Arduino RXD'sine takacağız.


Uyglamayı çalıştırmadan önce telefonunuzu Bluetooth modülü ile eşleştirmeniz gerekiyor. HC-06 veya HC-07 diye ekranda gözükecek. Modülün şifresi 1234. Eşleştirme yaptıktan sonra arayüzü açıp bağlan butonuna tıklayarak bir kez daha bağlanacağız. Bağlantı sağlandıktan sonra modülün üzerinde yanıp sönen ışık sürekli yanmaya başlayacak. Bu da komutlar için bluetooth haberleşmesinin sağlandığını, Arduino'nun komut almaya hazır olduğunu gösterir.

Arduino kodlarımız hemen hemen benzer kodlar C# uygulamasındaki kodlarla. Buyrun;

int data;
int led=7;
void setup() {
  pinMode(led,OUTPUT);  
  Serial.begin(9600);
}
void loop() { 
  {
  if (Serial.available()){
   int data = Serial.read();
   delay(100);
   if(data=='1'){
     digitalWrite(led,1);
   }
      if(data=='0'){
     digitalWrite(led,0);
   }
   delay(100);
  }}}

Videomuz da burda :) Türk Usülü Çay Bardağımız da bize eşlik etmiş :p







Arduino'da ölçülen analog veriyi android program ile okuma yazılımı için aşağıdaki linke tıklayın.
http://arduinotik.blogspot.com/2015/06/arduino-bluetooth-ile-android.html

4 Ağustos 2014 Pazartesi

Arduino - Processing Arayüzü ile RGB Led Sürme

Merhabalar,
Bu yazıda Processing üzerinden oluşturduğumuz arayüz ile Arduino'ya bağlı RGB ledi süreceğiz.

Öncelikle Processing ile ilgili bilgi vereceğim ama şunu belirtmek istiyorum ki Processing ilgilenmek ve öğrenmek istediğim bir dil fakat ne yazık ki çok bir bilgim yok. O yüzden bu uygulamam Coşkun TAŞDEMİR'in Arduino Uygulama kitabından hoşuma giden ve sizinle paylaşmak istediğim bir uygulama. Şayet hoşunuza giderse (ki gidecek :D) Processing ile ilgilenmek isteyebilirsiniz.Arduino Uygulama Kitabı burda imdadınıza yetişebilecek nitelikte. En azından başlangıç için. 






PROCESSING NEDİR ?
Processing açık kaynaklı görsel bir yazılım programıdır. Kodlarla dijital sanat icra edebilir veya da mikrodenetleyiciler ile seri haberleşme sağlayarak onları yönetebilirsiniz.

Download linki Processing İndir

RGB LED
RGB Led ortak anot ve ortak katot olmak üzere 2 çeşidi bulunan bir led türüdür. Çalışma mantığı sağ tarafta bulunan Venn şemasıdır. Kırmızı Mavi Yeşil tonları 8 bitte karıştırırak (0-255) diğer doğal renklerin elektronik ortamda oluşturulmasını sağlar.
Processing ile de bu programı oluşturacağız ve Arduino'ya bağladığımız RGB ledi süreceğiz.

RGB Ledi dirençsiz sürmek istiyorsanız ki ben öyle yaptım, Arduino'nun 3,3V pini ile besleyin. Ben ortak anot kullandım ve RGB ledin uzun bacağını 3,3 V'a bağladım. Ayrıca ledler standart değil renkleri teker teker deneyin !!!



Processing'e yazılımı yazmadan önce Sketch>Import Library bölümünden CONTROLP5 kütüphanesini indiriyoruz.Böylelikle renk seçimi yapabileceğiz. 

Çok bir bilgim yok tüm kodlar hakkında buyrun;

import controlP5.*;
import processing.serial.*;

ControlP5 controlP5;
Serial seriPort;
ColorPicker cp;

int kirmizi;
int yesil;
int mavi;

void setup () {
  size(400,100);
  controlP5=new ControlP5(this);
  cp = controlP5.addColorPicker("renksecici",0,0,255,20);
  seriPort = new Serial(this,"COM30",9600); // COM30 yerine kendi seriportunuzu yazın.
}

void draw() {
  background(cp.getColorValue());
  
  kirmizi=int(red(cp.getColorValue()));
  yesil=int(green(cp.getColorValue()));
  mavi=int(blue(cp.getColorValue()));
  delay(50);
}

void renksecici(int renk){
  println("KIRMIZI" +kirmizi + "YEŞİL" +yesil + "MAVİ" +mavi);
  RenkGonder();
}

void RenkGonder() {
  seriPort.write('R');
  seriPort.write(kirmizi);
  seriPort.write(yesil);
  seriPort.write(mavi);

}

Bu da Arduino kodumuz ;

const int kirmizipin=11;
const int yesilpin=10;
const int mavipin=9;
int kirmizi=0;
int mavi=0;
int yesil=0;

int durum=1;
byte gelen = 0;

void setup(){
Serial.begin(9600);
}
void loop() {
while(Serial.available()>0)
{
  gelen =Serial.read(); 
  switch(durum)
  {
    case 1:
    if(gelen=='R')
    {durum=2;}
    break;
    
    case 2:
    kirmizi=gelen;
    durum=3;
    break;
    
    case 3:
    yesil=gelen;
    durum=4;
    break;
    
    case 4:
    mavi=gelen;
    durum =1;
    break;
  }}
  
  analogWrite(kirmizipin,255-kirmizi);
  analogWrite(yesilpin,255-yesil);
  analogWrite(mavipin,255-mavi);
  
  delay(20);
}

Şayet Processing programınız yok ,fakat yine de denemek istiyorsanız buyrun program linki.
https://drive.google.com/file/d/0B7Iv2kkg1He_blQ1ZUJUX1lmWkE/edit?usp=sharing

Bu da videomuz, 








15 Temmuz 2014 Salı

LDR ile Aydınlıkta Işık Yakan Devre

Hobi Elektronik kategorisini biraz boşlamış olduğumu hissettim ve hobi elektroniğe başladığımda yapmış olduğum ilk devreyi buraya yazmak istedim.

Devremizi, transistörün (BC547 , BC237 vs.)anahtarlama prensibinden yararlanarak oluşturacağız. Bunun için elbette LDR'yi tanımamız gerekiyor.







LDR (Foto Direnç) Nedir ?
Foto direnç yani kısaca LDR, üzerine düşen ışık miktarıyla ters orantıda direnci değişen bir elektrik elemanıdır. LDR’nin aydınlıkta direnci minimum, karanlıkta ise maksimumdur. Bu özelliği ile transistörün anahtarlamasını kullanarak bu devreyi oluşturucaz.



LDR, üzerine ışık düştüğünde neredeyse kısa devre gibi davranır ve transistörü Base'inin tetikler bu sayede transistörün Emitter'ine bağlı LED yanmaya başlar.

LDR karanlıkta olduğunda neredeyse açık devre olur (1M ohm civarı) ve transistör tetiklenmez bu yüzden de LED yanmaz.


Ben elimdeki dirençlerle bu devreyi kurmaya çalıştım 1k yerine 470ohm, 10k yerine de 1k kullandım. Besleme olarak mecburen Arduino kullandım ama siz direkt 9V verirseniz parlak ledleri kullanabilirsiniz maalesef ben düşük voltajdan ötürü kullanamadım. 

Buyrun bu da videomuz ;






11 Temmuz 2014 Cuma

Arduino - C# Arayüzü ile Led Yakma

Bu yazımda C# ile oluşturduğumuz arayüz ile Arduino'nun dijital çıkışlarına hükmetmeyi öğreneceğiz. Uygulamamız 2 aşamadan oluşmakta. Önce Arduino'ya yükleyeceğimiz programda hangi çıkışımızı yani ledi ON ve OFF duruma getirecek datayı belirleyeceğiz. Daha sonra da C# arayüzünden önce Port'lara bağlanmayı ve butonlara bastığımızda hangi datayı göndereceğimizi kararlaştıracağız.


C# ile ilgilenmenizi öneririm çünkü her defasında LCD bağlamak veya Serial Monitör kullanamayacağımız projeler olabilir. Tüm verileri tek arayüz üzerinden göndermek veya almak zorunda kalabilirsiniz. İnternet üzerinden C# üzerine projeleri veya arayüzü öğrenmeniz size fayda sağlar. Lafı fazla uzatmadan önce Arduino kodlarımızı vermek istiyorum;



int led = 13;  // Hali hazırda bulunan ledi kullanacağım.
void setup() {              
    pinMode(led, OUTPUT); 
  Serial.begin(9600);  
}
void loop() {
  if(Serial.available())   //Eğer seri haberleşme açık olursa alttaki komutlar işleyecek.
  {int a=Serial.read();    //Seri haberleşme ile okunan verimize a integer değerini verdik.
  if(a=='1')
 { digitalWrite(led, HIGH);}  // a, 1 olursa yanacak.
  
  else if (a == '0')          // a, 0 olursa sönecek.
  {digitalWrite(led, LOW);}
  }

}

C# kısmımızda Toolbox'dan aldığımız nesneler, ComboBox, 3 Buton, 1 Label.



Led Yak = Buton 3
Led Söndür = Buton 2
Bağla = Buton 1

Programımıza bakarsanız daha bu kısım daha iyi anlaşılacaktır.
Arayüzü oluşturduktan sonra Components kısmından SerialPort nesnesini arayüzün üzerine atıyoruz.





Amacımız önce programı yüklemiş olduğumuz Arduino'nun portuna, bu arayüz ile bağlanarak LED YAK ve LED SÖNDÜR komutlarını kullanmak :)

C# komutlarımız ;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace ArduinoSerial

{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            serialPort1.PortName = comboBox1.Text;            
            serialPort1.Open();
            
        }       

        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.DataSource = SerialPort.GetPortNames();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.Write("0");
            label1.Text = "LED KAPALI";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Write("1");
            label1.Text = "LED AÇIK";      
        }                     

        private void comboBox1_SelectedIndexChanged_1(object sender, EventArgs e)
        {

        }           

            }

}

Programın çalışabilmesi için Bilgisayarınızda Framework yüklü olması gerekmektedir.

Tüm Dosyaları İndirmek İçin Tıklayın (File>Download)
(Exe dosyası ArduinoSerial\ArduinoSerial\bin\Debug klasörünün içinde.)


Bu da C# arayüz oluşturma videomuz ve çalıştırma videomuz ;









Kolay gelsin :)...





28 Haziran 2014 Cumartesi

Arduino - PIR Sensörü ile Hareket Dedektörü Uygulaması

Merhabalar...
Bu yazımda hareket algıladığında dijital çıkış veren PIR Sensörü uygulaması yapacağız. Amacımız hareket algılandığında çıkış olarak led yakılması.

Fritzing devre şeması için kusura bakmayın, herşeyler var bi'tek PIR yok.








PIR SENSÖRÜ NEDİR ?
Orjinal ismi Passive InfraRed Sensor  yani Pasif Kızılötesi Sensör olan bu ekipman objelerden yayılan kızılaltı (IR) ışın değişimini tespit etmek için bir Fresnel lens ve IR’ye duyarlı sensör yardımıyla, 6 metreye kadar mesafedeki hareketleri algılayabilir; ucuzdur, kullanımı kolaydır; alarm sistemleri, hareketle aktif olan ışıklar gibi uygulamalar için idealdir.




 Sensörün başlığını açarsak üzerinde bulunan 3 bacağın ne ile alakalı bacaklar olduğunu görebiliriz.

Üstten baktığımızda en soldaki pin TOPRAK, en sağdaki pin +VCC, ortadaki pin de DATA çıkışıdır.Hareket varken DATA çıkışı '1', yokken '0' olmaktadır.


PIR sensörleri bir mikrodenetleyiciye bağlı olmadan kendi başlarına çalışabilen elemanlardır. Bu sayede satın aldığımız PIR sensörünü önce kendimiz test edebiliriz. Sensörümüze verdiğimiz besleme ile DATA çıkışının ucuna bir LED bağlayarak çalışıp çalışmadığına bakabiliriz. Sensörün arkasında 2 adet trimer var ve bu test aşamasında trimerlerin değerlerini küçük bir tornavida ile değiştirerek istenilen hassasiyete ve  DATA çıkışının istenilen zaman kadar '1' olmasını sağlayabiliriz.

Uygulamamızın kodlarına bakacak olursak...



int pirPin = 3; // PIR pin
int ledPin = 4;   // LED pin
int deger = 0;             

void setup() {
  pinMode(pirPin, INPUT);     // PIR Pin'i giriş yapılıyor
  pinMode(ledPin, OUTPUT);   // LED Pin'i çıkış yapılıyor
  Serial.begin(9600);           //Serial Porttan veri göndermek için baundrate ayarlanıyor.
}

void loop(){
  deger = digitalRead(pirPin);  // Dijital pin okunuyor
  Serial.println(deger);          // Okunan değer seri porttan okunuyor.
  if (deger == HIGH) {            
    digitalWrite(ledPin, HIGH);  
  }
  else{
    digitalWrite(ledPin,LOW);   // Eğer okunan değer 0 ise LED söndürülüyor.
  }

}


Programımızı bu şekilde bırakırsak trimerlerin  ayarlarına bağlı olarak çalışır sensörümüz. Bu haliyle bırakırsak Arduino kullanmamızın bir mantığı olmaz. O yüzden sizler "digitalWrite (ledPin,HIGH)" olan kısmın altına "delay(istenilen zaman)" kodunu ekleyerek hareket algılandıktan sonra ledin 1 olma süresini kendiniz ayarlayabilirsiniz.


Bu da videomuz ;

Bu uygulamada yardımcı olan arkadaşım Aykut KELEŞ'e teşekkür ederim.

Kaynak olarak kullandığım ve daha detaylı bilgi edinmek isteyenler için bu sitelerin linkleri;

http://www.mcu-turkey.com/arduino-pir-sensor-kullanimi/

https://learn.adafruit.com/pir-passive-infrared-proximity-motion-sensor/overview





29 Mayıs 2014 Perşembe

Arduino - PWM ile Servo Motor Sürme


PWM ile DC motor sürmüştük. Şimdi ise aynı yöntemle Servo motor süreceğiz.Fakat transistörlü anahtar kullanmayacağız.Çünkü servo motor kendi içerisinde PWM sinyalini algılayabilecek ekipmana sahip.





Servo Motor Nedir ?
Servo motor özellikle robotik uygulamalarda kullanılan bir motor çeşitidir. Servo motorlar da çıkış; mekaniksel konum, hız veya ivme gibi parametrelerin kontrol edildiği bir düzenektir. 
PWM sinyal ile DC motorun hızını kontrol ederek sürmüştük. Servo motor ise DC motor gibi sürekli dönen bir yapıya sahip değildir. 360 veya 180 derece dönebilen motorlardır ve mühim olan bu motorlarda hız değil açı değeridir. PWM ile servo motor kaç derece dönmesi gerektiğini algılar ve sinyalin istediği derece kadar döner. Uygulamamızda bunu daha iyi anlayacağız.


Towerpro SG90 Servo Motoru
Piyasada bulunan en ucuz servo motor Towerpro SG90 markalı motorudur. Motor 180 derece dönebilmekte ve ekipmanları da fena değil. Kablolarının bağlantıları da aşağıdaki resimde.
PWM yazan kabloyu Arduino'muzun 9 nolu pinine takacağız ve potansiyometre ile ölçtüğümüz analog değeri açıya dönüştürüp PWM ile motoru süreceğiz.

!!! Programı yazarken Servo'yu 170 derece döndürebildim. 180 derece döndürmek için map komutunu ya da açı değerini float olarak girmeme rağmen bu sorunu çözemedim.

Arduino Komutlarımız ;

#include  //Arduino'nun kendi Servo Kütüphanesi var

int potPin = 0;  
int servoPin = 9;
Servo servo;  // servo ismiyle servo motorumuzu tanıttık

void setup() 

  servo.attach(servoPin);  // Servo'nun sinyali alacağı Arduino Pinini belirledik


void loop() 

  int okunan = analogRead(potPin);     // 0'dan 1023'e, Pottan okunan değer
  int aci = okunan / 6;              // 0'dan 180 dereceye Açıya dönüştürülüyor.
  servo.write(aci);  



Bu uygulamayı PIC ile de yapmanızı şiddetle tavsiye ediyorum. Çünkü Servo.h kütüphanesi ile tüm uygulamayı basite indirgeyebiliyoruz. İşin arka planını görmek isteyenler mutlaka PIC ile de denemeliler. 

Uygulamamızın resmi ve videosu ;







10 Mayıs 2014 Cumartesi

Kararsız Multivibratör - Flaşör Devresi

Mühendislik eğitimimle beraber elektronik devre tasarımı veya da hazır devreleri gerçekleştirebileceğim bir alan istemiştim. Hobi elektronik devreleri bu konuda imdadıma yetişmişti. Hobi elektronik alanında ilk devrem flaşör devresi olarak adlandırdığımız gerçekte ise Kararsız Multivibratör olan bu Kare Dalga üreticisiydi.


Devrenin mantığı ise basit. Transistörlerin aynı olsa bile birbirlerine nazaran yapısal farklılıklarından dolayı biri diğerinden daha önce iletime geçecektir. Örneğin Q1 iletimde,Q2 kesimde iken 1.Çıkış ==1, 2.Çıkış== 0 olur. Kondansatörlerin 0,7V 'a ulaşıp boşalmaları ile bu sıra sürekli değişir ve bir kare dalga üreteci ortaya çıkmış olur.

R1=R4, R2=R3 ve C1=C2 alınırsa devre simetrik ters dalga üretimi gerçekleştirilmiş olur.

Frekans hesabına gelince ;
T=T1+T2
T1=R1 * C1 * ln2
T2=R2 * C2 * ln2    ve  f= 1 / T ; formüllerinden bulunabilir.


Formüllerde yanlışlık çıkabilir  deneme yapmanızda fayda var :).
Bu devreyi çıkışlarını led üzerinden takip edebileceğimiz bir devre ile tasarlayalım. Aşağıdaki devreyi kurararak çıkışları gözlemleyebiliriz. Değerleri kendiniz de belirleyebilirsiniz tabii ki simetrik olması şartıyla. Devrede ki kapasitör değeri 4,7 mikrofarattır.





7 Mayıs 2014 Çarşamba

Arduino - PWM ile DC Motor Sürme

Darbe genişlik modülasyonu (PWM) ile ilgili uygulama gerçekleştirmiştik. Bu yazımda ise bu konuyu biraz daha aralayacağız ve bu modülasyon ile transistörün anahtarlama özelliğinden faydalanarak DC motor hızını kontrol edeceğiz.

PWM'den bahsetmeden önce gerekli olan malzemelerden bahsetmek istiyorum.
  • 2N2222 Transistör
  • 1N4001 Diyot
  • 5K ya da 10K Pot
  • DC Motor (9V'luk ya da daha küçük)
  • 470 Ώ direnç
PWM NEDİR ?
PWM en basit haliyle bir sinyal modülasyon tekniği olarak tanımlanabilir. Sinyal bilgisinin aktarım için uygun hale çevirilmesi amacının yanı sıra güç kontrolü sağlamak ve elektrik makineleri,güneş pili şarj üniteleri gibi özel devrelere destek olmak amacı da taşır. 


Bu kontrol de tamamen anahtarlama ile sağlanır. Anahtarlama ne kadar hızlı yapılırsa, PWM ile aktarılan sinyalin gücü o kadar da artar. Örneğin bir lambaya gönderilen sinyalde PWM tekniğine ihtiyaç duyuluyorsa, bu teknik 120 Hz frekans değerinde uygulandığında maksimum verim elde edilebilir. 

"Duty Cycle" yani görev döngüsü olarak tanımlanan bir kavram bulunuyor ve PWM tekniğinde de sıkça karşımıza çıkıyor. Görev döngüsü kavramı aslında yapılan işlemin periyodunu belirtiyor. Bu döngü düşük seviyelerde ise aktarılan güç düşük olurken, döngünün yüksek seviyelerinde yüksek güç aktarılıyor. 




Basitçe soldaki Duty Cycle grafikleri ile PWM'i şu şekilde anlatabiliriz. 10 bitlik bir ADC ile analog değerimiz 0-255 arasında değer alır. Bu yeni dijital değer ile anahtar olarak kullanacağımız transistörün bazına bu sayısal değerler ile PWM uygularız. Sayı ne kadar büyük ise "Pulse Width" yani "Darbe Genişliği" o kadar büyük olur.

Bir pervaneyi elimizle çevirdiğimizi düşünelim. Ne kadar çok çevirip az dinlenirsek pervanemiz o kadar çok dönecektir. Çevirim kısmını 1,dinlenme kısmını da 0 olarak düşünürsek 1'ler ne kadar çoksa pervane de o kadar çok hızlı dönecektir. İşte bu 1'ler transistörümüzün bazına uyguladığımız PWM sinyalinin Darbe Genişliği demek oluyor.

DC MOTOR SÜRMEK
Edindiğimiz bilgiler ile DC Motor sürmek artık kolay. İhtiyacımız yüksek akım kapasiteli bir transistör, PWM üretecimiz ki biz bunu Arduino'muz ile yapacağız ve 1 motor ile diyot.


Soldaki devreyi Arduino'muz ile kuracağız.Transistörün 2N2222 veya muadili olmasına dikkat etmekte fayda var hakeza BC547 vs. gibi transistörler ile bu iş mümkün değil.Çünkü motoru döndüren güç akımdır ve yüksek akım geçiremeyen transistörler ile motor süremeyiz.
Direnç olarak 1k Ώ da kullanabilirsiniz fakat ben 470 Ώ kullandım, bu konuda sıkıntı yok.







Çok kısa da olsa kullanacağımız transistörden de bahsetmek istiyorum. Tüm transistörlerin C,B,E bacakları standart değildir. O yüzden devreyi tamamlerken sağdaki resme bir göz atmanızda fayda görüyorum. Ben ilk seferde transistörü ters taktım ne yazık ki :D ve  transistör o kadar çok ısındı ki elimi yaktım. O yüzden dikkat !





ARDUINO ile DEVRE BAĞLANTISI
Arduino ile sadece motoru yavaşlatıp hızlandırmayacağız. Analog girişe taktığımız potansiyometre değerine göre motorumuzu süreceğiz ve bu işi en kısa yoldan yapmamızı sağlayan bir kod da öğrenmiş olacağız, map.
"map" komutu ile istediğimiz bir çıkış değerini, bağlı olan giriş değerine göre anında değiştirebiliriz.Örnek vermek gerekirse ki bu kodu motor sürme devremizde de kullandık;

motordegeri = map(potdegeri, 0, 1023, 0, 255);

Bu yukardaki kod ile "motordegeri" isimli değerimizi, potun durumuna bağlı kıldık ve okunan analog değeri 10 bit ile sayısal değere çevirdik ve bunu da çıkışa 8 bit olarak yansıttık. Bu sayede motorumuzun hızını potansiyometrenin değeri ile kontrol edebiliyoruz.

Devreyi kurarken motoru harici bir pil ya da adaptör ile sürmenizde fayda var yoksa motoru arduino üzerinden süremezsiniz. Kodlarımız ;

int potPin = A0;
int motorPin = 3;
int potDegeri = 0;
int motorDegeri = 0;
void setup() {
 Serial.begin(9600);
}
void loop() {
 potDegeri = analogRead(potPin);  
 motorDegeri = map(potDegeri, 0, 1023, 0, 255);
 analogWrite(motorPin, motorDegeri);  
 Serial.print("Potansiyometre = " );     
 Serial.print(potDegeri);
 Serial.print("\t motor = ");
 Serial.println(motorDegeri);
 delay(2);    

}

Devreyi çalıştıtırken Seri Haberleşme Monitörüne bakmayı da ihmal etmeyin :).
Bu da devremizin son halinin resmi ve videosu.