9 Nisan 2022 Cumartesi

DHT11 Nem ve Sıcaklık Sensörüyle Uygulama

 

Kullanılan Malzemeler;
Arduino Uno
DHT11 Sensor


Kullanılan Yazılımlar;
C

Kullanılan Yazılım Programları;
Arduino


Basit Tinkercad Taslağı


Arduino Kodu;



Seri Monitor'den Cıkan Data;










Devamını Oku

4 Ocak 2022 Salı

Arduino ile Çizgi izleyen Robot Yapımı






Kullanılan Malzemeler;
Arduino Uno
L298N Motor Sürücüsü
2 Adet Teker ve DC Motor
1 Adet Sarhoş Teker
2 Adet IR Sensor
4 Adet 1,5 V Pil
1 Adet 9V Pil

Kullanılan Yazılımlar;
C

Kullanılan Yazılım Programları;
Arduino



                                                                  Projenin Tinkercad Taslağı




Yapımı

İlk başta Dc motorlarının - ve + hatlarını l298n motor sürücümün output kısmına bağlıyorum.
Daha sonrasında l298n motor sürücümde bulunan ENA,ENB,IN1,IN2,IN3,IN4 pinlerini Arduino'da 2,3,4,5,6,7 pinlerine bağladım. Bu pimler benim motorlarımın sol hızı, sağ hızı , sol motorlarımın ileri-geri hareketi ve sag motorlarımın ileri-geri hareketleri anlamına geliyor.
Daha sonra 9V Pilimin - hattını motor sürücümdeki Gnd kısmına bağlıyorum.Aynı şekilde 9V Pilden çıkan + hattınıda 12V hattına bağlıyorum.
Motor sürücümde yer alan Gnd'yi   Sağ ir sensörümün ve sol ir sensörümün gnd kısmıyla birleştirip Arduino'daki Gnd pinine bağlıyorum.
Aynı şekilde Motor sürücümde yer alan 5v kısmını ir sensörlerimin vcd kısmı ile birleştirip Arduinodaki 5V pinine bağlıyorum.
Motor sürücümden çıkan 12V pininide pilin + kısmıyla birleştirdikten sonra Arduino üzerindeki Vin pinine bağlıyorum.
Son olarak Sol ir sensörümden çıkan out pinini Arduinoda 11 pinine sağ ir sensörümü ise arduinodaki 12 pinine baglıyorum.
Artık Tüm bağlanması gereken pinler bağlandı. Son olarak 1,5V x 4 pillerimi destek olarak bağlayıp, Arduinoyu beslemesi için arduino üzerindeki şarj kısmına bağlıyorum.

Arduino Kodu;

#define SENSORSAG 11
#define SENSORSOL 12
#define MOTOR_SPEED 180

//Sag Motor
int enablesagMotor=2;
int sagMotorPin1=3;
int sagMotorPin2=5;

//Sol motor
int enableLeftMotor=7;  
int leftMotorPin1=6;
int leftMotorPin2=4;

void setup()
{

  TCCR0B = TCCR0B & B11111000 | B00000010 ;
  
  // sag ve sol motorlarımı çıkış olarak tanımlıyorum
  pinMode(enablesagMotor, OUTPUT); 
  pinMode(sagMotorPin1, OUTPUT);
  pinMode(sagMotorPin2, OUTPUT);
  
  pinMode(enablesolMotor, OUTPUT);
  pinMode(leftMotorPin1, OUTPUT);
  pinMode(leftMotorPin2, OUTPUT);

  pinMode(SENSORSAG, INPUT);
  pinMode(SENSORSOL, INPUT);
  rotateMotor(0,0);   
}


void loop()
{

  int sagIRSensorValue = digitalRead(SENSORSAG);
  int solIRSensorValue = digitalRead(SENSORSOL);

  //İki sensörde hiçbir şey algılamazsa robot ilerlesin.
  if (sagIRSensorValue == LOW && solIRSensorValue == LOW)
  {
    rotateMotor(MOTOR_SPEED, MOTOR_SPEED);
  }
  //sag sensör siyahı algılarsa saga dönsün
  else if (sagIRSensorValue == HIGH && solIRSensorValue == LOW )
  {
      rotateMotor(-MOTOR_SPEED, MOTOR_SPEED); 
  }
  //sol sensör siyahı algılarsa sola dönsün
  else if (sagIRSensorValue == LOW && solIRSensorValue == HIGH )
  {
      rotateMotor(MOTOR_SPEED, -MOTOR_SPEED); 
  } 
 
  else 
  {
    rotateMotor(0, 0);
  }
}


void rotateMotor(int sagMotorSpeed, int solMotorSpeed)
{
  
  if (sagMotorSpeed < 0)
  {
    digitalWrite(sagMotorPin1,LOW);
    digitalWrite(sagMotorPin2,HIGH);    
  }
  else if (sagMotorSpeed > 0)
  {
    digitalWrite(sagMotorPin1,HIGH);
    digitalWrite(sagMotorPin2,LOW);      
  }
  else
  {
    digitalWrite(sagMotorPin1,LOW);
    digitalWrite(sagMotorPin2,LOW);      
  }

  if (solMotorSpeed < 0)
  {
    digitalWrite(solMotorPin1,LOW);
    digitalWrite(solMotorPin2,HIGH);    
  }
  else if (solMotorSpeed > 0)
  {
    digitalWrite(solMotorPin1,HIGH);
    digitalWrite(solMotorPin2,LOW);      
  }
  else 
  {
    digitalWrite(solMotorPin1,LOW);
    digitalWrite(solMotorPin2,LOW);      
  }
  analogWrite(enablesagMotor, abs(sagMotorSpeed));
  analogWrite(enablesolMotor, abs(solMotorSpeed));    
}


Robotun Platformda Gidişi








Devamını Oku

3 Ocak 2022 Pazartesi

Arduino ile Radar yapımı



Kullanılan Malzemeler;
Arduino Uno
BreadBoard
HC-SR04 Ultrasonik Mesafe Sensor
Buzzer
Servo Motor

Kullanılan Yazılımlar;
C
Java

Kullanılan Yazılım Programları;
Proccessing
Arduino


TinkerCadde Projenin Taslağı



Yapımı

İlk başta Breadboard üzerinde - ve + hatlarını bağladım ve bu - ve + hatlarını Arduino üzerinde 5V ve Gnd pinlerine bağladım.
Daha sonrasında ise Hcsr sensörümün + ve -(Gnd) pinlerini breadboard üzerinde - ve + hatlarına yerleştirdim.
Hcsr Sensörümde yer alan Trig ve Echo pinlerimi Arduinoda 3 ve 2 nolu pinlere bağladım.
Buzzerımın + Hattını breadboard üzerinde + ya ve ayrıyetten aynı + hattını arduino uno üzerinde 8 nolu pine bağladım.
Micro Servomdan çıkan - ve + hatlarını da aynı şekilde breadboarda bağladıktan sonra Micro Servomdan çıkan sinyal hattını ise arduinoda 9 nolu pine bağladım.
Yaptığım projede gücü bilgisayardan alacağı için ekstra bir pil veya batarya bağlama gereksinimi duymadım.
Parçalarımı bağladıktan sonra yaptığım radar projesinde radarımın 180 derecelik bir açıyı taraması gerektiği için micro Servomun üzerine HCSR sensörümü  tutucu yardımıyla oturtturdum. 

Arduino Kodu;


#include <Servo.h>  // Servonun kütüphanesini ekliyoruz


const int trigPin = 3;  //  hcsr-04ümdeki trig pinimi arduinoda  tanımlıyorum.

const int echoPin = 2;  //  hcsr-04ümdeki trig pinimi arduinoda  tanımlıyorum.


const int piezoPin = 8; // Buzzer'ımı arduinodaki pinime tanımlıyorum


long sure;    // Sureyi burda int yerine long olarak tanımlıyorum.Long int'e göre daha uzun aralıklara sahip olduğu için long kullanıyorum.

int uzaklik;  // Buradada uzaklıgı int olarak tanımlıyorum. 



int nota[] = {262, 462, 862, 1662, 3262}; // Notalarımı giriyorum. Notaları kat kat seçtim ki mesafe degiştikçe ton belirgin olsun diye.


Servo myServo; // Servo motorun ayarlarını girecegimiz bir servo oluşturup  tanımlıyorum


void setup() {

  pinMode(trigPin, OUTPUT); //  TriggerPini Çıkış olarak ayarlıyorum

  pinMode(echoPin, INPUT); //  Echo pini ise giriş olarak ayarlıyorum

  Serial.begin(9600);      // Seri monitorumü tanımlıyorum.

  myServo.attach(9); // Oluşturdugum servoyu arduinodaki 9.pine baglıyorum.

}


void loop() {

  

  // Bu kısımda servo motoru 15 dereceden 165 dereceye döndürüyorum.

  for(int i=15;i<=165;i++){   // Buradaki for döngüsünde açı değişkenimi 15 dereceden 180 dereceye kadar 1,1 arttırarak döndürüp servonun pozisyonunu ayarlıyorum.

  myServo.write(i); // Buradada oluşturduğum servoyu i olarak yazdır diyorum.


  uzaklik = uzaklikhesabi(); // Her açı için uzaklığı hesaplıyorum

  

  

  if(uzaklik > 40){  // Eğer uzaklık 40dan büyükse buzzerımı 10mili saniyede kontrol ederek sustur diyorum.

    noTone(piezoPin); 

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 40 && uzaklik > 30){ // Burada ise eger uzaklık 40 ve 40dan küçük ise VE uzaklık 30dan büyük ise note 1 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.

    tone(piezoPin, nota[1]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 30 && uzaklik > 20){ // Burada ise eger uzaklık 30 ve 30dan küçük ise VE uzaklık 20dan büyük ise note 2 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.

    tone(piezoPin,nota[2]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 20 && uzaklik > 10){ // Burada ise eger uzaklık 20 ve 20dan küçük ise VE uzaklık 10dan büyük ise note 3 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.

    tone(piezoPin,nota[3]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else {

    tone(piezoPin,nota[4]); // Bunun haricinde ise buzzerımı nota 4 olarak 10ms kontrol ederek çal diyorum.

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

     

      

  Serial.print(i); // Verdigim iyi(açıyı) Serial printe gönderip gösteriyorum.

  Serial.print(","); // Lazım olacak ek karakterleri serial printe gönderip gösteriyorum

  Serial.print(uzaklik); // Burdada uzaklığımı Serial printe gönderip gösteriyorum.

  Serial.print("."); // Lazım olacak ek karakterleri serial printe gönderip gösteriyorum

  }

 

  for(int i=165;i>15;i--){  // Yukarda girdiğim for döngüsünü açının geri dönüşü için tekrar ediyorum.

  myServo.write(i); //  Tekrar oluşturduğum servoyu dönüş için i olarak yazdır diyorum.

 

  uzaklik = uzaklikhesabi(); // Her açı için uzaklığı tekrar hesaplıyorum

  

  if(uzaklik > 40){   // Tekrar Eğer uzaklık 40dan büyükse buzzerımı 10mili saniyede kontrol ederek sustur diyorum.

    noTone(piezoPin);

    delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 40 && uzaklik > 30){ // Tekrar  Burada ise eger uzaklık 40 ve 40dan küçük ise VE uzaklık 30dan büyük ise note 1 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.

    tone(piezoPin, nota[1]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 30 && uzaklik > 20){ // Tekrar  Burada ise eger uzaklık 30 ve 30dan küçük ise VE uzaklık 20dan büyük ise note 2 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.

    tone(piezoPin,nota[2]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 20 && uzaklik > 10){ // Tekrar  Burada ise eger uzaklık 20 ve 20dan küçük ise VE uzaklık 10dan büyük ise note 3 olarak tanımladığım notayı 10mili saniye kontrol ederek çal diyorum.

    tone(piezoPin,nota[3]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else {   // Tekrar bunun haricinde buzzerımı nota 4 olarak 10ms kontrol ederek çal diyorum.

    tone(piezoPin,nota[4]);

    delay(10);

    noTone(piezoPin);

    delay(30);

  }

     

  Serial.print(i); // Tekrar Verdigim iyi(açıyı) Serial printe gönderip gösteriyorum.

  Serial.print(","); // Tekrar  ek karakterleri serial printe gönderip gösteriyorum

  Serial.print(uzaklik); // Tekrar Burdada uzaklığımı Serial printe gönderip gösteriyorum.

  Serial.print("."); // Tekrar ek karakterleri serial printe gönderip gösteriyorum

  

  }

}


int uzaklikhesabi(){  // Uzaklık hesabimi tanımlıyorum.

  

  digitalWrite(trigPin, LOW); 

  delayMicroseconds(2);

  // trig pinimizi 2 saniyeligine devre dışı bırak diyorum.

  digitalWrite(trigPin, HIGH); 

  delayMicroseconds(10); // // Trigpini 10mikro saniye için aktif et sonrasında ise devre dışı bırak diyorum

  digitalWrite(trigPin, LOW);

  sure = pulseIn(echoPin, HIGH); //echoPin den değer oku,ses dalgasının yol alma süresini mikrosaniyeye çevir diyorum 

  uzaklik= sure*0.034/2;  // // Burada uzaklıgın formülünü girip uzaklıgı buluyoruz.Sureyi burda  2 ve 34 ile bölüyoruz.Buradaki 2 bizim "git-gel olayımız oluyor."İlk bşata gidiyor uzaklıgı x oluyor birde geri geliyor 2x oluyor bu yüzden 2 ile bölüyoruz. 34 ise hcsr-04'ün sabit degeridir.Ses dalgasının sıcaklıga göre hızı degişir bu degerde 34 olduğu için 34 alıyoruz.

  return uzaklik; //  uzaklıgı geri döndürüyorum

}



PROCCESING KODU;

   

    import processing.serial.*;  //Proccesinge seri haberleşme kütüphanesini ekliyorum

    import java.awt.event.KeyEvent; // seri porttan veri okuma kütüphanesini ekliyorum

    import java.io.IOException;   // giriş ve çıkışdaki  istinaslarının kütüphanesini ekliyorum

    Serial myPort; // Burada seri obje tanımı yapıyorum

 

    String aci=""; // Açımı string yani metin değeri olarak tanımlıyorum

    String uzaklik=""; // Uzaklıgıda metin olarak tanımlıyorum

    String data=""; // Datamıda string olarak tanımlıyorum

    String obje; // Objemide string olarak tanımlıyorum

    float pixsuzaklik; // int komutu tam sayı üretirken float hem tam sayı ve kesirli sayılar üretiyor. Burada pixsuzaklık olarak yazdığım kod cm olarak alınan uzaklığı piksele çevirdigi için.Float olarak tanımlıyorum

    int iaci, iuzaklik;  // Tam sayı değerinde açımı ve uzaklığımı tanımlıyorum.

    int index1=0; // 1.dizinimi tanımlıyorum

    int index2=0; // 2.dizinimi tanımlıyorum

    PFont orcFont; // Burada yazı fontumu orc font olarak giriyorum

    void setup() {

     

     size (1366, 750); // Ekran çözünürlügümüzü giriyorum

     smooth();

     myPort = new Serial(this,"COM4", 9600); // Port yardımıyla seri haberleşmeye başla Port:Arduinomuzu bilgisayara bagladıgımız yerin tanımlaması

     myPort.bufferUntil('.'); // Seri porttan '.' karakterine kadar değer oku diyorum.

    

    }

    void draw() { // Bu kısım radarın göstergesinin çizildigi kısım.

     

      fill(98,245,31); // Burda renk tanımı yapıyorum. Bu renk kodları yeşil rengin kodları.

     

     

      noStroke(); //Bu kısımda radar göstergesinde açıyı gösteren kısımın eski halinin görünümünü belirliyorum.

      fill(0,12);  //

      rect(0, 0, width, height-height*0.065);  // Rect komutuyla x,y genişlik ve uzunluk olarak diktörtgen çiziyoruz.

     

      fill(98,245,31); // Tekrar yeşil kodları tanıtıyorum

      // Bu kısımda radarın görüntüsü  için fonksiyonları çağırıyorum.

      drawRadar();  // radarı çiz göster diyorum

      drawLine();  // çizgileri çiz göster diyorum

      drawObject(); // objeyi çiz göster diyorum

      drawText();  // ve yazıları çiz göster diyorum

    }

    void serialEvent (Serial myPort) { //  seri porttan veriyi oku diyorum

     

      data = myPort.readStringUntil('.');   // Seri porttan '.' karakterine kadar değer oku ve "data" değişkenine bu karakterleri ata diyorum.

      data = data.substring(0,data.length()-1); // 0 konumundan uzunluga kadar veri oku ve data olarak tanımla diyorum.

     

      index1 = data.indexOf(",");  // Dizinde ',' karakterini bul ve "index1" değişkenine ata diyorum.

      aci= data.substring(0, index1); // "0" konumundan index1 in konumuna kadar veri oku ve açı değeri olarak tanı diyorum

      uzaklik= data.substring(index1+1, data.length()); // "index1" in konumundan "data" nın konumuna kadar veri oku ve mesafe olarak seri porta yolla

     

      // String olarak metin olarak atadığım açı ve uzaklık komutlarımı parseint kullanarak tam sayıya çeviriyorum.

      iaci = parseInt(aci);

      iuzaklik = parseInt(uzaklik);

    }

    void drawRadar() {   // Burda radar göstergesini çiziyorum.

      pushMatrix();   // Kordinat sistemini matrixe gönderiyoruz.

      translate(width/2,height-height*0.074); // başlangıç koordinatlarını yeni konuma taşı diyorum.

      noFill();

      strokeWeight(2); // Radardaki çizginin dış kalınlığını 2 yapıyorum.

      stroke(98,245,31); // Dış kalınlıgın rengini yeşil yapıyorum.

      //Yayların çizgilerini çiziyorum

      arc(0,0,(width-width*0.0625),(width-width*0.0625),PI,TWO_PI); //Burda radardaki göstergelerin 1. yay çizgisini çiziyorum

      arc(0,0,(width-width*0.27),(width-width*0.27),PI,TWO_PI); //Burda radardaki göstergelerin 2. yay çizgisini çiziyorum

      arc(0,0,(width-width*0.479),(width-width*0.479),PI,TWO_PI); //Burda radardaki göstergelerin 3. yay çizgisini çiziyorum

      arc(0,0,(width-width*0.687),(width-width*0.687),PI,TWO_PI); //Burda radardaki göstergelerin 4. yay çizgisini çiziyorum

      // Açı çizgilerini çiziyoruz

      line(-width/2,0,width/2,0);

      line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30)));    //Burda radardaki 30 derecelik açının çizgisini çiziyorum

      line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60)));   //Burda radardaki 60 derecelik açının çizgisini çiziyorum

      line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90)));   //Burda radardaki 90 derecelik açının çizgisini çiziyorum

      line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120)));  //Burda radardaki 120 derecelik açının çizgisini çiziyorum

      line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150)));  //Burda radardaki 150 derecelik açının çizgisini çiziyorum

      line((-width/2)*cos(radians(30)),0,width/2,0);

      popMatrix(); // Yukarıda çizgidimiz kordinat sistemini ilk haline getiriyorum.

    }

    void drawObject() { // Burada objeyi çiziyorum

      pushMatrix();   // Çizdigimiz objeyi kordinat sistemine gönderiyorum

      translate(width/2,height-height*0.074); // başlangıç koordinatlarını yeni konuma taşı

      strokeWeight(9);  // Objenin kalınlıgını 9 olarak yapıyorum

      stroke(255,10,10); // Obje algılarsa rengini kırmızı atıyorum

      pixsuzaklik = iuzaklik*((height-height*0.1666)*0.025); // sensörden alınan mesafe değerini cm den piksele çevir diyorum

      // Mesafeyi 40 olarak belirtme

      if(iuzaklik<40){ // Eger uzaklık 40dan küçükse

        // açı ve mesafeye göre objeyi çiz diyorum

      line(pixsuzaklik*cos(radians(iaci)),-pixsuzaklik*sin(radians(iaci)),(width-width*0.505)*cos(radians(iaci)),-(width-width*0.505)*sin(radians(iaci)));

      }

      popMatrix(); // Objeyi kordinat sistemindeki ilk haline geri getiriyorum.

    }

    void drawLine() { // Burda çizgimi çiziyorum.

      pushMatrix(); // Çizdigim çizgiyi kordinat sistemine gönderiyorum

      strokeWeight(9); // Kalınlıgını 9 olarak giriyorum

      stroke(30,250,60); // Çizgimin rengini yeşil olarak atıyorum.

      translate(width/2,height-height*0.074); // başlangıç koordinatlarını yeni konuma taşı diyorum

      line(0,0,(height-height*0.12)*cos(radians(iaci)),-(height-height*0.12)*sin(radians(iaci))); // açıya göre çizgi çek diyorum.

      popMatrix(); // Çizgiyi kordinat sistemindeki ilk haline getir diyorum

    }

    void drawText() { // Burda yazıları ekranda çiz diyorum

     

      pushMatrix(); //  Yazdıgımız yazıları  kordinat sisteminde göster diyorum

      if(iuzaklik>40) { // Eger uzaklık 40dan büyükse

      obje = "Menzil Disinda"; //Objeyi "menzil dışında" olarak yazdır diyorum

      }

      else { // Haricinde, 40dan küçükse

      obje = "Menzil Icinde"; // Objeyi "menzil içinde" olarak göster diyorum

      }

      fill(0,0,0); // siyah rengiyle doldur diyorum.

      noStroke(); // Kalınlık bildirmiyorum.

      rect(0, height-height*0.0648, width, height); // rect komutuyla yazıların buluncagı alana dikdörtgen çizdiriyorum

      fill(220,20,15);  // Burada yeşil renk tanımlıyorum ve çizdiriyorum

      textSize(15); // Yazıların boyutlarını 15 olarak giriyorum

     

      // Ekranda buluan yazıların ayarlamaları

      text("10cm",width-width*0.3854,height-height*0.0833); // Radarın göstergesinde yazan "10cm" yazısının konumunu ayarlıyorum

      text("20cm",width-width*0.281,height-height*0.0833);  // Radarın göstergesinde yazan "20cm" yazısının konumunu ayarlıyorum

      text("30cm",width-width*0.177,height-height*0.0833);  // Radarın göstergesinde yazan "30cm" yazısının konumunu ayarlıyorum

      text("40cm",width-width*0.0729,height-height*0.0833); // Radarın göstergesinde yazan "40cm" yazısının konumunu ayarlıyorum

      textSize(25); // Radar göstergesinde olan yazıların boyutlarını 25 olarak tanımlıyorum

      text("Obje: " + obje, width-width*0.875, height-height*0.0277);   // Yukarda gösterdigim objeyi Ekranın altında Obje olarak yazdırıp konumunu ayarlıyorum

      text("Aci:  " + iaci +" °", width-width*0.508, height-height*0.0277);  // Yukarda gösterdigim açiyi Ekranın altında açi olarak yazdırıp konumunu ayarlıyorum

      text("Uzaklık:    ", width-width*0.26, height-height*0.0277);  // Yukarda gösterdigim uzaklıgı Ekranın altında uzaklık olarak yazdırıp konumunu ayarlıyorum

      if(iuzaklik<40) {   // Eger uzaklık 40dan küçükse

      text("          " + iuzaklik +  "   cm", width-width*0.225, height-height*0.0277); // Ölçülen uzaklıgı gösterip yanına cm ekliyorum

      }

      textSize(15); //  Gösterdigim uzaklıgın boyutunu 15 olarak giriyorum

      fill(220,20,15); // Burdada rengini yeşil olarak giriyorum.

      translate((width-width*0.4994)+width/2*cos(radians(30)),(height-height*0.0907)-width/2*sin(radians(30)));  // başlangıçda verdigim  30 derece açısını yeni konuma taşı diyorum.

      rotate(-radians(-60)); //Radyan 60 olarak verdigim açıyı döndür diyorum

      text("30°",0,0);   // Yazdırdığım 30 derecelik açıya "30" yaz diyorum

      resetMatrix(); //Kordinat sistemini tekrar sıfırla diyorum

      translate((width-width*0.503)+width/2*cos(radians(60)),(height-height*0.0888)-width/2*sin(radians(60))); // başlangıçda verdigim  60 derece açısını yeni konuma taşı diyorum.

      rotate(-radians(-30)); //Radyan 30 olarak verdigim açıyı döndür diyorum

      text("60°",0,0);  // Yazdırdığım 30 derecelik açıya "60" yaz diyorum

      resetMatrix(); //Kordinat sistemini tekrar sıfırla diyorum

      translate((width-width*0.507)+width/2*cos(radians(90)),(height-height*0.0763)-width/2*sin(radians(90))); // başlangıçda verdigim  90 derece açısını yeni konuma taşı diyorum.

      rotate(radians(0)); // Yazdırdığım 0 derecelik açıyı döndür diyorum

      text("90°",0,0);  // Yazdırdığım 30 derecelik açıya "90" yaz diyorum

      resetMatrix(); //Kordinat sistemini tekrar sıfırla diyorum

      translate(width-width*0.513+width/2*cos(radians(120)),(height-height*0.07129)-width/2*sin(radians(120))); // başlangıçda verdigim  120 derece açısını yeni konuma taşı diyorum.

      rotate(radians(-30)); //Radyan 30 olarak verdigim açıyı döndür diyorum

      text("120°",0,0);  // Yazdırdığım 30 derecelik açıya "120" yaz diyorum

      resetMatrix();  //Kordinat sistemini tekrar sıfırla diyorum

      translate((width-width*0.5104)+width/2*cos(radians(150)),(height-height*0.0574)-width/2*sin(radians(150))); // başlangıçda verdigim  150 derece açısını yeni konuma taşı diyorum.

      rotate(radians(-60)); //Radyan 60 olarak verdigim açıyı döndür diyorum

      text("150°",0,0);  // Yazdırdığım 30 derecelik açıya "150" yaz diyorum

      popMatrix();  //Kordinat sistemini tekrar sıfırla diyorum

    }


Yaptığımız Radar Projesinde bir Lcd panel kullanmadığım için direk radarın görüntüsünü bilgisayar veya laptop ekranına yansıtacağım için Proccesind adlı uygulamayı kullandım ve Processing uygulamasında radarın görüntüsü bu şekilde;





Radarın Çalışması


Devamını Oku

27 Kasım 2021 Cumartesi

TinkerCad'de Servo Motor Ve Flex Sensör ile Robot Kol Yapımı

 


KOD;

// C++ code

//

#include <Servo.h>   // Burda Servoların kütüphanesini ekliyorum.

Servo sol1;    // Burada en soldaki servoyu sol1 olarak tanımlıyorum

Servo sol2;    // Burada soldan 2. olan servoyu sol2 olarak tanımlıyorum

Servo orta;    // Burada ortadaki servoyu orta olarak tanımladım.

Servo sag1;    // Burada en sağdaki servoyu sag1 olarak tanımladım.

Servo sag2;    // Burada ise sagdan 2. olan servoyu tanımlıyorum.


int solflex1; // burada  soldan 1.fleximizi tam sayı olarak tanımlıyoruz.

int solflex2;  // burada ise soldan 2. fleximizi tanımlıyoruz.

int ortaflex;  //burada ortadaki fleximizi tanımladık.

int sagflex2;  //sagdan 2.fleximizi tanımlıyoruz.

int sagflex1;  // en sagdaki fleximizi tanımlıyoruz



void setup()

{

  

  sol1.attach(11); // Yukarıda tanımladığım sol1 servoyu 11.pin ile birleştiriyorum ve tanımlıyorum.

  sol2.attach(10); // Aynı şekilde soldan 2.olan servoyu 10.pin olarak gösteriyorum

  orta.attach(9); // Aynı işlemleri yapmaya devam ediyorum.Ortadaki servoyu 9.pine tanımladım.

  sag2.attach(7); // sagdan 2. olan servoyu sırasına göre 7.pine tanımlıyorum.

  sag1.attach(5); // en sagdaki servoyuda 5 olarak tanımlıyorum

  

}


void loop()

{

  solflex1=analogRead(A0);  // Bu kısımda yukarda tanımladığımız solflex1', analog A0 olarak görmesini, tanımlamasını yapıyoruz.

  solflex2=analogRead(A1);  //Analog a1'pinini solflex2'ye tanımlıyorum.

  ortaflex=analogRead(A2);  //Buradada aynı şekilde a2pinine ortaflexi tanımlıyorum.

  sagflex2=analogRead(A3);  // Sagdan 2.flexi Analog a3 pinine tanımladım.

  sagflex1=analogRead(A4);  // Buradada aynı şekilde en sagdaki flexi A4e tanımladım.

  

  

  solflex1=map(solflex1,770,950,0,180); // Burda solflex1 için map komutunu kullanarak 770 ve 950 arası olan degeri 0 ve 180 olarak tanımlıyorum.

  solflex2=map(solflex2,770,950,0,180); // Burda solflex2 için map komutunu kullanarak 770 ve 950 arası olan degeri 0 ve 180 olarak tanımlıyorum. 

  ortaflex=map(ortaflex,770,950,0,180); // Burda ortaflex için map komutunu kullanarak 770 ve 950 arası olan degeri 0 ve 180 olarak tanımlıyorum.

  sagflex2=map(sagflex2,770,950,0,180); // Burda sagflex2 için map komutunu kullanarak 770 ve 950 arası olan degeri 0 ve 180 olarak tanımlıyorum.

  sagflex1=map(sagflex1,770,950,0,180); // Burda sagflex1 için map komutunu kullanarak 770 ve 950 arası olan degeri 0 ve 180 olarak tanımlıyorum.

  

  sol1.write(solflex1); // Sol1 servonun dönüşünü solflex1e göre baglıyorum.

  sol2.write(solflex2); // Sol2 servonun dönüşünü solflex2e göre baglıyorum.

  orta.write(ortaflex); // orta servonun dönüşünü ortaflexe göre baglıyorum.

  sag2.write(sagflex2); // Sag2 servonun dönüşünü sagflex2e göre baglıyorum.

  sag1.write(sagflex1); // Sag1 servonun dönüşünü sagflex1e göre baglıyorum.

  

  delay(20); // sisteme gecikme ekliyorum.

}

Devamını Oku

TinkerCad'de Radar Simulasyonu

 


KOD;


#include <Servo.h>  // Servonun kütüphanesini ekliyoruz


//  HC-... Sensorundeki Trig ve echo pinimizi arduinoda bagladımız girişleri tanımlıyoruz

const int trigPin = 3;

const int echoPin = 2;


// Buzzer(piezo)ı arduinoda girdigimiz girişi tanımlıyoruz. Ben buzzer ekledim fakat sesi çok az geldiği için kaldırsam mı diye düşündüm sonra vaz geçtim.

const int piezoPin = 8;


//  Uzaklık ve sürenin varyasyonlarını ekliyoruz

long sure;

int uzaklik;



int nota[] = {262, 462, 862, 1662, 3262}; // Notalarımı giriyorum.Notaları kat kat seçtim ki mesafe degiştikçe ton belirgin olsun diye.


Servo myServo; // Servo motorun ayarlarını girecegimiz bir servo oluşturup  tanımlıyoruz


void setup() {

  pinMode(trigPin, OUTPUT); //  TriggerPini Çıkış olarak ayarlıyoruz

  pinMode(echoPin, INPUT); //  Echo pini ise giriş olarak ayarlıyoruz

  Serial.begin(9600);

  myServo.attach(9); // Servo Motorun Arduino üzerindeki tanımlı olduğu input pini giriyoruz

}


void loop() {

  

  // Bu kısımda servo motoru 15 dereceden 165 dereceye döndürüüyoruz.

  for(int i=15;i<=165;i++){  

  myServo.write(i);


  uzaklik = uzaklikhesabi();// Her açı için uzaklığı hesaplıyoruz

  

  //buzzer ses ekleme

  if(uzaklik > 40){

    noTone(piezoPin);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 40 && uzaklik > 30){

    tone(piezoPin, nota[1]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 30 && uzaklik > 20){

    tone(piezoPin,nota[2]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 20 && uzaklik > 10){

    tone(piezoPin,nota[3]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else {

    tone(piezoPin,nota[4]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

     

      

  Serial.print(i); // Açıyı serialPrintte gönderiyoruz

  Serial.print(","); //  P

  Serial.print(uzaklik); //   Uzaklığı serialPrintden gösteriyoruz

  Serial.print("."); // 

  }

  //  15 Ve 165 açılarındaki  dönen işlemleri tekrar etme

  for(int i=165;i>15;i--){  

  myServo.write(i);

 

  uzaklik = uzaklikhesabi();

  if(uzaklik > 40){

    noTone(piezoPin);

    delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 40 && uzaklik > 30){

    tone(piezoPin, nota[1]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 30 && uzaklik > 20){

    tone(piezoPin,nota[2]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else if (uzaklik <= 20 && uzaklik > 10){

    tone(piezoPin,nota[3]);

     delay(10);

    noTone(piezoPin);

    delay(30);

  }

  else {

    tone(piezoPin,nota[4]);

    delay(10);

    noTone(piezoPin);

    delay(30);

  }

     

  Serial.print(i);

  Serial.print(",");

  Serial.print(uzaklik);

  Serial.print(".");

  

  }

}

// ultrasonik sensörün ölçtüğü mesafeyi hesaplayan fonksiyon

int uzaklikhesabi(){ 

  

  digitalWrite(trigPin, LOW); 

  delayMicroseconds(2);

  // Trigpini 10mikro saniye için aktif et diyoruz

  digitalWrite(trigPin, HIGH); 

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  sure = pulseIn(echoPin, HIGH); //echoPin den değer oku,ses dalgasının yol alma süresini mikrosaniyeye çevir diyoruz 

  uzaklik= sure*0.034/2; 

  return uzaklik;

}


Devamını Oku

TinkerCad'de Radar ile Mesafeye göre Led ve Buzzer Çalıştırma Simulasyonu

 


KOD;

// C++ code
//

int trig=12;
int echo=10;
int kirmizi=5;
int piezo=3;
long sure;
int uzaklik;



void setup()
{
  Serial.begin(9600);
  pinMode(trig, OUTPUT);
  pinMode(kirmizi, OUTPUT);
  pinMode(yesil, OUTPUT);
  pinMode(echo, INPUT);
}

void loop()
{
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  sure=pulseIn(echo,HIGH);
  uzaklik=(sure/2)/29.1 ;
  
}
Devamını Oku