- Необхідні матеріали
- Розрахунок швидкості та показ її на аналоговому спідометрі
- Схема та з'єднання
- Пояснення програмування
Вимірювання швидкості / об / хв транспортного засобу чи двигуна завжди було захоплюючим проектом. У цьому проекті ми збираємося створити аналоговий спідометр за допомогою Arduino. Для вимірювання швидкості ми використовуватимемо модуль ІЧ-датчика. Для цього існують інші способи / датчики, такі як датчик Холла для вимірювання швидкості, але використовувати ІЧ-датчик легко, оскільки модуль ІЧ-датчика є дуже поширеним пристроєм, і ми можемо легко його отримати з ринку, а також можна використовувати на будь-якому моторний транспортний засіб.
У цьому проекті ми збираємося показати швидкість як в аналоговій, так і в цифровій формі. Роблячи цей проект, ми також вдосконалимо свої навички у вивченні Arduino та Stepper engine, оскільки цей проект передбачає використання переривань та таймерів. Наприкінці цього проекту ви зможете розрахувати швидкість та відстань, яку подолає будь-який обертовий об'єкт, і відобразити їх на РК-екрані 16x2 у цифровому форматі, а також на аналоговому вимірювачі. Тож давайте почнемо з цієї схеми спідометра та одометра з Arduino
Необхідні матеріали
- Ардуїно
- Біполярний кроковий двигун (4 дроти)
- Драйвер крокового двигуна (модуль L298n)
- Модуль ІЧ-датчика
- 16 * 2 РК-дисплей
- Резистор 2.2k
- Підключення проводів
- Макет.
- Блок живлення
- Роздруківка зображення спідометра
Розрахунок швидкості та показ її на аналоговому спідометрі
ІЧ- датчик - це пристрій, який може виявити присутність об’єкта перед собою. Ми використали два лопатеві ротори (вентилятор) і розмістили ІЧ-датчик біля нього таким чином, щоб кожен раз, коли лопаті обертаються ІЧ-датчиком, його виявляли. Потім ми використовуємо допомогу таймерів та переривань в Arduino для обчислення часу, необхідного для одного повного обертання двигуна.
У цьому проекті ми використали переривання найвищого пріоритету для виявлення об / хв і налаштували його в режимі зростання. Таким чином, щоразу, коли вихід датчика стане НИЗКИМ на Високий, буде виконуватися функція RPMCount () . І оскільки ми використовували два лопатеві ротори, це означає, що функція буде викликана 4 рази за один оборот.
Коли відомий час ми можемо розрахувати RPM, використовуючи наведені нижче формули, де 1000 / час, який ми отримаємо, дасть нам RPS (оберт в секунду), а подальше множення його на 60 дасть вам RPM (оберти в хвилину)
об / хв = (60/2) * (1000 / (міліс () - час)) * REV / лопаткиInFan;
Після отримання об / хв швидкість можна розрахувати за заданою формулою:
Швидкість = об / хв * (радіус 2 * Пі *) / 1000
Ми знаємо, що Pi = 3,14, а радіус - 4,7 дюйма
Але спочатку нам потрібно перевести радіус в метри з дюймів:
радіус = ((радіус * 2,54) /100,0) метрів Швидкість = об / хв * 60,0 * (2,0 * 3,14 * радіус) / 1000,0) в кілометрах на годину
Тут ми помножили оберти на хвилину на 60 для перетворення обертів в хвилину (обертів на годину) і поділили на 1000 для перетворення метрів / год у Кілометри / годину.
Отримавши швидкість в км / год, ми можемо показувати ці значення безпосередньо на РК-дисплеї в цифровій формі, але для відображення швидкості в аналоговій формі нам потрібно зробити ще один розрахунок, щоб з’ясувати, чи немає. кроків, кроковий двигун повинен рухатися, щоб показати швидкість на аналоговому лічильнику.
Тут ми використовували 4-провідний біполярний кроковий двигун для аналогового лічильника, який має 1,8-градусні значення 200 кроків за оборот.
Тепер ми маємо показати 280 км / год на спідометрі. Отже, щоб показати кроковий двигун потужністю 280 км / год, потрібно рухатися на 280 градусів
Отже, маємо maxSpeed = 280
І maxSteps буде
maxSteps = 280 / 1,8 = 155 кроків
Тепер у нашому коді Arduino є функція, а саме функція map, яка використовується тут для відображення швидкості у кроки.
Кроки = карта (швидкість, 0, maxSpeed , 0, maxSteps);
Отже, маємо
кроки = карта (швидкість, 0,280,0,155);
Після обчислення кроків ми можемо безпосередньо застосувати ці кроки у функції крокового двигуна для переміщення крокового двигуна. Нам також потрібно подбати про поточні кроки або кут крокового двигуна, використовуючи наведені розрахунки
currSteps = Кроки кроки = currSteps-preSteps preSteps = currSteps
тут currSteps - це поточні кроки, які надходять з останнього розрахунку, а preSteps - це останні кроки, що виконуються.
Схема та з'єднання
Принципова схема цього аналогового спідометра проста, тут ми використали РК-дисплей 16x2 для відображення швидкості у цифровій формі та кроковий двигун для обертання стрілки аналогового спідометра.
РК-дисплей розміром 16x2 підключається на наступних аналогових контактах Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
Для встановлення яскравості РК використовується резистор 2,2 тис. Модуль ІЧ-датчика, який використовується для виявлення лопаті вентилятора для обчислення об / хв, підключений до переривання 0 означає D2 штифт Arduino.
Тут ми використовували драйвер крокового двигуна, а саме модуль L293N. Штифти IN1, IN2, IN3 та IN4 драйвера крокового двигуна безпосередньо підключені до D8, D9, D10 та D11 Arduino. Інші з'єднання наведені на схемі.
Пояснення програмування
Повний код для Arduino Speedomete r наведено в кінці, тут ми пояснюємо кілька важливих його частин.
У частину програмування ми включили всі необхідні бібліотеки, такі як бібліотека крокових двигунів, рідкокристалічна бібліотека LiquidCrystal та оголошені шпильки для них.
#включати
Після цього ми взяли деякі змінні та макроси для виконання обчислень. Розрахунки вже пояснено в попередньому розділі.
летючий байт REV; беззнакові довгі оберти, об / хв; без підпису довгий st = 0; без підпису тривалий час; int ledPin = 13; int led = 0, RPMlen, prevRPM; int прапор = 0; int прапор1 = 1; #визначити лопатіInFan 2 радіус поплавка = 4,7; // дюйм int preSteps = 0; float stepAngle = 360,0 / (float) stepsPerRevolution; float minSpeed = 0; float maxSpeed = 280,0; float minSteps = 0; float maxSteps = maxSpeed / stepAngle;
Після цього, ми инициализируем LCD, послідовний порт, переривання і кроковий двигун в настройках функції
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Спідометр"); затримка (2000); attachInterrupt (0, RPMCount, RISING); }
Після цього ми зчитуємо оберти в циклі та виконуємо обчислення, щоб отримати швидкість, і перетворимо це на кроки для запуску крокового двигуна для показу швидкості в аналоговій формі.
недійсний цикл () { readRPM (); радіус = ((радіус * 2,54) /100,0); // перетворення в метр int Швидкість = ((плаваюча) RPM * 60,0 * (2,0 * 3,14 * радіус) / 1000,0); // об / хв за 60 хвилин, діаметр шини (2pi r) r - радіус, 1000 для перетворення в км int Steps = map (Speed, minSpeed, maxSpeed, minSteps, maxSteps); if (flag1) { Serial.print (Speed); Serial.println ("Kmh"); lcd.setCursor (0,0); lcd.print ("RPM:"); lcd.print (RPM); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Швидкість:"); lcd.print (швидкість); lcd.print ("км / год"); прапор1 = 0; } int currSteps = Кроки;int кроки = currSteps-preSteps; preSteps = currSteps; myStepper.step (кроки); }
Тут ми маємо функцію reapRPM () для обчислення RPM.
int readRPM () { if (REV> = 10 або міліс ()> = st + 1000) // ОНОВЛЮЄТЬСЯ ПІСЛЯ КОЖНИХ 10 ЧИТАНЬ або 1 секунду в режимі очікування { if (flag == 0) flag = 1; об / хв = (60/2) * (1000 / (міліс () - час)) * REV / лопаткиInFan; час = міліс (); REV = 0; int x = об / хв; в той час як (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (об / хв, DEC); Об / хв = об / хв; затримка (500); st = міліс (); прапор1 = 1; } }
Нарешті, у нас є процедура переривання, яка відповідає за вимірювання обертання об’єкта
void RPMCount () { REV ++; if (led == LOW) { led = HIGH; } ще { led = LOW; } digitalWrite (ledPin, led); }
Ось як ви можете просто створити аналоговий спідометр за допомогою Arduino. Це також можна побудувати за допомогою датчика Холла, і швидкість може відображатися на смартфоні, дотримуйтесь цього посібника Arduino Speedometer.