Мазмуну:

Arduino Унаа дисплейи: 7 кадам (Сүрөттөр менен)
Arduino Унаа дисплейи: 7 кадам (Сүрөттөр менен)

Video: Arduino Унаа дисплейи: 7 кадам (Сүрөттөр менен)

Video: Arduino Унаа дисплейи: 7 кадам (Сүрөттөр менен)
Video: How measure DC Voltage and Current and build Energy meter with LCD Display | Lesson 104 2024, Июль
Anonim
Image
Image
Arduino Унаа дисплейи
Arduino Унаа дисплейи
Arduino Унаа дисплейи
Arduino Унаа дисплейи

Мен Adafruit'тен 7 TFT LCD, Teensy 3.6, Freematics OBD-II I2C адаптерин жана Amazonдо тапкан кээ бир резервдик сенсорлорду колдонуп, борттогу диагностикага (OBD-II) негизделген дисплей кургам. Дисплейде эки барак бар: бири менин Honda Accord унаам менен жүргөндө, экинчиси тескери болгондо.

Менин машинам айдап баратканда, RPM, MPH, кыймылдаткычтын жүктөлүү пайызы, батареянын чыңалуусу, кабинанын температурасы жана кыймылдаткычтын муздатуучу температурасы көрсөтүлөт (эгерде буларды каалабаса, анда башка бир нече транспорт статистикасы көрсөтүлөт).

Менин машинам тескери болгондо, Arduino IDEге шайкеш Teensy 3.6 менин машинамдын анимацияланган битмап сүрөтүн окуйт, аны көрсөтөт, анан резервдик сенсорлорду окуйт. Төрт сенсордун ар биринин фут алыстыгы бар жана машинанын артында анимация бар, ал объектинин машинага канчалык жакын экендигине негизделет (жөн эле жашыл <5 фут, жашыл жана сары <2.6 фут, жашыл, сары, жана кызыл <1 фут) дегенди билдирет.

Акыр -аягы, мен түн ичинде дисплейди өчүрүү мүмкүнчүлүгүн коштум.

Жыйынтык сонун көрүнөт жана менин машинамда абдан жакшы иштейт. Мен аны борбордук консолго орнотуп бүттүм, бул таптакыр башка процесс, мен бул көрсөтмөгө кире албайм. Мен бул LCD дисплейди түзүү үчүн колдонулган бөлүктөрдүн тизмеси төмөндө.

1) Freematics OBD -II адаптери - $ 35

2) Камдык сенсорлор - 15 доллар

3) 7 TFT ЖК дисплейи - $ 38

4) SPI негизиндеги LCD дисплей драйвери - $ 35

5) Teensy 3.6 - $ 30

6) Level Shifter - $ 4

7) 74HC125 Tri State Buffer IC -2 пакет үчүн $ 6 (мен ишенем, бул чиперди башка жерден таба аласың)

8) MicroSD картасы> = 1 ГБ - $ 4

9) Зым, конденсатор жана резистор.

10) LP3470-2.93 Power Reset IC - $ 2

11) (милдеттүү эмес): DS18B20 Температура Сенсору - 8 доллар

12) (милдеттүү эмес): OBD -II Splitter - $ 10

13) (милдеттүү эмес): 5 -таңгак үчүн 8 долларлык схеманы кошуңуз

1 -кадам: Камдык сенсорлорду окуу

Камдык сенсорлорду окуу
Камдык сенсорлорду окуу
Камдык сенсорлорду окуу
Камдык сенсорлорду окуу
Камдык сенсорлорду окуу
Камдык сенсорлорду окуу
Камдык сенсорлорду окуу
Камдык сенсорлорду окуу

Бул кадам татаал, анткени бул резервдик сенсорлор трансиверге, андан кийин жогорудагы сүрөттө көрүнгөндөй кичинекей ЖКга байланышат. Мен алардын дисплейинен кутулуп, өзүмдүкүн колдонуунун жолун кааладым. Бир аз гуглингден кийин тапкан веб -сайттын жардамы менен (арткы токтоочу сенсорлорду бузуу) мен transceiver ЖК экранына жөнөтүүчү менчик байланыш протоколун окуй алдым. Эмнегедир, байланыш протоколу I2C, UART, CAN, USB ж. Эгерде сиз менин кодумду колдоно турган болсоңуз, мен жогоруда байланыштырган топтомду сатып алууну сунуштайм, анткени ал ошол сенсорлор үчүн атайын жазылган.

Алар берген ЖКны ажыратуудан мурун, мен өткөргүч менен ЖКга туташкан үч зымды текшерип көрдүм. +5В кызыл зым, жерге кара зым жана көк зым болгон. Көгүлтүр зымга жана жерге осциллографумду кошкондон кийин, мен жогорудагы сүрөттө окшош изди көрдүм, бирок так эмес (мен жогорудагы шилтемеленген веб -сайттын сүрөтүн колдондум). Менин изимдин узактыгы бир аз жогору болчу, андан кийин дагы 17 кыска мөөнөт. Башталгандан кийин 0-5 биттери пайдалуу маалыматка ээ эмес. 6-8 биттери A, B, C же D сенсоруна туура келет. Бит 9-16 метрдин узундугуна туура келет. Мен сенсорлорду окуган жана сериялык консолго маалыматтарды чыгаруучу Arduino IDE эскизин коштум.

2 -кадам: Bitmap сүрөтүн түзүү жана аны MicroSD картага коюу

Bitmap сүрөтүн түзүү жана аны MicroSD картага коюу
Bitmap сүрөтүн түзүү жана аны MicroSD картага коюу
Bitmap сүрөтүн түзүү жана аны MicroSD картага коюу
Bitmap сүрөтүн түзүү жана аны MicroSD картага коюу

Мен GIMP деп аталган акысыз фото түзөтүү программасын колдонуп, машинамдын сүрөтүн өйдө жактан карап өстүрүп, өлчөмүн өзгөрттүм. Андан кийин мен сүрөттү "car.bmp" аттуу 24 биттик разряд сүрөтү катары экспорттодум, бул 110 пикселден 250 пикселге чейин. Мен муну microSD картасына жүктөп, microSD картаны Teensy 3.6 микроконтроллериме салып койдум.

UNO ордуна Teensy 3.6 менен барганымдын негизги себеби, өспүрүмдүн SD картаны окуп, RA8875 дисплей драйвери аркылуу сүрөттү көрсөтүү ылдамдыгы болду. UNO колдонуп, процесс болжол менен 8 секундага созулду, ал эми Teensy 3.6 1.8 секундга созулду.

3 -кадам: Аппаратты туташтыруу

Аппаратты туташтыруу
Аппаратты туташтыруу

Adafruit чындыгында RA8875 деп аталган IC тарабынан башкарылуучу 7 TFT LCDге ээ. Мен бул дисплейди жана дисплейдин драйверин эки себептен тандагам. Биринчиден, дисплей үчүн алдын ала жазылган кенен китепканалар бар. Экинчиден, дисплейдин айдоочусу сүйлөшө алат SPI аркылуу каалаган микроконтроллер, башкача айтканда RA8875 менен микроконтроллерди туташтырган көп зымдар жок.

Бул орнотуунун эки терс жагы бар. Биринчиден, эгерде SDI сыяктуу кандайдыр бир SPIге негизделген түзмөктү колдонууну кааласаңыз, 74HC125 үч штаттык буфер ICнин колдонулушун талап кылган Adafruitтен RA8875 тактасы менен жабдык катасы бар экендиги. Аппараттык мүчүлүштүктү толук түшүнүү үчүн, төмөнкү форумду окуңуз. Экинчиден, сүрөттөрдү ЖКга жөнөтүү үчүн талап кылынган салыштырмалуу узак убакыт. Ошондой эле, сүрөттү ЖКга жөнөтүү үчүн талап кылынган көп убакыт микро контроллерлердин саат ылдамдыгы жана дисплей драйверине жөнөтүлүшү керек болгон чоң көлөмдөгү SPI туташуусу менен шартталган. зымдар абдан аз.

Мен Fritzing схемасын түздүм, ошондуктан бул дисплейди түзүүнү каалагандардын баары Teensy 3.6деги казыктар эмне менен туташып турганын оңой эле окуй алышат. Мен төмөндө.frz файлын киргиздим. Белгиленбеген эки компонент - бул 1F 16V электролиттик конденсатор жана 100μF керамикалык конденсатор болгон конденсаторлор. Мен буларды Teensy микроконтроллеринин кубаты туруктуу DC +5V экенине жана эч кандай чыңалууга ээ болбогондугуна ынануу үчүн коштум (кереги жок болушу мүмкүн, бирок мен аларды коштум, анткени машинанын чыңалуусу батареядагы жүктөөгө жараша тез өзгөрүп кетиши мүмкүн).

Компоненттер жөнүндө айта турган бир нече нерсе. Биринчиден, деңгээлди алмаштыруучу 5В сигналды алат жана 3.3V Teensy 3.6 коопсуз чыңалуусуна айландырат. Бул OBD I2C адаптерине, ошондой эле резервдик сенсордун трансиверине керек. Экинчиден, өспүрүмдөрдүн I2C линиялары 4,7 кОмго чейин резисторлорду талап кылат. Үчүнчүдөн, "түнкү зым" (караңгылатуучу зым) менен "резервдик байланыш зымын" туташтырган төрт резистор 12V-13V сигналдарын болжол менен 2.5-3V сигналдарга жеткирүү үчүн чыңалуу бөлүштүргүч катары кызмат кылуу үчүн керек.

UPDATE 7/22/18: Мен OBD-I2C модулунун ички температура сенсорун абдан кызыктай сандарды чыгарганын көрдүм. Кээде бул иштейт, бирок көбүнчө модуль 400 градустан жогору температураларды чыгарат. Мындан улам мен өзүмдүн ds18b20 температура сенсорун кошууну чечтим. Бул жерде сиз каалаган температура сенсорун колдоно аласыз, бирок сиз Arduino кодун түзөтүшүңүз керек болот.

UPDATE 3/1/19: Teensy 3.6 өтө суук болгондо башталбайт. Мен анын туура жүктөлүшүн текшерүү үчүн баштапкы абалга электр кубатын коштум.

4 -кадам: RA8875 Дисплей драйвери жана графикалык дизайн

RA8875 Дисплей драйвери жана графикалык дизайн
RA8875 Дисплей драйвери жана графикалык дизайн

RA8875 дисплей драйверинде Adafruit_RA8875 деп аталган китепкана бар, мен аны биринчи жана экинчи бетте көрүнгөн фигураларды түзүүдө колдоном. RA8875 китепканасы сызыктарды, тик бурчтуктарды, тегеректелген тик бурчтуктарды, үч бурчтуктарды, эллипстерди жана чөйрөлөрдү гана түзө алат, андыктан графика татаал формаларды түзүү үчүн акылдуу түрдө иштелип чыгышы керек. Мисалы, биринчи беттеги боз шакек чындыгында чоңураак диаметри бар толук боз тегерек, андан кийин кичине диаметри толук кара тегерек. Ошондой эле, резервдик сенсордун бир кичинекей бөлүмүндө 2 бурчтук бар, алар көп бурчтуу формага келет. Мен муну резервдик сенсор беттин жеке бөлүмүнүн түсүн өзгөртүү үчүн жасадым. Дисплей үчүн Arduino файлында үч бурчтуктардын жана башка фигуралардын кайда болгонун көзөмөлдөө үчүн колдонулган көптөгөн пункттар бар.

Мен бул улуу веб-сайтты RGB565 түстөрүн тандоо жана эскизде аныктоо үчүн колдонгом, ошондуктан Adafruit_RA8875 китепканасында алдын ала аныкталган түстөрдү колдоно алам.

Шрифттер боюнча, Adafruit_RA8875 китепканасы Adafruit_GFX китепканасынын шрифттерин колдонууга мүмкүндүк берген китепкананын бир бөлүгүн комментарийлемейинче, бирөөнү гана колдойт. Мен төмөндө өзгөртүлгөн Adafruit_RA8875 китепканасын киргиздим. Мен жөн эле бир нече сап кодду комментарийлеп, анан Adafruit_GFX китепканасындагы шрифттерди колдоно алдым. Ошондой эле, мен бул долбоордо колдонгон 7 сегменттин шрифтин колдонуу үчүн, Adafruit_GFX китепканасынын шрифттер папкасында турган "FreeSevenSegNumFont.h" файлын текшериңиз.

5 -кадам: Эскизди жүктөө

Эскиз жүктөлүүдө
Эскиз жүктөлүүдө
Эскиз жүктөлүүдө
Эскиз жүктөлүүдө

Эскизди Teensy 3.6ге жүктөө үчүн, Teensyduino орнотушуңуз керек болот. Андан кийин сиз өспүрүмдөрдүн китепканасындагы Adafruit_RA8875 жана Adafruit_GFX китепканаларын алмаштырышыңыз керек болот (документтердеги сиздин типтүү ордуңуз эмес). Macта, мен тиркемелердеги Arduino тиркемесинин оң баскычын чыкылдатып, андан кийин/Contents/Java/hardware/teensy/avr/китепканаларына өтүшүм керек болчу. Терезелерде, мен ал сиздин C дискте x86, Arduino программалык файлдарында, андан кийин ошол жердеги папка папкасында экенине ишенем. Муну кылгандан кийин, сиз Arduino тиркемесиндеги эскиздердин жайгашуусун жаш өспүрүмдүк китепканаларыңыздын каалаган жерине (башкача айтканда /Applications/Arduino.app/Contents/Java/hardware/teensy/avr) өзгөртүү менен өзгөртүшүңүз керек болот.

UPDATE 7/22/16: Анткени мен жогоруда айткан ички температура сенсорунун көйгөйүнөн улам DS18B20 модулунун температура сенсорун орнотууга туура келди. Zip файлында 4 arduino эскизин көрөсүз. Сураныч, эгер сиз OBD-II I2C модулунун ички температура сенсорун колдонууну кааласаңыз, display_code эскизин жүктөңүз. Сураныч, жогоруда мен байланыштырган DS18B20 модулун колдонууну кааласаңыз, display_code_with_new_temperature_sensor эскизин жүктөңүз.

UPDATE 11/17/17: Мен программалык камсыздоонун бир нече мүчүлүштүктөрүн оңдоп койдум, анын ичинде DS18B20 температурасы 185 Фаренгейт, суук мезгилде дисплей таптакыр күйгүзүлбөйт жана дисплей күңүрт болуп калганда пикселдер туура эмес түстө калып калат.

Андан кийин, өспүрүмдүк жөндөөлөрүңүз сүрөттө дал келишине ынануу үчүн мендеги сүрөттү колдонуңуз. Мен өспүрүмдү 240 МГцке чейин ылдамдатуу I2C OBD-II адаптеринин өспүрүмдөр менен баарлашуусуна мүмкүндүк бербегенин байкадым. Акыр -аягы, жөн гана жүктөө чыкылдатуу.

Мен arduino эскиз файлдарына абдан кеңири комментарийлерди жаздым. Сураныч, программалык камсыздоонун кантип иштээрин түшүндүрүү үчүн ошол жерден караңыз. Сураныч, мени менен байланышуудан тартынба. Мен аларга колумдан келишинче жооп бергенге аракет кылам. Жакшы ийгилик!

6 -кадам: 3D Case LCD Case

СКД корпусун 3D басып чыгаруу
СКД корпусун 3D басып чыгаруу
СКД корпусун 3D басып чыгаруу
СКД корпусун 3D басып чыгаруу
СКД корпусун 3D басып чыгаруу
СКД корпусун 3D басып чыгаруу

Мен 7 дюймдук дисплейди коргоо үчүн 3D басып чыгарылган ЖКнын үстү жана астындагы капкагын түздүм. Мен. IPT ойлоп табуучунун бөлүк файлдарын, ошондой эле. STL файлдарын тиркеп койдум.

Мен ошондой эле backup_sensor_ring.ipt деп аталган бөлүктү коштум, ал шакек мен жогоруда шилтеме кылган резервдик сенсорлордун тегерегине туура келет. Менин машинамда Амазонкадан сатып алган резервдик сенсорлор үчүн өтө чоң болгон алдын ала бургуланган резервдик сенсор тешиктери бар болчу, андыктан резервдик сенсорлорго туура келе турган шакек түзүүгө туура келди. Эгерде сиз бампериңизге топтомго киргизилген тегерек бургулоочу бөлүк менен бургуңуз келсе, анда сизге бул бөлүк кереги жок болот.

7-кадам: OBD-II портун бөлүү Ошентип, Arduino унаа иштеп жатканда гана күчкө ээ

OBD-II портун бөлүү Ошентип, Arduino унаа иштеп жатканда гана күчкө ээ
OBD-II портун бөлүү Ошентип, Arduino унаа иштеп жатканда гана күчкө ээ
OBD-II портун бөлүү Ошентип, Arduino унаа иштеп жатканда гана күчкө ээ
OBD-II портун бөлүү Ошентип, Arduino унаа иштеп жатканда гана күчкө ээ
OBD-II портун бөлүү Ошентип, Arduino унаа иштеп жатканда гана күчкө ээ
OBD-II портун бөлүү Ошентип, Arduino унаа иштеп жатканда гана күчкө ээ

Мен дисплейимди орноткондон көп өтпөй, дисплей ар дайым күйүп тургандыгын түшүндүм, ал тургай машина өчүп турганда. OBD-II pinoutун карап, OBD-II коннекторуна 12V электр линиясы дайыма батареяга түз туташтырылганын байкадым.

Муну айланып өтүү үчүн, мен OBD-II бөлүштүргүчтү сатып алдым, сплиттердеги эки туташтыргычтын бирине 16-пинге туташтырылган зымды кесип, анан ошол зымды схемага кошуу үчүн туташтырдым.

Андан кийин, мультиметримди колдонуп, айдоочунун капталындагы сактандыргыч кутусуна бардым жана ачкычты күйгүзүүчүгө айландыргандан кийин, кайсы сактандыргычтын күчкө ээ болгонун текшерүү үчүн учурдагы сактагычтарды сынап көрдүм.

Акыр -аягы, мен кошулган схеманы зымдын сактандыргычына туташтырдым, ошондо дисплей менин машинам иштеп жатканда гана күйөт. Сураныч, машинаңызга чынжырды кантип туура кошуу керек экенин изилдеп көрүңүз. Мен бул YouTube үйрөткүчүн жакшы деп таптым.

Сунушталууда: