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
« : 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. Fritzing çizimi:Fritzing dosyası konu ekinde mevcuttur. Arduino kodlarımız:Kodlara ait arduino dosyası konu ekinde mevcuttur. /* 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
« : 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:ISIS devre şeması:ISIS dosyasını ve hex kodunu konu ekinden indirebilirsiniz. Arduino kodları:ide dosyasını konu ekinden de indirebilirsiniz. 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. :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
« : 05 Ağustos 2015, 21:49:04 »
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:#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
« : 01 Ağustos 2015, 18:05:46 »
470
« : 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. Fritzing çizimi: Çizime ait dosyayı konu ekinden indirebilirsiniz. Arduino kodlarımız: #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
« : 24 Temmuz 2015, 21:22:09 »
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 xampp, easyphp.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:<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: /* * 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
« : 23 Temmuz 2015, 04:00:09 »
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. Fritzing şeması:Fritzing dosyasını konu ekinden indirebilirsiniz. Arduino kodlarımız: //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
« : 22 Temmuz 2015, 01:05:54 »
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:/* ?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
« : 21 Temmuz 2015, 21:18:51 »
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. C# kodları: 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ı: 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.trFritzing çizimi:Fritzing dosyasını konu ekinden indirebilirsiniz.
475
« : 20 Temmuz 2015, 00:00:44 »
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. Fritzing çizimi:Fritzing dosyaları ektedir. Arduino kodlarımız:/* 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
« : 19 Temmuz 2015, 23:21:42 »
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. Fritzing şeması:Fritzing dosyasını konu ekinden indirebilirsiniz. Arduino kodlarımız: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
« : 19 Temmuz 2015, 11:54:46 »
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. Fritzing çizimi:Fritzing dosyasını konu ekinden indirebilirsiniz. ISIS simülasyonu:ISIS çizimi:ISIS dosyasını ve hex dosyasını konu ekinden indirebilirsiniz. Arduino kodları:/* 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
« : 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. 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:// # 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
« : 15 Temmuz 2015, 12:15:43 »
Devrenin bitmiş hali:Kodlarımız: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
« : 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: #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
|