arduino etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
arduino etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

     Projelerle arduino ve proteus serisine başlamaya karar verdim. Çünkü, bu şekilde hem proteus hem de arduino beraber kolaylıkla öğrenilebilecektir. 

    Hadi ilk bölüme başlayalım

Proteus da Arduino ile Led Yakma


    Öncelikle proteus'a arduino kütüphanesinin eklenmiş olmalıdır. Ben arduino kütüphanesinin ekli olduğunu varsayarak devam edeceğim.

    Proteus da devremizi kurmak ile başlayalım. 

    Arduino uno, bir direnç ve bir led'e ihtiyacımız vardır. Gerekli olan kompanentleri eklediğimizde devremiz aşağıdaki gibi olacaktır.


    Arduinonun 9 numaralı pinine direncimizi bağlayacağız. Ve hemen ardına ledimizi bağlayacağız. Devrenin tamamlanması için ground bağlantısını da yapmamız gerekmektedir.


Arduino kodumuz ise:

int led = 9;

void setup() {

  pinMode(led,OUTPUT);

}


void loop() {

  digitalWrite(led,HIGH);

  delay(1000);

  digitalWrite(led,LOW);

  delay(1000);

}

    Bu kodda int led = 9; ile adı led olan bir değişken tanımlanmaktadır ve değeri de 9 olarak atanmıştır. Bu bizim arduino da ledmizi bağladığımızı pini temsil etmektedir. 

pinMode(led,OUTPUT); ile 9 numaralı olan pinimizi OUTPUT olarak yani çıkış olarak tanımlamış olduk.

digitalWrite(led,HIGH); ile 9 numaralı pine 5 V verdik yani 9 numaralı pinin çıkışını lojik 1 yaptık.

delay(1000); ile 1 saniye bekledik.

digitalWrite(led,LOW); ile 9 numaralı pinin çıkışını lojik 0 yaptık yani 9 numaralı pine 0 V verdik.


    Bu şekilde 9 numaralı pine bağlı olan led 1 saniye yandıktan sonra 1 saniye de sönecektir.


    Yazdığımız bu kodu arduino ya yüklemek için, kodun .hex uzantılı dosyasına ihtiyacımız vardır. Bu dosyayı elde edebilmek için ise; arduino da Dosya > Tercihler bölümüne gelmemiz gerekmektedir. Burada; aşağıdaki işlem sırasında detaylı çıktı göster kısmındaki derleme ve yükle'nin seçili olması gerekmektedir.


    Bu işlemi yaptıktan sonra yazığımız kodu derleyelim. Derleme işlemini yaptıktan sonra teminalde .hex uzantılı dosya konumunu bulmamız gerekecektir. Bu dosya konumunu kopyalamamız lazım. Aşağıda gösterildiği gibidir.


    Kopyaladığımız bu .hex uzantılı olan dosya konumunu aşağıda işaretli olan alana yapıştıracağız.


    Bu işlemlerden sonra arduinoya kodumuz yüklenmiş olacaktır. Simülasyonu başlattığımızda doğru bir şekilde çalışacaktır.






 Arduino da bağlı ola iki LED'i farklı aralıklar ile yakacağız. Bir LED 1 saniye de 10 kere yanarken, diğer LED 1 saniye de 1 kere yaranacak.


Arduino'nun 2 ve 3 numaralı pinlerine LED'lerimizi bağlayacağız.


Devre Şeması:



Arduino Kodu:

int a = 0;

void setup() {

  // put your setup code here, to run once:

  pinMode(2,OUTPUT);

  pinMode(3,OUTPUT);

}


void loop() {

  // put your main code here, to run repeatedly:

  digitalWrite(2,1);

  delay(50);

  digitalWrite(2,0);

  delay(50);

  a++;

  if(a>5){

    digitalWrite(3,1);

  }

  if(a>10){

    a=0;

    digitalWrite(3,0);

  }

}

https://github.com/sumeyyevarmis/arduino-led-blink


https://create.arduino.cc/projecthub/sumeyye-varmis/arduino-2-led-blink-24c93c





Bu çalışmada, arduino da nextion ekran kullanarak hesap makinesi yapacağız.

Nextion Editor kullanarak arayüzümüzü tasarlayacağız. Ben bu uygulama için 2.8 inch ekranı kullandım.

Tasarlanan Arayüz



Devre






Arduino Kodu


#include "Nextion.h"

SoftwareSerial HMISerial(0, 1); // RX, TX

#define NETXION_PAGE_ID 0
#define NETXION_TEXT 1
#define NETXION_BUTTON_1 2
#define NETXION_BUTTON_2 3
#define NETXION_BUTTON_3 4
#define NETXION_BUTTON_4 5
#define NETXION_BUTTON_5 6
#define NETXION_BUTTON_6 7
#define NETXION_BUTTON_7 8
#define NETXION_BUTTON_8 9
#define NETXION_BUTTON_9 10
#define NETXION_BUTTON_0 11
#define NETXION_BUTTON_ENTER 12
#define NETXION_BUTTON_CL 13
#define NETXION_BUTTON_Plus 14
#define NETXION_BUTTON_Moins 15
#define NETXION_BUTTON_Mul 16
#define NETXION_BUTTON_Div 17

NexButton Button_0  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_0, "Btn0");
NexButton Button_1  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_1, "Btn1");
NexButton Button_2  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_2, "Btn2");
NexButton Button_3  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_3, "Btn3");
NexButton Button_4  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_4, "Btn4");
NexButton Button_5  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_5, "Btn5");
NexButton Button_6  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_6, "Btn6");
NexButton Button_7  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_7, "Btn7");
NexButton Button_8  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_8, "Btn8");
NexButton Button_9  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_9, "Btn9");
NexButton Button_CL  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_CL, "BtnCL");
NexButton Button_ENTER  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_ENTER, "BtnEnter");
NexButton Button_Plus  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_Plus, "BtnPlus");
NexButton Button_Moins  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_Moins, "BtnMoins");
NexButton Button_Mul  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_Mul, "BtnMul");
NexButton Button_Div  = NexButton(NETXION_PAGE_ID, NETXION_BUTTON_Div, "BtnDiv");

NexText Text = NexText(NETXION_PAGE_ID, NETXION_TEXT, "Text");

 
NexTouch *nex_listen_list[] = 
{
    &Button_0,
    &Button_1,
    &Button_2,
    &Button_3,
    &Button_4,
    &Button_5,
    &Button_6,
    &Button_7,
    &Button_8,
    &Button_9,
    &Button_CL,
    &Button_ENTER,
    &Button_Plus,
    &Button_Moins,
    &Button_Mul,
    &Button_Div,
    NULL
};

unsigned char N_Str[10]={0}, i=0, Affichage[10];
float Pile[4]={0}, N; 

void button_0_Callback(void *ptr)
{


  N_Str[i]='0';
  Text.setText(N_Str);
  i++;
}

void button_1_Callback(void *ptr)
{
  N_Str[i]='1';
  Text.setText(N_Str);
  i++;
}

void button_2_Callback(void *ptr)
{
  N_Str[i]='2';
  Text.setText(N_Str);
  i++;
}

void button_3_Callback(void *ptr)
{
  N_Str[i]='3';
  Text.setText(N_Str);  
  i++;
}

void button_4_Callback(void *ptr)
{
  N_Str[i]='4';
  Text.setText(N_Str);
  i++;
}

void button_5_Callback(void *ptr)
{
  N_Str[i]='5';
  Text.setText(N_Str);
  i++;
}

void button_6_Callback(void *ptr)
{
  N_Str[i]='6';
  Text.setText(N_Str); 
  i++;
}

void button_7_Callback(void *ptr)
{
  N_Str[i]='7';
  Text.setText(N_Str);
  i++;
}

void button_8_Callback(void *ptr)
{
  N_Str[i]='8';
  Text.setText(N_Str);
  i++;
}

void button_9_Callback(void *ptr)
{
  N_Str[i]='9';
  Text.setText(N_Str); 
  i++;
}


void button_CL_Callback(void *ptr)
{
  Text.setText("");
  
  //Remise à "0" de N_Str
  for(int b=0; b<10 ; b++) N_Str[b]=0;  

  //Remise à "0" de la pile
  for(int b=0; b<4 ; b++) Pile[b]=0; 
}

void button_Plus_Callback(void *ptr)
{
  N=atof(N_Str);
  //Décalage de la pile vers le haut
  if(N!=0)
  {
    Pile[3]=Pile[2];
    Pile[2]=Pile[1];
    Pile[1]=Pile[0];

    Pile[0]=N;
  }

  Pile[0] = Pile[0] + Pile[1];
  dtostrf(Pile[0],6,3, Affichage);
  Text.setText(Affichage); 

  Pile[1]=Pile[2];
  Pile[2]=Pile[3];
  Pile[3]=0;

  for(int b=0; b<10 ; b++) N_Str[b]=0;  
  i=0;
}

void button_Moins_Callback(void *ptr)
{
  N=atof(N_Str);

  if(N!=0)
  {
    Pile[3]=Pile[2];
    Pile[2]=Pile[1];
    Pile[1]=Pile[0];

    Pile[0]=N;
  }

  Pile[0] = Pile[1] - Pile[0];
  dtostrf(Pile[0],6,3, Affichage);
  Text.setText(Affichage); 

  Pile[1]=Pile[2];
  Pile[2]=Pile[3];
  Pile[3]=0;

  for(int b=0; b<10 ; b++) N_Str[b]=0;  
  i=0;
}

void button_Mul_Callback(void *ptr)
{
  N=atof(N_Str);

  if(N!=0)
  {
    Pile[3]=Pile[2];
    Pile[2]=Pile[1];
    Pile[1]=Pile[0];

    Pile[0]=N;
  }

  Pile[0] = Pile[0] * Pile[1];
  dtostrf(Pile[0],6,3, Affichage);
  Text.setText(Affichage); 

  Pile[1]=Pile[2];
  Pile[2]=Pile[3];
  Pile[3]=0;

  for(int b=0; b<10 ; b++) N_Str[b]=0;  
  i=0;
}

void button_Div_Callback(void *ptr)
{
  N=atof(N_Str);
  
  if(N!=0)
  {
    Pile[3]=Pile[2];
    Pile[2]=Pile[1];
    Pile[1]=Pile[0];

    Pile[0]=N;
  }

  Pile[0] = Pile[1] / Pile[0];
  dtostrf(Pile[0],6,3, Affichage);
  Text.setText(Affichage); 

  Pile[1]=Pile[2];
  Pile[2]=Pile[3];
  Pile[3]=0;

  for(int b=0; b<10 ; b++) N_Str[b]=0;  
  i=0;
  
}

void button_Enter_Callback(void *ptr)
{
 
  Pile[3]=Pile[2];
  Pile[2]=Pile[1];
  Pile[1]=Pile[0];


  Pile[0]=atof(N_Str);

  Text.setText("");

  for(int b=0; b<10 ; b++) N_Str[b]=0;  
  i=0;
}



void setup() {

  nexInit();

  Button_0.attachPush(button_0_Callback, &Button_0);
  Button_1.attachPush(button_1_Callback, &Button_1);
  Button_2.attachPush(button_2_Callback, &Button_2);
  Button_3.attachPush(button_3_Callback, &Button_3);
  Button_4.attachPush(button_4_Callback, &Button_4);
  Button_5.attachPush(button_5_Callback, &Button_5);
  Button_6.attachPush(button_6_Callback, &Button_6);
  Button_7.attachPush(button_7_Callback, &Button_7);
  Button_8.attachPush(button_8_Callback, &Button_8);
  Button_9.attachPush(button_9_Callback, &Button_9);
  Button_CL.attachPush(button_CL_Callback, &Button_CL);
  Button_ENTER.attachPush(button_Enter_Callback, &Button_ENTER);
  Button_Plus.attachPush(button_Plus_Callback, &Button_Plus);
  Button_Moins.attachPush(button_Moins_Callback, &Button_Moins);
  Button_Mul.attachPush(button_Mul_Callback, &Button_Mul);
  Button_Div.attachPush(button_Div_Callback, &Button_Div);
  
}

void loop() {
    nexLoop(nex_listen_list);

}








Arduino da nextion ekranı kullanarak led yakma ve led söndürme uygulaması gerçekleştireceğiz. Nextion ekran kullanacağımız için Nextion Editor uygulamasını indirmemiz gerekmektedir. Bu uygulama sayesinde ekranımız için istediğimiz arayüzü tasarlayabileceğiz. Basit bir ara yüze sahiptir.

Nextion Editor indirmek için aşağıdaki linkten ulaşabilirsiniz:

https://nextion.tech/nextion-editor/

Bu uygulama da 2.8 inch ekran kullanılmıştır. 

Tasarlanan Arayüz


Arduino Kodu:


#include "Nextion.h"
#include <SoftwareSerial.h>

SoftwareSerial HMISerial(0,1);

// b0 led on, b1 led off

NexDSButton b0 = NexDSButton(0,1,"b0");// sayfa, id, isim
NexDSButton b1 = NexDSButton(0,2,"b1");
NexText t0 = NexText(0,3,"t0");

// butonların durumları
uint32_t led_on = 0;
uint32_t led_off = 0;

const int led = 13;

void setup(){
  dbSerialPrintln("setup begin");
  nexInit();
  dbSerialPrintln("stup done");

  pinMode(led,OUTPUT);
}

void loop(){
  b0.getValue(&led_on);
  b1.getValue(&led_off);

  delay(200);
  if(led_on == 1){
    t0.setText("Led On");
    digitalWrite(led,HIGH);
  }
  if(led_off == 1){
    t0.setText("Led Off");
    digitalWrite(led, LOW);
  }
}



Kod ve ekran arayüz tasarımına aşağıdaki linkten ulaşabilirsiniz:


 Arduinoya bağlanan bir butona ne kadar süre basıldığını bulmak için millis() fonksiyounu kullanılır. Millis() fonksiyonu, arduinoya enerji verildiği zaman otomatik olarak çalışmaya başlar. Bulunan zaman değeri milisaniye cinsindendir. 


Devre şeması:



Arduino kodu:

const int button = 3;

unsigned long time1 = 0;

unsigned long time2 = 0;

void setup()

{

  pinMode(button,INPUT);

  Serial.begin(9600);

}


void loop()

{

  while(digitalRead(button)==0){}

  while(digitalRead(button)==1){}

  Serial.println(digitalRead(button));

  

  while(digitalRead(button)==0){

    Serial.println("while 1");

    Serial.println(digitalRead(button));

  }

  time1 = millis();

  while(digitalRead(button)==1){ 

    Serial.println("while 2");

    Serial.println(digitalRead(button));

  }

  time2 = millis() - time1;

  

  Serial.println(time2);

  delay(1000);

  

}



 Kara şimşek veya kayan led olarak da bilinen arduino projesini gerçekleştirdik. Bu devrede toplam 9 tane led kullanılmıştır ve aynı miktarda 330 ohm direnç kullanılarak yaptık.


Devre şeması aşağıda görüldüğü gibidir.



Arduino kodu:

const int led[] ={2,3,4,5,6,7,8,9,10};

void setup() {
  // put your setup code here, to run once:
for(int i = 0; i<9; i++){
  pinMode(led[i],OUTPUT);
}
}

void loop() {
  // put your main code here, to run repeatedly:
for(int i = 0; i<9 ; i++){
  digitalWrite(led[i],HIGH);
  delay(50);
  digitalWrite(led[i],LOW);
}

for(int i = 8; i>=0; i--){
  digitalWrite(led[i],HIGH);
  delay(50);
  digitalWrite(led[i],LOW);
}
}


Devrenin çalışır haldeki videosu:


github :
https://github.com/one-engineer/kara-simsek

instagram:
https://www.instagram.com/onengineer/







       Proteus'a Arduino kütüphanesi eklemek için aşağıdaki adımları sırasıyla uygulayalım ;

1) Aşağıdaki linkte bulunan dosyayı bilgisayarımıza indirelim.

https://www.theengineeringprojects.com/downloads?file=31937
    


2) İndirilen zip dosyasında bulunan belgeler aşağıdaki gibidir.





3)   Zip dosyalarını çıkartmamız gerekmektedir. Aşağıdaki resimde de görmektesiniz.





4) Zip dosyalarını çıkarttıktan sonra bu dosyaları kopyalayacağız.



5) Bu dosyayı kopyaladıktan sonra Proteus'un kütüphane dosyasına yapıştırmamız lazım.
 

  •    Proteus 7 kullanıyorsak : C:\Program Files\Labcenter Electronics\Proteus 7 Professional\LIBRARY 

  • Proteus 8 kullanıyorsak : C:\ProgramData\LabcenterElectronics\Proteus 8 Professional\LIBRARY 

  • C:\Program Files\Labcenter Electronics\Proteus 8 Professional\LIBRARY 

  •   Sistemimiz 64 bit ise:  C:\Program Files(x86)\Labcenter Electronics\Proteus 8 Professional\LIBRARY 

   dizinlerinden uygun olanı izleyip, kopyaladığımız dosyayı yapıştırıyoruz.

6) Yukarıdaki işlemleri tamamladıktan sonra Proteus'a kütüphanemizi yüklemiş oluyoruz.



İnstegram Hesabı : https://www.instagram.com/onengineer/?hl=tr




  




Mikrodenetleyici(Microcontroller-MCU) Nedir ?


     

       
Mikrodenetleyici , çevresel arabirimlerden veye sensörlerden alınan harici işaretleri girdi olarak alıp, işleyen ve sistem kararlarını kullanıcının anladığı bir ortamda sunan bir elektronik devre elemanıdır. Başka bir tanıma göre ise mikrodenetleyici , özel bir elektronik sistem veya bir cihazın fonksiyon ve davranışlarını kontrol etmede beyin işlevi gören bir entegre devredir.


     

Arduino Nedir?


Açık kaynak kodlu yazılım ve donanıma sahip bir mikrodenetleyici platformudur. Baskılı devresi sayesi, şematik tasarımı, bilgisayar üzerinde çalışan derleyicisi, kütüphaneleri ve tüm detayları ile İnternet ortamında paylaşılmaktadır. Tamamen açık donanımlı olmasından dolayı farklı firmalarda Arduino ismini kullanmamaları koşulu ile aynı ürün klonlarını yapabilirler. Arduino donanımsal olarak Wiring, yazılımsal (IDE) olarak ise Processing dili tabanlıdır.


                                                                    Arduino - Orjinal



                                                                      Arduino - Klon




    Wiring : 
Tek bir MCU bordu , bir IDE ve bir programlama dilinin birleşiminden oluşan açık kaynak kodlu elektronik prototip geliştirme platformudur.

    Processing : Özellikle, sanatçılara yönelik olarak grafiksel uygulamalar için kolay programlama ortamını hedefleyen bir dildir.



Arduino İle Neler Yapılır ?


Arduino, sensör/duyarga girişlerinden aldığı veriyi okur, işler ve çıktı olarak bir eyleme dönüştürür.


Arduino Platformunu Oluşturan Temel Bileşenler 



Besleme Devresi ve Güç (Power) Birimi : 
Arduino, hem USB aracılığıyla hem de dahili güç girişi bağlantısıyla enerjilendirilebilir. Harici enerji girişinden hem AC'den DC'ye dönüşüm yapan adaptörler ile hem de batarya ile karta enerji verilebilir.


Güç pinleri, Arduino kartları üzerinde sayısı değişmekle birlikte 3.3V, 5V, GND, Vin ve Reset isimleri ile yer almaktadır.







  • Vin Pini : Arduino kartına harici bir güç kaynağı bağlandığı zaman kullanılan bir gerilim girişidir.
  • 5V Pini : Bu pin ile Arduino kartındaki dahili doğrultucu devresinden 5V çıkış gerilimi elde edilir. Kart harici bir adaptör ile Vin pininden ya da USB'den beslendiğinde bu pinden 5V çıkışı alınabilmektedir.
  • 3.3V Pini : Kart üzerinde bulunan doğrultucu devre sayesinde kartı herhangi bir güç girişinden beslediğinizde 3.3V pininden 3.3V ve 50 mA çıkış alabilirsiniz. Bu pin sadece çıkış içindir ve bu pinden 3.3V vererek kartı besleyemezsiniz. 
  • GND(Şase) Pini : 0V referans voltajı yani bildiğiniz toprak/şase (Ground/GND) pinidir.




   Arduino Uno Donanımsal Özellikleri 


Atmega328 mikrodenetleyicisi ailesini temel alan bir mikrodenetleyici kartıdır. Toplamda 14 tane dijital giriş çıkış portuna sahiptir ve bunlardan 6 tanesi PWM çıkış olarak kullanılmaktadır. Arduino Uno; Atmega328 mikrodenetleyicisine, 14 adet dijital giriş/çıkış pinine, 6 adet analog girişe,16 MHz kristal'e, 32 KB program hafızasına, 1KB EEPROM hafızasına, 2KB SRAM'e, 1 adet USB girişine, birer adet besleme ve reset devresine sahiptir.

Arduino Uno, çevresel arabirimlerle haberleşmek için UART,SPI gibi seri haberleşme protokollerini kullanır. Atmega328 UART TTL (5V) seri iletişimini RX ve TX (0 ve 1 no'lu bacaklar) ile sağlar. Haberleşmenin gerçekleştiğini Arduino board üzerinde bulunan RX, TX LED'lerinin yanıp sönmesinden anlayabilirsiniz.



Hafıza Birimi : 
Arduino Uno üzerinde bulunan Atmega328 mikrodenetleyicisi 32 KB lık hafızaya sahiptir. Aynı zamanda bu mikrodenetleyici 2 KB SRAM ve EEPROM kütüphanesinden hem yazılabilen hem de okunabilen 1 KB EEPROM'a sahiptir.

Giriş ve Çıkış (I/O) Pinleri : Arduino Uno üzerindeki 14 dijital pinden her biri giriş hem de çıkış olarak kullanılabilir. Her biri 5V ile çalışır ve 40 mA akım çekerler.

Seri Haberleşme(RX/TX) Pinleri : TTL seri veri haberleşmesi için kullanılır. 0. pin (RX) alıcı, 1. pin (TX)  ise verici olarak kullanılır. Böylece, istenen veriler alınır ve iletilir.

 

PWM (3,5,6,9,10,11) Pinleri : 8 bit PWM (Darbe genişlik modulasyonu) çıkış sağlayan pinlerdir. PWM özelliği daha çok sayısal analog dönüşüm işlemlerinde kullanılır. Motor hız kontrolü, bir LED'in yanma şiddetini ayarlamak gibi işlemler buna örnek olarak verilebilir.

SPI (10,11,12,13) Pinleri : SPI kütüphanesini kullanarak SPI haberleşmesini sağlayan pinlerdir.

Analog (A0-A5) Pinleri : Arduino Uno, A0'dan A5'e kadar 6 adet analog pin girişine sahiptir. Her biri 10 bitlik çözünürlüğe sahiptir. Yani 1024 farklı değer elde edilebilir.

12C/TWI Pinleri : Arduino Uno, 12C seri veri haberleşmesinde A5 pini SCL(saat), A4 pini ise SDA(veri) hattı olarak kullanılır.




Kaynak : 
Derinlemesine Arduino / Bülent Çobanoğlu (Abaküs Yayınları)