Уровень напряжения колеблется всякий раз, когда ESP8266 получает сигнал.

Добрый день, уважаемое сообщество,

Я пытаюсь построить WiFi-связь с Arduino с помощью модуля ESP8266. К Arduino подключены один сервопривод и один шаговый двигатель, и всякий раз, когда модуль Wi-Fi ESP8266 получает сигнал, уровень напряжения на двигателе и сервоприводе резко колеблется, что приводит к неточным результатам о поведении двигателя и сервопривода. Я подключил модуль ESP8266 с помощью SoftwareSerial, и даже когда сигнал не передается в двигатель или сервопривод, уровни напряжения изменяются всякий раз, когда модуль WiFi получает данные.

Ниже мой код,

#include <Servo.h>
#include "SoftwareSerial.h"
SoftwareSerial softSerial(10, 11); // RX, TX

// Компоненты:
Servo servo1;
Servo firstESC;

// Двигатель:
const int MAX_SPEED = 1850;
const int MIN_SPEED = 1200;
int armValue = 1500;
int speedIncrease = 20;
int speedDecrease = speedIncrease * 3;

// Направление:
int currentPos;
const int MAX_ANGLE = 120;
const int MIN_ANGLE = 60;
const int MID_ANGLE = 90;

void setup() {
   Serial.begin(9600);
   Serial.setTimeout(10);

   softSerial.begin(9600);
   // softSerial.setTimeout(10);

   // Настройка сервопривода:
   servo1.attach(9);
   servo1.write(90);

   // Направление установки:
   Serial.println("The motor is arming in 2 seconds, please wait.");
   firstESC.attach(8);

   // Включаем двигатель через 2 секунды:
   delay(2000);
   firstESC.writeMicroseconds(armValue);

   Serial.println("Serial is setting up, wait time: 3000 ms.");
   delay(3000);

   // Проверка связи с платой:
   softSerial.println("AT");
   delay(1000);
   while (softSerial.available()) {
     String message = softSerial.readString();
     Serial.println(message);
     delay(1000);
   }

   // Подключаемся к WIFI:
   Serial.println("Connecting to wifi, wait time 4000 ms.");
   softSerial.println(--- COMMAND TO CONNECT WIFI ---);
   delay(4000);
   while (softSerial.available()) {
     String message = softSerial.readString();
     Serial.println(message);
     delay(1000);
   }

   // Подождите, пока соединение станет стабильным:
   delay(2000);

   // Получить IP-адрес:
   Serial.println("Requesting IP Address.");
   softSerial.println("AT+CIFSR");
   delay(2000);
   softSerial.println("AT+CIPMUX=1"); // Установить несколько доступных подключений.
   while (softSerial.available()) {
     String message = softSerial.readString();
     Serial.println(message);
     delay(1000);
   }

   delay(2000);

   // Настройка сервера:
   Serial.println("Connecting to server..");
   softSerial.println("AT+CIPSTART=3,\"TCP\",\"192.168.1.67\",1235");
   delay(2000);
   while (softSerial.available()) {
     String message = softSerial.readString();
     Serial.println(message);
     delay(1000);
   }

   Serial.println("Set up is complete, loop started.");

}

String inString = "";
bool reading = false;

void loop() {

   while (softSerial.available() > 0)
   {
    char inChar = softSerial.read();

    if(inChar == 'O') {
      reading = false;
    }

    if(reading) {
      if (inChar == ','){
        Serial.println(inString);
        int val = inString.toInt();

        //Вход двигателя
        if (val >= MIN_SPEED && val <= MAX_SPEED){
          setSpeed(val);
        }

        //Ввод направления
        else if (val >= MIN_ANGLE && val <= MAX_ANGLE ){
          setRotation(val);
        }
        inString = "";
      }
      else{
        if(inChar !='\0' && inChar != '\n' ){
          inString += inChar;
        }  
      }
    }

    if(inChar == ':') {
      reading = true;
    }

   }

   if (Serial.available())
   {
      String message = Serial.readString();
      // Serial.print(сообщение);
      setSpeed(message.toInt());
   }
}

void setSpeed(int customSpeed){
  firstESC.writeMicroseconds(customSpeed);
}

void setRotation(int angles){
  servo1.write(angles);
}

, 👍0

Обсуждение

Это может быть проблемой слабого (или не стабилизированного) источника питания. Когда система на мгновение потребляет слишком много тока, она падает напряжение. Что вы используете для питания своей схемы?, @Filip Franik

При подключении к USB или источнику питания 7,5 В возникает та же проблема., @Uğur Kaya


1 ответ


3

ESP8266 печально известен своим шумом, в основном потому, что дешевые платы, на которых обычно продается ESP8266, не содержат никаких фильтров питания.

Так что вам действительно придется добавлять что-то свое. Как мне недавно пришлось сделать, когда я добавлял плату ESP8266 в аудиосистему.

Для этого я придумал такую схему:

VCCA — это ваше основное входящее питание. VCCD подает питание в ESP8266. Двигатели подключены к той же точке, что и VCCA.

,

Планируете ли вы продавать это как комплект?, @Code Gorilla

Я не был, нет. Я думаю, я мог бы..., @Majenko