6 Ekim 2015 Salı

Arduino LCD Ekran Sicaklik Değerini Yazdirma

Kullanılan malzemeler

LM35
LCD ekran(1602D2)
10k potansiyometre
Arduino uno

 LM35 Sicaklik Sensörü


Sicaklik ölçüm sensörüdür. -55 ile 150 derece arasindaki sicaklikları ölçer. Hassas ve doğrusaldır. Giriş gerilimi 4-30V arasında çalışır.


Şekil 1 LM35 Sensörü 

Not: Arduino da ADC 10 bitliktir. 5000 mV  1024 parçaya işlemcimiz böler.  Her 10 mV bize 1 °C 'yi verecek şekilde programımız yazıldı.

Arduino kodları

#include <LiquidCrystal.h>

float sicaklik;
float gerilim;
int sicaklikpin=0;

LiquidCrystal LCD(2,3,4,5,11,12);

void setup(){
  LCD.begin(16,2);
  LCD.print("Sicaklik");
}

void loop(){

  gerilim= analogRead(sicaklikpin);
  gerilim= (gerilim/1023)*5000;         //mV cinsi
  sicaklik= gerilim/10.0;                     // 20 C *10 mV= 200 mV
  
  LCD.setCursor(0,0);
  LCD.print("Sicaklik");
  LCD.setCursor(9,0);
  LCD.print("Gerilim");
  LCD.setCursor(0,1);
  LCD.print(sicaklik);
  LCD.setCursor(9,1);
  LCD.print(gerilim);
  delay(1500);
}


Şekil 2 Arduino devre şeması


Şekil 3 Arduino devre şeması

     








2 Ekim 2015 Cuma

Arduino RGB Led Buton İle parlaklık Kontrolü

Kullanılan malzemeler

3 adet buton iki bacaklı
RGB led
3 adet 470 ohm direnç

Arduino kodları 

int kirmizipin=11;
int yesilpin=10;
int mavipin=9;

int kirmizibuton=7;
int yesilbuton=6;
int mavibuton=5;

int kirmizi=0;
int yesil=0;
int mavi=0;

void setup(){
  pinMode(kirmizipin, OUTPUT);
  pinMode(yesilpin, OUTPUT);
  pinMode(mavipin, OUTPUT);

  pinMode(kirmizibuton, INPUT_PULLUP);
  pinMode(yesilbuton, INPUT_PULLUP);
  pinMode(mavibuton, INPUT_PULLUP);
}
void loop(){

  if(digitalRead(kirmizibuton)==LOW)
  {
    kirmizi++;
    if(kirmizi>255) kirmizi=0;
  }
   if(digitalRead(yesilbuton)==LOW)
  {
    yesil++;
    if(yesil>255) yesil=0;
  }
  if(digitalRead(mavibuton)==LOW)
  {
    mavi++;
    if(mavi>255) mavi=0;
  }
  analogWrite(kirmizipin, kirmizi);
  analogWrite(yesilpin, yesil);
  analogWrite(mavipin, mavi);
  delay(10);
}

Şekil 1 Arduino devre şeması

Şekil 2 Arduino devre şeması




1 Ekim 2015 Perşembe

Arduino Dc Motor Kontrolü

Arduino ile DC motor uygulamasında kullanılacak malzemeler;

BC547 Transistör
10 kohm 
1N4001 diyot
Arduino uno

Arduino kodları:

int motorpin = 3;
void setup() 

  pinMode(motorpin, OUTPUT);
  Serial.begin(9600);
  while (! Serial);
  Serial.println("Speed 0 to 255");

void loop() 

  if (Serial.available())
  {
    int hiz = Serial.parseInt();
    if (hiz >= 0 && hiz <= 255)
    {
      analogWrite(motorpin, hiz);
    }  }   

Bağlantı şeması aşağıdaki gibi olucaktır.


                                                   Şekil 1  Arduino serial monitör 



Şekil 2 Arduino serial monitör 


9 Haziran 2015 Salı

Arduino Örnekleri 2

Örnek 1: Karaşimşek Yapımı

const int ledpin[]={10, 11, 12, 13};
void setup ()
{
  for (int led=0; led<4; led++)
  {
    pinMode(ledpin[led], OUTPUT);
  }
}
void loop ()
{
  for (int led=0; led<3; led++)
  {
    digitalWrite(ledpin[led], HIGH);
    delay(100);
    digitalWrite(ledpin[led], LOW);
    delay(100);
  }
  for (int led=3; led>0; led--)
   {
     digitalWrite(ledpin[led], HIGH);
     delay(100);
     digitalWrite(ledpin[led], LOW);
     delay(100);
   }
}

Örnek 2: Servo motor kontrolü

#include <Servo.h>                                       // Servo motor kütüphanesi
Servo servo;
int konum=0;
void setup ()
{
  servo.attach(9);                                           //servonun bağlandığı pin
}
void loop ()
{
  for (konum= 0; konum <180; konum+=1)  // 0-180 derece arası
{
  servo.write(konum);
  delay(15);
}
for (konum= 180; konum>=1; konum -=1) // +1 ve -1 dereceyi artır.
{
 servo.write(konum);
  delay(15);
}

}

Örnek 3: Ondalik  sayi dönüşümü

int tam1;
int tam2;
int tamSonuc;
float ondaliksayi;
float ondalikSonuc;
void setup ()
{
  Serial.begin (9600);
}
void loop ()
{
  tam1= 136;
  tam2= 11;
  ondaliksayi= 136.0;

  tamSonuc =tam1/tam2;
  Serial.print("tam1/tam2 sonucu= ");
  Serial.println(tamSonuc);

  ondalikSonuc= tam1/tam2;
  Serial.print("tam1/tam2 sonuc(sonuc ondalik)=");
  Serial.println(ondalikSonuc);

  ondalikSonuc = ondaliksayi/tam2;
  Serial.print("ondalik/tam2 sonucu=");
  Serial.println(ondalikSonuc);

  ondalikSonuc = (float)tam1 / (float) tam2;
  Serial.print ("float tam1/ float tam2: ");
  Serial.print(ondalikSonuc);

  while(1);
}

Örnek 4: Karakök

int i;
float kok;
void setup ()
{
  Serial.begin (9600);
}
void loop ()
{
  for (i=1; i<51; i++)
{
 kok= sqrt (i);
 Serial.print(i);
 Serial.print ("kok sonucu: ");
 Serial.println (kok);
}
while (1);

}

Örnek 5:  Dc motor hız kontrolü 

const int analog = A0;
const int motor = 11;
int pot= 0;
void setup ()
{
}
void loop ()
{
 // Analog giriş değerini okuyoruz
  pot = analogRead (analog);
  pot = map (pot, 0, 1023, 0, 255);
  analogWrite (motor, pot);
  delay (200);
}


7 Haziran 2015 Pazar

İleri Kinematik-2


                                  Şekil.1 RPPRRR eklemli robot manipülatörü

Robotun XYZ eksenler belirlendikten sonra D-H tablosu oluşturuldu. D- H tablosu oluşturulduktan sonra matlab da tanımlanan semboller (theta açısı, alfa açısı) matrisler oluşturularak işlemler yapılır. 


Şekil.2 RPPRRR eklemli robot manipülatörünün XYZ eksenleri

Daha sonra D-H tablosundan temel dönüşüm matrisleri elde edilip matlab da çarpılıp robot manipülatörünün Px, Py ve Pz konumları bulunur. Matrisler;

T1=[ cos(TH1)    -sin(TH1)    0   A1
         sin(TH1)     cos(TH1)    1   D1
           0                      0           0    0
           0                      0           0    1]

T2=[    1    0  0    A2
            0    1  0     0
            0    0  1    D2
            0    0  0     1]

T3=[  1    0     0    A3
          0    0    -1    0
          0    1     0    D3
          0    0     0    1]

T4=[ cos(TH4)    -sin(TH4)     0   A4
         sin(TH4)     cos(TH4)     1    D4
           0                      0            0     0
           0                      0            0     1]

T5=[ cos(TH5)    -sin(TH5)   0     A5
           0                     0          -1    -D5
         sin(TH5)    cos(TH5)    0       0
         0                    0              0       1]

T6=[ cos(TH6)    -sin(TH6)   0     A6
         0                   0               1     D6
         -sin(TH6)    -cos(TH6)  0      0
         0                    0               0     1]

6 eksenli robot manipülatörü XYZ eksenleri yerleştirildikten sonra Px, Py ve Pz konumları elde edilir.

6 Haziran 2015 Cumartesi

Simmechanics ile Motor-Pervane

Mekanik aksan için kullanılacak elamanlar şase, pervane, çerçeve ve motorlardır. Yüksek bir performans ve basit kontrol algoritmaları için motorlar ve pervaneler eşit uzaklıkta olmalıdır. Karşılıklı pervanelerin de aynı yönde dönmeleri gerekmektedir.  Çerçeve olarak karbon fiber ve alüminyum alaşımdan yapılmış, hafif ve dayanıklı olanı seçilmiştir.



Şekil 1 Quadcopter SimMechanics blok diyagramı
Motor çıkışından alın Revolet ile pervanin dönmesi sağlanmaktadır. Revolute bağlı olan Joint actuator yani tor olarak isimlendirilen bloktan O.5 Nm’lik bir tork ile pernanenin dönmesini sağlayan değer atanır. Joint sensör ile ise çıkışı Tork olan yani Scope dan Tork grafiğini zamana göre elde edilir.  Body sensör ile ise konumu çıkışını almak için scope bağlanır.
Dairesel blok ile ise pervanenin dairesel olarak dönerken RPM yani hızını ölçmek için joint sensör ile beraber scope dan zaman göre grafiği elde edilir.
Enw olarak gösterilen blok ise yerçekimi değeri tanımlanır,  Rootground ile ise yüzeye olan uzaklı tanımlanır. Weld bloğu durumlar arasındaki ilişkiyi sağlar. Body coordinate systems (CS) Sürücü tarafından seçilen vücut CS bağlı bir komşu organ ya da zemin üzerinde koordinat sistemi olarak tanımlanır.

Şekil 2 Quadcopter SimMechanics motor ve pervane mekaniği-1

Şekil 3 Quadcopter SimMechanics motor ve pervane mekaniği-2

Şekil 4 Quadcopter SimMechanics 0.5 Nm ‘lik Tork Grafiği

Şekil 5 Quadcopter SimMechanics 0.5 Nm Torktaki RPM Grafiği

Şekil 6 Quadcopter SimMechanics Konum Grafiği
Quadcopter pervanesi döndüğünde, konum sabit kalacaktır. Bundan dolayı konum grafiğinde görüldüğü gibi sadece konum da değişiklik olmayacaktır. 

4 Haziran 2015 Perşembe

Ansys Quadcopter Pervane Analiz

Ansys ile pervane analizi gerçekleştirildi. Rotational Velocity ( dönme hızı ) ile pervane RPM(hız) analizini gerçekleştirdik. Pervane de yapısal analizi kullanılarak analiz edilir. Pervane analizi için, 9000 rpm bir dönme hızı verilir ve analiz gerçekleştirilir. Elde ettiğimiz eşdeğer gerilme sınırı içindedir. Polyethylene Ultimate Çekme Stres 33 MPa olduğunu. 29.549 MPa Max eşdeğer gerilme elde edilir. Dolayısıyla pervanemizde Polyethylene kullanılması güvenli olduğunu görürüz.

Şekil 1. Polyethylene ile yapılmış pervane mesh
 Mesh örümcek ağ şeklinde oluşturduğu her bölgeden kısmi diferansiyel denklem olarak aldığı örneklerdir. Yani sonsuz bir değişkeni sonlu bir değişkene dönüştürerek malzemenin değerlerini hesaplanması sağlar.
   Aşağıdaki şekillerde aldığı örnek sayısı arttırılmış ve değerlerin hassasiyet artmış olur.
Şekil 2. Mesh Element Metrik Grafiği 
Şekil 3. Polyethylene ile yapılmış pervane eşdeğer gerilmesi
Yukarıda ki pervane de Rotational Velocity ile RPM 9000 hız ile analiz edildi. Eşdeğer gerilimi 29.549 olarak analiz gerçekleşti.


Şekil 4. Polyethylene ile yapılmış pervane toplam deformasyon

Total deformation ile uygulanan Rotational Velocity göre ne kadar yükseğe çekileceği görülmektedir. Maksimum yükselmenin olduğu yer kırmızı renkte, minimum yükselmenin olduğu yer mavi renklerle gösterilmiştir.
Total deformantion’ da 9000 RPM’ lik değişken bir Rotational Velocity uygulandığında yani pervanemizin en çok uç kısımlarda deformasyona uğradığını yerin kanat uçları olduğunu görmekteyiz.

Python Pyqt5 ile Hesap Makinası

from PyQt5.QtWidgets import * from PyQt5.QtGui import * from mainUI import * from PyQt5.QtCore import * import sys # ----------------------U...