Понедельник, 13.01.2025Вітаю Вас, Гість! | RSS
Головна » Статті » Робототехніка проекти

Спідометр для велосипеда на Arduino

Спідометр для велосипеда на Arduino

Хочете відстежити швидкість на велосипедній прогулянці? Тоді ця інструкція для вас!

У проекті використовується магнітний вимикач (геркон) для вимірювання швидкості обертання колеса велосипеда. Arduino, в свою чергу, розраховує швидкість переміщення в милях / год і передає цю інформацію на LCD дисплей. Встановити цю систему ви можете на будь-який велосипед / колесо. Для цього достатньо вказати радіус колеса для правильного розрахунку.

Спідометр на Arduino

необхідні елементи

  • 1 плата Arduino
  • 1 геркон
  • 1 резистор на 10 кОм, 1/4 вата
  • 1 Батарея на 9 вольт
  • 1 Провід
  • 1 Макетна плата для розпаювання
  • 1 LCD дисплей
  • 2 Перемикача
  • Додаткові матеріали:
  • Фанера, гвинти і т.п.
  • Програма для Arduino Arduino IDE

Електросхема

Електросхема проекту наведена нижче.

Вона складається з трьох перемикачів:

1. Один підключений до живлення 9 вольт

2. Другий перемикач - до LCD екрану для його включення / вимикання

3. Магнітний вимикача (геркон), який замикає ланцюг кожен раз, коли колесо робить повний оборот.

LCD монітор Parallax, який використовується в проекті, підключається до Arduino за трьома пінам. Один йде до 5 В, один до землі, третій - до серійного виходу (TX) на платі Arduino на цифровому піне 1.

Резистори на 10 кОм підключені до перемикачів і підсвічуванні монітора, щоб уникнути перевищення допустимої сили струму між 5 В і землею (ні в якому разі не підключайте 5 В і землю безпосередньо до Arduino).

Розпаювання Шілд спідометра

Розпаювання Шілд спідометра

Встановіть три ряди конекторів на макетної платі таким чином, щоб вони сіли на плату, як це показано нижче.

електроніка 1 електроніка 2

Геркон

Геркон складається з двох частин, вимикача і магніту. З самого вимикача (власне, там і розташований геркон), виходить два дроти. У момент, коли магніт розташовується неподалік, невеликий механічний елемента всередині геркона переміщається і замикає ланцюг.

Встановіть струмообмежуючі резистор на 10 кОм між піном A0 і землею на вашій макетної платі. Кінці дроту підключіть до піну A0 і 5V. Цей провід ви протягнете надалі уздовж всього велосипеда до перемикачів.

Геркон 1 Геркон 2
Геркон 3 Геркон 4
Геркон 5 Геркон 6
Геркон 7 Геркон 8

Установка геркона на велосипед

Для установки геркона і магніту на колесо велосипеда, використовуйте ізоляційну стрічку. На малюнку зверху показано, що магніт встановлюється на одну їх спиць, а геркон - на раму велосипеда. Таким чином, магніт проходить повз геркона після кожного повного обороту колеса. Підключіть дроти від геркона до кабелів з розпаяно вами плати (як саме підключати - неважливо, так як це просто перемикач).

Для перевірки працездатності вашого перемикача, використовуйте код, наведений нижче. У момент, коли магніт проходить повз геркона, Arduino повинна видати ~ +1023, в іншому випадку буде відображатися 0. Відкрийте серійний монітор (Tools - Serial Monitor) в оболонці Arduino IDE і запустіть перевірку. Якщо магніт не генерує сигнал на Геркон, змініть його положення або використовуєте сильніший магніт.

//arduino спидометр для велосипеда

#define reed A0 // пін, який підключений до геркона

// змінна для зберігання даних

int reedVal;

void setup () {

Serial.begin (9600);

}

void loop () {

reedVal = analogRead (reed); // отримуємо значення з A0

Serial.println (reedVal);

delay (10);

}

Установка геркона на велосипед 1 Установка геркона на велосипед 2
Установка геркона на велосипед 3 Установка геркона на велосипед 4

Перевірка працездатності

Завантажте код, наведений нижче на плату Arduino. Активуйте серійний монітор. У вас повинно відображатимуться число 0.00. Почніть крутити колесо велосипеда. Кожну секунду довго відображатися дані поточної швидкості в милях / год.

// расчеты

// радіус колеса ~ 13.5 дюймів

// відстань = pi * 2 * r = ~ 85 дюймів

// максимальна швидкість 35 миль / год = ~ 616 дюймів / сек

// максимальна кутова швидкість = ~ 7.25

#define reed A0 // пін, який підключений до геркона

// змінні

int reedVal;

long timer; // час між одним повним оборотом (в мс)

float mph;

float radius = 13.5; // радіус колеса (в дюймах)

float circumference;

int maxReedCounter = 100; // мінімальний час (в мс) одного обороту

int reedCounter;

void setup () {

reedCounter = maxReedCounter;

circumference = 2 * 3.14 * radius;

pinMode (reed, INPUT);

// НАСТРОЙКА ТАЙМЕРА - таймер дозволяє точно відстежувати час між сигналами геркона

cli (); // зупинка переривань

// встановлюємо переривання timer1 з частотою 1 кГц

TCCR1A = 0; // встановлюємо внутрішній TCCR1A регістр на 0

TCCR1B = 0; // те ж саме для TCCR1B

TCNT1 = 0;

// встановлюємо інкремент лічильника часу на 1 кГц

OCR1A = 1999; // = (1/1000) / ((1 / (16 * 10 ^ 6)) * 8) - 1

// активуємо режим CTC

TCCR1B | = (1 << WGM12);

TCCR1B | = (1 << CS11);

// порівнюємо прерваним таймера

TIMSK1 | = (1 << OCIE1A);

sei (); // дозволяємо переривання

// завершується налаштування ТАЙМЕРА

Serial.begin (9600);

}

ISR (TIMER1_COMPA_vect) {// Переривання з частотою 1 кГц для вимірювань герконом

reedVal = digitalRead (reed); // отримуємо значення A0

if (reedVal) {// якщо геркон замкнутий

if (reedCounter == 0) {// мінімальний час між імпульсами пройшло

mph = (56.8 * float (circumference)) / float (timer); // розраховуємо милі на годину

timer = 0; // перезапуск таймера

reedCounter = maxReedCounter; // перезапуск reedCounter

}

else {

if (reedCounter> 0) {// не даємо reedCounter прийняти негативні значення

reedCounter - = 1; // декремент reedCounter

}

}

}

else {// if reed switch is open

if (reedCounter> 0) {// не даємо reedCounter прийняти негативні значення

reedCounter - = 1; // декремент reedCounter

}

}

if (timer> 2000) {

mph = 0; // якщо нові з геркона не надходять нові імпульси, значить колесо не вращется, значить швидкість дорівнює 0 м / год

}

else {

timer + = 1; // інкремент таймера

}

}

void displayMPH () {

Serial.println (mph);

}

void loop () {

// відображаємо милі на годину раз в секунду

displayMPH ();

delay (1000);

}

Перевірка працездатності

LCD дисплей

Для установки дисплея вам знадобиться додатковий Шилд. Припаяйте рельсу з контактами мама на виході на protoshield. Три контакту будуть іспользлваться для для підключення рідкокристалічного дисплея. LCD екран повинен щільно встановитися на рейках.

LCD дисплей 1 LCD дисплей 2
LCD дисплей 3 LCD дисплей 4
LCD дисплей 5

установка LCD

Підключіть Arduino 5V, Ground, і TX (Arduino цифровий пін 1) до LCD сокету. Не забудьте перевірити правильність установки екрану на підставі міток на платі дисплея.

На задній частині екрану Parallax LCD є два перемикача і потенціометр. Потенціометр використовується для ручного регулювання контрасту дисплея. Перемикачі треба встановити в положення, які наведені на фото нижче.

Установка LCD 1 Установка LCD 2
LCD дисплей 3

Перевірка LCD для спідометра

Перевірте код, який наведено нижче. Особисто у мене при першому запуску на екрані з'явилися зовсім незрозумілі, хаотичні символи. Довелося зняти монітор, перезаліть скетч і встановити екран заново. З другого разу все запрацювало. Можливо, проблема була в некоректній прошивці Arduino.

На LCD екрані повинна відобразитися напис "Hello World".

//Проверка Parallax 2x16 lcd

// Результат виконання даного скетчу - напис "Hello World" на вашому LCD екрані. Свитч підсвічування повинен бути підключений до цифрового піну 2

//Serial.write(13);// новий рядок

void setup () {

Serial.begin (9600);

pinMode (1, OUTPUT); // tx

Serial.write (12); // очищаємо

Serial.write ( "Hello World");

}

void loop () {

}

Перевірка LCD для спідометра

Тумблер підсвічування спідометра

тумблер підсвічування

Підключіть тумблер як це показано на малюнку нижче. Не забудьте з'єднати резистор на 10 кОм з чорним і зеленим проводами. Потім ці дроти підключаються до одного з контактів перемикача. До другого контакту підключаємо червоний провід.

Червоний дріт підключаємо до Arduino 5V, другу сторону резистора до землі, зелений провід - до D2.

Тумблер підсвічування спідометра 1 Тумблер підсвічування спідометра 2
Тумблер підсвічування спідометра 3

Остаточна програма для спідометра

Завантажте наведений код на Arduino. Перевірте роботу перемикача підсвічування і наскільки коректно відображається швидкість.

Уточніть радіус вашого колі в дюймах і вставте це значення в рядок: float radius = '' '' ';

У цій частині коду я використовував переривання, щоб змінна "timer" збільшувала своє значення з частотою 1 кГц.

//Спидометр для велосипеда с использованием геркона

// швидкість велосипеда відображається на LCD екрані

// розрахунки

// радіус колеса ~ 13.5 дюймів

// відстань = pi * 2 * r = ~ 85 дюймів

// максимальна швидкість 35 миль / год = ~ 616 дюймів / секунду

// максимальна кутова швидкість = ~ 7.25

#define reed A0 // пін, до якого підключений геркон

// змінні

float radius = 13.5; // радіус колеса (в дюймах) - змініть це для своєму велосипеді

int reedVal;

long timer = 0; // час одного повного обороту (в мілісекундах)

float mph = 0.00;

float circumference;

boolean backlight;

int maxReedCounter = 100; // мінімальний час (в мілісекундах) одного обороту

int reedCounter;

void setup () {

reedCounter = maxReedCounter;

circumference = 2 * 3.14 * radius;

pinMode (1, OUTPUT); // tx

pinMode (2, OUTPUT); // свіч підсвічування

pinMode (reed, INPUT);

checkBacklight ();

Serial.write (12); // очищення

cli (); // зупинка переривань

// встановлюємо переривання timer1 на частоті 1 кГц

TCCR1A = 0; // встановлюємо внутрішній регістр TCCR1A в 0

TCCR1B = 0; // те ж саме для TCCR1B

TCNT1 = 0;

// встановлюємо інкремент для лічильника 1 кГц

OCR1A = 1999; // = (1/1000) / ((1 / (16 * 10 ^ 6)) * 8) - 1

// активуємо режим CTC

TCCR1B | = (1 << WGM12);

TCCR1B | = (1 << CS11);

// таймер порівнює переривання

TIMSK1 | = (1 << OCIE1A);

sei (); // allow interrupts

// Кінець настройки таймера

Serial.begin (9600);

}

void checkBacklight () {

backlight = digitalRead (2);

if (backlight) {

Serial.write (17); // включаємо підсвічування

}

else {

Serial.write (18); // вимикаємо підсвічування

}

}

ISR (TIMER1_COMPA_vect) {// Переривання з частотою 1 кГц для вимірювань герконом

reedVal = digitalRead (reed); // отримуємо значення A0

if (reedVal) {// якщо геркон замкнув контакт

if (reedCounter == 0) {// мінімальний час між імпульсяамі пройшло

mph = (56.8 * float (circumference)) / float (timer); // розрахунок миль в годину

timer = 0; // перезавантаження таймера

reedCounter = maxReedCounter; // перезавантаження reedCounter

}

else {

if (reedCounter> 0) {// не дозволяє reedCounter прийняти негативне значення

reedCounter - = 1; // декремент reedCounter

}

}

}

else {// якщо геркон не замкнутий

if (reedCounter> 0) {// не дозволяє reedCounter прийняти негативне значення

reedCounter - = 1; // декремент reedCounter

}

}

if (timer> 2000) {

mph = 0; // якщо не надходять імпульси від геркона, значить швидкість дорівнює 0

}

else {

timer + = 1; // інкремент таймера

}

}

void displayMPH () {

Serial.write (12); // очищаємо

Serial.write ( "Speed ​​=");

Serial.write (13); // починаємо новий рядок

Serial.print (mph);

Serial.write ( "MPH");

//Serial.write("0.00 MPH ");

}

void loop () {

// відображаємо mph раз в секунду

displayMPH ();

delay (1000);

checkBacklight ();

}

живлення

Підключіть послідовно коннектор для батареї і перемикати як це показано на першому малюнку нижче. Червоний дріт від перемикача підключіть до контакту Vin на Arduino, а чорний контакт від коннектора для батареї - до землі на Arduino.

Харчування спідометра 1 Харчування спідометра 2

Корпус для спідометра на Arduino

Бокс для спідометра був вирізаний з фанери товщиною 1/4 ". Використовувалася лазерна різка потужністю 120 Ватт. Розміри боксу - 3.5" x4 "x2". Бокс був спроектований в AutoCAD. Для генерації файлів для лазерного різання використовувався софт Autodesk 123D Make. Потім були додані два отвори для перемикачів і прямокутний отвір для LCD екрана. Крім того, були додані отвори на нижній частині боксу, щоб простіше здійснити кріплення до велосипеда.

Стінки боксу кріпляться між собою на клей. Кути треба зачистити наждачкою. Можна використовувати якесь покриття для фанери, щоб надати боксу належний вигляд і захистити від вологи.

Завантажити необхідні деталі для боксу можна за посиланнями нижче:

enclosure.stl

enclosure.dwg

enclosure.cdr

Корпус для спідометра 1 Корпус для спідометра 2
Корпус для спідометра 3 Корпус для спідометра 4

Установка Arduino і обв'язки в бокс

Перемикачі фіксуються в корпусі за допомогою гайок. LCD екран сідає на клей або з фіксується за допомогою гвинтів на передній панелі боксу. Arduino і Protoboard встановлюються поруч з бетарейкой. Знову-таки, можна використовувати клей для фіксації або передбачити кріплення на гвинтах.

Установка Arduino в корпус 1 Установка Arduino в корпус 2
Установка Arduino в корпус 3

Встановлюємо спідометр на велосипед

Бокс із спідометром на Arduino встановлюємо на кермо велосипеда. Можна використовувати пластикові стяжки і sugru для фіксації. Провід, які йдуть від плати до геркона треба пустити таким чином, щоб вони не заважали вам при поїздці і при цьому була можливість повертати кермо.

Спідометр на велосипеді 1 Спідометр на велосипеді 2
Спідометр на велосипеді 3 Спідометр на велосипеді 4

Велосипед зі спідометром на дорозі!

Не забувайте про правила поведінки велосипедистів на дорозі! Незважаючи на ваш прекрасний Arduino спідометр, стежте за транспортом і людьми!

Велосипед зі спідометром на Arduino

Залишайте Ваші коментарі, щодо вашого особистим досвідом нижче. У дискусії часто народжуються нові ідеї і проекти!



Джерело: http://arduino-diy.com/arduino-spidometr-dlya-velosipeda
Категорія: Робототехніка проекти | Додав: qwerty (14.04.2017)
Переглядів: 5374 | Рейтинг: 0.0/0
Всього коментарів: 0
avatar