- Необходими материали
- Изчисляване на скоростта и показване на аналогов скоростомер
- Електрическа схема и връзки
- Обяснение на програмирането
Измерването на скоростта / оборотите в минута на превозно средство или двигател винаги е било очарователен проект, който да се опита. В този проект ще изградим аналогов скоростомер, използвайки Arduino. Ще използваме модул IR Sensor за измерване на скоростта. Има и други начини / сензори за това, като сензор на Hall за измерване на скоростта, но използването на IR сензор е лесно, тъй като IR сензорният модул е много често срещано устройство и можем да го получим лесно от пазара, а също така може да се използва за всякакъв вид моторно превозно средство.
В този проект ще покажем скорост както в аналогова, така и в цифрова форма. Правейки този проект, ние също ще подобрим нашите умения за изучаване на Arduino и Stepper мотор, тъй като този проект включва използване на прекъсвания и таймери. В края на този проект ще можете да изчислите скоростта и разстоянията, преминати от който и да е въртящ се обект, и да ги покажете на LCD екран 16x2 в цифров формат, а също и на аналогов измервателен уред. Затова нека започнем с тази верига за скоростомер и одометър с Arduino
Необходими материали
- Arduino
- Биполярен стъпков двигател (4 проводника)
- Драйвер на стъпков двигател (модул L298n)
- IR сензорен модул
- 16 * 2 LCD дисплей
- 2.2k резистор
- Свързващи проводници
- Макет.
- Захранване
- Разпечатка на снимка на скоростомера
Изчисляване на скоростта и показване на аналогов скоростомер
IR сензор е устройство, което може да открие присъствието на обект пред него. Използвали сме ротор с два остриета (вентилатор) и сме поставили IR сензора близо до него по такъв начин, че всеки път, когато лопатките се въртят, IR сензорът го разпознава. След това използваме помощта на таймери и прекъсвания в Arduino, за да изчислим времето, необходимо за едно пълно завъртане на двигателя.
Тук в този проект използвахме прекъсване с най-висок приоритет за откриване на обороти в минута и сме го конфигурирали в нарастващ режим. Така че, когато изходът на сензора премине НИСКО към Високо, ще се изпълнява функция RPMCount () И тъй като сме използвали ротор с два остриета, това означава, че функцията ще бъде извикана 4 пъти за един оборот.
След като времето е известно, можем да изчислим RPM, като използваме формулите по-долу, където 1000 / време, взето, ще ни даде RPS (оборота в секунда) и допълнителното умножаване с 60 ще ви даде RPM (оборота в минута)
обороти в минута = (60/2) * (1000 / (милис () - време)) * REV / лопаткиInFan;
След получаване на RPM, скоростта може да се изчисли по дадена формула:
Скорост = rpm * (2 * Pi * радиус) / 1000
Знаем, че Pi = 3,14, а радиусът е 4,7 инча
Но първо трябва да преобразуваме радиуса в метри от инчове:
радиус = ((радиус * 2.54) /100.0) метра Скорост = rpm * 60.0 * (2.0 * 3.14 * радиус) / 1000.0) в километри в час
Тук сме умножили оборотите в минута по 60, за да конвертираме оборотите в обороти в час (обороти на час) и разделени по 1000, за да преобразуваме метри / час в километри / час.
След като имаме скорост в kmh, можем да покажем тези стойности директно върху LCD в цифров вид, но за да покажем скоростта в аналогова форма, трябва да направим още едно изчисление, за да разберем не. стъпки, стъпковият двигател трябва да се движи, за да покаже скорост на аналоговия измервателен уред.
Тук използвахме 4-жилен биполярен стъпков двигател за аналогов измервателен уред, който има 1,8 градуса означава 200 стъпки на оборот.
Сега трябва да покажем 280 км / ч на скоростомера. Така че, за да покаже 280 Kmh стъпков двигател, трябва да се движи на 280 градуса
Така че имаме maxSpeed = 280
И maxSteps ще бъде
maxSteps = 280 / 1,8 = 155 стъпки
Сега имаме функция в нашия код на Arduino, а именно функция на картата, която се използва тук за картографиране на скоростта в стъпки.
Стъпки = карта (скорост, 0, maxSpeed , 0, maxSteps);
Така че сега имаме
стъпки = карта (скорост, 0,280,0,155);
След изчисляване на стъпки можем директно да приложим тези стъпки във функцията на стъпков двигател за преместване на стъпков двигател. Също така трябва да се погрижим за текущите стъпки или ъгъла на стъпковия двигател, като използваме дадените изчисления
currSteps = стъпки стъпки = currSteps-preSteps preSteps = currSteps
тук currSteps е текущите стъпки, които идват от последното изчисление, а preSteps е последно извършените стъпки.
Електрическа схема и връзки
Схемата на веригата за този аналогов скоростомер е проста, тук сме използвали 16x2 LCD за показване на скоростта в цифров вид и стъпков двигател за завъртане на иглата на аналоговия скоростомер.
16x2 LCD е свързан на следните аналогови щифтове на Arduino.
RS - A5
RW - GND
EN - A4
D4 - A3
D5 - A2
D6 - A1
D7 - A0
2.2k резистор се използва за настройка на яркостта на LCD. Модул IR сензор, който се използва за откриване на лопатката на вентилатора за изчисляване на оборотите, е свързан към прекъсване 0 означава D2 щифт на Arduino.
Тук използвахме драйвер за стъпков двигател, а именно модул L293N. IN1, IN2, IN3 и IN4 щифт на драйвер за стъпков двигател е директно свързан към D8, D9, D10 и D11 на Arduino. Останалите връзки са дадени в електрическата схема.
Обяснение на програмирането
Пълният код за Arduino Speedomete r е даден в края, тук обясняваме няколко важни части от него.
В частта за програмиране включихме всички необходими библиотеки като библиотека със стъпков двигател, LiquidCrystal LCD библиотека и декларирани пинове за тях.
#include
След това взехме някои променливи и макроси за извършване на изчисленията. Изчисленията вече са обяснени в предишния раздел.
летлив байт REV; неподписани дълги int rpm, RPM; неподписан дълъг st = 0; неподписано дълго време; int ledPin = 13; int led = 0, RPMlen, prevRPM; int флаг = 0; int флаг1 = 1; #define лопатки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;
След това, ние се инициализира на дисплея, Serial, прекъсване и стъпков мотор в настройка на функцията
void setup () { myStepper.setSpeed (60); Serial.begin (9600); pinMode (ledPin, OUTPUT); lcd.begin (16,2); lcd.print ("Спидометър"); забавяне (2000); attachInterrupt (0, RPMCount, RISING); }
След това четем оборотите в цикъл и извършваме изчисление, за да получим скорост и да го преобразуваме в стъпки за стартиране на стъпков двигател, за да покажем скоростта в аналогова форма.
цикъл void () { readRPM (); радиус = ((радиус * 2.54) /100.0); // преобразуване в метър int Скорост = ((плаващ) RPM * 60.0 * (2.0 * 3.14 * радиус) /1000.0); // обороти в минута за 60 минути, диаметър на гумата (2pi r) r е радиус, 1000 за преобразуване в km int Стъпки = карта (Скорост, 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 ("Km / h"); флаг1 = 0; } int currSteps = Стъпки;int стъпки = currSteps-preSteps; preSteps = currSteps; myStepper.step (стъпки); }
Тук имаме функция reapRPM () за изчисляване на RPM.
int readRPM () { if (REV> = 10 или милис ()> = st + 1000) // ЩЕ АКТУАЛИЗИРА AFETR НА ВСЕКИ 10 ЧЕТЕНИЯ или 1 секунда на празен ход { if (flag == 0) flag = 1; обороти в минута = (60/2) * (1000 / (милис () - време)) * REV / лопаткиInFan; време = милис (); REV = 0; int x = rpm; докато (x! = 0) { x = x / 10; RPMlen ++; } Serial.println (rpm, DEC); RPM = rpm; забавяне (500); st = милис (); флаг1 = 1; } }
И накрая, имаме прекъсваща рутина, която е отговорна за измерване на революцията на обекта
void RPMCount () { REV ++; ако (led == LOW) { led = HIGH; } else { led = LOW; } digitalWrite (ledPin, led); }
Ето как можете просто да изградите аналогов скоростомер, използвайки Arduino. Това може да се изгради и с помощта на сензор на Hall и скоростта може да се покаже на смарт телефон, следвайте този урок за скоростомер Arduino за същото.