답변:
Starliner가 제안한 홀 효과 센서를 사용하면 휠과 인터페이스 할 수 있습니다. 지원 하드웨어에 홀 효과 센서가 깨끗한 디지털 신호를 얻기 위해 필요한 경우 리드 스위치 사용에 대한 Achim과 Shutterdrone의 제안이 더 의미가 있습니다.
자전거가 고장난 자전거 컴퓨터에서 자석과 센서를 집어들 수는 있지만, 구매할 수없는 경우 현지 부품 매장에 재고가 있어야합니다. 재활용 센서와 자석의 장점은 이미 장착 하드웨어를 가지고 있다는 것입니다.
Arduino Wiki에는 ReadingRPM 신호 에 대한 페이지가 있습니다 . 속도를 계산하려면 RPM 값에 휠 둘레를 곱하십시오 (2 * pi * 반경 [미터]). 결과는 분당 미터입니다.
편집 : 링크 된 코드는 회전 당 두 개의 펄스가있는 시스템을위한 것입니다. 하나의 자석으로도 충분합니다. 또한 자전거 컴퓨터의 경우 결과가 KPH (또는 여전히 문명이 있다고 생각되는 곳에 사는 경우 MPH)가되기를 원할 것입니다. KPH를 인쇄하고 아래에 붙여 넣기 위해 Wiki의 코드에 (비평가되지 않은) 개조를했습니다.
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++;
}
또한 이것에 대해 '커뮤니티 위키'를 활성화했습니다. 다른 사용자가 편집 할 수 있다고 생각합니다. 내 수학이 틀렸다면 (그리고 증명할 수 있습니다!) 뛰어 들어 나를 대신해주세요. :)
실제로 Achim은 여기서 아주 좋은 지적을했습니다.
리드 (자기) 릴레이 (스위치)와 홀 효과 센서에는 큰 차이가 있습니다.
리드 릴레이는 주로 충분한 자기력이 작용할 때마다 스위치를 연결하여 온 / 오프 신호를 제공합니다. 홀 효과 센서는 적용되는 자기력의 양을 나타내는 전압 레벨을 제공합니다.
위에 표시된 코드는 Reed 릴레이에서만 '직접'작동합니다. 홀 효과 센서에서는 전혀 작동하지 않지만 홀 효과 센서를 사용하면 추가적인 문제가 발생할 수 있습니다.
가장 큰 과제는 아날로그 장치를 디지털 장치로 취급하고 펄스가 상승 할 때 트리거하는 것입니다. 이제 신호가 펄싱되지 않습니다. 일반적으로 모든 종류의 변동이있는 종 곡선과 같습니다. 자석이 홀 효과 센서를 통과 할 때 높은 신호 (약 3.5v, IIRC?)에 대해 최소 전압을 넘어서 여러 번 트립 될 수 있습니다.
물론 홀 효과 센서와 같은 것을 사용할 때 우리의 첫 번째 본능은 ADC를 사용하고 아날로그 핀의 전압 레벨을 읽는 것입니다. 그러나 아날로그 핀에서 초당 약 10,000 개의 읽기로 제한됩니다 (각 읽기에는 100uS가 소요됨). 그것은 당신이하는 모든 작업이 루프와 값을 읽는 것이라고 가정합니다. 디스플레이를 업데이트하고 계산하는 등 많은 시간을 남기지 않습니다. 말할 것도없이 잘못된 시간에 읽으면 신호를 놓쳤습니다!
어떻게 든 ADC에 연결된 인터럽트를 사용할 수 있다고 확신하지만 그러한 지식은 유용하지 않습니다.
대신 실제 홀 효과 센서 를 사용하려면 슈미트 트리거로 공급하여 "마그넷 바로 아래"를 나타내는 보정 된 레벨의 디지털 (켜기 / 끄기) 신호로 변환하는 것이 좋습니다. 또한 슈미트 트리거에 구현 된 히스테리시스 레벨에 따라 현재 속도를 기반으로 디 바운스 속도를 변경하는 디 바운싱을 수행해야 할 수도 있습니다. 그런 다음 일반 리드 릴레이처럼 취급 할 수 있습니다.
!씨
홀 효과 센서 및 리드 스위치가 여기에서 가장 많이 언급되었으며 최상의 솔루션입니다.
리드 스위치는 저렴하지만, 자전거는 충격을 얻을 때 당신에게 거짓 펄스를 제공 할 수 있습니다. 그것이 커브를 타는 것 중 하나 일 경우 소프트웨어가 쉽게 걸러 낼 수 있지만 조약돌을 타는 경우에는 항상 다르기 때문에 항상 잘못된 펄스가 발생할 수 있습니다. 내충격 리드 스위치가 많을수록 활성화하기 위해 더 강한 자기장이 필요하지만 네오디뮴 자석이이를 해결합니다.
홀 효과 스위치는 이러한 단점을 가지고 있지만 약간 더 비싼하지 않습니다.
자석은 휠 림의 가장자리에 장착 할 수 있으며 홀 효과 센서는 자석에 매우 가까이 (그러나 접촉하지는 않음) 장착되어 있습니다. 휠이 회전하고 자석이 센서를 통과하면 센서가 자기장의 변화를 포착합니다.