Kadans Sayacı 2. Sürüm
Bir önceki kadans sayacı projemizde kadansı tanımlayıp çalışma prensibinden bahsetmiştik. Bu projemizde ise farklı ekran ve sensör kullanarak bir model daha çıkardık. Önceki kullandığım sensör manyetik anahtardı ve arazide bisikletin sallanmasından ötürü dış camı kırılmıştı. Ayrıca bu projede uygun güneş paneli kullanarak güneş olduğu sürece sonsuza kadar pilinin bitmemesini bekliyoruz.
Malzeme Listesi
- Arduino Nano
- UGN3503U (Hall Effect Sensör)
- 7 Segment Gösterge
- 2 adet anahtar
- Buzzer
- Sony erricson 1000mAh çıkma li-on batarya
- diyot(düşük güç tüketimli)
- Çıkma Güneş Paneli
- Pleksi
- Bağlantı için kablolar ve pinler
- Mıknatıs
- Sıcak Silikon
- Kıl Testere
- Zımpara
- Çift taraflı bant
Bağlantılar
Arduino Pinleri: 2,3,4,5,6,7,8
7 Segment Pinleri: 7,6,4,2,1,9,10
7 Segment pin 3 330 ohm dirençle birlikte arduinonun gnd pinine
Sensörün gnd ve 5v bağlantısı arduinonun gnd ve 5v pinlerine direk takılıyor.
Sensörün Sinyal çıkışı arduinonun A0 pinine takılıyor.
Buzzerin + pini arduinonun 12. pinine – ucu arduinonun gnd pinine bağlanıyor.
Paneli + kutupundan bataryaya bağlantı yaparken geri beslemeyi önlemek için bir diyot koyuyoruz.
Bağlantılar bir baskı devre yapmadan oldukça zor oluyor. Kabloları yalıtımsız kullanırsanız bir çok kısa devreyle karşılaşmanız mümkün.
Bir çok farklı 7 segment çeşitleri olduğundan dolayı sizin bağlantılarınız biraz farklı olabilir.
Öncelikle 7 segmentle pin bağlantılarına göre sayı yazdırmanız ilerideki hataların önüne geçecektir.
Arduinonuzu başka projelerde de kullanmak istiyorsanız lehimlemeden kullanmanın yöntemleri var. Delikli pertinaks üzerine dişi pinler yerleştirerek bu dişi pinler üzerine lehimlerinizi yapabilirsiniz. Arduinoyu bu dişi pinlere istediğiniz zaman takıp çıkartabilirsiniz.
Bütün bağlantıları yaptıktan sonra görüntü bu şekilde oldu. Eğer biraz küçük yapmak istiyorsanız kablolar birbirine çok yakın geçecektir. Tasarımı yaparken usb kısmı , besleme kısmı ve sensör bağlantı kısmı ön tarafa gelmelidir.
Dış kabı yaparken en büyük boyutları bularak ona göre bir dış kap yapabilirsiniz. Benim kullandığım malzeme saydan pleksi. Şeffaf , sert ve kolay işlenebilir olması tercih etmemi sağladı. Kıl testereyle kolayca kesilebiliyor.
Dış kabı kestikten sonra parçaları üst üste koyup denedim. Milimetrik hataları zımparayla törpüleyerek eşit boyuta getirmeye çalıştım.
Kutuyu vida ile bağlanabilecek şekilde tasarladım. Eski telefonlardan minik vidalar çıkardım. Fakat bu vidalar biraz dayanıksız olduğu için sıkar sıkmaz kırıldılar. Bu yüzden sıcak silikonda yapıştırarak tamamladım. Usb ve pin çıkış kısımlarında delikler açtım.
Bisiklet üzerine çift taraflı bant ile tutturdum.
Güneş paneli ve bataryayı sistemden ayrı bir şekilde koydum. Güneş panelinin yeterli olup olmadığını tam olarak test edebilmek için 2-3 haftaya ihtiyaç var. Tahmini olarak sistem 25mA ile çalışıyor. Bu uyku modu ile daha düşürülebilir. Güneş paneli ise yaklaşık 5 mA üretiyor. Tabi bu güneş ışığına göre değişiklik gösteriyor. Test sonuçlarına göre panel büyütülebilir ya da küçültülebilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
boolean miknatisVar, Var, lastButtonState, reading, buttonState; unsigned long a1, lastDebounceTime; unsigned long a2; unsigned long t1; unsigned long t2; boolean b=0; int kadans; int hassasiyet=4; int sensor; int araDeger; byte numbers[11] = { B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11110110 ,B00000000 }; void setup() { for(int i = 2; i <= 9; i++) { pinMode(i, OUTPUT); pinMode(A0,INPUT); } pinMode(12,OUTPUT); pinMode(13,OUTPUT); delay(250); araDeger=analogRead(A0);//mıknatıs yokken olan değerdir.Bu değer sayesinde mikrokontrolcü farklı voltajlarda çalışabilir } void loop() { durumNedir(); //sensörü oku ve mıknatıs olup olmadığını hesapla a1=millis(); while(Var==1){ t1=millis(); durumNedir(); digitalWrite(13,HIGH); //zaman aşımını denetle. a1 ve a2 yi kullan a2=millis(); if(a2-a1>6000) writeNumber(10); //zaman aşımını denetle. a1 ve a2 yi kullan } durumNedir(); //sensörü oku ve mıknatıs olup olmadığını hesapla a1=millis(); while(Var==0){ durumNedir(); digitalWrite(13,LOW); //zaman aşımını denetle. a1 ve a2 yi kullan a2=millis(); if(a2-a1>6000){ writeNumber(10); digitalWrite(9,LOW); } //zaman aşımını denetle. a1 ve a2 yi kullan } durumNedir(); //sensörü oku ve mıknatıs olup olmadığını hesapla a1=millis(); while(miknatisVar==1){ t2=millis(); durumNedir(); digitalWrite(13,HIGH); //zaman aşımını denetle. a1 ve a2 yi kullan a2=millis(); if(a2-a1>6000) writeNumber(10); //zaman aşımını denetle. a1 ve a2 yi kullan } kadans=60000/(t2-t1); //kadans değeri 200ün üzerindeyse hatalı bir değerdir ekranı temizle if(kadans>200){ writeNumber(10); digitalWrite(9,LOW); } //kadans değeri 200ün üzerindeyse hatalı bir değerdir ekranı temizle //kadans 200 ün altında ekrana yazdır else{ b=0; if(kadans>=100){ kadans=kadans-100; b=1; } kadans=kadans/10; digitalWrite(9,LOW); writeNumber(kadans); if(b==1) { digitalWrite(9,HIGH); } } //kadans 200 ün altında ekrana yazdır }//program sonu void durumNedir(){ sensor=analogRead(A0); //miknatisVar=sensor>=araDeger+hassasiyet||sensor<=araDeger-hassasiyet; if( (sensor>=(araDeger+hassasiyet)) || (sensor<=(araDeger-hassasiyet)) ){ miknatisVar=1; } else{ miknatisVar=0; } digitalWrite(12,miknatisVar); // sensörden her geçişte bip sesi çıkart int reading = miknatisVar; if (reading != lastButtonState) { // reset the debouncing timer lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > 5) { if (reading != buttonState) { buttonState = reading; if (buttonState == HIGH) { Var = !Var; } } } lastButtonState = reading; } void writeNumber(int number) { if(number < 0 || number > 10) { 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; } } |
Ev içerisinde ekran çok rahat görünmesine rağmen dışarıda ekrana güneş vurduğu zaman ekran yeterli olmuyor. Bunu ekranın önüne bir mercek koyarak iyileştirebiliriz.
Kadans sayacımızın bisiklet üzerinde denemesi.
Son Yorumlar