dominoFiber     domiRobot     Blog

 
Hoşgeldiniz Ziyaretçi. Lütfen giriş yapın veya kayıt olun.

Kullanıcı adınızı, şifrenizi ve aktif kalma süresini giriniz

İletileri Göster

Bu özellik size üyenin attığı tüm iletileri gösterme olanağı sağlayacaktır . Not sadece size izin verilen bölümlerdeki iletilerini görebilirsiniz


Konular - Hasan ERTURK

Sayfa: [1] 2 3 4
1
domiRobot projeleri / Boy ölçer
« : Mart 23, 2019, 11:48:00 ÖÖ »
Arduino Boy Ölçer Uygulaması
Bu projemizde HC SR-04 mesafe sensörü kullanarak boy ölçer yapacağız. Boy bilgisi 16x2 lcd ekranda görüntülenecektir.

Amaç
Boy ölçer yapma becerisi kazanmak.

Seviye:
Orta seviye


Şema 1: Boy ölçer fritzing devre şeması

Arduino kodları
Kod: [Seç]
#include <LiquidCrystal.h>                // likid kristal kutuphanesi eklendi
LiquidCrystal lcd(8,9,4,5,6,7);           // likid kristal pinleri
#define echoPin 2                         // eko pini D2
#define trigPin 3                         // tetik pini D3
#define buton 13                          // buton pini D13
long sure, kalibre_mesafesi, cisim_ile_sensor_arasindaki_mesafe, boy;

void setup()
{
  pinMode(echoPin, INPUT);
  pinMode(trigPin,OUTPUT);
  acilis_iletisi();
  kalibre_et();
}

void loop()
{
  olcumu_baslat();
  if(digitalRead(buton) == 1)
  {
    olcum_yap();
    sure_hesapla();
    cisim_ile_sensor_arasindaki_mesafeyi_hesapla();
    boy_hesapla();   
  }
}

void acilis_iletisi()
{
  lcd.begin(16,2);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("BOY OLCER       ");
  lcd.setCursor(0,1);
  lcd.print("4006 BiLiM FUARI");
  delay(1500); 
}

void kalibre_et()
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin,LOW);
  sure = pulseIn(echoPin, HIGH);
  kalibre_mesafesi = sure / 29.1 / 2;
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("KALiBRASYON");
  lcd.setCursor(0,1);
  lcd.print("YAPILDI");
  delay(1000);
}

void olcumu_baslat()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("BOYUNUZU OLCMEK");
  lcd.setCursor(0,1);
  lcd.print("iCiN BUTON BASIN");
  delay(200);   
}


void olcum_yap()
{
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("BOYUNUZ");
    lcd.setCursor(0,1);
    lcd.print("OLCULUYOR");   
    delay(1000); 
    digitalWrite(trigPin, LOW);
    delayMicroseconds(5);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin,LOW);       
}


void sure_hesapla()
{
  sure = pulseIn(echoPin, HIGH);                          // Eko pini 5V gelmesinden itibaren süre ölç sure degiskenine kaydet
}


void cisim_ile_sensor_arasindaki_mesafeyi_hesapla()
{
  cisim_ile_sensor_arasindaki_mesafe = sure / 29.1 / 2;       
}


void boy_hesapla()
{
  boy = kalibre_mesafesi - cisim_ile_sensor_arasindaki_mesafe;
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("BOYUNUZ ");
  lcd.print(boy);
  lcd.print(" cm ");
  lcd.setCursor(0,1);
  lcd.print("OLARAK OLCULDU  ");   
  delay(5000);       
}

Malzeme listesi

Download
İhtiyaç duyulması halinde projeye ait dosyaları buraya tıklayıp indirebilirsiniz.

2
Mekatronik / RTC I2C tarih saat güncelleme
« : Mart 10, 2019, 09:24:11 ÖÖ »
 

İşlem Basamakları:
1. RTC bağlantısı yukarıdaki resimde görüldüğü gibi yapılır.
2. RTC kütüphanesi eklenir.
3. Aşağıdaki kodlamada bulunan 25. satırdaki tarih ve saat bilgisi güncellenerek kodlar yüklenir.
Kod: [Seç]
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

void setup () {
  Serial.begin(9600);
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();

 // if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    Serial.println((__DATE__, __TIME__));
    // following line sets the RTC to the date & time this sketch was compiled
   // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
   rtc.adjust(DateTime(__DATE__, __TIME__)); //yes - I want it to adjust to compile time
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
     rtc.adjust(DateTime(2019, 3, 10, 9, 54, 0));
// }
}

void loop () {
    DateTime now = rtc.now();
   
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
   
    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");
   
    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now.unixtime() + 7 * 86400L + 30);
   
    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();
   
    Serial.println();
    delay(3000);
}

3
Arduino / Arduino ide dark tema
« : Ocak 03, 2019, 10:01:57 ÖÖ »
Arduino idesinin göz yorucu temasından sıkılanlar için bir alternatif.

Kurulum için işlem basamakları:
1. github.com sitesinden ya da konu ekinden temayı indirin.

2. Arduinonun default (varsayılan) teması C:\Program Files (x86)\Arduino\lib yolunda theme isimli klasörde bulunur. Bu klasörün ismini değiştirin. örneğin theme_eski gibi.

3. İndirmiş olduğunuz zipli dosyayı masa üstüne çıkarın. DarkArduinoTheme-master isimli klasörün içindeki theme isimli klasörü C:\Program Files (x86)\Arduino\lib içerine bırakın.

Tema değişimi tamamlandı. Güle güle kullanın.

 

4
Çocuklar için / 3. S4A led buton uygulaması
« : Ekim 18, 2018, 09:44:50 ÖÖ »
Bu projemizde dijital 2 pinine bağlı butona basıldığında dijital 10. pine bağlı ledi yakan devreyi yapacağız. Buton bırakıldığında led sönecektir.

Devre şeması:

Fritzing devre şeması

Kod blokları

S4A kod blokları

Malzeme listesi


5
Çocuklar için / 2. S4A Blink
« : Ekim 16, 2018, 06:28:57 ÖS »
Bu devreyi tamamladığınızda video 1'de görüldüğü gibi 2 adet ledin 0,5 saniye aralıklarla sırayla yanıp söndüğünü gözlemleyeceksiniz.

<a href="http://www.youtube.com/watch?v=IFhCvwcWqYg" target="_blank">http://www.youtube.com/watch?v=IFhCvwcWqYg</a>
Video 1: S4A Blink

Devremizi fotoğraf 1 ve şema 1'de görüldüğü gibi kuruyoruz.


Şema 1: Frtitzing devre şeması


Fotoğraf 1: Devrenin tamamlanmış hali

Program blogları resim 1'de görüldüğü gibi S4A programını kullanarak hazırlanır.

 
Resim 1: S4A blokları

Malzeme listesi


6
Çocuklar için / 1. Kod yazmadan arduino programlayın
« : Ekim 16, 2018, 06:25:08 ÖS »
Herhangi bir programlama dili bilmeden tamamen görsel olarak Arduino programlayabilirsiniz. programlamaya başlamadan önce bir ön hazırlığımız olacak. Aşağıdaki açıklamaları takip ederek ön bilgilenmeyi tamamladıktan sonra kod yazmadan arduino programlamaya başlayabilirsiniz.

Scracth Nedir?

Scratch yazılım geliştirme platformu ve programlama dili çocukların bilgisayar programlamaya ilk adımları atmalarını sağlamak amacıyla geliştirilmiştir.


S4A Nedir?
S4A programı Scratch tabanlı bir programlama dilidir. İçerisinde Arduino’yu kontrol etmemizi sağlayan bazı programlama blokları bulunur. Bu program blokları sayesinde kod yazmadan tamamen görsel olarak Arduino’yu programlayabilirsiniz. Programınızı bloklar halinde yazıyor olmanız dışında S4A’nın Türkçe dil desteğinin olması programlamaya ayrı bir kolaylık getiriyor.

Programın avantajlarından birisi ise yalnızca bilgisayardan veri gönderme değil aynı zamanda Arduino’dan gelen verileri de okuyabiliyorsunuz. Bu sayede daha zengin programlar yazabilirsiniz.


Öncelikle buraya tıklayarak Arduino’nun yazılımını indirmelisiniz.

Ardından aşağıdaki kodları bir defaya mahsus arduinoya yüklemeniz gerekiyor.

Kod: [Seç]
typedef enum {
  input, servomotor, pwm, digital }
pinType;

typedef struct pin {
  pinType type;       //Type of pin
  int state;         //State of an output
  //byte value;       //Value of an input. Not used by now. TODO
};

pin arduinoPins[14];  //Array of struct holding 0-13 pins information

unsigned long lastDataReceivedTime = millis();

void setup()
{
  Serial.begin(38400);
  Serial.flush();
  configurePins();
  resetPins();
}

void loop()
{
  static unsigned long timerCheckUpdate = millis();

  if (millis()-timerCheckUpdate>=20)
  {
    sendUpdateServomotors();
    sendSensorValues();
    timerCheckUpdate=millis();
  }

  readSerialPort();
}

void configurePins()
{
  arduinoPins[0].type=input;
  arduinoPins[1].type=input;
  arduinoPins[2].type=input;
  arduinoPins[3].type=input;
  arduinoPins[4].type=servomotor;
  arduinoPins[5].type=pwm;
  arduinoPins[6].type=pwm;
  arduinoPins[7].type=servomotor;
  arduinoPins[8].type=servomotor;
  arduinoPins[9].type=pwm;
  arduinoPins[10].type=digital;
  arduinoPins[11].type=digital;
  arduinoPins[12].type=digital;
  arduinoPins[13].type=digital;
}

void resetPins() {
  for (byte index=0; index <=13; index++)
  {
    if (arduinoPins[index].type!=input)
    {
      pinMode(index, OUTPUT);
      if (arduinoPins[index].type==servomotor)
      {
        arduinoPins[index].state = 255;
        servo (index, 255);
      }
      else
      {
        arduinoPins[index].state=0;
        digitalWrite(index,LOW);
      }
    }
  }
}

void sendSensorValues()
{
  unsigned int sensorValues[6], readings[5];
  byte sensorIndex;

  for (sensorIndex = 0; sensorIndex < 6; sensorIndex++) //for analog sensors, calculate the median of 5 sensor readings in order to avoid variability and power surges
  {
    for (byte p = 0; p < 5; p++)
      readings[p] = analogRead(sensorIndex);
    insertionSort(readings, 5); //sort readings
    sensorValues[sensorIndex] = readings[2]; //select median reading
  }

  //send analog sensor values
  for (sensorIndex = 0; sensorIndex < 6; sensorIndex++)
    ScratchBoardSensorReport(sensorIndex, sensorValues[sensorIndex]);

  //send digital sensor values
  ScratchBoardSensorReport(6, digitalRead(2)?1023:0);
  ScratchBoardSensorReport(7, digitalRead(3)?1023:0);
}

void insertionSort(unsigned int* array, unsigned int n)
{
  for (int i = 1; i < n; i++)
    for (int j = i; (j > 0) && ( array[j] < array[j-1] ); j--)
      swap( array, j, j-1 );
}

void swap(unsigned int* array, unsigned int a, unsigned int b)
{
  unsigned int temp = array[a];
  array[a] = array[b];
  array[b] = temp;
}

void ScratchBoardSensorReport(byte sensor, int value) //PicoBoard protocol, 2 bytes per sensor
{
  Serial.write( B10000000
    | ((sensor & B1111)<<3)
    | ((value>>7) & B111));
  Serial.write( value & B1111111);
}

void readSerialPort()
{
  byte pin;
  int newVal;
  static byte actuatorHighByte, actuatorLowByte;
  static byte readingSM = 0;

  if (Serial.available())
  {
    if (readingSM == 0)
    {
      actuatorHighByte = Serial.read();
      if (actuatorHighByte >= 128) readingSM = 1;
    }
    else if (readingSM == 1)
    {
      actuatorLowByte = Serial.read();
      if (actuatorLowByte < 128) readingSM = 2;
      else readingSM = 0;
    }

    if (readingSM == 2)
    {
      lastDataReceivedTime = millis();   
      pin = ((actuatorHighByte >> 3) & 0x0F);
      newVal = ((actuatorHighByte & 0x07) << 7) | (actuatorLowByte & 0x7F);

      if(arduinoPins[pin].state != newVal)
      {
        arduinoPins[pin].state = newVal;
        updateActuator(pin);
      }
      readingSM = 0;
    }
  }
  else checkScratchDisconnection();
}

void reset() //with xbee module, we need to simulate the setup execution that occurs when a usb connection is opened or closed without this module
{
  resetPins();        // reset pins
  sendSensorValues(); // protocol handshaking
  lastDataReceivedTime = millis();
}

void updateActuator(byte pinNumber)
{
  if (arduinoPins[pinNumber].type==digital) digitalWrite(pinNumber, arduinoPins[pinNumber].state);
  else if (arduinoPins[pinNumber].type==pwm) analogWrite(pinNumber, arduinoPins[pinNumber].state);
}

void sendUpdateServomotors()
{
  for (byte p = 0; p < 10; p++)
    if (arduinoPins[p].type == servomotor) servo(p, arduinoPins[p].state);
}

void servo (byte pinNumber, byte angle)
{
  if (angle != 255)
    pulse(pinNumber, (angle * 10) + 600);
}

void pulse (byte pinNumber, unsigned int pulseWidth)
{
  digitalWrite(pinNumber, HIGH);
  delayMicroseconds(pulseWidth);
  digitalWrite(pinNumber, LOW);
}

void checkScratchDisconnection() //the reset is necessary when using an wireless arduino board (because we need to ensure that arduino isn't waiting the actuators state from Scratch) or when scratch isn't sending information (because is how serial port close is detected)
{
  if (millis() - lastDataReceivedTime > 1000) reset(); //reset state if actuators reception timeout = one second
}



Bu sayede S4A programı ile Arduino arasında ilk haberleşmeyi sağlayacaksınız. S4A programının Arduino’nuzu tanıması için S4AFirmware16 isimli programı Arduino’ya atmanız gerekiyor. Sonrasında bu işlemi tekrarlamanıza gerek yok.

S4A’yı buraya tıklayarak indirebilirsiniz. S4A programının kurduktan sonra aşağıda ki görüntü ile karşılaşacaksınız.


Sol tarafta ki program bloklarını kullanarak programınızı oluşturabilir ve Arduino’da çalışmasını sağlayabilirsiniz. S4A ile programlamaya hemen başlayın !

7
Robot kitleri / Orjinal Arduino Robot Araba Kiti - Bluetooth
« : Ağustos 03, 2018, 10:04:59 ÖÖ »
Not: Bu pakette Orjinal Arduino Uno bulunmaktadır.

Bluetooth kontrolllü robot araba setidir.

 
 
 
Paket İçeriği:
 
Orjinal Arduino Uno Smd R3 - Usb Kablo Dahil Değildir.
HC-SR04 Ultrasonic Sensör
HC-SR04 Tutucu
40Pin Dişi-Dişi Jumper Kablosu L:20cm
L298 DC ve Step Motor Sürücü
HC05 Bluetooth Modül
2WD Robot Araba Kiti

Satın almak için buraya tıklayınız.

8
Robot kitleri / Arduino Robot Araba Kiti - Wifi
« : Ağustos 03, 2018, 10:02:42 ÖÖ »
Wifi kontrolllü robot araba setidir.

 


 

 
Paket İçeriği:
 
Arduino UNO R3 (USB Chip CH340) Klon
USB Kablo
HC-SR04 Ultrasonic Sensör
HC-SR04 Tutucu
40Pin Dişi-Dişi Jumper Kablosu L:20cm
L298 DC ve Step Motor Sürücü
ESP8266 Seri Wifi Modül
2WD Robot Araba Kiti

Satın almak için buraya tıklayınız.

9
Robot kitleri / Arduino Robot Araba Kiti - Bluetooth
« : Ağustos 03, 2018, 10:00:48 ÖÖ »
Bluetooth kontrolllü robot araba setidir.
 
 

 
Paket İçeriği:
 
Arduino UNO R3 (USB Chip CH340) Klon
USB Kablo
HC-SR04 Ultrasonic Sensör
HC-SR04 Tutucu
40Pin Dişi-Dişi Jumper Kablosu L:20cm
L298 DC ve Step Motor Sürücü
HC05 Bluetooth Modül
2WD Robot Araba Kiti

Satın almak için buraya tıklayınız.

10
Robot kitleri / Maker Set - Arduino Dahil - Kitap Hediyeli
« : Ağustos 03, 2018, 09:57:38 ÖÖ »
Maker olmak isteyenler için eğitim seti.

- Arduino Hızlı Başlangıç Rehberi HEDİYE !!!
 
 


 

Paket İçeriği:
 
1 x Arduino Uno R3 CH340
1 x USB Kablo
1 x Breadboard
1 x Erkek-Erkek jumper kablo
1 x Dişi-Erkek jumper kablo
1 x Tower Pro SG90 9g RC Mini Servo Motor
1 x HC-SR04 Ultrasonik Mesafe Sensörü
2 x Potansiyometre 10k
5 x Buton 4 pinli
2 x LDR / Işık Sensörü
2 x Buzzer
10 x Kırmızı Led
10 x Sarı Led
10 x Yeşil Led
1 x LM35 Sıcaklık Sensörü
1 x HC06 Bluetooth Modül Kartı
2 x 6V 250rpm Motor ve Tekerlek Seti
1 x L298n Motor Sürücü
1 x Sarhoş teker
1 x 9v pil
1 x 9v Pil Başlığı - Jaklı
20 x 330ohm Direnç
10 x 1kohm Direnç
10 x 10kohm Direnç
1 x LCD Display  I2C -  Lehimli
1 x 2wd Araba Şase ve Vida Takımı
1 x Malzeme Kutusu

Satın almak için buraya tıklayınız.

11
Robot kitleri / 2WD Robot Araba Kiti - Renkli
« : Ağustos 03, 2018, 09:54:53 ÖÖ »
2WD Robot Araba Kiti'nde arkadan itişli robot araba yapmak için gerekli mekanik parçalar bulunmaktadır. Mekanik parçalar dışında sadece motor sürücü devresi ve bir kontrol kartı ile robot arabanızı kolaylıkla yapabilirsiniz. Araba gövdesinde bulunan vida delikleri ile gerekli ekipmanları monte edebilirsiniz.
 
 


 


 

 
Paket İçeriği
 
1 x Renkli araba gövdesi
2 x Tekerlek
1 x 360 derece dönebilir ön tekerlek
1 x Pil yuvası - 4lü kalem pil için
2 x 90 derece Redüktörlü motor

Montaj için gereken vidalar, somunlar, mesafe somunları ve anahtar

Satın almak için buraya tıklayınız.

12
Robot kitleri / Arduino Robot Araba Kiti - İleri Seviye
« : Ağustos 03, 2018, 09:49:19 ÖÖ »
İleri seviye robot araba setidir.
 
 

 

 
Paket İçeriği:
 
1 x Arduino Uno R3 CH340
1 x USB Kablo
1 x Breadboard
1 x 40pin Erkek-Erkek jumper kablo
1 x 40pin Dişi-Erkek jumper kablo
1 x HC-SR04 Ultrasonik Mesafe Sensörü
1 x LCD Display  I2C
3 x Potansiyometre
5 x Buton 4 pinli
10 x Kırmızı Led
10 x Sarı Led
10 x Yeşil Led
1 x Buzzer
1 x LM35 Sıcaklık Sensörü
1 x HC06 Bluetooth Modül Kartı
2 x DC Motor 6v
1 x L298n Motor Sürücü
1 x LDR / Işık Sensörü
20 x 220ohm Direnç
20 x 330ohm Direnç
20 x 1kohm Direnç
20 x 10kohm Direnç
1 x PIR Sensörü
1 x Yağmur Sensörü
1 x Toprak Nem Sensörü
1 x Ses Slgılama Sensörü
1 x Display
1 x Tower Pro SG90 9g RC Mini Servo Motor
1 x RC522 RFID NFC Kiti - RC522 RFID NFC Modülü, Kart ve Anahtarlık Kiti
1 x 9v Pil Başlığı
1 x Keypad 4x4
1 x Kızılötesi Uzaktan Kumanda Seti
1 x 2wd Araba Şase ve Vida Takımı
1 x 9v pil
1 x Joystick
1 x 5v 2 Kanal Röle Modülü
1 x Malzeme Kutusu

Satın almak için buraya tıklayınız.

13
domiRobot projeleri / DAGU 6WD IR Kontrol
« : Temmuz 24, 2018, 07:57:43 ÖÖ »
DAGU 6WD IR Kontrol
Bu projemizde arduino, SparkFun Monster Moto Shield ve Kızılötesi (Infared-IR) Alıcı Modülü kullanarak 2 motorun yön ve hız kontrolünü yapacağız.

Amaç
Amacımız kızılötesi alıcı verici modül ile 2 adet dc motorun yön ve hız kontrolünü yapabilme becerisini kazanmak.

Seviye
Orta seviye

<a href="http://www.youtube.com/watch?v=VhbKT00WULg" target="_blank">http://www.youtube.com/watch?v=VhbKT00WULg</a>
Video 1: Proje videosu

Teknik özellikler ve Uzaktan Kumanda Aletinin Kullanımı
Fotoğraf 1'de görülen uzaktan kumanda aletinin ileri, geri, sağ ve sol yön butonları ile motorlara yön verilir.

1 nolu butona basılmasıyla motorlar yavaş devirde (1. Vites), 2 nolu butona basılmasıyla orta hızda (2. Vites), 3 nolu butona basılmasıyla da maksimum devirde (3. Vites) hareket ederler. Motorların birinci vitesteki varsayılan default hızı devre üzerindeki potansiyometre ile ayarlanabilir.
 
Projemizde DAGU 6WD Arazi Robotu Platformu kullanacağız. Siz daha farklı platformlar ya da motorlar kullanabilirsiniz. Kullandığımız platformda üçerli iki grup halinde 6 adet dc motor bulunmaktadır. Her bir gruptaki motorlar birbirine paralel bağlıdır


Fotoğraf 1 : Uzaktan Kumanda Vericisi


Şema 1: Arduino bağlantı şeması

Malzeme listesi

Dagu 6WD arduino kodu
Kod: [Seç]
#define BRAKEVCC 0
#define CW   1
#define CCW  2
#define BRAKEGND 3
#define CS_THRESHOLD 100

int inApin[2] = {7, 4};  // INA: Clockwise input
int inBpin[2] = {8, 9}; // INB: Counter-clockwise input
int pwmpin[2] = {5, 6}; // PWM input
int cspin[2] = {2, 3}; // CS: Current sense ANALOG input
int enpin[2] = {0, 1}; // EN: Status of switches output (Analog pin)

int statpin = 13;
int IR_negatif_pin = 12;
int IR_pozitif_pin = 11;
#include <IRremote.h>
int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;

int hizPin = A2; // hiz potu A2 pinine baglanir
int hizValue = 0; // hizValue isminde değişken tanımlandı
int hiz=0; // hiz isminde değişken tanımlandı

void setup()
{
  Serial.begin(9600);
  pinMode(statpin, OUTPUT);
  pinMode(IR_negatif_pin, OUTPUT);
  pinMode(IR_pozitif_pin, OUTPUT);
  digitalWrite(IR_negatif_pin, LOW);
  digitalWrite(IR_pozitif_pin, HIGH);

  for (int i=0; i<2; i++)
  {
    pinMode(inApin[i], OUTPUT);
    pinMode(inBpin[i], OUTPUT);
    pinMode(pwmpin[i], OUTPUT);
  }

  for (int i=0; i<2; i++)
  {
    digitalWrite(inApin[i], LOW);
    digitalWrite(inBpin[i], LOW);
  }
   irrecv.enableIRIn();

}

void loop()
{
    if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);   

hizValue = analogRead(hizPin);
hiz= map(hizValue, 0, 1023, 50, 255);

birinci_vites ();
if(results.value == 0xFF9867) {ikinci_vites ();}
if(results.value == 0xFFB04F) {ucuncu_vites ();}
 

}



void birinci_vites()
{


if(results.value == 0xFF629D) {ileri_git ();}
if(results.value == 0xFF02FD) {dur ();}
if(results.value == 0xFFA857) {geri_git ();}
if(results.value == 0xFFC23D) {sag_don ();}
if(results.value == 0xFF22DD) {sol_don ();}
if(results.value == 0xFF9867) {ileri_git2 ();}
if(results.value == 0xFFB04F) {ileri_git3 ();}
if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
birinci_vites ();

}

void motorOff(int motor)
{
  // Initialize braked
  for (int i=0; i<2; i++)
  {
    digitalWrite(inApin[i], LOW);
    digitalWrite(inBpin[i], LOW);
  }
  analogWrite(pwmpin[motor], 0);
}


void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
{
  if (motor <= 1)
  {
    if (direct <=4)
    {
      // Set inA[motor]
      if (direct <=1)
        digitalWrite(inApin[motor], HIGH);
      else
        digitalWrite(inApin[motor], LOW);

      // Set inB[motor]
      if ((direct==0)||(direct==2))
        digitalWrite(inBpin[motor], HIGH);
      else
        digitalWrite(inBpin[motor], LOW);

      analogWrite(pwmpin[motor], pwm);
    }
  }
}

void translateIR() // takes action based on IR code received
{
  switch(results.value)
  {

  case 0xFF629D: 
    Serial.println(" ILERI            ");
    break;

  case 0xFFA857: 
    Serial.println(" GERI         ");
    break;

 case 0xFFC23D: 
    Serial.println(" SAG     ");
    break;
   
  case 0xFF22DD: 
    Serial.println(" SOL           ");
    break;

  case 0xFF02FD: 
    Serial.println(" DUR          ");
    break;

  case 0xFF6897: 
    Serial.println(" 1              ");
    break;

  case 0xFF9867: 
    Serial.println(" 2           ");
    break;

  case 0xFFB04F: 
    Serial.println(" 3           ");
    break;

  case 0xFF30CF: 
    Serial.println(" 4              ");
    break;

  case 0xFF18E7: 
    Serial.println(" 5              ");
    break;

  case 0xFF7A85: 
    Serial.println(" 6              ");
    break;

  case 0xFF10EF: 
    Serial.println(" 7              ");
    break;

  case 0xFF38C7: 
    Serial.println(" 8              ");
    break;

  case 0xFF5AA5: 
    Serial.println(" 9              ");
    break;

  case 0xFF42BD: 
    Serial.println(" *              ");
    break;

  case 0xFF4AB5: 
    Serial.println(" 0              ");
    break;

  case 0xFF52AD: 
    Serial.println(" #             ");
    break;

  default:
    Serial.println(" other button   ");

  }
} //END translateIR

void ileri_git()
{
  motorGo(0, CW, hiz);
  delay(300);
  motorGo(1, CCW, hiz);
  delay(300);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  birinci_vites ();
}

void dur()
{
  motorGo(0, CW, 0);
  motorGo(1, CW, 0);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  birinci_vites ();
}

void geri_git()
{
  motorGo(0, CCW, hiz);
  delay(300);
  motorGo(1, CW, hiz);
  delay(300);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  birinci_vites ();
}

void sol_don()
{
  motorGo(0, CCW, hiz);
  delay(300);
  motorGo(1, CCW, hiz);
  delay(300);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  birinci_vites ();
}

void sag_don()
{
  motorGo(0, CW, hiz);
  delay(300);
  motorGo(1, CW, hiz);
  delay(300);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  birinci_vites ();
}


void ikinci_vites()
{


if(results.value == 0xFF629D) {ileri_git2 ();}
if(results.value == 0xFFA857) {geri_git2 ();}
if(results.value == 0xFF02FD) {dur2 ();}
if(results.value == 0xFFC23D) {sag_don2 ();}
if(results.value == 0xFF22DD) {sol_don2 ();}
if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
if(results.value == 0xFF6897) {ileri_git ();}
if(results.value == 0xFFB04F) {ileri_git3 ();}
ikinci_vites ();

}

void ileri_git2()
{
  motorGo(0, CW, 100);
  delay(500);
  motorGo(1, CCW, 100);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ikinci_vites ();
}

void geri_git2()
{
  motorGo(0, CCW, 100);
  delay(500);
  motorGo(1, CW, 100);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ikinci_vites ();
}

void dur2()
{
  motorGo(0, CW, 0);
  motorGo(1, CW, 0);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ikinci_vites ();
}

void sol_don2()
{
  motorGo(0, CCW, 100);
  delay(500);
  motorGo(1, CCW, 100);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ikinci_vites ();
}

void sag_don2()
{
  motorGo(0, CW, 100);
  delay(500);
  motorGo(1, CW, 100);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ikinci_vites ();
}









void ucuncu_vites()
{


if(results.value == 0xFF629D) {ileri_git3 ();}
if(results.value == 0xFFA857) {geri_git3 ();}
if(results.value == 0xFF02FD) {dur3 ();}
if(results.value == 0xFFC23D) {sag_don3 ();}
if(results.value == 0xFF22DD) {sol_don3 ();}
if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
if(results.value == 0xFF6897) {ileri_git ();}
if(results.value == 0xFF9867) {ileri_git2 ();}
ucuncu_vites ();

}

void ileri_git3()
{
  motorGo(0, CW, 255);
  delay(500);
  motorGo(1, CCW, 255);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ucuncu_vites ();
}

void geri_git3()
{
  motorGo(0, CCW, 255);
  delay(500);
  motorGo(1, CW, 255);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ucuncu_vites ();
}

void dur3()
{
  motorGo(0, CW, 0);
  motorGo(1, CW, 0);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ucuncu_vites ();
}

void sol_don3()
{
  motorGo(0, CCW, 255);
  delay(500);
  motorGo(1, CCW, 255);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ucuncu_vites ();
}

void sag_don3()
{
  motorGo(0, CW, 255);
  delay(500);
  motorGo(1, CW, 255);
  delay(500);
  if (irrecv.decode(&results))
    {
      translateIR();
      irrecv.resume(); // Receive the next value
    }

if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
  ucuncu_vites ();
}

Download
İhtiyaç duyulması halinde projeye ait dosyaları buraya tıklayıp indirebilirsiniz.




14
Projeleriniz / RFID modül ile bariyer açma kapatma
« : Haziran 27, 2018, 11:24:44 ÖÖ »
Senaryo
Geçerli kartla bariyerin açılması ve arzu edilen bir süre sonra da kendiliğinden kapanması isteniyor. Kart kimliği geçersiz ise bariyer açılmayacak. Devre çalışırken de yapılan işlemler lcd ekran üzerinden takip edilecek.

ISIS Devre şeması

Şema 1: ISIS devre şeması

ARES baskı devre şeması

Şema 2: ARES baskı devre şeması

FRITZIG devre şeması

Şema 3: Fritzing devre şeması

Malzeme listesi

Çalışma Prensibi ve devrenin kullanılması
Devreye enerji uygulandığında LCD ekranda hoş geldin ve kartı okutunuz mesajları görüntülenir.
Doğru kartın okutulmasıyla beraber bariyer açılır ve durur, önceden belirlenmiş süre kadar bekler ve tekrar kapanır. Bariyerin açılması ve kapanması sırasında gelişen olaylar LCD ekrandan gözlenebilir.
Bariyerin açılıp kapanması bir dc motor tarafından yapılmaktadır. DC motorun ileri yön hareketinde bariyer açılır, ters yön hareketinde ise kapanır.

Bu işlem için ISIS devre şemasında görüldüğü gibi 4 transistörden meydana gelen bir motor sürücü devre kullanılmıştır. Arduinonun dijital 2. Ve 3.pinleri motor sürücüyü kontrol eden pinlerdir. Bu pinlere lojik 0 uygulandığında devredeki transistörlerin beyz polarmaları olmayacağından tüm transistörler yalıtımdadır ve motor enerji almaz.
Sisteme önceden tanımlanmamış bir kart okutturulursa bariyer her hangi bir tepki vermez ve LCD ekranda geçersiz kart uyarısı görünür.

Doğru kartın okutulmasıyla beraber D3 pini lojik 1 ve D2 pini lojik 0 seviyesine çekilir. Bu anda Q1 ve Q4 transistörleri D3 pini üzerinden beyz polarması alır ve iletime geçerler. Q1 ve Q4’ün iletime geçmesiyle beraber ISIS devre şeması baz alınarak belirtiyorum motorun sol ucu +, sağ ucu 2 olacak şekilde BAT1 kaynağı  tarafından beslenir. Bariyerin açılmasıyla beraber D3 ve D2 pinleri tekrar lojik 0 seviyesine çekilir ve tüm transistörlerin yalıtıma geçmesi nedeniyle de motor durur.

Programda belirtilen süre sonunda bu sefer D3 pini lojik 0, D2 pini lojik 1 seviyesine çekilir. Bu durumda Q2 ve Qş transistörleri beyz polarması sağlar. Q2 ve Q3’ün iletime geçmesiyle beraber motorun sol ucu negatif, sağ ucu pozitif olur ve motor bir öncekinin ters yönünde dönerek bariyerin kapanmasını sağlar.
Bariyerin açılıp kapanması esnasında güvenlik amacıyla bir buzzer devreye girerek bariyerin hareket halinde olduğu hakkında sesli uyarı verir.

Motorun durup bariyerin kapanmasıyla beraber bu sürece ait periyot başa alınır. Anlatılanlar periyodik olarak devam eder.

Arduino kodu
Kod: [Seç]
#include <SPI.h>  // SPIkütüphanesi eklendi
#include <RFID.h> // Rfid kütüphanesi eklendi
#include <LiquidCrystal.h>  // LCD ekran kütüphanesi eklendi
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);  // LCD ekran bu pinleri kullanacak. Gerekli durumlarda değiştirilebilir.
const byte motor_pin1 = 3;  // Motor sürücü kontrol pini D3
const byte motor_pin2 = 2;  // Motor sürücü kontrol pini D2
const byte buzzer = 13; // Buzzer pini
RFID rfid(53,49); // Rfid modülünün bağlanacağı pinler belirlendi
byte kart[5] = {117,85,177,101,244};  // rfid kart kimliği
boolean izin = true;  // izin isminde değişken oluşturuldu
void setup()
{
  Serial.begin(9600); // seri haberleşme başlatıldı
  SPI.begin();  // Rfid ile haberleşebilmek için SPI haberleşme protokolü başlatıldı
  rfid.init();
  pinMode(motor_pin1, OUTPUT);  // Motor sürücü girişlerinin bağlanacağı dijital pin çıkış olarak atandı
  pinMode(motor_pin2, OUTPUT);  // Motor sürücü girişlerinin bağlanacağı dijital pin çıkış olarak atandı
  pinMode(buzzer, OUTPUT);  // buzzer pini çıkış olarak atandı
  lcd.begin(16,4);  // LCD ekranın karekter ve satır sayıları girildi
}
void loop()
{
  hosgeldiniz_mesaji();   // Hoşgeldiniz fonksiyonunu çalıştır
  kart_oku(); // Kart oku isimli fonksiyonu çalıştır
  izin=true;  // izin isimli değişkeni doğru yap

  // Burada kart kimliği okunuyor
  if(rfid.isCard())
  {
    if(rfid.readCardSerial())
    {
      Serial.print("Kart bulundu ID: ");
      Serial.print(rfid.serNum[0]);
      Serial.print(",");
      Serial.print(rfid.serNum[1]);
      Serial.print(",");
      Serial.print(rfid.serNum[2]);
      Serial.print(",");
      Serial.print(rfid.serNum[3]);
      Serial.print(",");
      Serial.println(rfid.serNum[4]);
    }
    for(int i=0; i<5; i++)
    {
      if(rfid.serNum[i] != kart[i])
      {
        izin = false;
      }
    }
    if(izin==true)
    {
      bariyeri_ac();
      bariyer_acilinca_bekle();
      bariyeri_kapat();
      bariyer_kapaninca_bekle();
    }
    else
    {
      gecersiz_kart(); // kart kimliği geçersizse geçersiz kart fonksiyonun yürüt
    }
    rfid.halt();
  }
}
// kart kimliğini okuma işlemeri burada tamamlandı

void kart_oku()
{
  Serial.println("Karti okutunuz.");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("KARTI OKUTUNUZ"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(2000); // Kartı okuduktan sonra 2 saniye bekle
}

void bariyeri_ac()  // bariyeri açma kodları
{
  digitalWrite(motor_pin1, HIGH);
  digitalWrite(motor_pin2, LOW);
  digitalWrite(buzzer, HIGH);
  Serial.println("Bariyer aciliyor.");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("BARiYER ACiLiYOR"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(750); // Bariyer açılırken motorun enerjili kalacağı süre
}

void bariyer_acilinca_bekle() // Bariyer açıldıktan sonra yapılacak işlemler
{
  digitalWrite(motor_pin1, LOW);
  digitalWrite(motor_pin2, LOW);
  digitalWrite(buzzer, LOW);
  Serial.println("Bariyer acildi.");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("BARiYER ACiLDI"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(5000);  // Bariyer açıldıktan sonraki bekleme süresi
}

void bariyeri_kapat() // bariyeri kapatma kodları
{
  digitalWrite(motor_pin1, LOW);
  digitalWrite(motor_pin2, HIGH);
  digitalWrite(buzzer, HIGH);
  Serial.println("Bariyer kapaniyor.");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("BARiYER KAPANiYO"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(750);  // Bariyer kapanırken motorun enerjili kalacağı süre 
}

void bariyer_kapaninca_bekle()  // Bariyer kapandıktan sonra yapılacak işlemler
{
  digitalWrite(motor_pin1, LOW);
  digitalWrite(motor_pin2, LOW);
  digitalWrite(buzzer, LOW);
  Serial.println("Bariyer kapandi.");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("BARiYER KAPANDi"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(1000);  // Bariyer kapandıktan sonra bekleme süresi         
  Serial.println("Karti okutunuz.");   
}

void gecersiz_kart()  // kart kimliği geçersiz ise yapılacak işlemler
{
 Serial.println("Gecersiz kart");
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("GECERSiZ KART"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi");
 delay(2000);
 Serial.println("Karti okutunuz."); 
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("KARTI OKUTUNUZ"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi");   
}

void hosgeldiniz_mesaji()
{
  lcd.clear(); 
  lcd.setCursor(0,0);
  lcd.print("Hosgeldiniz"); 
  lcd.setCursor(0,1);                           
  lcd.print("Baturay BOZKAYA"); 
  lcd.setCursor(0,2);                           
  lcd.print("Karadeniz Teknik"); 
  lcd.setCursor(0,3);                           
  lcd.print("Universitesi"); 
  delay(2000);     
}

İhtiyaç duyulması halinde projeye ait dosyaları download bölümünden indirebilirsiniz.

15
Senaryo:
Başlat butonuna basılıp bırakıldığı anda dur butonuna basılana dek çıkışın aktif olarak bir ledin aktif olması istenmektedir.

Ladder diyagramın hazırlanması:
Ladder diyagram şema 1'de görüldüğü gibi hazırlanır.


Şema 1: Ladder diyagramın hazırlanması

Devrenin montajı:
Şema 2 ve şema 3'e bağlı kalınarak devrenin montajı tamamlanır.


Şema 2: Fritzing devre şeması


Şema 3: ISIS devre şeması



Sayfa: [1] 2 3 4