Proyecto coche

Buenas, estoy trabajando en un proyecto de un coche wifi, como posible proyecto de fin de carrera y me preguntaba haber si me podríais resolver una serie de dudas.

El coche ya lo tengo montado pero me da una serie de fallos que no termino de resolver.

Antes que nada, para mi proyecto empleo:

  • Wemos D1 (Arduino con placa Esp8266 integrada), de su vin va conectado el controlador de motores L298N a la entrada de 6-12v. Y de su 5v alimenta a un servo MG995.

El wemos esta alimentado por una batería de 9,6v y 800mAH ( que tiene más de 10 años, pero midiéndolo con el amperimetro me saca un voltaje de 10,4v así que va bien).

  • EL controlador esta conectado a un motor que no me sale ninguna etiqueta de cuanto es, pero venia junto con la batería de 9,6, así que supongo que será de entre 7-15v o así. (He reutilizado un coche rc)

Una vez definida mi estructura, estas son mis cuestiones:

C) El motor entre los valores de velocidad de 1-999 (tengo k usar del 0-1000 para que funcione) hace un ruido infernal, hay alguna manera de eliminarlo¿?
D)En ocasiones muy raras, cuando giro mucho el coche (el servo) se resetea la placa arduino.

E) Como podría aumentar la señal de wifi de la Wemos D1?, podría soldarle una antena a la antena dibujada en la placa?

un saludo y gracias.

A) B) y C Segunda) Cambia la batería, aun que midas 10V no quiere decir que este en buen estado, y si tiene 10 año no lo estará

D) también es un problema de alimentación, coge la alimentación directamente de la batería a través de un regulador, no de la placa compartiendo regulador con el micro y el ESP

C segunda) Tendrás que poner el código por que eso de 1-999 y 0-1000 no se a que te refieres

#include <ESP8266WiFi.h>
#include "Servo.h"

#define P_FRONT D2
#define P_BEHIND D3
#define P_SPEED D4
#define P_SERVO D5

#define PORT 400

const char *ssidAP = "GTZ";
const char *passwordAP = "1234567890";

Servo myServo;
WiFiServer server(PORT);

void setup() {
  Serial.begin(921600);
  delay(10);
  Serial.println("Setup begin...");

  WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(IPAddress(192, 168, 7, 7), IPAddress(192, 168, 7, 1), IPAddress(255, 255, 255, 0));

   // Create WiFi network
  WiFi.softAP(ssidAP, passwordAP, 13, 2); //ssid,pass,channel,pass_encrypt

  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());

 pinMode(P_SPEED, OUTPUT);
 pinMode(P_BEHIND,OUTPUT);
 pinMode(P_FRONT,OUTPUT);
 myServo.attach(P_SERVO);
 myServo.write(45);//mid

 Serial.println("Setup ended...");
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (client) 
  {
      while(client.connected()){
        if (client.available() > 0) {
          request(client.readStringUntil(';'));
          client.flush();
       }
    }
  }
}
void request (String data){
  String* pieces= split(data, ":", 3);
    gear(pieces[0]);
    velocity(pieces[1].toInt());
    revolution(pieces[2].toInt());
}

void gear(String g){

     if(g.equalsIgnoreCase("stop"))
     {
       Serial.print("Stop\r\n");
       digitalWrite(P_BEHIND,LOW);
       digitalWrite(P_FRONT,LOW);
     }
     else if(g.equalsIgnoreCase("front"))
     {
       Serial.print("Front\r\n");
       digitalWrite(P_BEHIND,LOW);
       digitalWrite(P_FRONT,HIGH);
     }
     else if(g.equalsIgnoreCase("behind"))
     {
       Serial.print("Behind\r\n");
       digitalWrite(P_BEHIND,HIGH);
       digitalWrite(P_FRONT,LOW);
     }

}
void velocity(int v){
  if (v < 2)//10% dont move 
    v=0;
  int vmaped =map(v,0, 10, 0, 1000); //map servo and acelerometer values
  analogWrite(P_SPEED, vmaped);
  Serial.print("Speed: "+String(vmaped)+"\r\n");
} 

void revolution(int r){
    int rmaped =map(r,-5, 5, 91, 1); //map servo and acelerometer values
    myServo.write(rmaped);
    Serial.print("Servo: "+String(rmaped)+"\r\n");
}

String* split(String data, String separator, int count)
{
String* pieces = new String[count];
int counter = 0;
String aux = data+separator; // add sparator to the end
// Keep track of the last comma so we know where to start the substring
int lastIndex = 0;
      for (int i = 0; i < aux.length(); i++) {
        // Loop through each character and check if it's a comma
        if (aux.substring(i, i+1) == separator) {
          // Grab the piece from the last index up to the current position and store it
          pieces[counter] = aux.substring(lastIndex, i);
          // Update the last position and add 1, so it starts from the next character
          lastIndex = i + 1;
          // Increase the position in the array that we store into
          counter++;
        }
      }
     Serial.print(aux+"<-->"+pieces[0]+"/"+pieces[1]+"/"+ pieces[2]+"\r\n");
    return pieces;
}
int vmaped =map(v,0, 10, 0, 1000); //map servo and acelerometer values
  analogWrite(P_SPEED, vmaped);

analogWrite necesita un valor entre 0 y 255, y le estas metiendo entre 0 y 1000 :o

prueba con:

byte vmaped =map(v,0, 10, 0, 255); //map servo and acelerometer values
  analogWrite(P_SPEED, vmaped);

eso me funcionaba cuando usaba el arduino uno, desde que pase a la wemos D1 no se porque, pero si pongo de 0 a 255 solo hace ruido, tengo que darle hasta 1000

La bateria ya esta solventada, he pillado una de 7,4V y 4800mAh, y para el servo he pillado un regulador pero nada, sigue igual