Yanıtlar:
Starliner'ın önerdiği gibi bir salon efekti sensörü kullanmak, tekerlekle arayüz oluşturmanın bir yolu olacaktır. Achim ve Shutterdrone'nin bir kamış anahtarı kullanma önerisi, bir donanım efekt sensörünün temiz bir dijital sinyal almak için ihtiyaç duyduğu destekleyici donanım göz önüne alındığında, daha mantıklı.
Kırık bir bisiklet bilgisayarından bir mıknatıs ve sensör alabilirsin, ancak yapamazsan, yerel bir bileşen mağazasının stoklarından her birine sahip olması gerekir. Geri dönüştürülmüş bir sensör ve mıknatısın avantajı, montaj donanımına zaten sahip olmanızdır.
Arduino wiki'de ReadingRPM sinyallerinde bir sayfa var . Hızı hesaplamak için RPM değerini tekerleğin çevresi ile çarpın (metre cinsinden 2 * pi * yarıçapı). Sonuç dakikada metre cinsinden olacaktır.
Düzenleme: Bağlantılı kodun devir başına iki palslı sistemler için olduğunu fark ettim. Göreviniz için bir mıknatıs yeterlidir. Buna ek olarak, bir bisiklet bilgisayarı için muhtemelen sonucun KPH'de (ya da hala uygar olduğunu düşünen bir yerde yaşıyorsanız MPH) olmasını isteyeceksiniz. Ben KPH yazdırmak için wiki koduna bazı (denenmemiş) mods yaptım ve bunları feryat yapıştırdı.
volatile byte revolutions;
unsigned int rpmilli;
float speed;
unsigned long timeold;
void setup()
{
Serial.begin(9600);
attachInterrupt(0, rpm_fun, RISING);
revolutions = 0;
rpmilli = 0;
timeold = 0;
}
void loop()
{
if (revolutions >= 20) {
//Update RPM every 20 counts, increase this for better RPM resolution,
//decrease for faster update
// calculate the revolutions per milli(second)
**rpmilli = (millis() - timeold)/revolutions;** EDIT: it should be revolutions/(millis()-timeold)
timeold = millis();
**rpmcount = 0;** (EDIT: revolutions = 0;)
// WHEELCIRC = 2 * PI * radius (in meters)
// speed = rpmilli * WHEELCIRC * "milliseconds per hour" / "meters per kilometer"
// simplify the equation to reduce the number of floating point operations
// speed = rpmilli * WHEELCIRC * 3600000 / 1000
// speed = rpmilli * WHEELCIRC * 3600
speed = rpmilli * WHEELCIRC * 3600;
Serial.print("RPM:");
Serial.print(rpmilli * 60000,DEC);
Serial.print(" Speed:");
Serial.print(speed,DEC);
Serial.println(" kph");
}
}
void rpm_fun()
{
revolutions++;
}
Ayrıca, 'topluluk wiki'yi etkinleştirdim, bu da diğer kullanıcıların düzenleyebileceği anlamına geliyor. Eğer matematiğim yanlışsa (ve bunu ispatlayabilirsin!) Atla ve benim için düzelt. :)
Aslında Achim burada çok iyi bir noktaya değindi.
Reed (manyetik) röle (anahtar) ile Hall efekt sensörü arasında büyük bir fark vardır.
Öncelikle, bir Reed rölesi, üzerine yeterli manyetik kuvvet etki ettiğinde bir anahtar bağlar ve size bir açma / kapama sinyali verir. Hall efekt sensörü, ne kadar manyetik kuvvet uygulandığını gösteren bir voltaj seviyesi sağlar.
Yukarıda gösterilen kod sadece bir Reed rölesi ile 'doğrudan' çalışır, bu da bir salon efekt sensörü için hiç işe yaramayacağını değil, bir salon etkisi sensörü kullanarak ek zorluklar sağlayacağını söyler.
Birincil zorluk, analog bir cihazı dijital bir cihaz olarak ele almanızdır - nabzın yükselmesini tetiklemeyi bekler. Şimdi, sinyal darbeli olmayacak - genellikle her türlü dalgalanma ile bir çan eğrisi gibi olacaktır. Mıknatıs salon efekti sensörünü geçerken birkaç kez yüksek sinyal (3.5v, IIRC?) İçin minimum gerilimi geçebilir.
Elbette, salon efekt sensörü gibi bir şey kullanırken ilk içgüdümüz ADC'yi kullanmak ve analog bir pim üzerindeki voltaj seviyesini okumaktır. Bununla birlikte, bir analog pim üzerinde kabaca saniyede 10.000 okuma ile sınırlandırılırsınız (her okuma 100 uS alır). Bu da yaptığınız her şeyin döngü ve değerlerin okunması olduğunu varsayar - bir ekranı güncellemek, hesaplamak, vb. İçin çok fazla zaman bırakmaz.
Eminim bir şekilde ADC ile bağlantılı kesintileri kullanmak mümkün, ancak böyle bir bilgiye sahip değilim.
Bunun yerine, gerçek bir Hall Effect sensörü kullanmak isterseniz , bunu "doğrudan mıknatısın altında" olduğunu gösteren kalibre edilmiş bir seviyede dijital (açık / kapalı) bir sinyale dönüştürmek için Schmitt tetikleyiciye beslemenizi öneririm. Ayrıca, Schmitt tetikleyicide uygulanan histerezis seviyesine bağlı olarak, mevcut hıza bağlı olarak sıçramadan çıkma oranını değiştirecek bazı zıplatma işlemleri yapmanız gerekebilir. Sonra normal bir Reed rölesi gibi davranabilirsiniz.
! c
Hall efekt sensörleri ve reed anahtarları burada en çok bahsedilen ve en iyi çözümdür.
Manyetik anahtar ucuz olacak, ancak bisiklet bir şok aldığında size yanlış darbeleri verebilir. Bu kaldırımın sürülmesinden sadece biri ise, yazılım kolayca filtreleyebilir, ancak parke taşlarının üzerinde sürdüğünüzde farklıdır, bu da size her zaman yanlış darbeler verebilir. Daha fazla darbeye dayanıklı kamış anahtarı etkinleştirmek için daha güçlü bir manyetik alan gerektirir, ancak bir Neodimyum mıknatıs bunu düzeltir.
Hall etkisi anahtarı bu dezavantajları var, ama biraz daha pahalı değildir.
Tekerleğin kenarının kenarına bir mıknatıs takılabilir ve Hall Etkisi sensörü mıknatısın çok yakınına (ancak temas ettirmeden) monte edilebilir. Tekerlek döndüğünde ve mıknatıs sensörden geçerken, sensör manyetik alandaki değişimi alacaktır.
Hala katı hal almak istiyorsanız, bunlar, sıçrama olmadan temiz dijital çıkış sağlamak için Hall efekt sensörü ve histerezisli Schmitt tetikleyicisini içeren birçok "Hall efekti anahtarı" dır. Bir miktar eşik akış yoğunluğuna (veri sayfasında verilen) ulaşıldığında değişir. Mıknatıs ve anahtarın iyi bir kombinasyonunu hesaplayabilir veya basitçe deney yapabilirsiniz.
Bu site size çok daha fazlasını anlatacak.