Go Down

Topic: problema sketch per robot labirinto (Read 381 times) previous topic - next topic

banedda

Dec 07, 2014, 02:29 pm Last Edit: Dec 08, 2014, 01:51 pm by leo72
Ciao a tutti.
Ho un problema con il mio robottino.
Premetto che ho gia cercato sul forum e su internet ma ho trovato
poco o niente.
Il robot dovrebbe fare un labirinto semplice,per ora,destra,sinistra,dritto,con un ir remote per
dare avanti e stop,l' unico problema è che quando collego il servo con sopra il sensore
ultrasuoni srf04 la motorshield(comprata su futura shop allego dopo) mi fa girare una sola ruota.
Hora mi spiego meglio:ho una motor shield , una robot shield(quella da link),il sensore ed un servo;
mandando il robot senza servo tutto funziona, ma quando attacco il servo i due motori non funzionano
cioè gira uno solo e non prende ne direzioni ne velocita come se lo sketch mi escludesse i motori.
con lo sketch sensa servo tutto funziona , con l'inserimento del servo fa in quel modo come mai?
lo sketch che uso è questo(per ora è solo una prova per vedere se tutto funziona)
Code: [Select]

#include <Servo.h>

#define ECHO 12
#define TRIG 11

#define PWMA  5
#define DIRA  2
#define PWMB  9
#define DIRB  8

int speed1 = 220;
int speed2 = 200;
int speed3 = 0;

int dir1 = LOW;
int dir2 = HIGH;

Servo myservo;

int pos = 90;

void setup()
{
  pinMode(ECHO, INPUT);
  pinMode(TRIG, OUTPUT);
  Serial.begin(9600);
  Serial.println("sensore ultrasuoni");
  pinMode(PWMA, OUTPUT);
  pinMode(PWMB, OUTPUT);
  pinMode(DIRA, OUTPUT);
  pinMode(DIRB, OUTPUT);
  myservo.attach(3);
}

long funzionesonar()
{
  digitalWrite(TRIG, LOW);
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  long durata = pulseIn (ECHO, HIGH);
  long distanza = durata * 0.034 /2;
  delay(500);
  Serial.println(distanza);
  return distanza;
}

void Ferma()
{
  analogWrite(PWMA, speed3);
  analogWrite(PWMB, speed3);
  digitalWrite(DIRA, dir1);
  digitalWrite(DIRB, dir1);
}
void Avanti()
{
  analogWrite(PWMA, speed1);
  analogWrite(PWMB, speed2);
  digitalWrite(DIRA, dir2);
  digitalWrite(DIRB, dir2);
}
void Indietro()
{
  analogWrite(PWMA, speed1);
  analogWrite(PWMB, speed2);
  digitalWrite(DIRA, dir1);
  digitalWrite(DIRB, dir1);
  delay(1500);
}
void SvoltaSinistra()
{
  analogWrite(PWMA, speed3);
  analogWrite(PWMB, speed2);
  digitalWrite(DIRA, dir1);
  digitalWrite(DIRB, dir2);
  delay(1500);
}
void SvoltaDestra()
{
  analogWrite(PWMA, speed1);
  analogWrite(PWMB, speed3);
  digitalWrite(DIRA, dir2);
  digitalWrite(DIRB, dir1);
  delay(1500);
}
void loop()
{
  long cx, sx, dx;
 
  long distanza = funzionesonar();
 
  if(distanza > 30) Avanti();
 
  else
  {
    Ferma();

      myservo.write(90);
      cx = funzionesonar();
      delay(3000);
   
      myservo.write(180);
      sx = funzionesonar();
      delay(3000);
   
      myservo.write(0);
      dx = funzionesonar();
      delay(3000);
   
      myservo.write(90);
   
    if (cx < 10 ) Indietro();
    if (sx < 10 ) Indietro();
    if (dx < 10 ) Indietro();
   
    else
    {
      if (sx > dx) SvoltaSinistra();
      else SvoltaDestra();
    }
  }
}   
)

Lo sketch eliminato il servo funziona e non capisco perckè con l'aggiunta del servo
faccia in quel modo devo aver sbagliato qualcosa.
questo è il link dei componenti che ho
https://www.futurashop.it/index.php?route=product/product&path=4108_4112&product_id=6724

è due settimane che ci sbatto la testa ho riscritto il codice 10 volte ma non ho trovato
l'errore.

Se vi serve altre indicazioni chiedetemele.
Vi saluto e spero che possiate aiutarmi

(Scusate non sono capace a inserire lo sketch in una finestra come si fà? grazie)

stefa24

non so se è il tuo caso, ma come alimenti il tutto, potrebbe essere un problema di alimentazione, sempre meglio avere una alimentazione separata per arduino
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
https://www.youtube.com/channel/UCnY1DNrSywgadjyqqtbvyew
arduino UNO rev 3
ide 1.6.0

Etemenanki

...

(Scusate non sono capace a inserire lo sketch in una finestra come si fà? grazie)
Devi usare i tag "code" ... se i pulsanti non ti funzionano, come a me, scrivi code racchiuso fra parentesi quadre, senza spazi, prima del testo che vuoi inserire in finestra, e /code , sempre fra parentesi quadre e senza spazi, alla fine ... in questo modo:

[ code]
...
...
il tuo sketch
...
...
[ /code]

ma senza gli spazi che ci ho messo io, li ho messi solo perche' altrimenti non mi avrebbe visualizzato tutto, ma solo la parte in finestra, in questo modo

Code: [Select]

...
...
il tuo sketch
...
...


(cosi e' come viene senza gli spazi nelle quadre ;))
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

banedda

Ciao, grazie per le risposte.
Allora scusate ma mi ero scordato di scrivere dell'alimentazione.
Alimento arduino con una pila a 9 V e un porta pile da 4 AA attaccato alla robot shield
quindi 6 V.
problemi di alimentazione non ci devono essere perchè con lo sketch iniziale
trovato con lo starter kit non ho problemi funziona tutto.
Volevo inserire il servo per trasformarlo in un robot labirinto
ma l'aggiunta del servo mi da problemi come avrete capito.
è possibile che abbia scritto male lo sketch e mi vadino in conflitto
le schede? i pin per i servo li ho provati tutti e ho provato ad attaccarlo
anche con i jumper direttamente ai pin e fa sempre la stessa cosa
deve essere per forza un problema di programmazione ma non
capisco dove possa aver sbagliato.
Vi saluto spero che mi troviate una soluzione.
Ciao

Go Up