Bisikletler Elektronik Vites Mekanizması

Bisikletler Elektronik Vites Mekanizması yapalım. Bisiklet binmeyi çok severim. Bisiklet ile uğraşmayı ise daha çok severim. Bir gün bisikletin ön vites mekanizmasına motor takıp elektromekanik olarak kontrol etmek istedim.

Amacım bisikletler için otomatik vites yapmaktı bu sayede daha az ekipman ve daha hafif bir sistemin tasarlanarak ve sabit kadans sistemi ile kullanıcılara maximum performans sağlanması ve sabit zincir gerilimi sayesinde daha az zincir kopma ve dişli aşınmasını önlemesi bu sayede daha uzun ömürlü ekipman kullanımı sağlamaktı.

İlk önce sistemin nasıl çalıştığını anlamak için mekanizmayı inceledim. Bir telin çekilmesiyle ufak bir mekanizmanın zincir iteleme harektiyle oluştuğunu anladım.

Bisiklet Elektronik Vites Uygulaması
Bisiklet Elektronik Vites Uygulaması

Bu mekanizmaya bir servo motor takarak pic ile kontrol ettim. Kontrol kısmını iki buton ile sola ve sağa çalışacak şekilde programladım.

Bisiklet Elektronik Vites Devresi
Bisiklet Elektronik Vites Devresi
Bisiklet Elektronik Vites Buton Kontrolü
Bisiklet Elektronik Vites Buton Kontrolü

Bu sayede butona basılınca servo motor belirli bir açıda dönmekte ve mekanizma zinciri bir sonraki dişliye geçirmektedir. Burada dikkat etmek ve ayarlamak gereken bazı noktalar vardır. Zincir bir sonraki dişliye geçerken o dişilinin ekseninden biraz daha fazla gitmesi dişliye geçmesi açısından kolaylık sağlayabiliyor. Az iteleme haareketi yaptıtılırsa zincir geçmez veya çok giderse bir sonraki dişliye sürtünmeler olabilir.

Pic Programı

/*
Project : servo kontrol buton ile bisiklet projesi
Author  : www.kaizen40.com
Comment : servo motor kullanımını ogrenmek

periyod 20ms, duty 600us ile 2000us arasında değişebilir.

long türündeki bir deðer ile çarpma islemi yapılırken sadece long türündeki bir değer kullanılabilir.*****

duty    konum (derece)
----    -----
1000us  -90
1500us  0
2000us  +90

*/

#if defined (__PCM__)
#include <16F628A.h> 
#use delay(clock=4000000)
#fuses NOWDT,PUT,NOLVP,NOBROWNOUT,NOMCLR,INTRC_IO,NOPROTECT
#endif

#byte PORTB = 0x06
#byte PORTA = 0x05


signed long long periyod, doluluk, bosluk;     // periyod degeri 255 den büyük oldugu için log olarak tanımlandı



void ee_write_long(unsigned int addr , signed long long *longptr)
{
unsigned char edata;
unsigned char I;
    for(I=0;I<4;I++){
      edata = *((unsigned char *)longptr+I);
      write_eeprom(addr+I,edata);
   }
}

void ee_read_long(unsigned int addr , signed long long *longptr)
{
unsigned char edata;
unsigned char I;
   for(I=0;I<4;I++){
      edata=read_eeprom(I+addr);   
        *((unsigned char *)longptr+I) = edata;
   }
}

void main()
{
   output_b(0);
                                              // pwm periyodu = 20ms olarak ayarladık fakat döngü içinde işlemler olduğu için
   periyod = 19600;                           // periyod 20ms i aşıyor. deneme yanılma yöntemi ile 20ms olması için bu değer girildi
   doluluk = 1850;                            // doluluk oranını ilk olarak 1.viteste olmasý için 1.85ms olarak ayarlandı
   bosluk = periyod - doluluk;                // boşluğu hesapla ilk enerji verildiğinde sorun çıkmasın

   ee_read_long(0x01, &doluluk);
   bosluk = periyod - doluluk;

   while(TRUE)
   {
      if(bit_test(PORTA,0)==0)                      // vites düşür
      {
         delay_ms(25);                              // ark söndür
         doluluk = doluluk + 50;                    // deðer kadar art
         if(doluluk > 1900){doluluk = 1900;}        // üst sınırda kal
         bosluk = periyod - doluluk;                // bosluk süresini ayarla
         ee_write_long(0x01, &doluluk);
      }   

      if(bit_test(PORTA,1)==0)                      // vites arttır
      {
         delay_ms(25);
         
         doluluk = doluluk - 50;                    // deðer kadar azal
         if(doluluk < 850){doluluk = 820;}          // alt sınırda kal
         bosluk = periyod - doluluk;                // bosluk süresini ayarla 
         ee_write_long(0x01, &doluluk);
      }   
         
      // periyod
      output_high(PIN_B3);                          // PWM çıkıþ PORTB nin 4. bitinden (RB3)
      delay_us(doluluk);                                           
      output_low(PIN_B3);
      delay_us(bosluk);                                                
                                                            
   }
}

Kolay gelsin.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

This site uses Akismet to reduce spam. Learn how your comment data is processed.