В данной статье мы рассмотрим передачу данных с датчиков температуры RX3i на плату Arduino по протоколу Modbus RS-485 и далее по протоколу Bluetooth на Android устройство. То есть будет реализована цепочка передачи данных RX3i – RS485 – Arduino – Bluetooth – Android устройство.
Статья написана пользователем нашего сайта Variant223 и публикуется с его разрешения. Весь комплект материалов для реализации данного проекта можно скачать по ссылке https://disk.yandex.ru/d/xYeU61dNAeA52A. Проект реализован автором на основе статьи про последовательную связь по протоколу Modbus RS-485 с Arduino (ведомой) - ее желательно прочитать перед тем как переходить к реализации описываемого в данной статье проекта.
Необходимое программное обеспечение (ПО)
Обязательное ПО
- Arduino IDE.
- Библиотека Modbus-Slave-for-Arduino.
- Приложение из Play Маркет Bluetooth Electronics.
- Проекты схем для ПО Android (Panel.kwl).
- Скетч файл (Sketch_arduino).
Дополнительное ПО
Все необходимое ПО находится в архиве soft в архиве, который можно скачать по вышеприведенной ссылке.
Необходимое оборудование
Основное оборудование
- Плата Arduino NANO (купить на AliExpress).
- Модуль MAX485 TTL в RS-485 (купить на AliExpress).
- Модуль HC-06 на плате (купить на AliExpress).
- Устройство Android.
Дополнительное оборудование
- Модуль USB to RS-485 Converter (купить на AliExpress).
- Резистор 1кОм – 1шт. (купить на AliExpress).
- Светодиод – 1 шт. (купить на AliExpress).
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Сборка макетной платы проекта
Схемы автор проекта не представил, но в ниже приведенных таблицах представлена исчерпывающая информация о соединениях, которые необходимо сделать в схеме проекта.
В следующей таблице представлены необходимые соединения между платой Arduino NANO (ведомой) и модулем MAX485 TTL to RS485.
Arduino NANO | Модуль MAX485 TTL to RS485 |
0(RX) | RO |
1(TX) | DI |
D4 | DE & RE |
+5V | VCC |
GND | GND |
В следующей таблице представлены необходимые соединения между модулями MAX485 TTL to RS485 и USB to RS-485 (порта CMM модуля RX3i IC695CMM004-BF).
MAX485 TTL to RS485 | USB to RS-485 | Порт CMM модуля RX3i IC695CMM004-BF |
A | A | 1 |
B | B | 2 |
В следующей таблице представлены необходимые соединения между платой Arduino NANO (ведомой) и модулем HC-06.
Arduino NANO | Модуль HC-06 |
D12 | RXD |
D11 | TXD |
+5V | VCC |
GND | GND |
В следующей таблице представлены необходимые соединения между платой Arduino NANO (ведомой) и светодиодом через резистор.
Arduino NANO | Светодиод |
D2 | + |
GND | - |
Далее переходим к установке ПО.
Установка ПО на Windows 7, 10
Выполните следующую последовательность шагов.
1. Устанавливаем «arduino-1.8.16-windows».
2. Проверяем настройки. Плата: «Arduino Nano». Процессор: «ATmega328P (Old Bootloader)» - 328 написано на чипе arduino. Порт соответствует подключенному вашей arduino к ПК. Программатор: «AVRISP mkII».
3. Добавляем библиотеку: Скетч – Подключить библиотеку – Добавить .ZIP библиотеку….
4. Выбрать файл «Modbus-Master-Slave-for-Arduino-master».
Загрузка программы
Выполните следующую последовательность шагов.
1. Удалить все в поле кода.
2. Открыть скетч файл sketch_arduino (текст скетча приведен в конце статьи).
3. Нажимаем "Проверить" и сохраняем проект куда вы хотите.
4. После компиляции вы должны увидеть сообщение:
5. Временно отключаем Модуль MAX485 TTL to RS485 от D4 Arduino , так как USB использует тот же порт, что и модуль.
6. Нажимаем загрузить. После этого вы должны увидеть надпись "Загрузка завершена".
7. Подключаем D4 Arduino обратно.
Настройка эмулятора передачи данных Modbus
1. Подключаем модуль преобразования USB в RS-485 к Модуль MAX485 TTL to RS485.
2. Проверяем COM порт к которому подключили модуль.
3. Устанавливаем ПО Simple Modbus Master.
4. В программе Simply Modbus откройте опции записи (Write option).
5. После этого установите параметры записи в программе Simply Modbus Master: режим RTU, COM порт к которому подключен модуль преобразования USB в RS-485 (в нашем случае это COM6), скорость 9600 бод, 8 бит данных, 1 стоповый бит, отсутствие бита четности (Parity None) и идентификатор ведомого (Slave ID) равный 1.
6. После этого установите в первом регистре (first register) значение 40001, число передаваемых значений (values) равное 3 и функциональный код (function code) равный 16 (Write Holding Register).
7. После этого запишите 1 в 40001 (для включения светодиода и передачи значения температуры по первому датчику), 1 в 40002 (для передачи значения температуры по второму датчику) и 90 в 40003 (для передачи значения температуры по третьему датчику), затем нажмите кнопку SEND (передать) – см. рисунок.
При этом после подключения ПО на Android должны передаваться данные.
Настройка RX3i для передачи данных Modbus через CMM порт
1. Подключаем Модуль MAX485 TTL to RS485 к порту CMM.
2. Программируем RX3i, так чтобы данные Real преобразовать в INT адреса %R которые будут идти по порядку (в эти адреса записываем последовательно показания температур с датчиков).
3. Настраиваем модуль порт CMM следующим образом:
4. Настройки передачи данных следующие:
Примечание: количество передаваемых INT значений указанно 27, так как при выборе большего количества данные перестают обрабатываться Arduino NANO. Проверки работы на других моделях arduino не производились.
Установка и настройка ПО на Android
- Скачиваем архив с экранам «Panel.kwl».
- Сохраняем в папку: Память устройства / keuwlsoft скаченный файл.
- Из Play маркета или из архива soft устанавливаем Bluetooth Electronics_v1.42_apkpure.com.apk.
- Из ПО Bluetooth Electronics нажимаем на дискетку в левом верхнем углу и нажимаем Load Panels из папки с сохраненными моделями файл «Panel.kwl».
- На экране появляются новые панели.
- Если выдает ошибку удалите все экраны.
Подключение Arduino к RX3i
- Подключаем источник питания 5В к arduino.
- Из ПО Bluetooth Electronics нажимаем Connect.
- Выбираем Bluetooth Classic.
- Нажимаем NEXT.
- Выбираем HC-06.
- Нажимаем Connect.
- Когда надпись Connect станет синяя нажимаем Done.
- Выбираем тот экран с которого хотите видеть данные температуры.
- Нажимаем RUN.
- Нажимаем кнопку «Запустить» и проверяем соответствие температур с компьютера (где у вас видно температуры было раньше) и Android устройства.
Подключение Arduino к эмулятору
- Подаем питание на Arduino, при этом на модуле HC-06 должен мигать светодиод.
- Из ПО Bluetooth Electronics нажимаем Connect.
- Выбираем Bluetooth Classic.
- Нажимаем NEXT.
- Выбираем HC-06.
- Нажимаем Connect.
- Когда надпись Connect станет синяя нажимаем Done.
- Выбираем экран Panel.
- Нажимаем RUN.
- Нажимаем кнопку «Запустить» и проверяем соответствие температур с эмулятора и Android устройства.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
//RS-485 Modbus Slave (Arduino) // Передача данных INT от контроллера RX3i #include <ModbusRtu.h> //Подключение библиотеки Modbus для Arduino #include <SoftwareSerial.h> //Подключение библиотеки для включения дополнительного COM порта #define led10 2 //Включение тестового светодиода на 2 пине Arduino SoftwareSerial Serial_2(11, 12); //Подключение долнительного COM порта на 11 и 12 пины RX и TX соответственно Modbus bus; //Подключение объекта bus for class modbus uint16_t modbus_array[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //Первоначально в массив из 30 значений записываем нули // Arduino NANO может обработать только 27 UINT, если ставить больше не обрабатывает. int Temp1T1 = 0; //Обнуляем значения int Temp1T2 = 0; int Temp1T3 = 0; int Temp1T4 = 0; int Temp1T5 = 0; int Temp1T6 = 0; int Temp1T7 = 0; int Temp1T8 = 0; int Temp1T9 = 0; int Temp1T10 = 0; int red = 50; int green = 100; int blue = 150; void setup() //Запускаем главную функцию { pinMode(led10,OUTPUT); //Led10 на вывод данных. Если индикация не нужно можно удалить bus = Modbus(1,1,4); //Modbus slave ID as 1 and 1 connected via RS-485 and 4 connected to DE & RE pin of RS-485 Module //адрес ведомого равен 1, используется связь через интерфейс RS-485 (вторая 1), //4 – номер контакта Arduino, к которому подключены контакты DE & RE модуля RS-485 bus.begin(9600); //Modbus slave baudrate at 9600 (скорость 9600 бод) Serial_2.begin(9600); //Инициализация дополнительного COM порта для Bluetooth Serial_2.println("Data ON"); //Сообщение о включении передачи } void loop() //Запускаем функцию обработки сигналов { bus.poll(modbus_array,sizeof(modbus_array)/sizeof(modbus_array[0])); //Производиться запись значений в массив из Master Modbus if (modbus_array[0] == 0) //Depends upon value in modubus_array[0] written by Master Modbus { digitalWrite(led10,LOW); //выключаем проверочный светодиод } else { digitalWrite(led10,HIGH); // включаем проверочный светодиод } int Temp1T1 = modbus_array[0]; //Присваиваем значения температур для Temp1T int Temp1T2 = modbus_array[1]; int Temp1T3 = modbus_array[2]; int Temp1T4 = modbus_array[3]; int Temp1T5 = modbus_array[4]; int Temp1T6 = modbus_array[5]; int Temp1T7 = modbus_array[6]; int Temp1T8 = modbus_array[7]; int Temp1T9 = modbus_array[8]; int Temp1T10 = modbus_array[9]; if (Serial_2.available()>0) { //если значение больше 0 то передавать // Данные для обработки программой BlueTooth Electronics Version 1.3 на Android Serial_2.println("*A"+String(Temp1T1)+"*"); Serial_2.println("*B"+String(Temp1T2)+"*"); Serial_2.println("*C"+String(Temp1T3)+"*"); Serial_2.println("*D"+String(Temp1T4)+"*"); Serial_2.println("*E"+String(Temp1T5)+"*"); Serial_2.println("*F"+String(Temp1T6)+"*"); Serial_2.println("*G"+String(Temp1T7)+"*"); Serial_2.println("*H"+String(Temp1T8)+"*"); Serial_2.println("*I"+String(Temp1T9)+"*"); Serial_2.println("*J"+String(Temp1T10)+"*"); } } |