Arduino with com port

Делаем сами Single-Side Arduino c COM-портом на борту

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

Создатели знаменитой платформы позаботились о любителях DIY и подготовили для этого специальную одностороннюю версию платы. Также в интернете есть весьма подробные инструкции о том, как изготовить ее в домашних условиях. К сожалению, у этой платы есть несколько недостатков, а именно: подключение только через COM-порт и питание исключительно от адаптера. Я решил устранить и получил в итоге вот такую, симпатичную плату:

Конечно, идея не новая, и на просторах интернета не раз звучала идея прикручивания виртуального COM-порта к Single-Side Board, но готового проекта я нигде не встречал.

Всех, кто когда-нибудь мечтал сделать для себя Arduino самостоятельно, прошу под кат.

В исходной плате COM-порт я заменил на ИМС FT232RL. Она работает с логическими уровнями ТТЛ, так что конвертер (которой в исходной ардуйне сделан на транзисторах) не нужен. Для выбора источника питания на схеме предусмотрен трехконтактный пинхэдер. Он позволяет задать положением джампера источник питания: USB-порт (положение «int») или разъем БП(положение «ext»). FTRL’ка всегда питается только от USB. Так же есть джампер «auto reset enable». Принципиально делаю ответственные проекты в P-CAD’е. Экспорт графики в нем достаточно сложный, поэтому выкладываю только скриншоты чертежей.

Плата почти полностью содрана с оригинальной, кроме подключения FTRL’ки, вид «насквозь»:

а также сборочный чертеж:

конденсаторы С7, С8 рекомендую положить на бок, чтобы не выступали выше разъема.

О том, как самостоятельно что-то спаять, написал лучше и больше всех DI HALT. Добавлю только, что проблемы могут возникнуть с распайкой FTRL’ки. Я пытался на протравленной плате залудить пады под нее — чуть не оторвал. Так что рекомендую пропаивать выводы по одному. Кстати, желательно плату отмыть от флюса: два раза видел такое, что после пайки неотмытая микруха не определялась компьютером. При желании, можно тем же ЛУТ’ом нанести на лицевую сторону платы сборочный чертеж, но тогда ее уже не получится отмыть в ванночке с ацетоном.

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

Теперь необходимо прошить бутлоадер. Лично я для прошивки использую вот такой программатор, не сочтите за рекламу. Более подробно о прошивке бутлоадера можно почитать здесь. Сам прошивочный файл лежит на жестком диске по адресу: C:\Program Files\arduino-1.0.1\hardware\arduino\bootloaders\atmega8\ATmegaBOOT.hex. Я просто установил контроллер в ZIF-сокет и прошил непосредственно этот файл. Фьюз-биты я взял отсюда. Необходимо отметить, что я пытался запустить эту плату с 168ой мегой, но мне так и не удалось это сделать. Скорее всего ни один бутлоадер не подошел.

Программировать ардуино проще простого. Запускаем среду программирования и выбираем плату (в нашем случае это Arduino NG or older w/ATmega8):

Затем запускаем готовый пример, который моргает пользовательским светодиодом:

Далее, жмем Файл->Загрузить и наблюдаем:

Если все правильно собрано, то работает сразу. У меня при загрузке обнаружилась ошибка — плохо был пропаян вывод Rx FTRL’ки, но я это быстро поправил.

В архиве вы можете взять все чертежи, прошивку, а также список деталей для покупки. Чертежи сделаны в САПР P-CAD 2006. Если кто-то поможет подготовить файлы для ЛУТ, буду очень благодарен.

Эта плата полностью arduino-совместима и позволяет работать со стандартными шилдами и IDE’шкой, хотя я сам их редко использую. На мой взгляд проще собрать проект в AVR-studio — по старинке))).

UPD:
Основная статья теперь хранится здесь.

Источник

Работа с COM-портом Arduino из Java-приложения

Сап, хабр. Возможно, людям, начинающим изучать arduino, будет интересно, как легко и быстро организовать передачу информации между микроконтроллером и Java приложением. Данная связка открывает кучу интересных возможностей по сбору и обработке данных с датчиков, управлению различными свистелками-перделками, а также созданию своих первых IoT проектов.

Недавно на просторах интернета наткнулся на весьма простую библиотеку Java-Arduino Communication Library. Не найдя публикаций на эту тему здесь, решил поделиться с вами опытом использования. Для работы нам понадобятся установленные Arduino IDE, IntelliJ IDEA, Java SE Development Kit и, собственно, сам микроконтроллер (я тестировал на китайской Arduino Nano и Strela на базе Leonardo от Амперки, на обоих все все работало отлично).

Задача проста — создадим консольное приложение, которое при запуске устанавливает Serial-соединение с микроконтроллером и в бесконечном цикле ожидает ввода строки от пользователя. В зависимости от введенной строки возможны следующие варианты:

  • «on» — микроконтроллер включает встроенный светодиод;
  • «off» — микроконтроллер выключает встроенный светодиод;
  • «exit» — микроконтроллер выключает встроенный светодиод, и приложение завершает работу.

Скетч для микроконтроллера

Построение системы начнем с написания и загрузки скетча в Arduino Nano. Ничего сверхсложного. В блоке «setup» конфигурируем пин со светодиодом и Serial-порт, а в блоке «loop» слушаем Serial-порт на предмет пришедших байтов. В зависимости от полученного значения выполняем ту или иную операцию.

Небольшого пояснения и внимательности требует лишь проверка условий (b == 49) и (b == 48). Если не понимаете почему так, то добро пожаловать под спойлер:

Для проверки на этом этапе можно из встроенного в Arduino IDE монитора порта отправить 1 и 0. Если светодиод на плате не включается/выключается, то ищите ошибку у себя в скетче.

Java-приложение

Теперь запустим IntelliJ IDEA и создадимм новый Java-проект. Для работы потребуется подключить две дополнительные библиотеки: jSerialComm-1.3.11.jar и arduino.jar. Как добавить скаченные jar-архивы можно прочитать вот здесь.

Все приложение будет состоять из одного единственного класса:

Для работы с COM портом создается объект класcа Arduino. Конструктор принимает два параметра:

  1. String portDescrition — название COM-порта
  2. int baud_rate — скорость передачи

Лучше указать эти параметры сразу в конструкторе, но можно и установить отдельно с помощью сеттеров. Название COM-порта можно посмотреть в Arduino IDE, либо в диспетчере устройств. Скорость передачи должна совпадать с той, что указана в блоке «setup» скетча для микроконтроллера, в данном случае 9600 бод/c:

Далее необходимо установить соединение с помощью метода openConnection(). Метод возвращает true в случае успешного соединения. Выведем это значение в консоль, чтобы убедиться в правильности выполненных действий.

Важно: после открытия соединения необходимо сделать паузу с помощью метода Thread.sleep(), в данном случае 2000 миллисекунд. Arduino Nano оказался настоящим тугодумом по сравнению со Strela, отправлять данные которой можно было сразу же после установки соединения. Вполне возможно, что вашему контроллеру понадобится даже больше времени. Поэтому если соединение установлено, данные отправляются, но не приходят, то первым делом увеличьте величину паузы.

Теперь входим в бесконечный цикл и начинаем ожидать ввода от пользователя:

При введении очередной строки и нажатии «enter» выполняется ее чтение и сохранение в переменную String s. В зависимости от значения этой строки оператор switch отсылает на микроконтроллер символ ‘1’ или ‘0’ с помощью метода serialWrite(char c). Не забывайте, что когда микроконтроллер получит эти символы и сохранит их в целочисленную переменную, то вы получите 49, либо 48).

Вообще для пересылки данных можно использовать следующие перегруженные методы класса Arduino:

  1. public void serialWrite(String s);
  2. public void serialWrite(char c);
  3. public void serialWrite(String s,int noOfChars, int delay);
  4. public void serialWrite(char c, int delay);

Как видим, можно отправлять строки целиком, символ и часть символов строки (noOfChars). При этом в последних двух методах можно указывать паузу после отправки очередного символа. Однако, строка все равно будет отсылаться символ за символом (а если быть еще точнее, то бит за битом). Поэтому если вы не передаете какое-то конкретное значение (например, угол, на который необходимо установить подключенный сервопривод), то проще отправлять именно один символ.

При завершении программы желательно закрыть COM-port с помощью метода close.connection(), чтобы при повторном запуске программы не получить ошибку, связанную с тем, что COM-порт прежнему занят, а для выхода из бесконечного цикла, ожидающего ввод строки, используйте оператор break c указанием метки label_1, который позволяет выйти из цикла, перед которым стоит соответствующая метка:

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

Источник

raphaelchampeimont/arduino_RS232

Use Git or checkout with SVN using the web URL.

Work fast with our official CLI. Learn more.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

How to connect an Arduino to a real serial port (RS232)

For the challenge, I wanted to send data from my computer’s real serial port (RS232 9-pin connector). For that, I created an adaptor circuit because the voltages on a computer serial port are different from what the Arduino expects. Don’t connect the computer TX pin to the Arduino RX pin directly, it would fry your Arduino according to the documentation (https://www.arduino.cc/reference/en/language/functions/communication/serial/).

You can watch my YouTube video where I show the circuit working: https://www.youtube.com/watch?v=u4Crk8dcw9A

The goal of these circuits is to convert voltages between the two incompatible standards:

  • negative voltage in RS232 (any value from −15 to −3 V) 5V in Arduino
  • positive voltage in RS232 (any value from +3 to +15 V) 0V in Arduino

I present my own adapter circuits and compare them to the «standard» alternative which is to use a dedicated IC like MAX232A (see bottom of this page for how to use this IC).

My custom adaptor circuit: computer TX to Arduino RX

This direction is quite easy and requires little components. All you need is a few resistors and PNP transistors.

Diagram: I have represented the Arduino RX pin as a diode and resistor just to think about the circuit, but the actual hardware inside is probably different.

Here is what the signal looks like (top = input signal from the computer / bottom = output signal from my circuit to the Arduino). Transfer rate was 115200 bauds. The output looks very similar to what you would get with a MAX232A IC (look at the files in the repo if you want to see the other screenshot).

My custom adaptor circuit: Arduino TX to computer RX

This adaptor circuit translates 0V to 5V (understood as logical 0 in RS232) and 5V to -9V (understood as logical 1 in RS232).

What makes it difficult is the fact that you need to provide negative voltage (which is why I use an 9V battery). I am not fully happy with this circuit, as the 100 ohm resistor heats a lot. Use it at your own risk. See below for a «cheating» version which does not have this heating issue.

Diagram: I have represented the Arduino TX pin as a switch to +5V/GND just to think about the circuit, but the actual hardware inside is probably different.

My «cheating» adaptor circuit for Arduino TX to computer RX

I noticed that in practice my computer considers 0V to be equivalent to a negative voltage, so we can simply invert the signal (5V to 0V / 0V to 5V) and it works perfectly in my case! I say this is «cheating» because the signal does not conform to the RS232 standard, which requires less than -3V for the low value (between -3V and +3V the behavior is not specified).

Note that this «cheating» version does not heat, does not require a 9V battery, and requires only one NPN transistor.

This is the result (top = input signal from Arduino / bottom = output signal from my circuit to the computer):

This is actually cleaner than with a MAX232A, which gives this output (top = input signal from Arduino / bottom = output signal from MAX232A to the computer). Setup used for this measure is shown below.

Alternative: Use a decdicated IC like MAX232

The standard way to connect a serial port (RS232) to an Arduino (or any 0V/5V based serial interface) is to use a dedicated IC like MAX232A. With this IC, you don’t need a 9V battery like with my homemade circuit above (unless you use the «cheating» version). Here is the setup with a MAX232A. All capacitors are 0.1 µF here, as required by the MAX232A data sheet. If you have another MAX232 variant, the capcitors values might be different, check it in the data sheet.

About

How to connect an Arduino to a real serial port (RS232)

Источник

Adblock
detector