Elektronik
OKUDUĞUNUZ KONU
Basit Yürüyen Böcek Robot Yapımı
19

Basit Yürüyen Böcek Robot Yapımı

Yazar : Murat Duran25 Haziran 2015
Projeyi Satın Al
Bu projeyi kurulu çalışır halde yada isterseniz demonte halde satın alabilirsiniz.Proje ile birlikle yapım aşaması resimleri bağlantı şemaları ve kodları açık kaynak olarak gönderilir. "Satın Almak İçin Yukarıda Butona Basınız"

Bu projemizde basit bir yürüyen böcek robot yapımını göstereceğiz basit malzemelerle fazla bilgiye gerek olmadan yapabileceğiniz bu robotun çalışma mantığı tamamen servo motorların hareketlerinden kaynaklanmaktadır.Kullancağımız servo motorlar sayesinde hareket kazandırdığımız bu robotun yapımına geçelim.Robotu yapmak için resimlerden ve talimatlardan yardım alınız.

Malzemelerimiz

1- Plastik levha
2- 2 adet servo motor
3- Mikrodenetleyici (AVR ATMega 8)
4- Batarya
5- Kalın bakır tel 12″ ve 8″ kalınlığında 2 adet

Atmega8 İşlemci Kodlarını İndir

Öncelikle robotumuzu yapmak için plastik levhayı kesiyoruz plastik levha seçmemizin nedeni dayanıklı ve esnek olmasıdır.Bu yüzden levha seçerken dayanıklı ve esnek olanlardan seçim yapmanız gerekmektedir.Plastik levhayı keserken resimdeki örnekten yararlanınız.Daha sonra servo motorlarımızı yerleştiriyoruz.Daha sonra straforumuzu büküyoruz resimlerde görüldüğü gibi.Bükmemizin sebebi hareket kabiliyetini artırmak içindir.Daha sonra batarya bağlantısını yapıyoruz.Sonra bakır tellerimizi resimlerde görüldüğü gibi büküp servo pervanelerine monte ediyoruz.

Projeyi isterseniz arduino nano kullanarak da yapabilirsiniz.Hem programlaması basit olur hemde daha yenilikçi bir uygulama olur.

servoWalker.c kodları


/* Software to go with the 2-motor servowalker */
/* Simply drives 2 servos (front, rear) to different positions. Alternates. */

/* Standard Includes */

#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/io.h>

#define F_CPU 1000000UL /* Stock 1mHz rate */
#include <util/delay.h>

/* Pin hookups defined here */
#define FRONT_MOTOR PB1
#define FRONT_MOTOR_OC OC1A
#define FRONT_MOTOR_OC_REGISTER OCR1A

#define REAR_MOTOR PB2
#define REAR_MOTOR_OC OC1B
#define REAR_MOTOR_OC_REGISTER OCR1B
/* Centering and Tweaking */
/* These values vary across motors -- tweak here to get it centered */
#define FRONT_CENTER 1340
#define REAR_CENTER 1400
#define SLEW_SCALE 6
/* Declares */
void init(void);
int main(void);

void turnFront(uint16_t, uint16_t);
/* turns to location, waiting for specified milliseconds */
void turnRear(uint16_t, uint16_t);
/* turns to location, waiting for specified milliseconds */

void walkForward(uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
/* front right, back right, front left, back left, pause */
void walkBackward(uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
/* front right, back left, front left, back right, pause */

void stand(void);
/* centers for standing */
void init(void){
/* Setup output on the motor control pins */
DDRB = (1 << FRONT_MOTOR) | (1 << REAR_MOTOR);

/* Set up Timer1 (16bit) to give a pulse every 20ms*/
/* Using Fast PWM mode -- top in ICR1, match on OCR1A, OCR1B */
TCCR1A = (1 << COM1A1) | (1 << COM1B1); /* output on pins, p. 98 */
TCCR1A |= (1 << WGM11); /* fast PWM, top is ICR1, p. 99 */
TCCR1B = (1 << WGM13) | (1 << WGM12);
TCCR1B |= (1 << CS10);/* no prescaling -- counting in microseconds, p. 100 */

FRONT_MOTOR_OC_REGISTER = FRONT_CENTER; /* start off centered */
REAR_MOTOR_OC_REGISTER = REAR_CENTER;
ICR1 = 20000; /* TOP value = 20ms */

}

int main(void) {
init(); /* set up the chip */
stand(); /* center the legs */
_delay_ms(1000); /* pause for a while standing */
_delay_ms(1000);
_delay_ms(1000);
_delay_ms(1000);
_delay_ms(1000);

while(1){
walkForward(300, 150, 300, 150, 0); /* then walk! */
}

}

/* Walking functions */

void turnFront(uint16_t turnPulseWidth, uint16_t millisecondsTurnTime){
FRONT_MOTOR_OC_REGISTER = turnPulseWidth; /* tell motor where to go */
_delay_ms(millisecondsTurnTime); /* wait for it to get there */
}

void turnRear(uint16_t turnPulseWidth, uint16_t millisecondsTurnTime){
REAR_MOTOR_OC_REGISTER = turnPulseWidth;/* tell motor where to go */
_delay_ms(millisecondsTurnTime);/* wait for it to get there */
}

void stand(void){ /* centers legs for standing */
turnRear(REAR_CENTER, 200); /* rear first b/c has tendency to bobble */
turnFront(FRONT_CENTER, 200);
turnRear(REAR_CENTER, 100);
}

void walkForward(uint16_t frontRight, uint16_t rearRight, uint16_t frontLeft, uint16_t rearLeft,
uint16_t pause){
/* Timing (SLEW_SCALE) is ad-hoc.
Slew rate depends on how much the engines are loaded:
leg geometry, terrain, battery charge, and phase of the moon */
turnFront(FRONT_CENTER + frontRight, (frontRight + frontLeft)*SLEW_SCALE);
_delay_ms(pause);
turnRear(REAR_CENTER - rearRight, (rearRight + rearLeft)*SLEW_SCALE);
_delay_ms(pause);
turnFront(FRONT_CENTER - frontLeft, (frontRight + frontLeft)*SLEW_SCALE);
_delay_ms(pause);
turnRear(REAR_CENTER + rearLeft, (rearRight + rearLeft)*SLEW_SCALE);
_delay_ms(pause);
}

void walkBackward(uint16_t frontRight, uint16_t rearRight, uint16_t frontLeft, uint16_t rearLeft,
uint16_t pause){
turnFront(FRONT_CENTER + frontRight, (frontRight + frontLeft)*SLEW_SCALE);
_delay_ms(pause);
turnRear(REAR_CENTER + rearRight, (rearRight + rearLeft)*SLEW_SCALE);
_delay_ms(pause);
turnFront(FRONT_CENTER - frontLeft, (frontRight + frontLeft)*SLEW_SCALE);
_delay_ms(pause);
turnRear(REAR_CENTER - rearLeft, (rearRight + rearLeft)*SLEW_SCALE);
_delay_ms(pause);
}

servoWalker.h kodları


/* Standard Includes */

#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/io.h>

#define F_CPU 1000000UL /* Stock 1mHz rate */
#include <util/delay.h>

/* Pin hookups defined here */
#define FRONT_MOTOR PB1
#define FRONT_MOTOR_OC OC1A
#define FRONT_MOTOR_OC_REGISTER OCR1A

#define REAR_MOTOR PB2
#define REAR_MOTOR_OC OC1B
#define REAR_MOTOR_OC_REGISTER OCR1B
/* Centering and Tweaking */
/* These values vary across motors -- tweak here to get it centered */
#define FRONT_CENTER 1340
#define REAR_CENTER 1400
#define SLEW_SCALE 6
/* Declares */
void init(void);
int main(void);

void turnFront(uint16_t, uint16_t);
/* turns to location, waiting for specified milliseconds */
void turnRear(uint16_t, uint16_t);
/* turns to location, waiting for specified milliseconds */

void walkForward(uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
/* front right, back right, front left, back left, pause */
void walkBackward(uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
/* front right, back left, front left, back right, pause */

void stand(void);
/* centers for standing */
SİZCE NASIL OLMUŞ?
Beğendim
48%
İlginç
16%
Eh İşte
3%
Anlamadım
19%
Kötü
6%
Berbat
7%
YAZAR HAKKINDA
Murat Duran
Murat Duran
Açık kaynak donanım ve yazılım geliştiricisiyim , mekanik ve robotik sistemler üzerinde çalışmalar yapmaktayım.Ayrıca bir start-up firması olan Proje Hocam 'ın kurucuyum.
19 YORUMLAR
  • Kerem Taçlı
    13 Ağustos 2015 at 17:15

    merhaba ben bu robotu yapıcam ama bu atmel işlemcinin yerine pic kullansam olurmu?

  • Murat Duran
    14 Ağustos 2015 at 08:46

    kullanabilirsin ama kodları pic e göre düzenlemen gerekecek

  • 11 Eylül 2015 at 17:43

    merhaba. arduino nano kullanarak. bu robot icin olumu? tesekkurler.
    iyi calismalar.

    • Murat Duran
      12 Eylül 2015 at 14:53

      Buradaki kodlar arduino için değil, ama kodları düzenleyip arduino için hazırlanırsa nano kullanarak yapabilirsiniz.

      • mustafa yasar bekgoz
        8 Ocak 2016 at 21:48

        Murat bey naçizane sorum ayaklara silikon kaymaz bir plastik montajlasak daha iyi olmazmi?

  • 11 Eylül 2015 at 17:44

    merhaba. bide kod indirilmiyor. ne yapmam. gerekli?
    iyi calismalar.

    • Murat Duran
      12 Eylül 2015 at 14:56

      Kod indirme sayfasına geldiğinizde üst kısımda indir butonu mevcut oradan indirebilirsiniz, yada yne aynı indirme sayfasında CRTL + S tuşlarına aynı anda basarak da indirebilirsiniz

  • 26 Eylül 2015 at 22:18

    merhaba. bu robota. arduino nano. bende var kulansam.olurmu. önu ögrenecektim. sizden? tesekkurler. kod. sorun yok.
    sadece. ATMega 8) yerine. arduino. nano. kulanmak. istiyorum. olurmu? islerinizden. basarilar. dilerim.

    arduino. .nano. kulanirsak. olurmu? bide baglantilari. gosterseniz.? tesekkurler.

  • canan
    21 Ekim 2015 at 23:19

    merhaba.bu robotu istediğim yöne götürecek şekilde yapmam mümkün mü acaba biraz daha karmaşıklaştırıp proje olarak sunmak istiyorum da

    • Murat Duran
      21 Ekim 2015 at 23:53

      İstediğiniz yöne götürebilmeniz için bir kontrol mekanizması eklemeniz gerekecek, uzaktan kumanda wifi , bluetooth kontrol gibi.Buda devrenizi büyüyetecek ve programınızı karmaşıklaştıracaktır.Bunun için en uygunu bence bir arduino nano ve bluetooth modülüdür.Bu ekipmanlar ile devrenizi kurup daha pratik yapabilirsiniz.

  • Enes Alkan
    23 Kasım 2015 at 17:58

    Ya bu robotu nasil on off düğmesi yapacaz? Videoda pek belli degil de

  • Enes Alkan
    23 Kasım 2015 at 20:35

    yani basit bir anahtar sistemi mi diyosunuz yanlış anlamadıysam

  • Aykut Demir
    24 Kasım 2015 at 20:22

    ya kodları arduıno için çevirip atabilir misiniz _? Ya da ben nasıl çevirebilirim

  • ahmet
    10 Mart 2016 at 11:19

    kodları girmek zorunlumu gircek isek nereye giricez peki ?

  • ahmet
    10 Mart 2016 at 11:20

    kodları ereye gircez bu işlerde yeniyimde

  • EDA DANER
    7 Haziran 2016 at 19:32

    merhaba bu kod dediiğiniz şey ne işe yarıyor robotu bitirdikten sonra nereye yazıcaz bi yardımcı olurmsunuz

YORUM YAP