Elektrik Elektronik Teknolojisi Alanı Temrinleri

 
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


Mesajlar - Hasan ERTÜRK

Sayfa: 1 ... 30 31 [32] 33 34 ... 45
466
Robot uygulamaları / 2. 2 eksen hareket izleyen robot
« : 10 Ağustos 2015, 19:49:06 »
Bu dersimizde 2 eksen hareket izleyen robot yapacağız.

Gerekli malzemeler:
Arduino uno
2 adet servo motor
Pan tilt mekanik aksamı
İvme sensörü
6 adet led
Bakırlı pertinaks
Baskı devre çıkarma araçları
Güç kaynağı
Bağlantı kabloları

Öncelikle servolarımızı pan tilt aksamına monte ediyoruz. Daha sonra fritzing çiziminde gösterildiği şekilde devremizi kurup arduino kodlarımızı arduinoya yükleyeceğiz.Üstteki servoya 6adet led bağladım. Farklı metaryaller bağlanabilir. Ledlere ait ares çizimi konu ekinde mevcuttur.

<iframe width="640" height="385" src="//www.youtube.com/embed/26fkfod5lac?fs=1&start=" frameborder="0" allowfullscreen></iframe>











Fritzing çizimi:
Fritzing dosyası konu ekinde mevcuttur.


Arduino kodlarımız:
Kodlara ait arduino dosyası konu ekinde mevcuttur.
Kod: [Seç]
/*
2EKSEN HAREKET İZLEYEN ROBOT
*/

#include <Servo.h>
#include<Wire.h>
const int MPU=0x68;  // I2C address of the MPU-6050
int AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

Servo myservo1;  // create servo object to control a servo
Servo myservo2;
int potpin1 = 0;  // analog pin used to connect the potentiometer
int potpin2=1;
int val1;    // variable to read the value from the analog pin
int val2;
void setup()
{
   Wire.begin(); //seri haberleşme
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(9600);
  myservo1.attach(9);
 myservo2.attach(10); // attaches the servo on pin 9 to the servo object
}

void loop()
{
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU,14,true);  // request a total of 14 registers
  AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)     
  AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.print(AcZ);
  Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);  //equation for temperature in degrees C from datasheet
  Serial.print(" | GyX = "); Serial.print(GyX);
  Serial.print(" | GyY = "); Serial.print(GyY);
  Serial.print(" | GyZ = "); Serial.println(GyZ);
 
  val1 =AcX;       // reads the value of the potentiometer (value between 0 and 1023)
  val1 = map(val1, -16000, 16000, 180, 0);     // scale it to use it with the servo (value between 0 and 180)
  val2 = AcY;           // reads the value of the potentiometer (value between 0 and 1023)
  val2 = map(val2, -16000, 16000, 0, 180);
  myservo1.write(val1);                  // sets the servo position according to the scaled value
  myservo2.write(val2);
  delay(100);                           // waits for the servo to get there
}


467
Motor kontrol uygulamaları / 3. 2 DC motorun ileri geri kontrolü
« : 06 Ağustos 2015, 23:01:06 »
Bu dersimizde 2 adet dc motorun arduino ile ileri geri kontrol edilmesini öğreneceğiz.
Her motor için 2 şer tane biri ileri diğeri geri olmak üzere anahtar bulunacak. Bu anahtarları kullanarak motorlara güç vereceğiz.

ISIS simülasyonu:
<iframe width="640" height="385" src="//www.youtube.com/embed/75sNovQj0rE?fs=1&start=" frameborder="0" allowfullscreen></iframe>

ISIS devre şeması:
ISIS dosyasını ve hex kodunu konu ekinden indirebilirsiniz.


Arduino kodları:
ide dosyasını konu ekinden de indirebilirsiniz.
Kod: [Seç]
void setup() {
// Hangi dijital pinleri output olarak seçeceğimizi belirtiyoruz.
pinMode(12, OUTPUT);
pinMode(3,INPUT);
pinMode(13, OUTPUT);
pinMode(2,INPUT);
pinMode(10, OUTPUT);
pinMode(1,INPUT);
pinMode(9, OUTPUT);
pinMode(0,INPUT);
}
int butondegeri=0;
void loop() {
butondegeri = digitalRead(3);
digitalWrite(12, butondegeri);
butondegeri = digitalRead(2);
digitalWrite(13, butondegeri);
butondegeri = digitalRead(1);
digitalWrite(10, butondegeri);
butondegeri = digitalRead(0);
digitalWrite(9, butondegeri);

}

hex kodu:
ISIS simülasyonu yapabilmek için gerekli hex dosyasını konu ekinden indirebilirsiniz.
Kod: [Seç]
:100000000C9461000C9473000C9473000C947300B6
:100010000C9473000C9473000C9473000C94730094
:100020000C9473000C9473000C9473000C94730084
:100030000C9473000C9473000C9473000C94730074
:100040000C9492010C9473000C9473000C94730044
:100050000C9473000C9473000C9473000C94730054
:100060000C9473000C94730000000008000201005F
:100070000003040700000000000000000102040863
:100080001020408001020408102001020408102002
:10009000040404040404040402020202020203032E
:1000A00003030303000000002300260029000000D2
:1000B0000000250028002B0000000000240027007D
:1000C0002A0011241FBECFEFD8E0DEBFCDBF21E054
:1000D000A0E0B1E001C01D92AB30B207E1F70E9491
:1000E00083010C9417020C94000061E08CE00E94E4
:1000F000EA0060E083E00E94EA0061E08DE00E9497
:10010000EA0060E082E00E94EA0061E08AE00E948A
:10011000EA0060E081E00E94EA0061E089E00E947C
:10012000EA0060E080E00C94EA0083E00E9459015C
:100130008093000190930101682F8CE00E942301BD
:1001400082E00E9459018093000190930101682F81
:100150008DE00E94230181E00E94590180930001FB
:1001600090930101682F8AE00E94230180E00E94A1
:1001700059018093000190930101682F89E00C944C
:100180002301833081F028F4813099F08230A1F08E
:1001900008958730A9F08830B9F08430D1F4809187
:1001A00080008F7D03C0809180008F7780938000D6
:1001B000089584B58F7702C084B58F7D84BD08957E
:1001C0008091B0008F7703C08091B0008F7D8093C5
:1001D000B0000895CF93DF9390E0FC01E458FF4F07
:1001E0002491FC01E057FF4F8491882349F190E06E
:1001F000880F991FFC01E854FF4FA591B4918255D7
:100200009F4FFC01C591D4919FB7611108C0F8942C
:100210008C91209582238C93888182230AC062303E
:1002200051F4F8948C91322F309583238C938881EC
:10023000822B888304C0F8948C91822B8C939FBF6F
:10024000DF91CF9108950F931F93CF93DF931F9268
:10025000CDB7DEB7282F30E0F901E859FF4F849180
:10026000F901E458FF4F1491F901E057FF4F049151
:100270000023C9F0882321F069830E94C1006981AD
:10028000E02FF0E0EE0FFF1FE255FF4FA591B49174
:100290009FB7F8948C91611103C01095812301C020
:1002A000812B8C939FBF0F90DF91CF911F910F9166
:1002B0000895CF93DF93282F30E0F901E859FF4FDD
:1002C0008491F901E458FF4FD491F901E057FF4FB1
:1002D000C491CC2391F081110E94C100EC2FF0E079
:1002E000EE0FFF1FEC55FF4FA591B4912C912D23DC
:1002F00081E090E021F480E002C080E090E0DF91B6
:10030000CF91089508950E94DC010E9482010E940D
:100310007500C0E0D0E00E9495002097E1F30E94B4
:100320000000F9CF1F920F920FB60F9211242F9356
:100330003F938F939F93AF93BF93809103019091CD
:100340000401A0910501B09106013091020123E062
:10035000230F2D3720F40196A11DB11D05C026E8FD
:10036000230F0296A11DB11D20930201809303016A
:1003700090930401A0930501B093060180910701B9
:1003800090910801A0910901B0910A010196A11D67
:10039000B11D8093070190930801A0930901B093C8
:1003A0000A01BF91AF919F918F913F912F910F9033
:1003B0000FBE0F901F901895789484B5826084BD0D
:1003C00084B5816084BD85B5826085BD85B5816059
:1003D00085BDEEE6F0E0808181608083E1E8F0E0B9
:1003E0001082808182608083808181608083E0E8E8
:1003F000F0E0808181608083E1EBF0E080818460C7
:100400008083E0EBF0E0808181608083EAE7F0E0C8
:10041000808184608083808182608083808181602C
:1004200080838081806880831092C1000895F89451
:02043000FFCFFC
:00000001FF

Not: İşin aslı arduino burada gereksiz. Arduino kullanmadan da kumanda devresi devredeki diğer malzemeleri ya da alternatif olarak bir kaç röle kullanarak daha ekonomik bir şekilde hazırlanabilir. Amaç burada arduino ile tasarımı pekiştirmek. Devreyi kullanmak isteyenler için bir motora ait ileri ve geri anahtarlarının her ikisine birden basıldığında ortaya çıkabilecek problemleri yazılımsal ya da donanımsal yoldan bertaraf etmeleri önerilir.

468
Motor kontrol uygulamaları / 2. Parmak hareketini izleyen motor
« : 05 Ağustos 2015, 21:49:04 »
<iframe width="640" height="385" src="//www.youtube.com/embed/2FPuHKD1rb8?fs=1&start=" frameborder="0" allowfullscreen></iframe>


Bu dersimizde arduino ve filex sensör kullanarak parmak hareketimizi izleyen motoruygulaması yapacağız.

Öncelikle filex sensör hakkında bilgi verelim:



Büküldüğünde direncini 45k ile 125k arasında değiştiren devre elemanıdır. Bükülme oranı arttıkça direnç değeri o oranda artacaktır.

Flex sensöre bir seri direnç bağlanırsa üazerine düşen gerilim bükülme oranına bağlı olarak değişecektir. Bu gerilimi de arduinonun analog pinlerinden birine uygulayıp okutturursak değişik uygulamalar yapma şansımız olur.

Fritzing çizimi:
Fritzing dosyasını konu ekinden indirebilirsiniz.



Arduino kodlarımız:
Kod: [Seç]
#include <Servo.h>
Servo servo1;
const int flexpin = 0;
void setup()
{
Serial.begin(9600);
 
servo1.attach(9);
}
 
void loop()
{
int flexposition;
int servoposition;
 
flexposition = analogRead(flexpin);
servoposition = map(flexposition, 700, 900, 0, 180);
servoposition = constrain(servoposition, 20, 160);
 
servo1.write(servoposition);
 
Serial.print("sensor: ");
Serial.print(flexposition);
Serial.print(" servo: ");
Serial.println(servoposition);
 
delay(20);
}

469
Genel sohbet / Çalışma masam
« : 01 Ağustos 2015, 18:05:46 »
Senelerdir evde çalışırken sıkıntı çekiyordum. Bir masa yaptırıp alet edevatı güzelce yerleştirdim. iyi oldu.










470
Projeler / 2. Işık izleyen panel yapalım
« : 26 Temmuz 2015, 19:37:10 »
Bu dersimizde ışık kaynağını tek eksende izleyen bir panel yapacağız. Devremizde 2 adet ldr (foto direnç) mevcut. Hangi ldr daha fazla ışık alıyorsa panelimiz o ldrden tarafa doğru hareket etmektedir. Bu yöntemle güneş izleyen güneş paneli, perdelerin otomatik açılıp kapanması gibi çok değişik uygulamalar yapabilmek mümkün.
<iframe width="640" height="385" src="//www.youtube.com/embed/hoNPaOuZkC4?fs=1&start=" frameborder="0" allowfullscreen></iframe>



Fritzing çizimi:
Çizime ait dosyayı konu ekinden indirebilirsiniz.


Arduino kodlarımız:
Kod: [Seç]
    #include <Servo.h>
     
    Servo myservo;
    int pos = 90;   // initial position
    int sens1 = A0; // LRD 1 pin
    int sens2 = A1; //LDR 2 pin
    int tolerance = 2;
     
    void setup()
    {
      myservo.attach(9);  // attaches the servo on pin 9 to the servo object
      pinMode(sens1, INPUT);
      pinMode(sens2, INPUT);
      myservo.write(pos);
      delay(2000); // a 2 seconds delay while we position the solar panel
    } 
     
    void loop()
    {
      int val1 = analogRead(sens1); // read the value of sensor 1
      int val2 = analogRead(sens2); // read the value of sensor 2
     
      if((abs(val1 - val2) <= tolerance) || (abs(val2 - val1) <= tolerance)) {
        //do nothing if the difference between values is within the tolerance limit
      } else {   
        if(val1 > val2)
        {
          pos = --pos;
        }
        if(val1 < val2)
        {
          pos = ++pos;
        }
      }
     
      if(pos > 180) { pos = 180; } // reset to 180 if it goes higher
      if(pos < 0) { pos = 0; } // reset to 0 if it goes lower
     
      myservo.write(pos); // write the position to servo
      delay(50);
    }

471
<iframe width="640" height="385" src="//www.youtube.com/embed/iai1l-yKHvo?fs=1&start=" frameborder="0" allowfullscreen></iframe>

Kontrol paneli görüntüleri:





Fritzing şemamız:
Fritzing dosyasını konu ekinden indirebilirsiniz.


Bu dersimizde localhost üzerinden php ve arduino ile 8 adet ledi açıp kapatmayı öğreneceğiz.Bu ugulama ethernet shield gerektirmez.

Gerekli malzemeler:
Arduino uno
Led (8 adet)
470 ohm direnç (8 adet)
Bağlantı kabloları
Deney bordu

Ledlerimizi php formatında hazırlayacağımız bir web sayfası üzerinden kontrol edeceğiz. php sayfalar bir web sunucusu üzerinden çalıştığından eğer ki bilgisayarımızda localhost kurulu değilse sayfayı görüntelememiz mümkün olmaz. Bu nedenle bilgisayartınızda localhost kurulu değilse öncelikle localhostu kurmanız gerekmektedir. Ben localhost olarak wampserver kurdum.  wampserver yerine xamppeasyphp.org gibi alternatif localhost arayüzlerini kurabilirsiniz.

Şimdi php sayfamızı hazırlayalım. Sayfamız için gerekli php kodlarını bir metin editörüne yapıştırıp, phpArduino.php isminde kaydediyoruz. Daha sonra bu dosyayı localhostumuza atacağız. Ben wampserver kurduğum için bu dosyayı C:\wamp\www içine atıyorum. Dosyayı kendisi oluşturmak istemeyenler konu ekinden indirebilir.

php kodlarımız:
Kod: [Seç]
<head>
<meta http-equiv="Content-Type" content="text/HTML; charset=utf-8" />
<style type="text/css">

body { background: #ccc; }

a { link, a:visited
    color: #232323;
    text-decoration: none;
}



</style>

</head>
<?php
function openSerial($command) {
$openSerialOK false;
try {
exec("mode com4: BAUD=9600 PARITY=n DATA=8 STOP=1 to=off dtr=off rts=off");
$fp =fopen("com4""w");
//$fp = fopen('/dev/ttyUSB0','r+'); //use this for Linux
$openSerialOK true;
} catch(Exception $e) {
echo 'Message: ' .$e->getMessage();
}

if($openSerialOK) {
fwrite($fp$command); //write string to serial
fclose($fp);
    }

}

openSerial("Without this line, the first control will not work. I don't know way.");

if(isset(
$_POST['submit1'])) {
    
openSerial("@00 on 1\r");
}

if(isset(
$_POST['submit2'])) {
    
openSerial("@00 of 1\r");
}

if(isset(
$_POST['submit3'])) {
    
openSerial("@00 on 2\r");
}

if(isset(
$_POST['submit4'])) {
    
openSerial("@00 of 2\r");
}
if(isset(
$_POST['submit5'])) {
    
openSerial("@00 on 3\r");
}
if(isset(
$_POST['submit6'])) {
    
openSerial("@00 of 3\r");
}
if(isset(
$_POST['submit7'])) {
    
openSerial("@00 on 4\r");
}
if(isset(
$_POST['submit8'])) {
    
openSerial("@00 of 4\r");
}
if(isset(
$_POST['submit9'])) {
    
openSerial("@00 on 5\r");
}
if(isset(
$_POST['submit10'])) {
    
openSerial("@00 of 5\r");
}
if(isset(
$_POST['submit11'])) {
    
openSerial("@00 on 6\r");
}
if(isset(
$_POST['submit12'])) {
    
openSerial("@00 of 6\r");
}
if(isset(
$_POST['submit13'])) {
    
openSerial("@00 on 7\r");
}
if(isset(
$_POST['submit14'])) {
    
openSerial("@00 of 7\r");
}
if(isset(
$_POST['submit15'])) {
    
openSerial("@00 on 8\r");
}
if(isset(
$_POST['submit16'])) {
    
openSerial("@00 of 8\r");
}

?>

<center>
<h3>Led / Role Kontrol Paneli</h3>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
   <input type="submit" name="submit1" value="1. Ledi yak">
   <input type="submit" name="submit2" value="1. Ledi söndür"><br>
   <input type="submit" name="submit3" value="2. Ledi yak">
   <input type="submit" name="submit4" value="2. Ledi söndür"><br>   
   <input type="submit" name="submit5" value="3. Ledi yak">
   <input type="submit" name="submit6" value="3. Ledi söndür"><br> 
   <input type="submit" name="submit7" value="4. Ledi yak">
   <input type="submit" name="submit8" value="4. Ledi söndür"><br> 
   <input type="submit" name="submit9" value="5. Ledi yak">
   <input type="submit" name="submit10" value="5. Ledi söndür"><br> 
   <input type="submit" name="submit11" value="6. Ledi yak">
   <input type="submit" name="submit12" value="6. Ledi söndür"><br> 
   <input type="submit" name="submit13" value="7. Ledi yak">
   <input type="submit" name="submit14" value="7. Ledi söndür"><br> 
   <input type="submit" name="submit15" value="8. Ledi yak">
   <input type="submit" name="submit16" value="8. Ledi söndür"><br>     
</form>
<p><b>Tasarım Kodlama:</b><br>
<a target="_blank" href="http://mebk12.meb.gov.tr/meb_iys_dosyalar/61/01/202946/">
Trabzon Mesleki ve Teknik Anadolu Lisesi</a><br>
<a target="_blank" href="https://www.facebook.com/hasanerturk61">Hasan ERTÜRK</a><br>
<a target="_blank" href="http://www.spinabifidaturkey.com">Spina Bifida</a><br>
<a target="_blank" href="http://eproje61.com/index.php">Elektronik Projeler</a><br>
<br>
<a target="_blank" href="http://temrinlerim.org">
<img border="0" src="http://temrinlerim.org/Themes/wm_theme/images/logo.gif" width="249" height="46"></a></p>
</center>

Arduino kodlarımız:
Kod: [Seç]

/*
 * OC RelayDuino ASCII Slave
 * For KTA-223
 * by Ocean Controls www.oceancontrols.com.au
 *
 * Controls
 *  -8 Relays (4 With PWM Out (Should only be used with SSR's, the SSR Switching time is 1ms))
 *  -4 Opto-Isolated Digital Ins
 *  -3 Analog Ins (or Non Isolated Digitals)
 */
#include <string.h> //Use the string Library
#include <ctype.h>
#include <EEPROM.h>
void readdips(void);
void writedops(void);
void printaddr(char x);
void setbaud(char Mybaud);

#define ANIN1 6   // Analog 1 is connected to Arduino Analog In 6
#define ANIN2 7   // Analog 2 is connected to Arduino Analog In 7
#define ANIN3 0   // Analog 3 is connected to Arduino Analog In 0
int Analogs[3] = {ANIN1, ANIN2, ANIN3};

#define REL1 2  // Relay 1 is connected to Arduino Digital 2
#define REL2 3  // Relay 2 is connected to Arduino Digital 3 PWM
#define REL3 4  // Relay 3 is connected to Arduino Digital 4
#define REL4 5  // Relay 4 is connected to Arduino Digital 5 PWM
#define REL5 6  // Relay 5 is connected to Arduino Digital 6 PWM
#define REL6 7  // Relay 6 is connected to Arduino Digital 7
#define REL7 8  // Relay 7 is connected to Arduino Digital 8
#define REL8 9  // Relay 8 is connected to Arduino Digital 9 PWM
int Relays[8] = {REL1, REL2, REL3, REL4, REL5, REL6, REL7, REL8};
int PWMAble[4] = {2, 4, 5, 8};
#define OI1 15 // Opto-Isolated Input 1 is connected to Arduino Analog 1 which is Digital 15
#define OI2 16 // Opto-Isolated Input 2 is connected to Arduino Analog 2 which is Digital 16
#define OI3 17 // Opto-Isolated Input 3 is connected to Arduino Analog 3 which is Digital 17
#define OI4 18 // Opto-Isolated Input 4 is connected to Arduino Analog 4 which is Digital 18
int Optos[4] = {OI1, OI2, OI3, OI4};

#define TXEN 19 // RS-485 Transmit Enable is connected to Arduino Analog 5 which is Digital 19

char i = 0, Rxchar, Rxenable, Rxptr, Cmdcomplete, R;
char Rxbuf[15];
char adrbuf[3], cmdbuf[3], valbuf[12];
char rxaddress, Unitaddress, Unitbaud;
char Dip[5], Dop[9];
char Hold, Mask, Analog =1, Imax;
int val = 0, Param;     
int anreadings[3];
char x;
int  N, outval;
unsigned long RelayStartTime[8], WatchdogStartTime;
unsigned char RelayOnTime[8], WatchdogOnTime;

void setup()
{
  for (i=0;i<8;i++)
  {
    pinMode(Relays[i], OUTPUT);  // declare the relay pin as an output
  } 
  for (i=0;i<4;i++)
  {
    pinMode(Optos[i], INPUT);  // declare the relay pin as an output
  }
  pinMode(TXEN, OUTPUT);
  //Read Address, Baud and Parity from EEPROM Here 
  Unitaddress = EEPROM.read(0);
  if ((Unitaddress > 99) || (Unitaddress < 0))
  {
    Unitaddress = 0; 
  }
  Unitbaud = EEPROM.read(1);
//  Unitparity = EEPROM.read(2);//Parity currently not available
  setbaud(Unitbaud);// start serial port
   
  UCSR0A=UCSR0A |(1 << TXC0); //Clear Transmit Complete Flag
  digitalWrite(TXEN, HIGH);   //Enable Transmit
  delay(1);                   //Let 485 chip go into Transmit Mode
  Serial.println("Ocean Controls");
  Serial.println("KTA-223 v3.3");
  while (!(UCSR0A & (1 << TXC0)));    //Wait for Transmit to finish
  digitalWrite(TXEN,LOW);               //Turn off transmit enable

  //We want the switching freq to be pretty slow as the turn on time for the SSR's is 1ms
  //TCCR0B = TCCR0B & 0b11111101; // Arduino pins 5+6 61Hz
  //TCCR1B = TCCR1B & 0b11111101; // Arduino pins 9+10 30Hz
  //TCCR2B = TCCR2B & 0b11111111; // Arduino pins 11+3 30Hz (stuck at 490Hz have to check this)
}

void loop()
{
  //readdips();//read inputs
  //writedops();//set the relays
  if (Serial.available() > 0)    // Is a character waiting in the buffer?
  {
    Rxchar = Serial.read();      // Get the waiting character

    if (Rxchar == '@')      // Can start recording after @ symbol
    {
      if (Cmdcomplete != 1)
      {
        Rxenable = 1;
        Rxptr = 1;
      }//end cmdcomplete
    }//end rxchar
    if (Rxenable == 1)           // its enabled so record the characters
    {
      if ((Rxchar != 32) && (Rxchar != '@')) //dont save the spaces or @ symbol
      {
        Rxbuf[Rxptr] = Rxchar;
        //Serial.println(Rxchar);
        Rxptr++;
        if (Rxptr > 13)
        {
          Rxenable = 0;
        }//end rxptr
      }//end rxchar
      if (Rxchar == 13)
      {
        Rxenable = 0;
        Cmdcomplete = 1;
      }//end rxchar
    }//end rxenable

  }// end serial available


   //we should now have AACCXXXX in the rxbuf array, with a cr at rxptr
   //we should take rxbuf(1) and rxbuf(2) and turn them into a number

  if (Cmdcomplete == 1)
  {
     adrbuf[0] = Rxbuf[1];
     adrbuf[1] = Rxbuf[2];
     adrbuf[2] = 0; //null terminate Mystr = Chr(rxbuf(1)) + Chr(rxbuf(2))
     rxaddress = atoi(adrbuf);//    Address = Val(mystr)
  //Serial.println(adrbuf);
     cmdbuf[0] = toupper(Rxbuf[3]); //copy and convert to upper case
     cmdbuf[1] = toupper(Rxbuf[4]); //copy and convert to upper case
     cmdbuf[2] = 0; //null terminate        Command = Chr(rxbuf(3)) + Chr(rxbuf(4))
     //   Command = Ucase(command)
  //Serial.println(cmdbuf);
     valbuf[0] = Rxbuf[5]; //        Mystr = Chr(rxbuf(5))
        R = Rxptr - 1;
            for (i = 6 ; i <= R ; i++)//For I = 6 To R
            {
                valbuf[i-5] = Rxbuf[i]; //Mystr = Mystr + Chr(rxbuf(i))
            }
     valbuf[R+1] = 0; //null terminate
     Param = atoi(valbuf);//   Param = Val(mystr)

     //Serial.println(Param); //   'Print "Parameter: " ; Param

       if ((rxaddress == Unitaddress) || (rxaddress == 0)) //0 is wildcard address, all units respond
       {

         //switch (cmdbuf) //Select Case Command
         //{
              if (strcmp(cmdbuf,"ON")==0)                                   //'turn relay x ON
              {
                   //'Print "command was ON"
                   if ((Param <= 8) && (Param >= 0))
                   {
                     if (Param == 0)
                     {
                        for (i = 1 ; i<=8 ; i++)
                        {
                          Dop[i-1] = 1;
                          RelayOnTime[i-1]= 0;//override the timing
                        }
                     }
                     else
                     {
                        Dop[Param-1] = 1;
                        RelayOnTime[Param-1]= 0;//override the timing
                     }
                     writedops();
                     printaddr(1);                     
                   }
                   else
                   {
                        //'Print "out of range"
                   }
              }
              if (strcmp(cmdbuf,"OF")==0)                                   //'turn relay x OFF
              {
                   //'Print "command was OFF"
                   if ((Param <= 8) && (Param >= 0))
                   {
                     if (Param == 0)
                     {
                        for (i = 1 ; i<=8 ; i++)
                        {
                          Dop[i-1] = 0;
                        }
                     }
                     else
                     {
                        Dop[Param-1] = 0;
                     }
                     writedops();
                     printaddr(1);
                   }
                   else
                   {
                        //'Print "out of range"
                   }
              }   
              /*
              if (strcmp(cmdbuf,"PW")==0)        // PWM out on Relays 2, 4, 5 or 8 only
              {                                  // Value of parameter is Relay number and 0-255 value ie 2127 will make channel 2 output 127 (50%)
                   for ( i=0 ; i<=3 ; i++)       //
                   {
                     x = Param / 1000;
                     if ( x==PWMAble[i]) //Is is on the list?
                     {
                       
                       outval = Param % 1000; //Get the 0-255 value
                       if (outval>=0 && outval <=255) //within range?
                       {
                         analogWrite( Relays[x-1] , outval);
                         if (outval == 0)
                         {
                           Dop[x-1]=0;     //If it is 0 then we will say the Relay is OFF
                         }
                         else
                         {
                           Dop[x-1]=1;     //If it is not 0 then we will say the Relay is ON
                         }
                         printaddr(1);
                       }
                     }
                   }
              }
              */
              if (strcmp(cmdbuf,"TR")==0)        // Timed Relay
              {                                  // Value of parameter is Relay number and 1-255 time in 0.1s increments 2127 is relay 2 for 12.7 sec
                 x = Param / 1000; //Get the relay number
                 outval = Param % 1000; //Get the 0-255 value
                 if (outval>=1 && outval <=255) //within range?
                 {
                     RelayStartTime[x-1] = millis(); //save the current time
                     RelayOnTime[x-1] = outval;
                     Dop[x-1]=1;     //Relay on
                     writedops();    //Write outputs
                     printaddr(1);
                 }
              }
             
              if (strcmp(cmdbuf,"KA")==0)        // Keep Alive
              {                                  // Value of parameter is seconds to stay alive for
                 
                 if (Param>=0 && Param <=255) //within range?
                 {
                     WatchdogStartTime = millis(); //save the current time
                     WatchdogOnTime = Param;
                     printaddr(1);
                 }
              }
             
              if (strcmp(cmdbuf,"WR")==0)                                    //'turn relay on/off according to binary value of x
              {
                    //'Print "command was WRITE"
                   if ((Param <= 255) && (Param >= 0))
                   {
                    for (i=0 ; i<8 ; i++)
                    {
                       Mask = 1<<i;//Shift Mask , Left , I
                       Hold = Param & Mask;
                       /*'Print "mask=" ; Mask
'                                Print " I= " ; I
'                                Print "param=" ; Param
'                                print "hold=" ; Hold
*/
                       if (Hold == Mask)
                       {
                          Dop[i] = 1;
                          RelayOnTime[i]= 0; //override timing
                       }
                       else
                       {
                          Dop[i] = 0;
                       }
                    }
                   }
                   else
                   {
                   }
                   writedops();
                   printaddr(1);
                   
              }
             
              if (strcmp(cmdbuf,"RS")==0)                                   // 'relay status
              {
                    //'Print "command was RELAY STATUS"
                    if ((Param > 0) && (Param <= 8))
                   {
                         printaddr(2);
                         Serial.println(Dop[Param-1], DEC);
                   }
                   else if (Param == 0)
                   {
                         N = 0;
                         for (i=0 ; i<8 ; i++)
                         {
                            if(Dop[i] == 1)
                            {
                               N = N|(1<<i);
                            }
                         }
                         printaddr(2);
                         Serial.println(N, DEC);
                   }
                   else
                   {
                     //'Print "out of range"
                   }
              }   

              if (strcmp(cmdbuf,"IS")==0)                                   // 'input status
              {
                readdips();                 
                     if ((Param > 0) && (Param <= 4))
                     {
                       printaddr(2);
                       Serial.println(Dip[Param-1], DEC);
                       
                     }
                     else if (Param == 0)
                     {
                        N = 0;
                        if (Analog == 1)
                        {
                          Imax = 3;
                        }
                        else
                        {
                          Imax = 8;
                        }

                        for (i=0 ; i<=Imax ; i++)
                        {
                          if (Dip[i] == 1)
                          {
                           N = N|(1<<i);
                          }
                        }
                        printaddr(2);
                        Serial.println(N,DEC);
         
                     }
                     else
                     {
                      //        'Print "out of range"
                     }
              }

              if (strcmp(cmdbuf,"AI")==0)                                   // 'return analog input
              {                                   
                    if (Analog == 1)
                    {
                       if ((Param >= 0) && (Param <= 3))
                       {
                         for (i=0 ; i<3 ; i++)
                         {
                           anreadings[i] = analogRead(Analogs[i]);
                         }
                         printaddr(2);
                         if (Param == 0)
                         {
                             Serial.print(anreadings[0], DEC);
                             Serial.print(" ");
                             Serial.print(anreadings[1], DEC);
                             Serial.print(" ");
                             Serial.println(anreadings[2], DEC);
                             
                         }
                         else
                         {
                             Serial.println(anreadings[Param-1], DEC);
                         }
                       }
                    }
                    else
                    {
                    }
              }
              if (strcmp(cmdbuf,"SS")==0)                                   // System Status
              {
                   
                   if (Param == 0)
                   {
                         N = 0;
                         for (i=0 ; i<8 ; i++) //Read Relays
                         {
                            if(Dop[i] == 1)
                            {
                               N = N|(1<<i);
                            }
                         }
                         printaddr(2);
                         Serial.print(N, DEC); //Print Relays
                         Serial.print(" ");
                         
                          readdips(); //Read Inputs
                          N = 0;
                          if (Analog == 1)
                          {
                            Imax = 3;
                          }
                          else
                          {
                            Imax = 8;
                          }
 
                          for (i=0 ; i<=Imax ; i++)
                          {
                            if (Dip[i] == 1)
                            {
                             N = N|(1<<i);
                            }
                          }
                         
                          Serial.print(N,DEC); //Print Inputs
                          Serial.print(" ");
                         
                          if (Analog == 1)
                          {
                             for (i=0 ; i<3 ; i++)
                             {
                               anreadings[i] = analogRead(Analogs[i]); // Read Analogs
                             }
                             
                             
                                 Serial.print(anreadings[0], DEC); //Print Analogs
                                 Serial.print(" ");
                                 Serial.print(anreadings[1], DEC);
                                 Serial.print(" ");
                                 Serial.println(anreadings[2], DEC);
                                 
                          }
                   }
                   else
                   {
                     //'Print "out of range"
                   }
              }   
              if (strcmp(cmdbuf,"SA")==0)                                   // Set Address and save to EEP
              {
                    //'Print "command was Set Address"
                   if ((Param >= 0) && (Param <= 99))
                   {
                     Unitaddress = Param;   //make it the address
                     EEPROM.write(0, Unitaddress);//save to eep                       
                     printaddr(1);                         
                   }
                   else
                   {
                     //'Print "out of range"
                   }
              }
              if (strcmp(cmdbuf,"SB")==0)                                   // Set Baud and save to EEP
              {
                    //'Print "command was Set Baud"
                   if ((Param > 0) && (Param <= 10))
                   {
                     Unitbaud = Param;   
                     EEPROM.write(1, Unitbaud);//save to eep         

                     setbaud(Unitbaud);// start serial port             
                     printaddr(1);                         
                   }
                   else
                   {
                     //'Print "out of range"
                   }
              }
/*
             case "SB":                                     'set Baud
                   If Param > 0 And Param < 13 Then
                     Mybaud = Param
                     Save_eep
                     If Serdef = False Then Setbaud
                     If unitAddress < 10 Then
                         Print "#0" ; unitAddress
                     Else
                         Print "#" ; unitAddress
                     End If
                   End If

             case "SP":                                     'set parity
                   If Param >= 0 And Param < 4 Then
                     Myparity = Param
                     Save_eep
                     if serdef = false then Setparity
                     If unitAddress < 10 Then
                         Print "#0" ; unitAddress
                     Else
                         Print "#" ; unitAddress
                     End If
                   End If
*/                   
/*'             case "SS":                                     'set stop bits
'                Mystopbits = Param
'                if serdef = false then Setstopbits

'             case "SD":                                     'set data bits
'                Mydatabits = Param
'                if serdef = false then Setdatabits
*/

         //}//end switch cmdbuf
       }//end address


      Cmdcomplete = 0;
  }//end cmdcomplete
    while (!(UCSR0A & (1 << TXC0)));    //Wait for Transmit to finish
    digitalWrite(TXEN,LOW);               //Turn off transmit enable
    checkTime();
}//end loop

void checkTime(void)
{
  unsigned long currentTime = millis();
  for (i=0 ; i<8 ; i++)
  {
    if (RelayOnTime[i] != 0)
    {
      if (currentTime - RelayStartTime[i] >= (unsigned long)(RelayOnTime[i]) * 100)
      {
          RelayOnTime[i]= 0;
          Dop[i]= 0; //turn off relay
          writedops(); //write outputs
      }
    }
  }
  if (WatchdogOnTime != 0)
  {
    if (currentTime - WatchdogStartTime >= (unsigned long)(WatchdogOnTime) * 1000) //Watchdog timed out
    {
      for (i=0 ; i<8 ; i++)
      {
        Dop[i] = 0; //turn off relay
       
      }
      writedops(); //write outputs
      WatchdogStartTime = currentTime; //keep the same timeout until it is turned off
    }
  }
}

void readdips(void)
{
 
  for (i=0 ; i<4 ; i++)
  {
    if (digitalRead(Optos[i])==LOW)
    {
      Dip[i] = 1;
    }
    else
    {
      Dip[i] = 0;
    }
  }
}

void writedops(void)
{
  for (i=0 ; i<8 ; i++)
  {
    if (Dop[i]==1)
    {
      digitalWrite(Relays[i],HIGH);
    }
    else
    {
      digitalWrite(Relays[i],LOW);
    }
  }
}

void printaddr(char x) //if x=1 then it prints an enter, if x=2 then it prints a space after the address
{
  UCSR0A=UCSR0A |(1 << TXC0); //Clear Transmit Complete Flag
  digitalWrite(TXEN, HIGH);   //Enable Transmit
  delay(1);                   //Let 485 chip go into Transmit Mode
 
  if (Unitaddress < 10)
  {
    Serial.print("#0");
    Serial.print(Unitaddress, DEC);
  }
  else
  {
    Serial.print("#");
    Serial.print(Unitaddress, DEC);
  }
  switch(x)
  {
    case 1:
        Serial.println(); //print enter
      break;
    case 2:
        Serial.print(" "); //print space
      break;
 
  }
}

void setbaud(char Mybaud)
{
   switch (Mybaud)
   {
    case 1 : Serial.begin(1200);
      break;
    case 2 : Serial.begin(2400);
      break;     
    case 3 : Serial.begin(4800);
      break;
    case 4 : Serial.begin(9600);
      break;
    case 5 : Serial.begin(14400);
      break;
    case 6 : Serial.begin(19200);
      break;
    case 7 : Serial.begin(28800);
      break;
    case 8 : Serial.begin(38400);
      break;
    case 9 : Serial.begin(57600);
      break;
    case 10 : Serial.begin(115200);
      break;
    default:  Serial.begin(9600);
      break;
   }
}

Devreyi kurduktan sonra internet tarayıcımızın adres çubuğuna http://localhost/phpArduino.php adresini yazıp enterlediğimizde kullanıcı arayüzüne ulaşıyor ve ledleri videoda görüldüğü gibi açıp kapatabiliyoruz. Arduino çıkışlarına Led yerine birer transistörle röle kullanırsak yüksek akım çeken alet ya da cihazları kontrol edebilmemiz mümkün.



472
Bu dersimizde arduinoya bağlı bir potansiyometre ile servo motora 171 derecelik açı kontrolü yaptıracağız. Mevcut kodlamada değişiklik yaparak maksimum açıyı azaltabilir ya da çoğaltabilirsiniz. (max 180 derece) Motor beslemesini arduinoden bağımsız bir kaynaktan yapıyoruz. Arduino ile motorun aynı kaynaktan beslenmesi durumunda problem çıkabilir.

<iframe width="640" height="385" src="//www.youtube.com/embed/IGcNe6xyaJY?fs=1&start=" frameborder="0" allowfullscreen></iframe>



Fritzing şeması:
Fritzing dosyasını konu ekinden indirebilirsiniz.



Arduino kodlarımız:
Kod: [Seç]
//Potansiyometre ile servo kontrolü

//HASAN ERTURK & temrinlerim.org

#include <Servo.h>  // Servo kütüphanesini ekliyoruz.
const int pot=A0;   // Servo kontrol potunu bağlayacağımız analog giriş.
Servo myservo;      // Bu komutla servo kontrol nesnemizi oluşturduk.
int potdurum=0;     
int pos = 0;       

void setup(){
  myservo.attach(4); // Servomuzu bağlayacağımız pini belirledik.
}
void loop(){
  potdurum=analogRead(pot);
  pos= map(potdurum,0,1023,8,179);//Pottan okunan değeri  180e oranlıyoruz.
  {
    myservo.write(pos); // Yukarıdaki oranladığımız değeri servoya yazdırıyoruz.
  }
}




473
<iframe width="640" height="385" src="//www.youtube.com/embed/iscyVmYGn_E?fs=1&start=" frameborder="0" allowfullscreen></iframe>
Bu dersimizde arduino, servo motor ve ivme sensörü kullanarak ivme sensörünündeki hareketi taklit eden bir robot yapmayı öğreneceğiz.

İşe servo motorları monte edeceğimiz aparatları yaparak başlayalım. 2 adet tower pro mg 995 servo motor kullanacağız. Bu motoru internet üzerinden satış yapan malzeme satıcılarından temin edebilirsiniz. Ben gittigidiyor.com sitesinden 24.90TLye aldım.



Motoru bir bakırlı prtinaks üzerine sabitlemeyi düşündüm. Bunun için ares programında bir kalıp hazırladım. Bu kalıba ait ares dosyasını konu ekinden indirebilirsiniz. Bilinen yöntemlerle baskı devremizi çıkarıyoruz.



Daha sonra her iki motorumuzu hazırlamış olduğumuz plaketlere şekilde görüldüğü gibi monte ediyoruz.



Şimdi de her iki motor bloğu tarafından hareket ettirilen parçaları yine bakırlı pertinaks ile yapacağız. Bu parçalara ait ares çizimi ekte mevcuttur. Yine bilinen yöntemlerle baskı devremizi çıkarıyoruz.



Şimdi hazırladığımız parçaları birleştirelim:















Şimdi de robotumuza bir kaç led ekleyelim. Baskı devresi ekte mevcuttur.



Led kartımızı da robata ekleyelim:
Ledlerimiz paralel bağlı olup katotlaına birer tane 470 ohm direnç bağlanmıştır.



Şimdi tüm parçalarımızı birleştirelim:












Fritzing çizimi:
Fritzing dosyaları konu ekinde mevcuttur.


Sensör için Bağlantı Pinleri:
• Vcc:5V
• Gnd: Gnd
• SDA:A4
• SCL:A5

Servo Motor için Bağlantı Pinleri:
• Kahverengi ya da siyah Kablolar:GND
• Kırmızı Kablo: 5V
• Servo 1 Sinyali: D9
• Servo 2 Sinyali: D10

Arduino kodlarımız:
Kod: [Seç]
/*
?VME SENSORU ?LE ile 2 servo motor kontrol
*/

#include <Servo.h>
#include<Wire.h>
const int MPU=0x68;  // I2C address of the MPU-6050
int AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

Servo myservo1;  // create servo object to control a servo
Servo myservo2;
int potpin1 = 0;  // analog pin used to connect the potentiometer
int potpin2=1;
int val1;    // variable to read the value from the analog pin
int val2;
void setup()
{
   Wire.begin(); //seri haberle?me
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(9600);
  myservo1.attach(9);
 myservo2.attach(10); // attaches the servo on pin 9 to the servo object
}

void loop()
{
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU,14,true);  // request a total of 14 registers
  AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)     
  AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.print(AcZ);
  Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);  //equation for temperature in degrees C from datasheet
  Serial.print(" | GyX = "); Serial.print(GyX);
  Serial.print(" | GyY = "); Serial.print(GyY);
  Serial.print(" | GyZ = "); Serial.println(GyZ);
 
  val1 =AcX;       // reads the value of the potentiometer (value between 0 and 1023)
  val1 = map(val1, -16000, 16000, 0, 180);     // scale it to use it with the servo (value between 0 and 180)
  val2 = AcY;           // reads the value of the potentiometer (value between 0 and 1023)
  val2 = map(val2, -16000, 16000, 0, 180);
  myservo1.write(val1);                  // sets the servo position according to the scaled value
  myservo2.write(val2);
  delay(100);                           // waits for the servo to get there



474
Bilgisayar arayüzünü konu ekinden indirebilirsiniz. Arayüzdeki butonlara tıklayarak çıkıştaki ledleri ya da röleleri kontrol edebilirsiniz. Devre mevcut hali ile led çıkışlı tasarlanmıştır. Arduinonuz için bir shild tasarlayarak röle çıkışlı hale getirebilirsiniz.



<iframe width="640" height="385" src="//www.youtube.com/embed/DSWdyzQsOa4?fs=1&start=" frameborder="0" allowfullscreen></iframe>



C# kodları:
Kod: [Seç]
using System;

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

namespace ON_OFF // Uygulamamızın Adı
{
    public partial class Form1 : Form
    {
       
        public Form1()
        {
            InitializeComponent();
           
        }

       /*
       Aşağıdaki kod dizisinde yaptığımız resimlere tıklandığında serial üzerinden ilgili buton resmi için ilgili arduino                pinini tetikleyecek bir String değer göndermek. Aynı zamanda görsellik için her resme tıkladığımızda resimin                    değişip off yada on resminin açılması. Bunuda picture.Box ların görünürlüğünü kontrol eden "visible" özelliği ile            yaptık.Aşağıdaki "pictureBox1_Click" kısmında Serialden String "1" verisi göndererek 1 nolu ledin yanması                      sağlanacaktır.
       */

        private void pictureBox1_Click(object sender, EventArgs e)
        {
            pictureBox1.Visible = false;
            pictureBox2.Visible = true;
            serialPort1.Write("1");
           
        }

        /*
            Aşağıdaki "pictureBox2" ise ilk butonun ON resmidir.  "pictureBox2_Click" ile arduinodaki ilk lede string            "2" gönderilerek ledin kapanması sağlanır. Yine bu tıklama işlemi ile resim değişerek ilk resim OFF ortaya çıkarak             ON resmi kaybolur.
        */

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            pictureBox1.Visible = true;
            pictureBox2.Visible = false;
            serialPort1.Write("2");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < System.IO.Ports.SerialPort.GetPortNames().Length; i++)
            {
                comboBox1.Items.Add(System.IO.Ports.SerialPort.GetPortNames()[i]);
            }
        }

        private void pictureBox3_Click(object sender, EventArgs e)
        {
            pictureBox3.Visible = false;
            pictureBox4.Visible = true;
            serialPort1.Write("3");
        }

        private void pictureBox4_Click(object sender, EventArgs e)
        {
            pictureBox3.Visible = true;
            pictureBox4.Visible = false;
            serialPort1.Write("4");
        }

        private void pictureBox6_Click(object sender, EventArgs e)
        {
            pictureBox5.Visible = true;
            pictureBox6.Visible = false;
            serialPort1.Write("6");
        }

        private void pictureBox5_Click(object sender, EventArgs e)
        {
           
            pictureBox5.Visible = false;
            pictureBox6.Visible = true;
            serialPort1.Write("5");
        }

        private void pictureBox7_Click(object sender, EventArgs e)
        {
            pictureBox7.Visible = false;
            pictureBox8.Visible = true;
            serialPort1.Write("7");
        }

        private void pictureBox8_Click(object sender, EventArgs e)
        {
            pictureBox7.Visible = true;
            pictureBox8.Visible = false;
            serialPort1.Write("8");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.PortName = comboBox1.Text;
            label6.Text = "Arduino'ya Bağlandı (" + comboBox1.Text + ")";
            serialPort1.Open();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            label6.Text = "COM Port Seç !";
            serialPort1.Close();
        }
       
    }
}

Arduino kodları:
Kod: [Seç]
int gelen;
int Led1=4;
int Led2=5;
int Led3=6;
int Led4=7;

void setup() {

Serial.begin(9600);
pinMode(Led1,OUTPUT);
pinMode(Led2,OUTPUT);
pinMode(Led3,OUTPUT);
pinMode(Led4,OUTPUT);
}
void loop()
{
  if(Serial.available() >0)  // Serial haberleşmenin aktif olup olmadığının kontrolü
    {
      gelen = Serial.read(); // Serialden gelen veri "gelen" değişkenine yazılır
      if(gelen == '1')            // Gelen verilerin kontrolü yapılarak ilgili ledler yakılır.
      {
        digitalWrite(Led1,HIGH);
      }
      if(gelen == '2')
      {
        digitalWrite(Led1,LOW);
      }
      if(gelen == '3')
      {
        digitalWrite(Led2,HIGH);
      }
      if(gelen == '4')
      {
        digitalWrite(Led2,LOW);
      }
      if(gelen == '5')
      {
        digitalWrite(Led3,HIGH);
      }
      if(gelen == '6')
      {
        digitalWrite(Led3,LOW);
      }
      if(gelen == '7')
      {
        digitalWrite(Led4,HIGH);
      }
      if(gelen == '8')
      {
        digitalWrite(Led4,LOW);
      }
    }
}

Kodlama ve arayüz tasarımı: Robot projeleri mvaslan.blogspot.com.tr

Fritzing çizimi:
Fritzing dosyasını konu ekinden indirebilirsiniz.


475
1982-1986 yılları arasında ABD'de yayınlanan ve dünyanın birçok ülkesinde popüler olan bir televizyon dizisi olan Kara Şimşek, Türkiye'de de TRT tarafından yayınlanmıştır. Bu dizideki Knight Rider ışık efektini arduino kullanarak yapacağız.
<iframe width="640" height="385" src="//www.youtube.com/embed/ArMJQ8h96uM?fs=1&start=" frameborder="0" allowfullscreen></iframe>

Fritzing çizimi:
Fritzing dosyaları ektedir.


Arduino kodlarımız:
Kod: [Seç]
/* Knight Rider 3
 * --------------
 *
 * This example concentrates on making the visuals fluid.
 *
 *
 * (cleft) 2005 K3, Malmo University
 * @author: David Cuartielles
 * @hardware: David Cuartielles, Aaron Hallborg
 */

int pinArray[] = { 3, 4, 5, 6, 7, 8, 9};
int count = 0;
int timer = 10;

void setup(){
  for (count=0;count<8;count++) {
    pinMode(pinArray[count], OUTPUT);
  }
}

void loop() {
  for (count=0;count<6;count++) {
   digitalWrite(pinArray[count], HIGH);
   delay(timer);
   digitalWrite(pinArray[count + 1], HIGH);
   delay(timer);
   digitalWrite(pinArray[count], LOW);
   delay(timer*2);
  }
  for (count=6;count>0;count--) {
   digitalWrite(pinArray[count], HIGH);
   delay(timer);
   digitalWrite(pinArray[count - 1], HIGH);
   delay(timer);
   digitalWrite(pinArray[count], LOW);
   delay(timer*2);
  }
}

476
Bu dersimizde bir ledi arduino ile yavaş yavaş yakıp yavaş yavaş söndüreceğiz. Kodlamadaki parametreleri değiştirerek ortaya çıkan animasyonu değiştirebilirsiniz.
<iframe width="640" height="385" src="//www.youtube.com/embed/jh_dPHIkH2U?fs=1&start=" frameborder="0" allowfullscreen></iframe>



Fritzing şeması:
Fritzing dosyasını konu ekinden indirebilirsiniz.


Arduino kodlarımız:
Kod: [Seç]
int i = 0;
const int LED = 11; //define the pin we use for LED
 
void setup() {
  pinMode(LED, OUTPUT); //set pin 11 as OUTPUT
}
 
void loop() {
    for (int i = 0; i < 255; i++){ //if i is less than 255 then increase i with 1
    analogWrite(LED, i); //write the i value to pin 11
    delay(6); //wait 5 ms then do the for loop again
  }
  for (int i = 255; i > 0; i--){ //descrease i with 1
    analogWrite(LED, i);
    delay(6);
  }
}

477
Bu dersimizde arduino ve 7 segment ortak katot display kullanarak 0-9 ileri sayıcı uygulaması yapacağız. Butona her basıldığında displayde görüntülen rakam 1 artacaktır.


<iframe width="640" height="385" src="//www.youtube.com/embed/W_1ZboB4u6I?fs=1&start=" frameborder="0" allowfullscreen></iframe>

Fritzing çizimi:
Fritzing dosyasını konu ekinden indirebilirsiniz.


ISIS simülasyonu:
<iframe width="640" height="385" src="//www.youtube.com/embed/W4QX2aUI7NE?fs=1&start=" frameborder="0" allowfullscreen></iframe>

ISIS çizimi:
ISIS dosyasını ve hex dosyasını konu ekinden indirebilirsiniz.





Arduino kodları:
Kod: [Seç]
/*
Arduino 7-Segment LED Display for Common Cathode Displays
Arduino Pins: 2,3,4,5,6,7,8
Display Pins: 7,6,4,2,1,9,10
Display Pins 3&8 should go to GND
Switch Input is at Pin 9
Source: http://www.electroschematics.com/9636/arduino-segment-display-counter/
*/
byte numbers[10] = {
                    B11111100, B01100000, B11011010, B11110010, B01100110,
                    B10110110, B10111110, B11100000, B11111110, B11100110
                    };
void setup() {
    for(int i = 2; i <= 8; i++) {
        pinMode(i, OUTPUT);
    }
    pinMode(9, INPUT);
}
 
int counter = 0;
bool go_by_switch = true;
int last_input_value = LOW;
 
void loop() {
    if(go_by_switch) {
        int switch_input_value = digitalRead(9);
        if(last_input_value == LOW && switch_input_value == HIGH) {
            counter = (counter + 1) % 10;
        }
        last_input_value = switch_input_value;
    } else {
        delay(500);
        counter = (counter + 1) % 10;
    }
    writeNumber(counter);
}
 
void writeNumber(int number) {
    if(number < 0 || number > 9) {
        return;
    }
    byte mask = numbers[number];
    byte currentPinMask = B10000000;
    for(int i = 2; i <= 8; i++) {
        if(mask & currentPinMask) digitalWrite(i,HIGH);
        else digitalWrite(i,LOW);
    currentPinMask = currentPinMask >> 1;
    }
}

478
Motor kontrol uygulamaları / 11. L298 İle Motor Kontrolü
« : 18 Temmuz 2015, 16:18:57 »
L298N Voltaj Regulatörlü Çift Motor Sürücü Kartı ve arduino ile 2 dc motoru birer saniye aralıklarla sıralı çalıştıracağız.
<iframe width="640" height="385" src="//www.youtube.com/embed/vlgRVPCk0aA?fs=1&start=" frameborder="0" allowfullscreen></iframe>

Kodlarda editleme yaparak süreyi ve motor hızını ayarlayabilirsiniz.
24V'a kadar olan motorları sürmek için hazırlanmış olan bu motor sürücü kartı, iki kanallı olup, kanal başına 2A akım vermektedir. Kart üzerinde L298N motor sürücü entegresi kullanılmıştır. Sumo, mini sumo, çizgi izleyen robotlarda ve çok çeşitli motor kontrol uygulamalarında kullanılabilir.
 
DC motorlardan ayrı olarak step motor kontrolüne de imkan sağlamaktadır. Daha ayrıntılı bilgi için aşağıdaki örnek dokumanı inceleyebilirsiniz.

Özellikleri:
Birbirinden bağımsız olarak iki ayrı motoru kontrol edebilir.
Kanal başına 2A akım verebilmektedir.
Üzerinde dahili regülatörü vardır.
Yüksek sıcaklık ve kısa devre koruması vardır.
Motor dönüş yönüne göre yanan ledler vardır.
Kart üzerinde dahili soğutucu vardır.
Akım okuma (current sense) pinleri dışa verilmiş haldedir.
Kartın 4 yanında istenilen yüzeye sabitleyebileceğiniz 4 adet vida deliği bulunmaktadır.
Pin Bağlantıları :
ENA: Sol motor kanalını aktif etme pini
IN1: Sol motor 1. girişi
IN2: Sol motor 2. girişi
IN3: Sağ motor 1. girişi
IN4: Sağ motor 2. girişi
ENB: Sağ motor kanalını aktif etme pini
MotorA: Sol motor çıkışı
MotorB: Sağ motor çıkışı
VCC: Besleme voltaj girişi(4.8V-24V)
GND: Toprak bağlantısı
5V: 5V çıkışı
Ürün üzerinde ayrıca jumper takılmış pinler de yer almaktadır. Bu pinler opsiyonel kullanımlar ve farklı özellikleri aktif etmek için kullanılabilinmektedir.
CSA: A motor sürücü kanalının akım çıkışıdır. Buradan jumper çıkarılarak çekilen akım değeri analog voltaj olarak okunabilinmektedir.
CSB: B motor sürücü kanalının akım çıkışıdır. Buradan jumper çıkarılarak çekilen akım değeri analog voltaj olarak okunabilinmektedir.
V1: IN1 girişini direk olarak 5V'a çeken pull-up direncine bağlı olan bir jumperdır. Bu sayede siz toprağa çekmedikçe pine sürekli olarak 5V gelecektir.
V2: IN2 girişini direk olarak 5V'a çeken pull-up direncine bağlı olan bir jumperdır. Bu sayede siz toprağa çekmedikçe pine sürekli olarak 5V gelecektir.
V3: IN3 girişini direk olarak 5V'a çeken pull-up direncine bağlı olan bir jumperdır. Bu sayede siz toprağa çekmedikçe pine sürekli olarak 5V gelecektir.
V4: IN4 girişini direk olarak 5V'a çeken pull-up direncine bağlı olan bir jumperdır. Bu sayede siz toprağa çekmedikçe pine sürekli olarak 5V gelecektir.
5V-EN: 7805 hattını aktif ve pasif hale getiren jumperder. Takılı durumda kartın 5V çıkışı aktif olur ve buradan 5V çekilebilir. Çıkarıldığı durumda ise bu hat pasif konuma geçer.

Kodlarımız:
Kod: [Seç]
// # Editor     : Lauren from DFRobot
// # Date       : 17.02.2012
 
// # Product name: L298N motor driver module DF-MD v1.3
// # Product SKU : DRI0002
// # Version     : 1.0
 
// # Description:
// # The sketch for using the motor driver L298N
// # Run with the PWM mode
 
// # Connection:
// #        M1 pin  -> Digital pin 4
// #        E1 pin  -> Digital pin 5
// #        M2 pin  -> Digital pin 7
// #        E2 pin  -> Digital pin 6
// #        Motor Power Supply -> Centor blue screw connector(5.08mm 3p connector)
// #        Motor A  ->  Screw terminal close to E1 driver pin
// #        Motor B  ->  Screw terminal close to E2 driver pin
// #
// # Note: You should connect the GND pin from the DF-MD v1.3 to your MCU controller. They should share the GND pins.
// #
 
int E1 = 6;
int M1 = 7;
int E2 = 5;                         
int M2 = 4;                           
 
void setup()
{
    pinMode(M1, OUTPUT);   
    pinMode(M2, OUTPUT);
}
 
void loop()
{
  int value;
  for(value = 0 ; value <= 255; value+=128)
  {
    digitalWrite(M1,HIGH);   
    digitalWrite(M2,LOW);       
    analogWrite(E1, value);   //PWM Speed Control
    analogWrite(E2, value);   //PWM Speed Control
    delay(1000);
    digitalWrite(M1,LOW);   
    digitalWrite(M2,HIGH);       
    analogWrite(E1, value);   //PWM Speed Control
    analogWrite(E2, value);   //PWM Speed Control
    delay(1000);
  } 
}

Resimler:




Devre elemanları bağlantısına ait açıklama kodlar içerisinde Connection: başlığı altında mevcuttur.

479
<iframe width="640" height="385" src="//www.youtube.com/embed/Quy5E4zgWfY?fs=1&start=" frameborder="0" allowfullscreen></iframe>

Devrenin bitmiş hali:



Kodlarımız:
Kod: [Seç]
int pot=A5;
int motor=5;
int hiz;

void setup() {
 
}

void loop() {
  hiz= analogRead(pot);
  hiz= map(hiz, 0, 1023, 0, 225);
  analogWrite(motor, hiz);
  delay(10);
}

Devre elemanlarının deney borduna yerleşimi:
Fritzing dosyası konu ekinde mevcuttur.


ISIS devre şeması:
ISIS dosyası konu ekinde mevcuttur.

480
Arduino Genel / 19. Ultrasonik Sensör
« : 15 Temmuz 2015, 07:43:06 »
Bu uygulamada ultrasonik mesafe sensörünün algıladığı mesafeyi cm cinsinden seri port ekranından görüntüleyeceğiz.





Kodlarımız:
Kod: [Seç]
#define trigPin 3 // Tetik Pini
#define echoPin 4 // Eko Bilgi Alma Pini
const int groundpin = 5; // Toprak Ucu
const int powerpin = 2; // +5V Ucu
void setup() // Tanımlamalar
{
pinMode(groundpin, OUTPUT); // Toprak Pini Çıkış Yapıldı
pinMode(powerpin, OUTPUT); // 5V Pini Çıkış Yapıldı
digitalWrite(groundpin, LOW); // Ground 0V'a çekildi
digitalWrite(powerpin, HIGH); // PowerPin 5V'a çekildi.
Serial.begin (9600); // İletişim hızı belirlendi
pinMode(trigPin, OUTPUT); // Tetik Pini Çıkış
pinMode(echoPin, INPUT); // Eko Bilgi Pini Giriş
}
void loop() {
long duration, distance; //Duration ve distance değişkenleri long değişkeni olarak tanımlanıyor.
digitalWrite(trigPin, LOW); // Düşüğe çek
delayMicroseconds(2); // 2 mikrosaniye bekle
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // 10 Mikrosaniye Yüksekte Bekle
digitalWrite(trigPin, LOW); // Tetik Pinini düşüğe (0V) çek
duration = pulseIn(echoPin, HIGH); // Eko Bilgi Pini 5V gelmesinden itibaren süre ölç duration bilgisine kaydet
distance = (duration/2) / 29.1; //Mesafe santimetre çevrimi için oranlama
if (distance >= 200 || distance <= 0){
Serial.println("Menzil Disi"); //Menzil Dışında
}
else {
Serial.print(distance); // Cm bilgisini ilet
Serial.println(" cm"); // Cm Yaz:
}
delay(500); //500 ms bekle
}

Sayfa: 1 ... 30 31 [32] 33 34 ... 45