Arduino + Python: Обработка аналогового сигнала (COM-порт)

Arduino + Python: Обработка аналогового сигнала (COM-порт)

Смотреть видео в Дзен

Нам понадобятся:

1) Arduino (UnoNano или Mega);

2) Любой потенциометр (лучше два).

Для программирования:

1) Среда разработки Python (у меня PyCharm);

2) Среда разработки Arduino IDE.

 

Обработка сигнала, приходящего на Arduino  с одного потенциометра

Коммутируем потенциометр с платой согласно схеме:

Посредством программы Arduino IDE загружаем скетч в плату Arduino:

int pin = A0;
int str;

void setup() {
  Serial.begin(9600); //инициализируем работу порта на скорости 9600 бод
  pinMode(pin, INPUT); //пин А0 инициализируем в качестве входа
  Serial.println("Hi! I am Arduino"); //сигнал в порт о готовности к работе

}

void loop() {
  str = analogRead(pin); //считываем сигнал с пина А0 (от 0 до 724 (3V3) или 1023 (5V))
  Serial.println(str); //отправляем числовое значение сигнала в порт
}

Предварительно необходимо установить библиотеку: введите pip install pyserial в командную строку. Далее загружаем код в среду разработки Python (перед запуском необходимо выбрать порт, к которому подключен модуль, у меня СОМ4):

#для взаимодействия с портом
import serial
#для использования функций времени
import time

#выбор порта и частоты обмена данными
ArduinoSerial = serial.Serial('COM4', 9600)
#ждем 2 секунды для стабилизации
time.sleep(2)

#вывод данных из порта в консоль
print(ArduinoSerial.readline().decode().strip())

while 1:
    #прием и декодирование строки (сигнала с потенциометра)
    line = ArduinoSerial.readline()
    print(line.decode().strip())

 

Обработка сигналов, приходящих на Arduino  с двух потенциометров

Крайние ноги второго потенциометра также вставляем в 3V3 (можно и в 5V - сути не меняет) и GND, а среднюю - в А1.

Загружаем скетч в плату Arduino:

int pin1 = A0;
int pin2 = A1;
int str1, str2;

void setup() {
  Serial.begin(9600); 
  pinMode(pin1, INPUT);
  pinMode(pin2, INPUT);
}

void loop() {
  str1 = analogRead(pin1); 
  str2 = analogRead(pin2);
  Serial.println((String)str1 + " " + str2);
}

Загружаем код в среду разработки Python:

import serial
import time

ArduinoSerial = serial.Serial('COM4', 9600)
time.sleep(2)

while 1:
    line = ArduinoSerial.readline().decode().strip()
    #разделение строки по пробелу
    mas = line.split()
    print(mas[0])
    print(mas[1])