Bagaimana cara mengukur RPM roda?


15

Saya mencoba untuk membuat sistem onboard untuk sepeda saya menggunakan Arduino atau mungkin papan keypad.

Saya pikir saya harus menggunakan sensor efek Hall, tetapi alternatif apa pun juga bagus.

Saya ingin menampilkan kecepatan saya ke layar LCD dan saya ingin tahu cara terbaik untuk melakukannya.

Jawaban:


12

Menggunakan sensor efek hall seperti yang disarankan Starliner akan menjadi salah satu cara untuk berinteraksi dengan roda. Saran Achim dan Shutterdrone untuk menggunakan reed switch lebih masuk akal, mengingat perangkat keras pendukungnya diperlukan sensor efek hall untuk mendapatkan sinyal digital yang bersih.

Anda mungkin dapat mengambil magnet dan sensor dari komputer sepeda yang rusak tetapi jika tidak bisa, toko komponen lokal harus memiliki masing-masing stok. Keuntungan dari sensor dan magnet daur ulang adalah Anda akan sudah memiliki perangkat keras pemasangan.

Ada halaman di arduino wiki pada sinyal ReadingRPM . Untuk menghitung kecepatan, gandakan nilai RPM dengan keliling roda (radius 2 * pi * [dalam meter]). Hasilnya akan dalam meter per menit.

Sunting: Saya perhatikan bahwa kode tertaut adalah untuk sistem dengan dua pulsa per revolusi. Satu magnet sudah cukup untuk tugas Anda. Selain itu, untuk komputer sepeda Anda mungkin ingin hasilnya berada di KPH (atau MPH jika Anda tinggal di suatu tempat yang masih berpikiran beradab). Saya telah membuat beberapa mod (yang belum diuji) pada kode di wiki untuk mencetak KPH dan menempelkannya di bawah.

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++;
}

Juga, saya telah mengaktifkan 'komunitas wiki' pada ini, yang saya pikir berarti pengguna lain dapat mengeditnya. Jika matematika saya salah (dan Anda bisa membuktikannya!) Lompat dan perbaiki untuk saya. :)


10

Sebenarnya, Achim telah membuat poin yang sangat bagus di sini.

Ada perbedaan besar antara relay (switch) Reed (magnet), dan sensor efek Hall.

Terutama, relai Reed akan menghubungkan sakelar kapan pun kekuatan magnet yang cukup bekerja padanya, memberi Anda sinyal on / off. Sensor efek Hall memberikan tingkat tegangan yang menunjukkan seberapa besar gaya magnet yang diterapkan padanya.

Kode yang ditunjukkan di atas hanya akan 'langsung' bekerja dengan relay Reed, yang tidak berarti bahwa itu tidak akan berfungsi sama sekali untuk sensor efek hall, tetapi bahwa itu akan memberikan tantangan tambahan menggunakan sensor hall-effect.

Tantangan utama adalah bahwa Anda memperlakukan perangkat analog sebagai perangkat digital - yang diharapkan akan memicu kenaikan pulsa. Sekarang, sinyal tidak akan berdenyut - umumnya akan seperti bel-kurva, dengan segala macam fluktuasi. Anda mungkin melewati tegangan minimal untuk sinyal tinggi (sekitar 3,5V, IIRC?) Beberapa kali ketika magnet melewati sensor hall-effect.

Tentu saja, insting pertama kami ketika menggunakan sesuatu seperti sensor efek hall adalah menggunakan ADC dan membaca level tegangan pada pin analog. Namun, Anda terbatas pada 10.000 bacaan, kira-kira, per detik pada pin analog (masing-masing bacaan membutuhkan 100uS). Itu juga mengasumsikan bahwa semua yang Anda lakukan adalah loop dan membaca nilai - tidak menyisakan banyak waktu untuk memperbarui tampilan, menghitung, dll. Belum lagi, jika Anda membaca pada waktu yang salah, Anda kehilangan sinyal Anda!

Saya yakin mungkin untuk menggunakan interupsi yang terhubung ke ADC, tetapi saya tidak memiliki pengetahuan seperti itu.

Sebaliknya, jika Anda ingin menggunakan sensor Hall Effect yang sebenarnya , saya sarankan memasukkannya ke pemicu Schmitt untuk mengubahnya menjadi sinyal digital (on / off) pada tingkat yang dikalibrasi yang menunjukkan "langsung di bawah magnet." Selain itu, tergantung pada tingkat histeresis yang diterapkan pada pemicu Schmitt, Anda mungkin perlu melakukan beberapa bouncing yang akan mengubah laju bouncing berdasarkan kecepatan saat ini. Maka Anda bisa memperlakukannya seperti relay Reed normal.

! c


1
Anda bisa mendapatkan yang terbaik dari kedua dunia. Komponen ATMega8 dapat dikonfigurasi untuk menyediakan akses ke komparator internal. Dengan referensi voltase yang sesuai (dapat disesuaikan dengan say, trimpot), Anda dapat memiliki interupsi pada kenaikan (atau jatuh atau keduanya) tepi sinyal analog. tautan ke topik forum yang menjelaskan hal itu: arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1163394545
SingleNegationElimination

Ada perangkat efek hall dengan output ambang batas pemicu schmitt. Mereka cukup umum. Juga, dengan sakelar buluh, Anda harus mendebo output.
Connor Wolf

7

Sensor efek hall dan reed switch adalah yang paling banyak disebutkan di sini, dan mereka adalah solusi terbaik.

The saklar buluh akan lebih murah, tetapi dapat memberikan pulsa palsu ketika sepeda mendapat kejutan. Jika itu hanya satu dari menunggang trotoar, perangkat lunak dapat dengan mudah menyaringnya, tetapi berbeda ketika Anda menunggang batu bulat, yang dapat memberikan Anda pulsa palsu sepanjang waktu. Sakelar buluh yang lebih tahan goncangan akan membutuhkan medan magnet yang lebih kuat untuk diaktifkan, tetapi magnet Neodymium akan memperbaikinya.

sunting jawaban untuk pertanyaan m.Alin
Reed switch cepat. Itu karena buluh memiliki massa rendah (= inersia rendah) dan perjalanan yang rendah, seringkali hanya beberapa persepuluh mm. Sakelar buluh ini memiliki waktu operasi <0,6 ms, dan waktu rilis <0,1 ms. Pada 36 km / jam sakelar berjalan 5 mm dalam 1 ms ketika dipasang setengah diameter roda. Jadi cukup cepat untuk diaktifkan ketika melewati magnet.
Dokumen ini tentang sakelar yang sama memberikan harapan hidup> 107operasi, dan itu tidak sebanyak kelihatannya. Jika Anda akan melakukan 25 km sehari Anda mencapai 10 itu7berganti acara dalam 2 tahun.
akhir suntingan

The efek Hall saklar tidak memiliki kelemahan ini, tetapi agak lebih mahal.


Anda punya waktu Tantara 2 pulsa sebagai informasi dari sensor. Kemudian

kecepatan v=πDT

dalam m / s jika diameter roda D dinyatakan dalam meter, dan Tdalam hitungan detik. Konversi ke km / jam dengan membaginya dengan 3,6, bagi dengan 5,79 untuk mph.

jarak s=jumlah pulsa×π×D

dalam meter jika diameter roda Ddinyatakan dalam meter. Membagi dengan 1000 untuk jarak dalam km, dengan 1609 untuk mil.


5

Sebuah magnet dapat dipasang di tepi pelek dan sensor Hall Effect dipasang sangat dekat dengan (tetapi tidak menyentuh) magnet. Ketika roda berputar dan magnet melewati sensor, sensor akan mengambil variasi dalam medan magnet.


3

Jika Anda masih ingin solid-state, mereka banyak "Hall effect switch" yang mencakup sensor efek Hall dan pemicu Schmitt dengan histeresis untuk memberikan output digital yang bersih tanpa bouncing. Mereka beralih setiap kali kepadatan fluks ambang batas (disediakan dalam lembar data) tercapai. Anda dapat menghitung kombinasi magnet dan sakelar yang baik atau hanya bereksperimen.

Situs ini akan memberi tahu Anda lebih banyak lagi.


2

Bagian-bagian dalam komputer sepeda adalah buluh-kontak bukan sensor efek hall. Mereka sangat berbeda. Tapi saya pikir Anda semua berbicara tentang kontak buluh.


1

Magnet dapat dipasang pada palang, dan sensor pada salah satu garpu Anda, atau rantai.

Alih-alih mengalikan dengan pi dll, metode yang disarankan oleh komputer sepeda terakhir saya adalah untuk mengukur jarak linear satu revolusi (kapur pada ban, mengukur antara dua tanda kapur), maka Anda dapat melipatgandakan revolusi dengan lingkar langsung.

[EDIT] Saya baru saja menemukan panduan ini di situs piclist untuk mengimplementasikan komputer sepeda menggunakan PIC, mungkin beberapa informasi mungkin berguna bagi Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.