Go Down

Topic: Macchina rc+ultrasuoni [consulenza sui sensori da usare] (Read 1 time) previous topic - next topic

cece99




prova a mettere al posto del float per la distanza un unsigned int

ma il sensore l'hai provato separatamente con l'ausilio del serial monitor?

Ma sai cosa è successo? Dopo uno scontro il sensore si è affossato e non rilevava più bene :)

ma non doveva evitarli gli ostacoli? :P
va beh... comunque non penso ti serva la precisione di un float, che sono 4 byte, ti consiglio di usare un unsigned int che comunque hai la tolleranza di un cm e occupa solo 2 byte

Mi manca una sola cosa: con questo code la macchina dovrebbe (in caso di ostacolo) tornare indietro, andare avanti sterzando e dopo continuare ad andare avanti. Ma mi sterza a priori (il resto funziona bene).
Questo è lo sketch:
Code: [Select]

int motor1Pin1 = 3;    // pin 2 on L293D
int motor1Pin2 = 2;    // pin 7 on L293D
int enablePin = 11;    // pin 1 on L293D

#define ECHOPIN 12        // Pin to receive echo pulse
#define TRIGPIN 13        // Pin to send trigger pulse

/*
* setup function
* Initialize the serial line (D0 & D1) at 115200.
* Then set the pin defined to receive echo in INPUT
* and the pin to trigger to OUTPUT.
*/


void setup()
{
    digitalWrite(enablePin, HIGH);
 
  pinMode(ECHOPIN, INPUT);
  pinMode(TRIGPIN, OUTPUT);
     pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(enablePin, OUTPUT);
}

/*
* loop function.
*
*/
void loop()
{
  // Start Ranging
  digitalWrite(TRIGPIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGPIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGPIN, LOW);
  // Compute distance
  float distance = pulseIn(ECHOPIN, HIGH);
  distance= distance/58;
if (distance<15) {
    digitalWrite(motor1Pin1, HIGH);  //indietro
    digitalWrite(motor1Pin2, LOW);
    delay(1000);
    digitalWrite(motor1Pin1, LOW);   // avanti
    digitalWrite(motor1Pin2, HIGH);
    digitalWrite(10,HIGH); //enable sterzo
    digitalWrite(4,HIGH);//sterzo
    digitalWrite(9,LOW);
    delay(1000);
    digitalWrite(10,LOW); //disable sterzo
   

}
else {
     digitalWrite(motor1Pin1, LOW);   // avanti
    digitalWrite(motor1Pin2, HIGH); 
}
  delay(200);
}

[code]
[/code]
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

?R

non vedo dichiarati i pinMode dei pin 10, 4 e 9... prova a dichiararli... i pin non dichiarati sono per default degli input e dal codice sembra che tu voglia usarli come output, no?
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

cece99


non vedo dichiarati i pinMode dei pin 10, 4 e 9... prova a dichiararli... i pin non dichiarati sono per default degli input e dal codice sembra che tu voglia usarli come output, no?

Bravo era quello il problema :).
Ho aggiunto un altro quesito nel primo post: qualcuno mi saprebbe aiutare?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

?R


Edit: volevo aggiungere dei sonseri per "vedere" se a lato dell' auto ci sono ostacoli, e specialmente dietro :).
I sensori ad ultrasuoni mi sembrano eccessivi quindi pensavo di costruire 3 di questi "aggeggi" (http://www.gioblu.com/tutorials/sensori/176-sensore-ir-led-arduino-processing) gli ho provati con un arduino mega e funzionano bene. ma vorrei capire se riesco a far gestire ultrasuoni+3 sensori ir ad un atmega328 o se devo aggiungere un altro atmega (magari un atmega8 che costa 1 dollaro).

la tua domanda è solo se puoi farcela a gestire tutto con un atmega328? io penso di si, non vedo problemi, ne controlli uno alla volta magari dando la priorità a quello che ritieni più importante ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

cece99



Edit: volevo aggiungere dei sonseri per "vedere" se a lato dell' auto ci sono ostacoli, e specialmente dietro :).
I sensori ad ultrasuoni mi sembrano eccessivi quindi pensavo di costruire 3 di questi "aggeggi" (http://www.gioblu.com/tutorials/sensori/176-sensore-ir-led-arduino-processing) gli ho provati con un arduino mega e funzionano bene. ma vorrei capire se riesco a far gestire ultrasuoni+3 sensori ir ad un atmega328 o se devo aggiungere un altro atmega (magari un atmega8 che costa 1 dollaro).

la tua domanda è solo se puoi farcela a gestire tutto con un atmega328? io penso di si, non vedo problemi, ne controlli uno alla volta magari dando la priorità a quello che ritieni più importante ;)

Ok, ma non capisco bene come unire i due codici perchè quello degli infrarossi è pieno di void per ogni cosa e non so come si usano.
Mi sapresti aiutare?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

Go Up