Go Down

Topic: "Problema connessione HC-05 e Servomotore" (Read 160 times) previous topic - next topic

MassimoN

Buona sera a tutti, ho da poco sviluppato un "rover" che riesce a muoversi in modo del tutto autonomo, ho montato su di esso alcuni sensori, in più è presente un modulo bluetooth su di esso, funziona tutto benissimo se non per il fatto che non riesco in alcun modo a mandare i dati dei sensori  dal microcontrollore ad un app con monitor seriale sullo smartphone, credo che il problema sia il servomotore in quanto,se non collegato sembra non dare problemi..ho provato a cambiare le porte sia del servomotore che del modulo bluetooth ma non è cambiato nulla, a questo punto ho pensato fosse un problema riguardo al codice..qualcuno sa come posso ovviare a questo problema? è come se il servomotore non appena entra in funzione fa impazzire il modulo bluetooth. Ringrazio in anticipo allego il codice utilizzato.
Buona serata

Code: [Select]
#include <NewPing.h>               // libreria HC-SR04
#include <Wire.h>                   // libreria per i2c
#include <Servo.h>                // libreria Servomotore
#include <SoftwareSerial.h>       // libreria Bluetooth
#include <DHT.h>

#define TRIGGER_PIN 12           // definizione pin TRIGGER HC-SR04
#define ECHO_PIN 13            // definizione pin ECHO HC-SR04
#define MAX_DISTANCE 200        // definizione massima distanza rilevabile HC-SR04

#define DHTPIN 9
#define DHTTYPE DHT11

#define TRIGGER_PINA 2        // definizione pin TRIGGER HC-SR04
#define ECHO_PINA 4         // definizione pin ECHO HC-SR04
#define MAX_DISTANCE 200        // definizione massima distanza rilevabile HC-SR04

Servo myservo;                                                  // dichiarazione comando Servomotore
SoftwareSerial BT(10,11 ); // RX, TX                    // dichiarazione pin di trasmissione e ricezione per il Bluetooth
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);             // dichiarazione comando per HC-SR04
NewPing sonara(TRIGGER_PINA, ECHO_PINA, MAX_DISTANCE);             // dichiarazione comando per HC-SR04
DHT dht(DHTPIN, DHTTYPE);

int Val;
int Vout;
int Rfot;
int leftspeed = 255; //255 is maximum speed
int rightspeed = 255;
int E1 = 6; //M1 Speed Control
int E2 = 5; //M2 Speed Control
int M1 = 8; //M1 Direction Control
int M2 = 7; //M2 Direction Control          // dichiarazione comando per HC-SR04
int distanza = 0;
int distanza1=0;
void setup() {
int i;
  for (i = 5; i <= 8; i++)
    pinMode(i, OUTPUT);
  Serial.begin(9600);  // inizializza comunicazione seriale COM a 9600 BAUD
  BT.begin(9600);                                              // inizializza comunicazione seriale Bluetooth a 9600 BAUD
  myservo.attach(3);                                                  // pin utilizzato per la gestione del Servomotore
  myservo.write(100);
  delay(2000);
  distanza = sonar.ping_cm();
  delay(100);
  distanza = sonar.ping_cm();
  delay(100);
  distanza = sonar.ping_cm();
  delay(100);
  distanza = sonar.ping_cm();
  delay(100);
  distanza1 = sonara.ping_cm();
  delay(100);
  distanza1 = sonara.ping_cm();
  delay(100);
  distanza1 = sonara.ping_cm();
  delay(100);
  distanza1 = sonara.ping_cm();
  delay(100);
}

void loop() {
  Val= analogRead(0);
Vout= (5*Val)/1023;
Rfot= (10000*Vout)/(5-Vout);
int t = dht.readTemperature();
int h = dht.readHumidity();
BT.print("Temperatura:");
BT.println(t);
BT.print("Umidità:");
BT.println(h);
delay(15000);
if(Val>0 && Val<255){
  BT.print("Intensità luminosa:");
  BT.println("Ambiente buio");
  delay(15000);
}
if (Val>255 && Val<512){
  BT.print("Intensità luminosa:");
  BT.println("Ambiente poco luminoso");
  delay(15000);
}
if(Val>512 && Val<768){
  BT.print("Intensità luminosa:");
  BT.println("Ambiente Luminoso");
  delay(15000);
}
if (Val>768){
  BT.print("Intensità luminosa:");
  BT.println("Ambiente molto luminoso");
  delay(15000);
}
delay(150);
 int distanza=sonar.ping_cm();
  delay(150);
  int distanza1=sonara.ping_cm();
  int distanceR = 0;
  int distanceL =  0;
 
   if (distanza <= 15 || distanza1>8)
  {
    analogWrite (E1, 0);
    digitalWrite(M1, LOW); //se high gira a sinistra
    analogWrite (E2, 0);
    digitalWrite(M2, LOW); // se high gira a destra
    delay(100);
    analogWrite (E1, 255);
    digitalWrite(M1, HIGH); //se high gira a sinistra
    analogWrite (E2, 255);
    digitalWrite(M2, HIGH); // se high gira a destra
    delay(1000);
    analogWrite (E1, 0);
    digitalWrite(M1, LOW); //se high gira a sinistra
    analogWrite (E2, 0);
    digitalWrite(M2, LOW); // se high gira a destra
    delay(100);
    distanceR = lookRight();
    delay(200);
    distanceL = lookLeft();
    delay(200);
    if (distanceR >= distanceL)
    {
      analogWrite (E1, 255);
      digitalWrite(M1, LOW);
      analogWrite (E2, 255);
      digitalWrite(M2, HIGH);
      delay(600);
      analogWrite (E1, 0);
      digitalWrite(M1, LOW); //se high gira a sinistra
      analogWrite (E2, 0);
      digitalWrite(M2, LOW); // se high gira a destra
      delay(500);
    } else
    {
      analogWrite (E1, 255);
      digitalWrite(M1, HIGH);
      analogWrite (E2, 255);
      digitalWrite(M2, LOW);
      delay(600);
      analogWrite (E1, 0);
      digitalWrite(M1, LOW); //se high gira a sinistra
      analogWrite (E2, 0);
      digitalWrite(M2, LOW); // se high gira a destra
      delay(500);
    }
  } else
  {
    analogWrite (E1, 255);
    digitalWrite(M1, LOW);
    analogWrite (E2, 255);
    digitalWrite(M2, LOW);
  }
  distanza = sonar.ping_cm();
  distanza1 = sonara.ping_cm();
}

int lookRight()
{
  myservo.write(25);
  delay(500);
  int distanza = sonar.ping_cm();
  delay(100);
  myservo.write(100);
  return distanza;
}

int lookLeft()
{
  myservo.write(180);
  delay(500);
  int distanza = sonar.ping_cm();
  delay(100);
  myservo.write(100);
  return distanza;
  delay(100);
}


brunello22

Piu' che collegarlo ad un'altro pin ( il servo ) lo collegherei ad una fonte di alimentazione decente, perche' il problema pare quello
"C' è chi legge Guerra & Pace e non ci capisce un tubo vuoto; c'è chi legge l'etichetta delle patatine fritte e ci trova la spiegazione del mondo"

MassimoN

Anch'io ho pensato di alimentarlo a parte, oppure..pensavo di metterci un condensatore, per evitare questo problema. Cosa mi consigli?

Go Up