Последовательная связь между python и Arduino nano BLE sense 33 для запуска шести двигателей постоянного тока.

Я управляю шестью двигателями постоянного тока, изменяя их напряжение. Я вычислил напряжение, необходимое для каждого двигателя в питоне; теперь пришло время отправить это напряжение через Arduino Nano BLE Sense 33 для запуска шести двигателей постоянного тока через последовательную связь. Может ли кто-нибудь помочь мне понять его решение?

Python Code:

from time import sleep
import serial
import struct
ser = serial.Serial('COM7', 9600) 

while True:
     ser.write(struct.pack('BBBBBB',200,210,220,230,240,180))  ## PWM
     ser.readline()
     sleep(.5)

Arduino Code:
const int ledPin[6] = {4, 7, 8, A5, 13, A0};
const int ledPin1[6] = {2, 6, 9, A4, 12, A1};
const int ledPin2[6] = {3, 5, 10, A3, 11, A2};

int x;
void setup() {
  Serial.begin(9600);
  for (int k = 0; k < 6; k++) {
    pinMode(ledPin[k], OUTPUT);
    pinMode(ledPin1[k], OUTPUT);
    pinMode(ledPin2[k], OUTPUT);
  }
  Serial.setTimeout(1);
}
void loop() {
  for (int i = 0; i < 6; i++) {
    while (!Serial.available());
    x = Serial.readString().toInt();
    dir(ledPin[i], x, ledPin1[i], ledPin2[i]);
  }
}

float dir(int Pin, float x, int Lpin1, int Lpin2) {
  analogWrite(Pin, abs(x));
  if (x < 0) {
    digitalWrite(Lpin1, HIGH);
    digitalWrite(Lpin2, LOW);
  }
  else if (x > 0) {
    digitalWrite(Lpin1, LOW);
    digitalWrite(Lpin2, HIGH);
  }
  else {
    digitalWrite(Lpin1, LOW);
    digitalWrite(Lpin2, LOW);
  }
}
 

, 👍-2

Обсуждение

что ты пробовал? ... что не удалось? ... последовательная связь не связана с управлением двигателем ... эти две функции полностью разделены, @jsotola

Я хочу отправить данные о напряжении с python на Arduino, @Vishal Naik

Используя последовательную связь, мы можем передавать данные с Python на Arduino. Здесь, в моей программе, эти данные — ШИМ. Как только он появится в Arduino, я смогу запустить двигатель постоянного тока., @Vishal Naik

Теперь станет ясно. Пожалуйста, прочитайте вопрос еще раз., @Vishal Naik

Здесь я определил напряжение, необходимое для двигателя постоянного тока (привода). Теперь я не могу управлять двигателем постоянного тока через Python, поэтому я передаю данные из Python в Arduino IDE через последовательную связь. Я знаю, как обращаться с одним двигателем постоянного тока, но здесь мне нужно запустить шесть двигателей постоянного тока. В питоне я вычислил напряжение для каждого мотора, так что оно в виде массива. Итак, теперь я хочу перенести этот массив из Python в Arduino IDE, где я могу запустить шесть двигателей постоянного тока. Надеюсь, теперь вы понимаете., @Vishal Naik

Код Python, который у вас есть, отправляет шесть байтов данных в двоичной форме как b'\xc8\xd2\xdc\xe6\xf0\xb4', в то время как вы читаете его как строку (то есть серию ASCII) в вашем Ардуино. Вам нужно прочитать каждый байт, например byte x = Serial.read();, и обрабатывать все полученные данные., @hcheung

Работает только один двигатель постоянного тока, остальные не работают. Я думаю, это может быть потому, что они не получают значения ШИМ. Вы можете решить это?, @Vishal Naik

Спасибо @hcheung. Я постараюсь, и дам вам знать., @Vishal Naik

Извините, @jsotola, я невнимательно прочитал ваш пост. Я получил теперь ваш вопрос. Я уже разместил свой код. Он работает только для одного двигателя постоянного тока, а остальные не работают., @Vishal Naik


1 ответ


Лучший ответ:

0

Вот как должен выглядеть ваш Arduino loop():

void loop() 
{
    if(Serial.available() > 0)
    {
        for (int i = 0; i < 6; i++) 
        {
            while (!Serial.available());
            int x = Serial.read();
            dir(ledPin[i], x, ledPin1[i], ledPin2[i]);
        }
    }
}

Не проверял.

,

Оно работает. Спасибо, @Vishal Naik

@VishalNaik Пожалуйста, примите это как ответ. Спасибо! :), @Fahad