вторник, 21 ноября 2017 г.

Беспроводная связь

Это продолжение статьи о радиоуправлении. Здесь рассказывается про управление платформой с компьютера.


Связь робота с компьютером у меня реализована на радиомодулях представленных ранее.


Радиомодули

Для подключения радиомодуля к компьютеру нужен USB-UART переходник. Например, на CP2102


USB-UART переходник

Для windows лучше брать драйвера с официального сайта https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

Соединяется радиомодуль с USB-UART переходником согласно изложенным ниже инструкциям.

USB to UART Module --- Transceiver Module
+5V --- VDD
GND --- GND
RXD --- TXD
TXD --- RXD

Со стороны компьютера это всё выглядит обычным COM портом.

Теперь управлять роботом можно хоть из монитора порта Arduino IDE.

Но намного интереснее написать свою программу

#!/usr/bin/env python
# coding: utf-8


import serial


port_number = 6 # COM7
baud_rate = 9600 # bps


# open port

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

print ser, '\n' # print port information


# communication

while 1 :

    data = raw_input('> ')

    ser.write(data)


# close port

ser.close()


# C:/Python27/python.exe C:\robot\rc.py

Управление платформой реализуется через передачу специальных символов.

f --- движение вперед
b --- движение назад
l --- поворот налево
r --- поворот направо
s --- остановка

Можно написать сценарий обеспечивающий прохождение определенного маршрута

#!/usr/bin/env python
# coding: utf-8


import time
import serial


port_number = 6 # COM7
baud_rate = 9600 # bps


# open port

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

print ser, '\n' # print port information


# communication

ser.write('s')
print time.time(), 'stop'
time.sleep(5)

ser.write('f')
print time.time(), 'forward'
time.sleep(3.5)

ser.write('s')
print time.time(), 'stop'
time.sleep(1)

ser.write('b')
print time.time(), 'backward'
time.sleep(3.5)

ser.write('s')
print time.time(), 'stop'
time.sleep(1)

ser.write('l')
print time.time(), 'left'
time.sleep(4.8)

ser.write('s')
print time.time(), 'stop'
time.sleep(1)

ser.write('r')
print time.time(), 'right'
time.sleep(4.8)

ser.write('s')
print time.time(), 'stop'
time.sleep(1)


# close port

ser.close()


raw_input('')


# C:/Python27/python.exe C:\robot\robot.py

С данным кодом робот едет 3.5 секунды вперед. Затем робот едет 3.5 секунды назад. Затем робот поворачивает налево 4.8 секунды. И заканчивается всё поворотом робота направо в течении 4.8 секунд.

Есть ещё один интересный вариант использования этих радиомодулей. Только их нужно штуки три. Один подключается к ардуино робота. Второй подключается к компьютеру через USB-UART переходник. И третий модуль нужен для пульта.

Платформа управляется с пульта, а на компьютере записываются все команды оператора.

#!/usr/bin/env python
# coding: utf-8


import time
import serial


port_number = 6 # COM7
baud_rate = 9600 # bps


# open port

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

print ser, '\n' # print port information


# communication

data = ''

while 1 :

    temp = ser.read()

    if temp and temp != data :

        data = temp

        print time.time(), data


# close port

ser.close()


# C:/Python27/python.exe C:\robot\logger.py

Ещё платформа может управляется программой с компьютера, а на пульте можно реализовать возможность экстренной остановки платформы.

У меня робот маленький и не очень быстрый, поэтому последнее решение осталось не реализованным. А в более серьёзных конструкциях нечто подобное быть должно.

В этой статье нет подробных пояснений по работе с UART модулем контроллера и COM портом компьютера, так как я об этом уже рассказывал (здесь и здесь).