Съдържание:

Използвайте Arduino за показване на оборотите на двигателя: 10 стъпки (със снимки)
Използвайте Arduino за показване на оборотите на двигателя: 10 стъпки (със снимки)

Видео: Използвайте Arduino за показване на оборотите на двигателя: 10 стъпки (със снимки)

Видео: Използвайте Arduino за показване на оборотите на двигателя: 10 стъпки (със снимки)
Видео: Самый крутой робот, которого я когда-либо создавал! Автомобильный комплект SunFounder Zeus ИСПОЛЬЗУЕ 2024, Юли
Anonim
Използвайте Arduino за показване на оборотите на двигателя
Използвайте Arduino за показване на оборотите на двигателя
Използвайте Arduino за показване на оборотите на двигателя
Използвайте Arduino за показване на оборотите на двигателя
Използвайте Arduino за показване на оборотите на двигателя
Използвайте Arduino за показване на оборотите на двигателя

Това ръководство ще очертае как използвах Arduino UNO R3, 16x2 LCD дисплей с I2C и LED лента, която да се използва като индикатор за скоростта на двигателя и светлината за превключване в моята кола Acura Integra. Той е написан като някой с известен опит или излагане на софтуер Arduino или кодиране като цяло, математическия софтуер MATLAB и създаване или модифициране на електрически вериги. В бъдеще това може да бъде преработено, за да бъде по -лесно за разбиране за някой с малко или никакъв опит с тези теми.

Стъпка 1: Изберете Sigal Wire

Изберете Sigal Wire
Изберете Sigal Wire

Ще трябва да получите сигнал, който корелира с оборотите на двигателя. Възможно е да се добави система, която измерва оборотите на двигателя, но е много по -практично да се включи към съществуващ проводник, който носи информация за скоростта на двигателя. Един автомобил може да има множество източници за това и той може да варира значително от година на година за един модел превозно средство. В името на този урок ще използвам примера на моята кола, модифицирана писта 2000 Acura Integra LS. Открих, че на моя двигател (B18B1 с OBD2) има неизползвано напрежение, което е високо 12V и пада до 0V при завършване на пълен оборот.

Неща, които ще ви помогнат да идентифицирате потенциален сигнал за скоростта на двигателя:

  • Схема на свързване на вашия автомобил
  • Търсене във вашия автомобил във форуми, включващо сигнали на двигателя/ECU
  • Приятен механик или ентусиаст на автомобили

Стъпка 2: Удължете кабела към Arduino Board

Удължете кабела към Arduino Board
Удължете кабела към Arduino Board
Удължете кабела към Arduino Board
Удължете кабела към Arduino Board

След като сте избрали подходящ сигнал, ще трябва да го разширите навсякъде, където поставяте дъската си Arduino. Реших да сложа моята в превозното средство, където беше радиото, затова насочих новия проводник от двигателя, през гумена втулка в пожарната стена и точно до зоната на радиото. Тъй като вече има изобилие от ръководства за отстраняване, запояване и защита на окабеляването, няма да обяснявам този процес.

Стъпка 3: Анализ на сигнала

Анализ на сигнала
Анализ на сигнала

Тук нещата могат да се усложнят. Общото разбиране за анализа и контрола на сигнала ще ви помогне в дълъг път, но е възможно с малко знания.

Сигналният проводник, избран най -вероятно, няма да изплюе точната стойност на оборотите на двигателя. Той ще трябва да бъде оформен и модифициран, за да даде точния брой обороти на двигателя, които искате. Поради факта, че всеки различен автомобил и сигнален проводник, който може да бъде различен, от този момент нататък ще обясня как използвах позиционния сигнал от разпределителя на моя Integra.

Моят сигнал обикновено е 12V и пада до 0V при завършване на едно пълно завъртане. Ако знаете времето за завършване на едно пълно завъртане или един пълен цикъл, това може лесно да се преведе в обороти/мин, като се използват някои основни понятия.

1 / (секунди на цикъл) = цикли в секунда или Hz

Обороти в минута = Hz * 60

Стъпка 4: Кодирайте вашия анализ на сигнала

Кодирайте вашия анализ на сигнала
Кодирайте вашия анализ на сигнала

Този метод изисква получаване на времето, необходимо на входния сигнал за завършване на един пълен цикъл. За щастие софтуерът IDE на Arduino има команда, която прави точно това, PulseIn.

Тази команда ще изчака сигнал да премине праг, ще започне да брои и ще спре да брои, когато прагът бъде пресичан отново. Има някои подробности, които трябва да се отбележат при използването на командата, така че ще включа връзка към информация на PulseIn тук:

PulseIn ще върне стойност в микросекунди и за да се опрости математиката, това трябва незабавно да се преобразува в нормални секунди. Следвайки математиката на предишната стъпка, тази продължителност от време може да бъде приравнена директно към RPM.

Забележка: след опит и грешка открих, че дистрибуторът извършва две завъртания за всяко едно завъртане на коляновия вал на двигателя, така че просто разделих отговора си на 2, за да отчета това.

Стъпка 5: Идентифицирайте филтър

Идентифицирайте филтър
Идентифицирайте филтър

Ако имате късмет, вашият сигнал няма да има „шум“(колебания) и скоростта на двигателя ви ще бъде точна. В моя случай имаше много шум, идващ от разпределителя, който често даваше напрежения далеч от очакваното. Това се превръща в много фалшиви показания за действителната скорост на двигателя. Този шум ще трябва да се филтрира.

След известен анализ на сигнала, почти целият шум идва на честоти (Hz) много по -високи от това, което самият двигател извежда (което е вярно за повечето реални динамични системи). Това означава, че нискочестотният филтър е идеалният кандидат да се погрижи за това.

Нискочестотният филтър позволява преминаването на ниски честоти (желани) и намалява високите честоти (нежелани).

Стъпка 6: Филтриране: Част 1

Филтриране: Част 1
Филтриране: Част 1
Филтриране: Част 1
Филтриране: Част 1
Филтриране: Част 1
Филтриране: Част 1

Проектирането на филтъра може да се извърши на ръка, но използването на MATLAB значително ще ускори това, ако имате достъп до софтуера.

Нискочестотният филтър може да бъде приравнен към трансферна функция (или фракция) в областта на Лаплас (честотна област). Входната честота ще бъде умножена по тази част и изходът е филтриран сигнал, който има само информацията, която искате да използвате.

Единствената променлива във функцията е tau. Тау е равно на 1 / Омега, където Омега е граничната честота, която искате (трябва да е в радиани в секунда). Пределната честота е границата, при която честотите, по -високи от нея, ще бъдат премахнати и честотите, по -ниски от нея, ще бъдат запазени.

Зададох граничната честота равна на обороти в минута, които двигателят ми никога няма да достигне (990 оборота в минута или 165 Hz). Графиките на FFT показват приблизително какви честоти пренасяше суровият ми сигнал и честотите, които излязоха от филтъра.

Стъпка 7: Филтриране: Част 2

Филтриране: Част 2
Филтриране: Част 2
Филтриране: Част 2
Филтриране: Част 2

Тук MATLAB беше използван отново заради времето. Дефинира се граничната честота и от това се показва резултантната трансферна функция. Имайте предвид, че тази част се отнася само за домейна Laplace и не може да се използва директно на микроконтролер, базиран на времето като Arduino UNO R3.

Стъпка 8: Филтриране: Част 3

Филтриране: Част 3
Филтриране: Част 3
Филтриране: Част 3
Филтриране: Част 3

MATLAB има команда, която ще преобразува непрекъсната функция (честотна област) в дискретна функция (времева област). Резултатът от тази команда ще осигури уравнение, което може лесно да бъде включено в IDE кода на Arduino.

Стъпка 9: Филтриране: Част 4

Филтриране: Част 4
Филтриране: Част 4
Филтриране: Част 4
Филтриране: Част 4

В скицата на Arduino включете променливите u и y преди настройката. Командата float просто дефинира как променливата ще съхранява данни (неща като максимална стойност, десетични знаци и т.н …) и тук ще бъде предоставена връзка към повече информация за това: https://www.arduino.cc/reference/en/language /вариация …

В цикъла, в който се осъществява преобразуването от необработен сигнал в оборотите на двигателя, включете променливата u и уравнението на множеството y. Има няколко начина да се използва това, но променливата u трябва да бъде зададена равна на необработения входен сигнал, който се измерва, а променливата y ще бъде филтрираната стойност.

Препоръчано: