Go Down

Topic: "Problema connessione HC-05 e Servomotore" (Read 108 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);
}


Brunello

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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy