Как управлять ардуино с компьютера
Перейти к содержимому

Как управлять ардуино с компьютера

  • автор:

Управление Arduino с компьютера

Подружить Arduino с компьютером очень просто. Данные передаются через виртуальный порт RS-232(COM).

Итак переходим к действиям. Три светодиода будут управляться с клавиатуры, нажатием клавиш влево и вправо. Зажигаем первый светодиод и нажимаем клавишу влево, горящий светодиод тухнет, а слева от него загорается. Когда позиция горящего светодиода крайняя, нажатие в ту же сторону приведет к переходу на светодиод с противоположной стороны.
Блог о компьютерах и компьютерной технике, Москва, Владимир Лукьянов, Arduino

На компьютере управляющая программа будет отображать позицию горящего светодиода.
Блог о компьютерах и компьютерной технике, Москва, Владимир Лукьянов, Arduino

Схема со светодиодами, крайне проста.
LED1-3 светодиоды подключенные к ШИМ-выводам. ШИМ потребуются для фэйд-эффекта.
R1 двухсотомный резистор. Для ограничения тока проходящего через светодиод, иначе диод можно спалить.

Небольшая программа для Arduino. (Скачиваем)

// Serial LED control // compblog.vlukyanov.com //Объявляем переменные. int pin[] = ; // Объявляем массив в котором указанны номера выводов int i = 0; // Переменная для определения текущей позиции горящего светодиода int prev_i = 0; // Переменная для запоминания предыдущего светодиода // Настраиваем Arduino void setup() < // Запускаем цикл, в котором определяем контакты 3,5,6 как выводные for (int t = 0; t < 3; t++ ) // > < pinMode(pin[t], OUTPUT); >Serial.begin(9600); // Инициализируем перередачу данных по COM-порту на скорости 9600 бод > void loop() < // Запускаем цикл без каких либо действий // Только когда данные придут на COM-порт продолжится выполнение программы дальше этой строки while (Serial.available() == 0); // Данные пришли, считываем их в переменную i i = Serial.read(); // Постепенно гасим предыдущий светодиод, понижая яркость с 255 до 0; for (int j=255; j >0; j--) < analogWrite(pin[prev_i],j); delay(1); // Небольшая задержка >analogWrite(pin[prev_i],0); // Окончательно гасим светодиод // Пришедшее значение i используем для включения следующего светодиода for (int j=0; j < 255; j++) // > < analogWrite(pin[i],j); delay(1); >// Запоминаем значение светодиода, чтоб потом гасить его, когда появится новое значение на COM-порту prev_i = i; >

Блог о компьютерах и компьютерной технике, Москва, Владимир Лукьянов, Arduino

Теперь нужна программа на компьютере, которая будет посылать необходимые данные в COM-порт и отображать данные на экран. Processing хорошо подойдет.
IDE Arduino основана на processing, поэтому они очень похожи как внешне, так и по синтаксису.

Тоже довольно простая программа на Processing. (Скачиваем)

// Serial LED control // compblog.vlukyanov.com import processing.serial.*; // подключаем библиотеку для общения по COM-порту // в IDE Arduino это сделанно по умолчанию, тут надо это делать дополнительно int value = 1; // переменная которую будем отправлять в COM-порт для Arduino Serial port; // переменная обозначающая порт PFont f; // переменна для шрифта void setup() < size(500,500); // создаем окно 500 на 500 px f = createFont("Colibri", 15,true); // определяем шрифт для данного окна port = new Serial(this, "COM5", 9600); // задаем параметры порта, у меня он пятый >void draw() < // создаем окно background(0, 0, 0); // черный бэкграунд для окна textFont(f,200); // создаем текст text(value-1,200,300); // выводим в центр значение переменной value >void keyPressed() < // обрабатываем нажатия клавиш // переменная value сдвинута от нулевой позиции на 2, чтоб не загонять ее в минус if (keyCode == LEFT) < // при нажатии клавиши влево value = value + 1; // увеличиваем значение value на 1 if ( value >4 ) value=2; // если она оказывается вне пределов третьего светодиода - сбрасываем значение в 2 port.write(value-2); // и отправляем это значение в COM-порт > else if (keyCode == RIGHT) < // при нажатии клавиши вправо value = value - 1; // уменьшаем значение value на 1 if ( value < 2 ) value=4; // если она оказывается вне пределов первого светодиода - сбрасываем значение в 4 >port.write(value-2); // и отправляем это значение в COM-порт > else < >// в остальных случаях ничего не делаем >

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

Управление реле с компьютера при помощи Arduino и bluetooth.

Сегодня в проекте рассмотрим беспроводное управление реле с компьютера при помощи Arduino NANO и bluetooth модуля hc-06. Приложение для компьютера сделал в программе Processing. Не смотря на свой простой дизайн приложения можно использовать для управления от 1 до 5 реле. Для этого достаточно в приложении и в прошивке для Arduino изменить одну переменную. При этом в интерфейсе приложения будет отображать нужное количество кнопок управления и сопутствующей информации.

Описание программы для управления реле с компьютера при помощи Arduino и bluetooth.

Пред тем как делать программу, нужно определиться с её функциями и возможностями. По планам, мое приложение для ПК должно иметь кнопку включения и выключения реле или светодиода. Изначально планировал сделать по 2 кнопки управления, одна включает, вторая выключает реле. Но потом понял, что гораздо нагляднее будет сделать 1 кнопку для управления реле и вывести статус «включено» или «выключено» реле. В итоге получился вот такой интерфейс.

Изначально планировал сделать по 2 кнопки управления, одна включает, вторая выключает реле.

Чтобы сделать программу более функциональной, решил изменить количество управляемого оборудования. Для этого достаточно поменять 1 значение в коде и количество элементов меняется от 1 до 5.

Описание программы для управления реле с компьютера при помощи Arduino и bluetooth.

При нажатии на кнопку происходит изменение цвета обводки. Что наглядно отображает работу кнопки. А также при смене состояния реле меняется цвет шрифта на кнопке и изменяется статус: ВКЛ или ВЫКЛ.

Это мое первое приложение, сделанное в Processing, поэтому прошу строго не судить. Если вдруг увидите костыли, прошу указать на более правильное решение. Оставляйте ваши предложения в «Комментариях».

Для проекта понадобиться следующая электроника:

Описание кода Processing IDE для создания программы управления Arduino.

Сначала подключаем библиотеку для работы с последовательным портом и создадим объект, чтобы включить последовательное соединение, а также создадим массив для хранения статуса реле. Самая важная переменная это int n = 5; Отвечающая за количество управляемых реле.

boolean flag[] = new boolean[n]; boolean flagOld[] = new boolean[n]; int step = 70; void setup() < size(450, 480); myPort = new Serial(this, "COM18", 9600); // Запускает последовательное соедениние myPort.bufferUntil('\n'); // Определяет, до какого символа будут считываться данные с последовательного порта. Символ "\n" или "Новая строка" >

В разделе настройки нам нужно установить размер окна программы и запустить последовательное соединение. Что касается номера COM-порта. Необходимо перейти в раздел «Панель управления\Оборудование и звук\Устройства и принтеры».

Панель управления\Оборудование и звук\Устройства и принтеры

Посмотреть свойства вашего устройства, нажав на иконку правой кнопкой мыши и выбрав в выпадающем меню «Свойства».

Посмотреть свойства вашего устройства, нажав на иконку правой кнопкой мыши

В открывшемся окне переходим на вкладку «Службы». Тут мы увидим «Последовательный порт», в моем случае это «COM18». У вас будет другой.

увидим «Последовательный порт», в моем случае это «COM18»

В основной функции draw (), которая постоянно повторяется, мы делаем всю графику и функции программы. Итак, сначала нам нужно установить цвет фона, цвет заливки, размер и цвет обводки, а затем с помощью функции rect () рисуем кнопку. Используя функцию text (), мы выводим весь текст, включая строку ledStatus.

background(227, 230, 231); textSize(26); fill(20, 160, 133); text("Управление реле с компьютера", 15, 35); textSize(24); fill(33); text("№", 12, 80); text("Реле", 80, 80); text("Состояние", 230, 80); textSize(24); fill(33); text(i+1, 12, 135+i*step); fill(20, 160, 133); // Зеленый Цвет stroke(33); strokeWeight(1); rect(50, 100+i*step, 150, 50, 10); fill(255); textSize(28); text("Включить", 60, 135+i*step);

Теперь осталось сделать кнопки работоспособными. Для этого используем оператор «if», при нажатии кнопки символ команды будет отправлен через последовательный порт на Arduino, и это включит или выключит реле. Следующие строки используются для выделения кнопки при ее нажатии.

// Если нажата кнопка if (mousePressed && mouseX>50 && mouseX100+i*step && mouseY <150+i*step) < // Выделяет кнопки красным цветом при нажатии stroke(255, 0, 0); strokeWeight(3); noFill(); rect(50, 100+i*step, 150, 50, 10); if (!flagOld[i]) < flag[i] = !flag[i]; flagOld[i] = true; int s; if (flag[i]) s = i; else s = i+n; myPort.write(str(s)); // Посылает символ >> else

Изменения значения flag в массиве, изменяет состояние кнопки и статуса которые выводим ниже.

if (flag[i]) < fill(20, 160, 133); // Зеленый Цвет stroke(33); strokeWeight(1); rect(50, 100+i*step, 150, 50, 10); fill(255); textSize(26); text(onButton, 60, 135+i*step); ledStatus[i] = "ВКЛ."; >else < fill(20, 160, 133); // Зеленый Цвет stroke(33); strokeWeight(1); rect(50, 100+i*step, 150, 50, 10); fill(255, 255, 0); textSize(26); text(offButton, 60, 135+i*step); ledStatus[i] = "ВЫКЛ."; >

И для вывода определённого количества элементов управления необходим цикл.

for (int i=0; i

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

Схема подключения модуля с четырьмя реле и bluetooth hc-06 к Arduino.

Схема подключения модуля с четырьмя реле и bluetooth hc-06 к Arduino.

Подключить реле можно в количестве от 1 до 5 шт. На схеме приведен пример подключения модуля с 4 реле и bluetooth hc-06 к Arduino. Вы можете использовать другое количество реле и другой модуль bluetooth. А также подключить твердотельное реле. В связи с тем, что твердотельное реле чаще всего высокоуровневое, в прошивке есть переменная, отвечающая за выбор логического уровня реле.

Пример исходного кода Arduino управления реле по Bluetooth.

Пример исходного кода Arduino управления реле по Bluetooth.

В связи с тем, что программа для ПК получилась универсальная и можно изменять количество управляемых реле. Скетч для Arduino нужно также сделать максимально универсальным.

Первым делом подключим библиотеку для создания программного Serial порта. И укажем переменные, к которым подключим модуль Bluetooth.

#include const int rx = 3; const int tx = 4; SoftwareSerial mySerial (rx, tx);

Также в скетче я предусмотрел настройки для изменения типа рел. Значение 1 – позволит управлять реле высокого уровня. Значение 0 – в свою очередь позволит управлять реле низкого уровня.

const bool level = 1; // 1 - реле высокого уровня 0 - реле низкого уровня int relay_num = 4; // количество реле 1-5 int sdvig_pin = 5; // начальный пин подключения

Следующие 2 переменные определяют, сколько реле мы планируем подключить и номер пина, с которого будет вестись подключение. Соответственно, если мы начинаем с 5 pin и подключим 2 реле, это означает, что реле нужно будет подключить к пинам 5,6. Если нам нужно подключить 4 реле, то для этого будем использовать уже pin 5,6,7,8. И так далее.

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

Беспроводное управление светом с 2 мест с помощью bluetooth и переключателя.

Есть у меня на сайте проект, в котором я рассказываю, как можно управлять светом с 3 мест с помощью: Пульта ДУ, Радиопульта, Переключателя. Данное управление можно переделать. И вместо или помимо Пульт ДУ + Радиопульт подключить bluetooth. И управлять освещением еще и с компьютера. Достаточно удобно! Давайте рассмотрим, как это сделать.

Схема подключения Arduino NANO, bluetooth модуля hc-06 и модуля с двумя реле.

Схема подключения Arduino NANO, bluetooth модуля hc-06 и модуля с двумя реле.

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

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

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

Описание работы управлением светом с компьютера по bluetooth.

Как видим на фото ниже, вместо радиоуправления подключил bluetooth модуль hc-06. Код использую тот же, что привел выше безо всяких изменений. Только указал нужное количество реле и тип сигнала низкого уровня. После чего можно приступать к управлению светом, включать с компьютера посредством беспроводной связи по bluetooth и переключателя, который можно установить в монтажную коробку как обычный выключатель.

писание работы управлением светом с компьютера по bluetooth.

Вариант отличный, но имеет ряд минусов, о которых я рассказывал в проекте про управление светом с 3 мест.

Вариант отличный, но имеет ряд минусов, о которых я рассказывал в проекте

Подведём итог.

Управление реле с компьютера, скорее всего не очень востребовано, так как мы редко нуждаемся в управлении светом за компьютером. Хотя… Это возможно только мое мнение!

В свези с тем, что это мое первое приложение для компьютера учтены не все моменты и имеются некоторые недочеты. Также есть смысл сделать управление реле по Wi-fi. Жду ваши мнение и предложения.

Понравился проект Управление реле с компьютера при помощи Arduino и bluetooth? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Управление Arduino через интернет с помощью ПК — опыт новичка

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

Вместо вступления

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

Предпосылки к созданию данного способа у меня возникли во время создания моего электромобиля: Жмяк сюда! Скажу сразу, что создавалось это всё больше из спортивного интереса, нежели для серьёзных практических работ, но тем не менее оно работает и может пригодится кому-либо.

На чем строится вся система и как реализовано в железе

Схема работы следующая: с сервера считываем файл, в котором лежат данные с помощью программы, запущенной на ПК/ноутбуке. Эта программа через USB отсылает данные на контроллер. Контроллер принимает данные и по ним выполняет действия. Схема с сервером привлекательна тем, что управлять схемой можно без приложения, просто зайдя на сайт с любого смартфона/планшета/пк/ноутбука в любой точке планеты, где есть доступ к интернету.

PS. Про серверную часть рассказано ниже.

В этой статье я буду управлять Arduino MEGA 2560 (китайским аналогом), но «за кулисами» схема спокойно сработала и с PIC16F877А, единственное что пришлось использовать — переходник USB-TTL:

Понятное дело программа для PIC несколько отличается от программы для Ардуино, ввиду разных типов МК, но принцип один и тот-же:

Принимаем через COM-порт данные, сравниваем их с внутренней таблицей команд и выполняем соответственное действие.

Схема изначально мне показалась очень простой, но было одно НО — небыло программы, которая читала бы файлик в интернете и отсылала данные в COM-порт. Соответственно такую программу пришлось написать.

Программа писалась на VB6. Для чтения файла с сервера используется компонент VB6: Microsoft Internet Transfer Control 6.0. С его помощью просто читается текстовый файл на сервере в строковую переменную. После чтения эта строка отсылается в COM-порт с помощью компонента VB6: Microsoft Comm Control 6.0. Весь процесс чтения файла и отсылания строки читается в цикле с использования таймера. Интервал срабатывания таймера можно менять в конфиге программы, либо прямо во время работы. Кроме этого можно выбрать режим работы порта, его номер, режим работы интернет соединения и ссылку на читаемый файл.

Хочется сделать замечание, что при больших размерах файла и маленьких промежутках программа подвисает, но продолжает работать. Размер буфера моей программы 512 байт. Учитывая, что у моего МК буфер меньше, этого хватает.

Важный момент. Программа в МК не умеет парсить данные, она умеет читать только какой символ был передан на вход через последовательный порт. Без ошибок у меня получилось принимать латиницу (26 символов A-Z и 10 цифр 0-9). Итого 36 команд, если алгоритм доработать и ввести парсинг данных в МК, то передавать можно любые данные. Так же есть возможность «допилинга» ПО для двустороннего обмена данными.

Выбор сервера и серверная часть

Для серверной части подойдет любой сервер с поддержкой PHP, хоть запущенный на личном ПК, лишь бы был статический IP, но я лично использую арендованный Jino. Серверная часть в моём примере состоит из двух файлов: HTML странички с формой с кнопками ВКЛ/ВЫКЛ светодиода и PHP скрипта, который меняет содержимое TXT файла из которого программа, запущенная на ПК читает данные.

Программное обеспечение

Код HTML. Форма с 2 кнопками, вкл/выкл светодиод на плате:

  Управление светодиодом   Светодиод: 

Код PHP, здесь мы пишем в файл команду А, если светодиод должен гореть, и В если должен потухнуть:

 fclose($cm); ?> 

Теперь собственно код для Arduino:

int val; // освобождаем память в контроллере для переменой void setup() < Serial.begin(9600); // подключаем последовательный порт pinMode(13, OUTPUT); // объявляем пин 13 как выход >void loop() < // проверяем, поступают ли какие-то команды if (Serial.available()) < val = Serial.read(); // переменная val равна полученной команде if (val == 'a') // при a включаем светодиод if (val == 'b') // при b выключаем светодиод >> 

Сама программа для чтения информации на сервере с пересылкой в COM-порт и её исходный код лежат в архиве по ссылке: Яндекс-Диск Программа скомпилирована в несколько вариантов кода, возможно будут какие-либо различия в работе, но не должно быть. При первом запуске EXEшника генерируется файл справки и конфиг-файл. Данные из этого файла считываются при запуске программы, если он существует. Если файл не существует (например при первом запуске программы), то config-файл создается с дефолтными значениями.

Результаты работы

Вместо заключения

В данном примере я реализовал простой «дубовый» алгоритм, который работает. Есть конечно куда развиваться дальше, но тем не менее уже в таком виде можно отсылать 36 команд. Если реализовать парсинг входящих данных в микроконтроллере, то можно передавать любые данные. Для моих задач 36 команд хватит с головой, да и к тому-же это опыт новичка 🙂

  • ардуино
  • arduino
  • микроконтроллеры
  • программирование
  • интернет вещей
  • microchip
  • Хостинг
  • Программирование микроконтроллеров
  • Разработка под Arduino
  • Интернет вещей

Just for duino

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

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

Начать нужно с установки интерпретатора. Для windows его можно найти перейдя по ссылке http://python.org/downloads/windows/ Я использую python 2.7 Вот только для работы с ардуино этого недостаточно. Еще необходимо установить модуль http://pyserial.sourceforge.net/ Есть несколько версий под разные платформы. Тут главное не перепутать 🙂

Привожу текст программы

#!/usr/bin/env python # -*- coding: cp1251 -*- import serial # COM14, 9600 bps, 8 data bits, no parity bit, 1 stop bit ser = serial.Serial(13, 9600, bytesize = serial.EIGHTBITS, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE, timeout = 1) print ser, '\n' # print port information while 1 : try : data = raw_input('--> ') except KeyboardInterrupt : break ser.write(data) data = ser.read() print '

Откройте "блокнот" (notepad), вставте текст программы, сохраните документ с расширением .py Всё. Но работать в специализированном редакторе намного приятнее.

Чтобы запустить программу, нужно кликнуть правой кнопкой мышки на файле. В открывшемся меню следует навести курсор мышки на пункт "открыть с помощью". И там уже кликнуть левой кнопкой мышки на "python".

Есть еще один вариант. Запускаете программу "командная строка" (cmd). И там пишите, что то вроде

C:\Python27\python.exe C:\justforduino\usb.py

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

Теперь нажимаете enter и наслаждаетесь результатом.

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

А так выглядит работа программы

Завершается работа программы нажатием Ctrl + C

Далее я постараюсь дать более подробные пояснения по программе. Если ничего не заработало, то прочтение оставшейся части статьи должно помочь найти и исправить неточности.

Сразу скажу о том, что отступы в python делают не для красоты. Это необходимые элементы языка. В python они выполняют ту же функцию, что и фигурные скобки в C/C++. Правда есть некоторые нюансы.

#!/usr/bin/env python

Эта строка кода нужна для того, чтобы программа выполнялась, например, в linux. В windows она не нужна, но она и не мешает.

# -*- coding: cp1251 -*-

Эта строка сообщает компилятору о том, в какой кодировке записана программа. У меня это windows1251.

import serial

Этой строчкой выполняется подключение к проекту модуля serial. Он необходим для работы с COM портами.

ser = serial.Serial(13, 9600, bytesize = serial.EIGHTBITS, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE, timeout = 1)

Здесь производится открытие порта COM14. Именно этот порт моя windows предоставила Arduino Uno. Номер порта можно узнать в Arduino IDE. Для обмена данными используется тот же порт, что и для загрузки скетча в ардуино. Только в программе на питоне используется один номер. Без COM. И нумерация начинается с ноля. Таким образом, COM1 соответствует номер 0. И так далее. Скорость обмена данными составляет 9600 bps. Данные передаются по восемь бит (один байт). Бит паритета не используется. Завершается передача данных одним стоп битом. Всё как в программе для ардуино. В противном случае компьютер и ардуино не поймут друг друга. Последний параметр определяет время в течении которого программа будет ждать поступления данных от ардуино. Я установил время ожидания в одну секунду.

Этот фрагмент программы является примером использования отступов в эстетических целях. Один из тех самых нюансов про которые я говорил чуть выше.

print ser, '\n'

Этой строчкой на экран выводится информация об открытом порте. Она включена в программу с ознакомительными целями.

while 1 :

Элемент обработки исключений в python.

data = raw_input('--> ')

Этим кодом формируется строка запроса. Данные введенные пользователем помещаются в переменную data.

except KeyboardInterrupt :

Здесь предусматривается обработка исключения возникающего при нажатии Ctrl + C

break

Выход из бесконечного цикла.

ser.write(data)

Этой строкой выполняется передача данных через COM порт.

data = ser.read()

Полученные от ардуино данные записываются в переменную data.

print '

Переменная data выводится на монитор.

ser.close()

Здесь порт закрывается.

Еще нужно сказать, что комментарии в python начинаются с символа '#' Это то же самое, что '//' в C/C++.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *