Управление ардуино с клавиатуры. Управление Ардуино через компьютер

29.04.2019

Технологии не стоят на месте и сегодня автолюбителям предлагается множество различных вариантов для совершенствования своих «железных коней». Одним из таковых является Arduino. Это устройство представляет собой инструмент, использующийся для проектирования электронных устройств. В случае с автомобилем проектирование обычно осуществляется на лобовое стекло. Как сделать бортовой компьютер на Arduino и как его правильно настроить — читайте в этой статье.

[ Скрыть ]

Идеи для авто на основе маленькой платы с маленьким процессором — Arduino

Компы давно и плотно вошли в нашу жизнь. Аппаратная платформа Arduino — это одна из последних разработок с открытым программным кодом, которая построена на обычной печатной схеме. Подробнее о том, как с помощью такой платы сделать разные устройства для авто, мы расскажем далее.

БК

С помощью платы Arduino можно соорудить автомобильный бортовой компьютер, который сможет:

  • рассчитать расход горючего;
  • вывести информацию о температуре антифриза;
  • рассчитать скорость движения, а также расстояние поездки;
  • вывести потраченное горючее за определенный километраж;
  • определить обороты мотора и т.д (автор видео — канал Arduino Tech PTZ).

Помимо устройства Arduino вам также потребуется жидкокристаллический модуль, адаптер Блютуз НС-05, а также сканер ELM327 и резисторное устройство на 10 кОм. Разумеется, необходимо приготовить и звуковой индикатор, монтажные провода и сам корпус устройства.

Процедура сборки осуществляется следующим образом:

  1. Сначала настраиваем Блютуз адаптер. К пинам устройства нужно припаять провода — к двум нижним и верхним контактам.
  2. Сам модуль подключается к плате для настройки, для этого необходимо открыть программу Arduino IDE 1.0.6 или любую другую версию, после его залить скетч в схему через USB-выход.
  3. Когда загрузка будет завершена, нужно зайти в меню Сервис — Монитор порта и выставить скорость 9600.
  4. Затем собирается схема с платой, адаптером и заранее подготовленным дисплеем. Сначала подключается Блютуз адаптер.
  5. После этого в схему добавляется дисплей. Более подробное описание подключения вы найдете на фото ниже.
  6. Резисторный элемент на 10 кОм используется для управления яркостью и контрастностью дисплея. Поэтому при первом подключении вы можете заметить, что изображения нет, если это так, то его нужно просто настроить путем поворота резистора.
  7. Далее, производится подключение дополнительной клавиши, которая будет выполнять функцию переключения экранов с информацией. Один контакт от кнопки идет к элементу GND, второй — к контакту 10. Чтобы подключить бипер, плюсовой контакт соединяется с 13 пином, а минусовой — с GND.
  8. Затем, используя то же программное обеспечение Arduino IDE 1.0.6, нужно залить скетч. Теперь вам остается только настроить бортовой компьютер и подключить его к автомобилю.

Фотогалерея «Схема подключения БК»

GPS-трекер

Чтобы собрать GPS-трекер на базе Arduino, вам потребуется:

  • сама плата, процесс описан на примере модели Mega 2560;
  • модуль GSM/GPRS, который будет использоваться для передачи данных на сервер;
  • а также Arduino GPS-приемник, в примере мы рассмотрим модель SKM53 (автор видео об изготовлении трекера на примере платы SIM 808 — канал Alex Vas).

Как производится подключение схемы:

  1. Сначала осуществляется подключение модуля к основной плате, по умолчанию установлена скорость передачи данных 115200.
  2. После подключения нужно включить девайс и установить одинаковую скорость для всех портов — как последовательных, так и программных.
  3. GSM передатчик подключается к контактам 7 и 8 на основной микросхеме.
  4. Затем производится настройка модуля путем ввода команд. Все команды мы описывать не будем, их и так можно найти в Интернете без проблем. Рассмотрим только самые основные. AT+SAPBR=3,1,«CONTYPE»,«GPRS» — команда определяет тип подключения, в данном случае это GPRS. AT+SAPBR=3,1,«APN»,«internet.***.ru», где *** — это адрес оператора мобильной сети, который будет использоваться. AT+HTTPINIT — по этой команде производится инициализация HTTP.
  5. Нужно отметить один нюанс — при написании серверной составляющей интерфейса, желательно предусмотреть прием и выведение данных для нескольких адаптеров. Нужно установить переключатель на три позиции, это даст возможность получать данные от восьми автомобилей.
  6. Затем производится написание скетча на микросхеме. Сам скетч также можно найти в Сети, писать его необязательно. Учтите, если будут использоваться два активных последовательных порта, это может привести к ошибкам в передачи и отправке информации.

Парктроник

Чтобы соорудить парктроник, вам потребуются такие составляющие:

  • сама микросхема;
  • ультразвуковое устройство, в данном случае это дальномер HC-SR04:
  • шесть светодиодных элементов;
  • шесть резисторных элементов сопротивлением на 220 Ом;
  • соединительные провода типа «папа-папа»;
  • пьезодинамический элемент;
  • макетная схема для сборки.

Процедура сборки выглядит следующим образом:

  1. Для начала на макетной схеме необходимо установить светодиодные элементы, подготовленные заранее. Отрицательный контакт у всех светодиодов будет общим. Короткий контакт — катод — следует подключить к отрицательной шине, которая имеется на макетной плате.
  2. К более длинным контактам диодов, то есть анодам, необходимо подключить резисторные элементы на 200 Ом, если вы не будете их использовать, это приведет к перегоранию диодов.
  3. На центральной части производится монтаж ультразвукового устройства. На этом контроллере есть четыре контакта. Vcc — это контакт питания на пять вольт, Echo — это выходной контакт, Trig — это вход, а GND — это заземление.
  4. После того, как дальномер будет установлен, к его выходам следует подключить проводку. В частности, контакт Echo подключается к выходу 13, Trig — к 12 контакту. GND, соответственно, необходимо соединить с заземлением, которое имеется на схеме контроллера, а оставшийся выход Vcc соединяется с 5-вольтовым питанием на плате Arduino.
  5. После выполнения этих действий нужно соединить проводку с контактами резисторных элементов. А также они подключаются последовательным образом к пинам на плате — используются пины от 2 до 7.
  6. Следующим этапом будет подключение пьезопищалки, которая и будет предупреждать водителя о приближении к препятствию. Минусовой выход, как вариант, можно будет объединить с отрицательным контактом установленного ранее дальномера. Что касается положительного контакта, то он соединяется с пином под номером 11 на микросхеме.
  7. Для того, чтобы устройство в конечном итоге работало в нормальном режиме, дополнительно нужно будет написать, после чего загрузить код программы в плату. В этом коде необходимо точно указать дистанцию, при приближении к которой начнут загораться диодные элементы и будет срабатывать пищалка. Причем тональность пищалки должна быть разной, чтобы водитель мог узнать, когда приближение к препятствию будет критическим. Сам код либо пишется самостоятельно, либо берется уже готовый вариант из Интернета. Вариантов скетчей очень много, вам нужно только выбрать наиболее подходящий для вашего устройства (автор видео — канал Arduino Prom).

Заключение

Как видите, микроплата Arduino — это универсальный вариант, с помощью которого можно создать множество различных девайсов. Помимо вышеописанных устройств, вы также можете соорудить спидометр, который будет выдавать информацию о скорости прямо на лобовое стекло, кнопку старт-стоп, и даже сигнализацию для транспортного средства. В целом вариантов очень много, если подойти к вопросу изготовления самодельного гаджета правильно, то у вас все получится.

Разумеется, для этого вы должны обладать знаниями в области электроники и электротехнике, при этом минимальных навыков, вероятнее всего, будет недостаточно. При изготовлении девайсов вам придется принимать собственные решения, о чем в Интернете может и не быть информации. Поэтому будьте готовы к тому, что процесс сборки может занять достаточно долгое время.

Видео «Как соорудить систему управления электродвигателем печки?»

Из видео ниже вы сможете узнать, как обустроить климат-контроль путем доработки регулятора отопительной системе на примере автомобиля ВАЗ 2115 (автор ролика — Иван Никульшин).

Узнайте, как создать устройство, которое определяет, когда компьютерный монитор физически повернут, и автоматически сообщает компьютеру повернуть дисплей соответствующим образом.

В настоящее время большое количество цифрового контента является узким и высоким (портретная ориентация), но большинство компьютерных мониторов являются широкими и низкими (ландшафтная ориентация). Это означает, что много места на мониторе теряется впустую. Сравните два скриншота ниже. В ландшафтном представлении видны только полтора поста, а в портретном - 3.



По этой причине при просмотре социальных сетей может быть полезен поворот монитора на 90°, однако переключение настроек дисплея назад и вперед может быть слишком утомительно. Особенно это актуально, если у вас несколько мониторов или компьютер, на котором не работают стандартные сочетания горячих клавиш. Сегодня я собираюсь показать, как создать устройство, которое будет автоматически говорить компьютеру, повернуть дисплей, когда монитор физически повернут.

Принцип действия

Устройство будет собрано на Arduino и установлено на задней панели монитора. Для определения направления мы будем использовать акселерометр. В стационарном режиме акселерометр интерпретирует гравитацию как ускорение вверх, равное 9,8 м/с 2 . Акселерометр будет взаимодействовать с Arduino через интерфейс I2C. Arduino будет постоянно следить (опрашивать), в каком направлении акселерометр думает, что он ускоряется. При изменении Arduino через USB отправит сигнал на компьютер. Скрипт на python, запущенный на компьютере, прочитает это изменение и сообщит компьютеру о необходимости повернуть дисплей в соответствующем направлении.

В данной статье объясняется, как реализовать это на Windows и Linux. Вероятно это можно сделать и на Mac. Однако, поскольку у меня нет Mac, я не могу попробовать. Единственное отличие - это системная команда, вызываемая скриптом Python.

Подключите Arduino с помощью USB кабеля к компьютеру.

Как упоминалось ранее, мы можем использовать акселерометр для определения направления, измеряя, какое направление считывает ускорение 9,8 м/с 2 . Поскольку монитор всегда будет либо в вертикальном, либо в горизонтальном положении, это будет легко (если бы нам было нужно учитывать диагональные ориентации, было бы сложнее).

При программировании хорошей практикой считается разделение кода по различным аспектам на разные файлы. Для определения ориентации мы написали библиотеку на базе официальной библиотеки MMA7455. Это позволяет нам абстрагироваться от деталей того, как это делается, и поэтому наш основной файл может оставаться простым, в нем будет проверяться ориентация вызовом только одной функции и при изменениях отправляться сообщение на компьютер.

Скачайте и распакуйте следующий архив:

Откройте monitor.ino в Arduino IDE. Скомпилируйте и запустите код (все 3 файла для Arduino должны быть в одном каталоге). Откройте монитор последовательного порта Инструменты (Tools) > Монитор порта (Serial Monitor) или с помощью Ctrl + Shift + M .

Вы должны будете увидеть что-то похожее:

Freescale MMA7455 accelerometer May 2012 The MMA7455 is okay STATUS: 0 WHOAMI: 55 Assuming the device is Y_POS

Теперь возьмите Arduino так, чтобы она находилась параллельно вертикальной плоскости. Повращайте её (тоже в вертикальной плоскости). Каждый раз при повороте на 90° вы должны видеть что-то похожее:

Rotate Monitor change detected Rotate Monitor change detected Rotate Monitor change detected Rotate Monitor

Установите устройство на заднюю панель монетора и подключите его к компьютеру с помощью USB кабеля. Для установки вы можете использовать любой способ. Я использовал пластиковые стойки и двухсторонний скотч.

Нам нужно откалибровать акселерометр, чтобы он знал, в каком направлении он указывает при включении. Эта инициализация будет выполняться при каждом включении Arduino. При использовании на мониторе это может быть всякий раз, когда вы включаете компьютер (зависит от того, остается ли питание на USB портах, когда компьютер выключен). Поэтому, когда вы включаете компьютер, это устройство ожидает, что ваш монитор будет находиться в том положении, которое вы определили как положение по умолчанию. Если это не так, Arduino сообщит компьютеру, что дисплей повернут неправильно, или она будет дезориентирована и не будет говорить компьютеру о вращении вовсе.

Когда вы устанавливаете устройство на заднюю панель монитора, обратите внимание на то, какое направление является верхом, когда ваш монитор находится в положении по умолчанию (в том, при котором, вероятно, он будет находиться при включении компьютера).

В monitor.ino есть строка кода, которую нужно соответствующим образом изменить. Если стрелка y на акселерометре указывает вверх, то оставьте в строке Y_POS . Если стрелка указывает вниз, измените строку на Y_NEG . Аналогично и с осью x, используйте X_POS и X_NEG .

#define START_ORIENTATION Y_POS

Если вы хотите понять, как работает код, то продолжайте чтение. Если вам необходим просто работающий продукт, то можно перейти к разделу «Код со стороны компьютера».

Пояснения к коду

Посмотрим на MMA7455.h .

Typedef enum {Y_POS, Y_NEG, X_POS, X_NEG, Z_POS, Z_NEG, NOT_SURE} orientation;

Перечисление enum в C представляет собой тип данных, как int или char . Оно используется для переменных, которые точно могут быть одним из значений из короткого списка нечисловых переменных. В данном случае мы используем enum для сохранения ориентации устройства в переменной.

Посмотрите на акселерометр. Вы увидите на нем стрелки x и y . Когда стрелка x указывает на верх, то мы должны указать X_POS . Когда стрелка x указывает вниз, мы должны указать X_NEG . Ось z указывает на плату. Когда плата лежит на столе в горизонтальном положение, это состояние обозначается Z_POS .

При установке на заднюю панель монитора устройство должно всегда по x-оси или по y-оси быть направлено вверх или вниз. В monitor.ino мы создали макрос под названием VALID_ORIENTATION для проверки, соответствует заданная ориентация одному из 4 возможных вариантов. Как вы можете видеть, можем проверить значение перечисления, как и значения любого другого типа данных.

#define VALID_ORIENTATION(o) ((o==Y_POS) || (o==Y_NEG) || (o==X_POS) || (o==X_NEG))

В функции setup() в основном диагностика. В ней три важных строки:

Serial.begin(9600);

Строка выше инициализирует связь по последовательному порту, через который мы будем взаимодействовать с компьютером.

Wire.begin();

Инициализирует связь по шине I2C, через которую мы будем взаимодействовать с акселерометром. Она инициализирует настройки только на стороне Arduino. Акселерометр мы инициализируем с помощью следующей строки:

Error = MMA7455_init(START_ORIENTATION);

Когда вы нажимаете кнопку, ее контакты не замыкаются идеально. Они «дребезжат», и сигнал выглядит так, как если бы пользователь в течение нескольких миллисекунд нажал кнопку несколько раз. Мы ждем 100 мс, чтобы убедиться, что наш код не интерпретирует этот дребезг как последовательность нажатий. Существует два подхода борьбы с дребезгом контактов. Мы можем реализовать либо аппаратное, либо программное подавление дребезга контактов. Аппаратный метод включает в себя добавление в схему фильтра нижних частот, либо активного, либо пассивного. Поскольку это связано с покупкой и пайкой дополнительных компонентов, вместо него я выбрал программное подавление дребезга.

Используемый нами акселерометр имеет некоторые функции прерываний, но в нашем случае они неприменимы. Вот почему мы прибегли к опросу (прерывания предпочтительны с точки зрения производительности). Как правило, при работе с кнопками рекомендуется использовать прерывания. Однако, поскольку мы уже опрашиваем акселерометр, то можем заодно опросить и кнопку.

Каждый раз в цикле мы проверяем, нажата ли кнопка в данный момент. Если это так, и она была не нажата в предыдущий раз, то мы знаем, что поьзователь нажал ее только что, и поэтому мы запускаем функцию setup() снова и отправляем START_ORIENTATION на компьютер. Затем, прежде чем продолжить, мы ждем 100 мс. Эта задержка нужна, чтобы перед продолжением работы Arduino дождалась, чтобы контакты установили конечное состояние. По общему признанию, это довольно небрежный и ленивый подход к программному подавлению дребезга контактов, потому что Arduino ничего не делает во время задержки. Более сложный подход будет включать в себя таймеры, чтобы, пока Arduino ждет установления состояния контактов, мог выполняться другой код. В этом конкретном случае единственное, что мы упускаем, используя задержку вместо таймера, - это изменение показаний акселерометра. Поскольку, когда пользователь нажимает кнопку, этого происходить не должно, то этот неаккуратный метод можно считать приемлемым. Единственное преимущество метода задержки - это простота. Аппаратное подавление дребезга контактов требует дополнительных компонентов, а написание кода для прерываний и задержек может оказаться сложным.

}else if(!digitalRead(BUTTON_PIN) // кнопка была нажата && previous_button_state) // и это первый раз, когда она нажата { // послать, даже если ориентация на была изменена setup(); // перекалибровать sendOrientation(START_ORIENTATION); delay(100); //программное подавление дребезга контактов previous_button_state = 0; }

Код со стороны компьютера

Arduino отправит информацию на компьютер, используя тот же последовательный интерфейс, который мы используем для ее программирования и отладки. Чтобы избежать конфликтов, убедитесь, что монитор последовательного порта в Arduino IDE закрыт, когда запущен скрипт. Если он открыт, некоторые сообщения от Arduino будут захвачены монитором последовательного порта, и скрипт их не увидит или увидит только их часть.

На стороне компьютера мы будем использовать код на Python. Он будет слушать то, что Arduino пишет в последовательный интерфейс, и выполнять системный вызов для поворота дисплея.

Пользователи Linux могут пропустить следующий подраздел и перейти к подразделу «Linux».

Windows

Если у вас несколько мониторов, то сделайте следующее (если у вас только один монитор, то пропустите этот параграф). Откройте командную строку там, где сохранили display.exe (откройте проводник в этом месте, затем выполните Shift + правый клик на фоне проводника, и выберите " Открыть окно команд "). Введите в консоли display.exe /listdevices . Вы должны будете увидеть индекс каждого вашего монитора. Обратите внимание на индекс монитора, который хотите вращать.

Python скрипт откроет соединение с USB портом. Когда он обнаружит сообщение от Arduino, он пошлет соответствующую команду утилите display.exe , которая и повернет дисплей. Найдите следующую строку и укажите каталог, в котором находится display.exe:

Command = "C:/.../display.exe /rotate:" + translation

Пользователям с несколькими мониторами необходимо добавить еще /device x (где x - индекс вашего монитора). Получится что-то похожее:

Command = "C:/.../display.exe /device 2 /rotate:" + translation

В командной строке перейдите к каталогу, в котором сохранили display.exe и windows-script.py . Это можно сделать с помощью команды cd . Например, если они сохранены в Documents/rotate, используйте:

Cd Documents/rotate

Теперь наберите dir , чтобы увидеть список файлов в каталоге. Дважды проверьте, что в нем есть оба файла. Теперь давайте запустим python-скрипт.

Python windows-script.py

Попробуйте повращать устройство. Дисплей должен поворачиваться в соответствующем направлении.

Теперь нам необходимо, чтобы Windows запускала эту программу в фоновом режиме при включении компьютера. По умолчанию программы из автозапуска запускаются видимыми. Но мы не хотим постоянно видеть окно командной строки. Поэтому мы создадим batch файл, который будет запускать python скрипт в фоновом режиме, а затем выполнение этого batch файла будет завершаться.

Сначала откройте каталог автозагрузки. Расположение этой папки зависит от используемой версии Windows. Нажмите клавишу Windows , а затем R . Должно появиться окно запуска. Наберите shell:startup и нажмите Enter . Теперь вы должны увидеть каталог автозагрузки. Создайте там новый текстовый файл monitor.bat и вставьте в него следующий код. Измените путь так, чтобы он указывал на python скрипт.

@echo off START pythonw C:\...\windows-script.py

Мы используем pythonw вместо python, потому что это обязательно для скрытия окна командной строки python скрипта.

Теперь перезагрузите компьютер и проверьте, что всё работает. Если всё хорошо, то можно перейти к концу статьи.

Linux

Всё готово!

Теперь присаживайтесь и наслаждайтесь более эффективным использованием места на вашем мониторе.

C помощью Arduino можно собрать 8-битный ретро-компьютер с Basic (похожий на ZX Spectrum) с выводом цветного изображения на VGA-монитор.

Кроме того, этот проект можно использовать как простой способ вывода текстовых сообщений на монитор.

Сама по себе, идея использовать Arduino для создания компьютера с BASIC не нова, но насколько я знаю, все они не поддерживают вывод цветного изображения. В некоторых проектах использовались LCD-мониторы, а в других - библиотека TVout , которая выводит чёрно-белое изображение. Кроме того, многие из этих проектов требуют дополнительные модули и специальные платы расширения. Тут же нужно всего-то иметь два Arduino, несколько резисторов, плюс разъёмы для PS/2 клавиатуры и VGA-монитора.

Для проекта нужно две платы Arduino: один будет основным (или «мастером»), в нём работает интерпретатор Tiny Basic Plus (это порт Tiny Basic на языке Си, адаптированный для поддержки Arduino). Также этот Arduino управляет PS/2 клавиатурой. Вывод из первого Arduino через последовательный порт отправляется на второй Arduino, который с помощью библиотеки VGAx генерирует VGA-сигнал.

Программу на языке BASIC в собранный нами компьютер можно будет ввести с помощью PS/2 клавиатуры, а результат можно будет посмотреть на VGA-мониторе: разрешение получившегося изображения 24 столбца на 10 строк, размер символов - 5х6 пикселей, доступно 4 цвета.
После введения программы, её можно будет сохранить в энергонезависимой памяти самого Arduino, а также код программы предусматривает управление I/O пинами Arduino.

1. Подключаем основной Arduino с интерпритатором TinyBasic и с PS/2 клавиатурой

TinyBasic Plus и библиотека VGAx работают с Arduino IDE 1.6.4.
Если у вас уже установлена более новая версия, то лучшее решение - загрузить эту версию с официального сайта в формате.zip, и распаковать в отдельную папку. можно загрузить эту версию для Windows.

Потом нам понадобится библиотека PS2keyboard , её можно загрузить отсюда. После скачивания просто распакуйте архив, и скопируйте его содержимое в «arduino-1.6.4\libraries».

Если на этом этапе нет проблем (в том числе, проблем с совместимостью), то Tiny Basic будет автоматически запущен при включении Arduino. И его можно будет протестировать с помощью последовательного порта на вашем ПК. Для этих целей я использую PuTTY , но вы можете использовать и другую подобную программу, по вашему вкусу.

В настройках нужно правильно установить COM-порт (тот же, что используется в Arduino), и скорость передачи = 4800.

И тут уже можно протестировать нашу систему, набрав какую-нибудь программу на Basic с клавиатуры вашего ПК (позже мы подключим PS/2 клавиатуру напрямую к Arduino).

Для примера, можно набрать:

10 PRINT "Hello, World!" 20 GOTO 10 RUN
Прервать бесконечный цикл этой программы можно с помощью комбинации клавиш Ctrl+C (это не сработает, если мы будем делать это с клавиатуры PS/2).

Теперь подключим PS/2 клавиатуру.

2. Подключаем PS/2 клавиатуру к основному Arduino

Информация и библиотека были взяты из этого материала.

По существу, вам нужно соединить следующие четыре контакта:
Data клавиатуры к Arduino pin 8,
IRQ (clock) клавиатуры к Arduino pin 3;
а также подключить землю (GND) и питание +5V, соответственно.

Я использовал PS/2 разъём cо старой нерабочей материнской платы, его можно легко сдуть с помощью фена.

Распиновка PS/2 разъема есть на рисунке:

3. Загружаем библиотеку VGAx и код во второй Arduino, и соединяем его с основным


Для начала, загрузите код VGAx-PC.ino и скопируйте его к себе на компьютер в папку с таким же именем.

Потом - загрузите с GitHub бибилиотеку VGAx . Её нужно поместить в подпапку «libraries» Arduino IDE.

ВАЖНО! Эта бибилиотека работает с Arduno IDE 1.6.4 и может быть не совместима с другими, более новыми версиями.

Теперь загрузите VGAx-PC.ino во второй Arduino (я тестировал на Arduino Nano, но с Arduino Uno тоже не должно быть проблем).

Предупреждение, что мало доступной памяти - это нормально для нашего случая. Если других ошибок нет, то всё в порядке - и можно сделать ещё пару шагов, чтобы получить свой собственный 8-битный ретро-компьютер.

Для этого нужно:

  • два Arduino Uno Rev.3, или два Arduino Nano 3.x (на основе ATmega328)
  • разъем DSUB15, т.е. гнездо VGA или кабель с таким гнездом, который не жалко отрезать
  • резисторы: 2 на 68 Ом и 2 на 470 Ом
  • разъем PS2
  • провода
  • необязательно: макетная плата

Осталось всё соединить по схеме на рисунке, и наш 8-битный компьютер готов!

Видео, как это всё работает:

Примерно за 25 долларов мы сделаем бортовой компьютер, умеющий считать расход топлива, показывать температуру охлаждающей жидкости, скорость авто, расстояние поездки, потраченный бензин за поездку, обороты двигателя, давление во впускном коллекторе, температуру впускного коллектора, УОЗ и многое другое. Сброс ошибок доступен в режиме |--recovery--| (как зайти написано ниже). Опрос данных из эбу происходит примерно 2 раза в секунду.

Еще фото














Список требуемых деталей для сборки БК

1) Arduino Uno R3 - 1 шт. ~ 7 долларов:

2) LCD2004 жк-модуль ~ 6 долларов:

3) Модуль Bluetooth HC-05 ~ 4 доллара:

4) OBD ELM327 Bluetooth сканер ~ 4 доллара:

5) Резистор 5 кОм подстроечный, бипер для звука, 2 кнопки для смены экранов, провода для соединений, корпус ~ 3 доллара.

Настройка блютуз модуля HC-05 для работы

Подпаиваем провода к пинам блютуза: (картинку с выходами смотреть в описании требуемых деталей )

  • 1 - это TX
  • 2 - это RX
  • 12 - это 3.3V
  • 13 - это GND
  • 34 - на этот вход тоже кидаем 3,3 V (нужен для перевода модуля в режим настройки с помощью AT команд).

Подключаем блютуз модуль к ардуине.

  • 1 - TX модуля в 6 пин ардуины. (внимание будет TX в TX это не ошибка!)
  • 2 - RX модуля в 7 пин ардуины. (аналогично не ошибка!)
  • 12 - и 34 пин к 3,3V ардуины.
  • 13 - GND ардуины.

Открываем Aduino IDE и заливаем скетч через USB порт в плату.

#include
SoftwareSerial BTSerial(6, 7); // TX | RX
void setup()
{
Serial.begin(9600);
Serial.println(«Enter AT commands:»);
BTSerial.begin(38400);
}

void loop()
{
if (BTSerial.available())
Serial.write(BTSerial.read());
if (Serial.available())
BTSerial.write(Serial.read());
}

После успешной загрузки скетча открываем: Сервис->Монитор порта . Далее снизу ставим скорость 9600 бод и NL+CR вместе.

AT // (возможно 1 раз вылетит Error, не пугайтесь… это нормально, повторите опять)
AT+NAME=Car //Присваиваем имя модулю Car
AT+ROLE=1 // Переводим модуль в режим Мастер
AT+PSWD=1234 // Ставим пароль 1234 как на OBD ELM327
AT+BIND=AABB,CC,112233 //Прописываем Mac адрес OBD ELM327.
AT+CMODE=1 // Подключение модуля с фиксированным адресом

Заметьте, что mac-адрес вида: «AA:BB:CC:11:22:33» вводится как «AABB,CC,112233». MAC- адрес своего модуля ELM327 можете посмотреть, подключившись для начала на него со своего мобильника. (Стандартные пароли обычно: 1234, 6789, 0000).

Всё, настройка модуля Bluetooth закончена.

Теперь нужно Собираем схему Arduino, блютуз, lCD-экран

1.Начнем с подключения HC-05 Bluetooth модуля.

  • 1 - TX модуля засовываем в 7 Pin (Rx) арудины (именно TX в RX, не так как ранее);
  • 2 - RX модуля засовываем в 8 Pin (Tx) арудины;
  • 12 - Pin (3,3V) модуля в Pin 3,3V ардуины;
  • 13 - Pin (Gnd) в Gnd арудуины;
  • 34 - Pin мы никуда не подключаем (заизолируйте или отпаяйте).

2. Подключаем монитор LCD.

  • VSS экрана к GND ардуины;
  • VDD экрана к 5V ардуины;
  • V0 экрана к центральному выходу резистора;
  • RS экрана к 12 пину ардуины;
  • RW экрана к GND ардуины;
  • E экрана к 11 пину ардуины;
  • DB4 экрана к 5 пину ардуины;
  • DB5 экрана к 4 пину ардуины;
  • DB6 экрана к 3 пину ардуины;
  • DB7 экрана к 2 пину ардуины;
  • A - к 5V ардуины;
  • K - GND ардуины.

Оставшиеся ноги резистора: одну пустить на GND ардуины, а вторую на 5V ардуины.

Переменный резистор на 5кОм нужен, чтобы управлять контрастностью монитора, так что если при первом включении вы включите и ничего не увидите, попробуйте отрегулировать контрастность шрифта поворотом резистора.

3. Подключаем дополнительную кнопку для переключения экранов с данными.

: один конец от нормально-открытой кнопки подключаем в GND ардуино, а второй конец в пин 10.
: GND + пин 9.

Бипер для звуковых предупреждений подключить по следующей схеме "+" к пину 13, а минус к GND ардуино.

Заливаем скетч в Arduino с помощью Arduino IDE

Единственное, в скетче присутствует переменная, которую нужно поправить в соответствии с объёмом вашего автомобиля. Скетч написан так, чтобы было понятно каждому и любой мог исправить что захочет.

Нужно будет обязательно учесть три переменных:

1) ED=2.000 Например объем двигателя в литрах 1.398;
2) VE=80.00 Объёмный КПД ДВС: обычно в районе 80 (если расход реально меньше - то уменьшаем значение в процентном соотношении). Если не хотите калибровать добейтесь чтобы при прогретом двигателе мгновенный расход в л/час был в районе половины обьема двигателя;
3) tcorrect=1.014 (калибровка времени).

Возможно, Arduino будет не точно считать время с помощью комманды millis()… Тут только вручную корректировать значение. На экране «технологический 2» будет указаны секунды: например, time_start: 23. Сравните значение с реальным. Для примера засеките 10 минут, когда значение time_start будет, например, равно 23. И выйдет, что через 600 секунд реально покажет 605. Итого 623-605=18 секунд отставание в ардуинке. То есть поправочный коэффициент tcorrect будет равен 623/605=1,02975.

Управление

[Кнопка 1], [кнопка 2] - листать экран вперед назад.
При включении при надписи Connecting… держать [кнопку 1] вход в режим показывания технологических экранов и параметров отдаваемых ЭБУ в десятичном формате. Если будете включать БК не в машине то нужно отключить функцию опроса блютуз, надо продолжать держать две кнопки при надписи |---Recovery--|… а то экран будет пустой.

[Кнопка 1] + [кнопка 2]: 4 секунды - Сброс журнала общего пробега и потраченного бензина.

Как управлять Ардуино с компьютера через USB. Расскажем, как произвести включение светодиода и управлять сервомотором на Arduino с компьютерной клавиатуры через функцию Serial.available() и Serial.read() . Данные функции проверяют, поступают ли какие-то команды на микроконтроллер по последовательному порту, а затем считывают поступающие команды, вводимые в Serial monitor с компьютера.

Управление Ардуино через компьютер

Функция Serial.available() получает количество байт доступных для чтения из последовательного порта. Это те байты которые отправлены с компьютера и записаны в буфер последовательного порта. Буфер Serial monitor Arduino может хранить максимум до 64 байт. Функция используется также при подключении Bluetooth модуля к Ардуино и полезна при отладке устройства на проектирования.

При тестировании и настройке различных устройств, управляемых через Bluetooth, например, роботом или Лодкой на Ардуино вам пригодится знание, как управлять светодиодом и сервомотором через компьютер. Поэтому рассмотрим сейчас простое управление сервоприводом через компьютер по USB кабелю. При этом через монитор можно отправлять не только цифры, но и буквы латинского алфавита.

Как управлять Ардуино с клавиатуры

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • 1 светодиод и резистор 220 Ом;
  • 1 сервопривод;
  • провода «папа-папа» и «папа-мама».

Остальные исполнительные устройства для Arduino UNO вы можете взять на свое усмотрение и самостоятельно попробовать управлять ими через компьютер с помощью USB кабеля. Соберите на макетной плате схему с одним светодиодом из первого занятия Что такое Ардуино и как им пользоваться, а после сборки схемы со светодиодом загрузите следующий скетч в микроконтроллер.

Скетч. Управление Ардуино с компьютера

int val; pinMode (13, OUTPUT ); // объявляем пин 13 как выход } void loop () { if (val == "1") {digitalWrite (13, HIGH );} // при 1 включаем светодиод if (val == "0") {digitalWrite (13, LOW );} // при 0 выключаем светодиод } }

Пояснения к коду:

  1. функция Serial.available() проверяет поступление команд с компьютера;
  2. функция Serial.read() читает данные, поступившие в Serial monitor.
  3. в условном операторе if (val == "1") стоит знак двойное равенство «соответствие», а в скобках необходимо использовать одинарные кавычки.

После сборки схемы загрузите следующий скетч в плату

Скетч. Управление сервоприводом с компьютера

#include // подключаем библиотеку для сервопривода Servo servo; // объявляем переменную servo типа "servo" int val; // освобождаем память в контроллере для переменой void setup () { Serial .begin (9600); // подключаем последовательный порт servo.attach (11); // привязываем сервопривод к выходу 11 } void loop () { // проверяем, поступают ли какие-то команды if (Serial .available ()) { val = Serial .read (); // переменная val равна полученной команде if (val == "1") { servo.write (10); } // при 1 поворачиваем серво на 10 if (val == "2") { servo.write (45); } // при 2 поворачиваем серво на 45 if (val == "3") { servo.write (90); } // при 3 поворачиваем серво на 90 } }

Пояснения к коду:

  1. в некоторых примерах программ можно встретить такой вариант проверки появления данных в Serial monitor if (Serial.available()>0) .
  2. в качестве команд можно использовать не только цифры, но и буквы. При этом имеет значение какая буква — прописная или строчная.
Похожие статьи