- Потребни материјали
- Израчунавање брзине и приказ на аналогном брзиномеру
- Кружни дијаграм и везе
- Објашњење програмирања
Мерење брзине / окретаја у минути возила или мотора увек је био фасцинантан пројекат за испробавање. У овом пројекту ћемо изградити аналогни брзинометар користећи Ардуино. За мерење брзине користићемо модул ИР сензора. Постоје и други начини / сензори за то, попут Халл сензора за мерење брзине, али коришћење ИР сензора је лако јер је ИЦ сензорски модул врло чест уређај и можемо га лако набавити на тржишту, а такође се може користити на било којој врсти моторно возило.
У овом пројекту показаћемо брзину и у аналогном и у дигиталном облику. Радећи овај пројекат, такође ћемо побољшати своје вештине у учењу Ардуино и Степпер мотора, јер овај пројекат укључује употребу прекида и тајмера. На крају овог пројекта моћи ћете да израчунате брзину и раздаљину коју прелази било који ротирајући објекат и прикажете их на ЛЦД екрану од 16к2 у дигиталном формату и на аналогном мерачу. Почнимо са овим кругом брзиномера и одометра са Ардуином
Потребни материјали
- Ардуино
- Биполарни корачни мотор (4 жице)
- Возач корачног мотора (модул Л298н)
- Модул ИР сензора
- ЛЦД екран од 16 * 2
- Отпорник 2.2к
- Повезивање жица
- Бреадбоард.
- Напајање
- Испис слике брзиномера
Израчунавање брзине и приказ на аналогном брзиномеру
ИЦ сензор је уређај који може да детектује присуство предмета испред себе. Користили смо два ротора лопатице (вентилатора) и поставили смо ИР сензор близу њега на такав начин да га сваки пут када се окрећу лопатице ИР сензор детектује. Затим користимо помоћ тајмера и прекида у Ардуину да израчунамо време потребно за једну потпуну ротацију мотора.
Овде у овом пројекту користили смо прекид највишег приоритета за откривање броја окретаја у минути и конфигурисали смо га у режиму пораста. Тако да кад год излаз сензора пређе ЛОВ у Хигх, функција РПМЦоунт () ће бити извршена. А како смо користили ротор са две лопатице, то значи да ће се функција позвати 4 пута за један обртај.
Једном када се сазна потребно време, можемо израчунати РПМ користећи следеће формуле, где ће нам 1000 / време узети РПС (обртај у секунди), а даље множење са 60 даће вам РПМ (обртаје у минути)
рпм = (60/2) * (1000 / (милис () - време)) * РЕВ / лопатицеИнФан;
Након добијања броја обртаја у минути, брзина се може израчунати према датој формули:
Брзина = о / мин * (полупречник 2 * Пи) / 1000
Знамо да је Пи = 3,14, а полупречник 4,7 инча
Али прво морамо да претворимо радијус у метре из инча:
радијус = ((радијус * 2,54) /100,0) метара Брзина = о / мин * 60,0 * (2,0 * 3,14 * радијус) / 1000,0) у километрима на сат
Овде смо помножили број окретаја у минути са 60 за претварање броја окретаја у мин-1 (обртај на сат) и подељени са 1000 за претварање метара / сат у Киломере / сат.
Након брзине у кмх, ове вредности можемо приказати директно преко ЛЦД-а у дигиталном облику, али да бисмо приказали брзину у аналогном облику, морамо направити још један прорачун да бисмо сазнали бр. корака, корачни мотор треба да се креће како би приказао брзину на аналогном мерачу.
Овде смо за аналогни мерач користили 4-жични биполарни корачни мотор, који има 1,8 степена и значи 200 корака по окрету.
Сада морамо да покажемо 280 км / х на брзиномеру. Дакле, да би показао корачни мотор од 280 км / х, потребно је да се помери за 280 степени
Дакле, имамо макСпеед = 280
И макСтепс ће бити
макСтепс = 280 / 1,8 = 155 корака
Сада у нашем Ардуино коду имамо функцију, наиме функцију мап која се овде користи за мапирање брзине у кораке.
Кораци = мапа (брзина, 0, макСпеед , 0, макСтепс);
Па сад имамо
кораци = мапа (брзина, 0,280,0,155);
Након израчунавања корака, ове кораке можемо директно применити у функцији корачног мотора за померање корачног мотора. Такође морамо да се побринемо за тренутне кораке или угао корачног мотора користећи дате прорачуне
цуррСтепс = Кораци Кораци = цуррСтепс-преСтепс преСтепс = цуррСтепс
овде цуррСтепс су тренутни кораци који потичу из последњег израчунавања, а преСтепс су последњи изведени кораци.
Кружни дијаграм и везе
Шема кола за овај аналогни брзинометар је једноставна, овде смо користили ЛЦД 16к2 за приказ брзине у дигиталном облику и корачни мотор за ротирање игле аналогног брзиномера.
ЛЦД од 16к2 је повезан на следеће аналогне пинове Ардуина.
РС - А5
РВ - ГНД
ЕН - А4
Д4 - А3
Д5 - А2
Д6 - А1
Д7 - А0
Отпорник од 2.2 к користи се за подешавање осветљености ЛЦД екрана. Модул ИР сензора, који се користи за откривање лопатице вентилатора за израчунавање броја обртаја, повезан је на прекид 0, значи Д2 пин Ардуина.
Овде смо користили покретачки програм корачног мотора, односно модул Л293Н. ИН1, ИН2, ИН3 и ИН4 пин драјвера корачног мотора директно је повезан са Д8, Д9, Д10 и Д11 компаније Ардуино. Остали прикључци дати су у круговном дијаграму.
Објашњење програмирања
Комплетни код за Ардуино Спеедомете р дат је на крају, овде објашњавамо неколико његових важних делова.
У програмски део смо укључили све потребне библиотеке попут библиотеке корачних мотора, ЛикуидЦристал ЛЦД библиотеку и декларисане пинове за њих.
#инцлуде
После овога, узели смо неке променљиве и макронаредбе за извршавање прорачуна. Калкулације су већ објашњене у претходном одељку.
испарљиви бајт РЕВ; непотписани лонг инт рпм, РПМ; непотписано дуго ст = 0; непотписано дуго; инт ледПин = 13; инт лед = 0, РПМлен, превРПМ; инт застава = 0; инт флаг1 = 1; #дефине лопатицеИнФан 2 радијус пловка = 4,7; // инч инт преСтепс = 0; флоат степАнгле = 360.0 / (флоат) степсПерРеволутион; флоат минСпеед = 0; флоат макСпеед = 280,0; флоат минСтепс = 0; флоат макСтепс = макСпеед / степАнгле;
Након тога, ми покрене ЛЦД, Сериал, прекид и степпер мотор у подешавања функције
воид сетуп () { миСтеппер.сетСпеед (60); Сериал.бегин (9600); пинМоде (ледПин, ОУТПУТ); лцд.бегин (16,2); лцд.принт ("Брзиномер"); кашњење (2000); аттацхИнтеррупт (0, РПМЦоунт, РИСИНГ); }
Након тога, читамо рпм у петљи функцији и извршити обрачун добити брзину и претворити је у корацима за покретање степпер мотор на брзину схов у аналогном облику.
воид лооп () { реадРПМ (); радијус = ((радијус * 2,54) /100,0); // претварање у метар инт Брзина = ((плутајући) РПМ * 60,0 * (2,0 * 3,14 * радијус) /1000,0); // РПМ за 60 минута, пречник гуме (2пи р) р је полупречник, 1000 за претварање у км инт Кораци = мапа (Брзина, минСпеед, макСпеед, минСтепс, макСтепс); иф (флаг1) { Сериал.принт (брзина); Сериал.принтлн ("Кмх"); лцд.сетЦурсор (0,0); лцд.принт ("РПМ:"); лцд.принт (РПМ); лцд.принт (""); лцд.сетЦурсор (0,1); лцд.принт ("Брзина:"); лцд.принт (брзина); лцд.принт ("Км / х"); флаг1 = 0; } инт цуррСтепс = Кораци;инт кораци = цуррСтепс-преСтепс; преСтепс = цуррСтепс; миСтеппер.степ (кораци); }
Овде имамо функцију реапРПМ () за израчунавање РПМ-а.
инт реадРПМ () { иф (РЕВ> = 10 или милис ()> = ст + 1000) // АЖУРИРАТ ЋЕ СВАКИХ 10 ЧИТАЊА или 1 секунду у празном ходу { иф (флаг == 0) флаг = 1; рпм = (60/2) * (1000 / (милис () - време)) * РЕВ / лопатицеИнФан; време = милис (); РЕВ = 0; инт к = рпм; док је (к! = 0) { к = к / 10; РПМлен ++; } Сериал.принтлн (рпм, ДЕЦ); РПМ = рпм; кашњење (500); ст = милис (); застава1 = 1; } }
Коначно, имамо рутину прекида која је одговорна за мерење револуције објекта
воид РПМЦоунт () { РЕВ ++; иф (лед == ЛОВ) { лед = ХИГХ; } елсе { лед = ЛОВ; } дигиталВрите (ледПин, лед); }
На овај начин можете једноставно да направите аналогни брзинометар користећи Ардуино. Ово се такође може направити помоћу Халл сензора, а брзина се може приказати на паметном телефону, слиједите ове упуте за Ардуино брзинометар.