Go Down

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

cece99

Dec 07, 2012, 04:18 pm Last Edit: Dec 08, 2012, 04:54 pm by cece99 Reason: 1
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).
______________________________________________________________________________________________________________________________________________________


Salve a tutti, sto creando una macchinetta che evita gli ostacoli con un sensore ad ultrasuini hc-sr04.
Il problema è che quando la macchina di avvicina a un ostacolo non inverte la marcia. Qualcuno sa illuminarmi???
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<10) {
   digitalWrite(motor1Pin1, HIGH);  //indietro
   digitalWrite(motor1Pin2, LOW);


}
else {
    digitalWrite(motor1Pin1, LOW);   // avanti
   digitalWrite(motor1Pin2, HIGH);  
}
 delay(200);
}
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

?R

#1
Dec 07, 2012, 04:37 pm Last Edit: Dec 07, 2012, 04:41 pm by ?R Reason: 1
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?
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

astrobeed


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 :)
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

?R



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
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Go Up