Pages: [1]   Go Down
Author Topic: Macchina rc+ultrasuoni [consulenza sui sensori da usare]  (Read 731 times)
0 Members and 1 Guest are viewing this topic.
Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1722
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Edit: volevo aggiungere dei sonseri per "vedere" se a lato dell' auto ci sono ostacoli, e specialmente dietro smiley.
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:
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);
}
« Last Edit: December 08, 2012, 10:54:40 am by cece99 » Logged

Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield.
Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: December 07, 2012, 10:41:57 am by ƎR » Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Qualcuno sa illuminarmi???

"Fiat Lux"  smiley-mr-green
Logged

Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1722
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield.
Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
ma non doveva evitarli gli ostacoli? smiley-razz
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
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1722
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
ma non doveva evitarli gli ostacoli? smiley-razz
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:
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]
Logged

Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield.
Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1722
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley.
Ho aggiunto un altro quesito nel primo post: qualcuno mi saprebbe aiutare?
Logged

Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield.
Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Edit: volevo aggiungere dei sonseri per "vedere" se a lato dell' auto ci sono ostacoli, e specialmente dietro smiley.
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 smiley-wink
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1722
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Edit: volevo aggiungere dei sonseri per "vedere" se a lato dell' auto ci sono ostacoli, e specialmente dietro smiley.
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 smiley-wink
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?
Logged

Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield.
Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

metti i 2 codici, vediamo cosa si può fare
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1722
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

metti i 2 codici, vediamo cosa si può fare
Ok, comunque se vieni su face ti spiego meglio.
A me basterebbe che il sensore dietro mi funzioni durante la retromarcia e se trova un ostacolo mi fa girare subito la macchina smiley.
Questi sono i due sketch:
Code:
#define irEmitter 12            // polo positivo emettitore
#define irReceiverN 11          // polo negativo ricevitore
#define irReceiverP 10          // polo positivo ricevitore
long distance = 0;
int interval = 0;

void setup() {
  Serial.begin(9600);              // inizializza seriale a 9600 baud
  pinMode(irEmitter, OUTPUT);      // il led emettitore è un output
  pinMode(irReceiverP, OUTPUT);    // il polo positivo del let ricevitore è un output
  digitalWrite(irReceiverP, LOW);  // e deve essere LOW
}


void focus(int focusPoint) {
 interval = focusPoint; 
 distance = readLight(true) - readLight(false);
 if(distance < 0) distance = 0;
 // processing
 Serial.println(distance);
}

double readLight(boolean lightOn) {       
 digitalWrite(irEmitter, lightOn ? HIGH : LOW);
 pinMode(irReceiverN, OUTPUT);
 digitalWrite(irReceiverN, HIGH); //carico ricevitore di induttanza
 long reading = 0;
 pinMode(irReceiverN, INPUT);
 digitalWrite(irReceiverN, LOW);
 long lightTime = millis();
 while((millis() - lightTime) < interval)
  if(digitalRead(irReceiverN) == 0)
   reading++;
 
 return reading;
}
 
void loop() {
focus(115);
}
[code]

[code]
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);  // set pin 2 on L293D high
    digitalWrite(motor1Pin2, LOW);   // set pin 7 on L293D low
    delay(1000);
    digitalWrite(10,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(9,LOW);
    delay(100);
    digitalWrite(motor1Pin1, LOW);   // set pin 2 on L293D low
    digitalWrite(motor1Pin2, HIGH);  // set pin 7 on L293D high
    delay(2000);
    digitalWrite(10,LOW);
}
else {
     digitalWrite(motor1Pin1, LOW);   // set pin 2 on L293D low
    digitalWrite(motor1Pin2, HIGH);  // set pin 7 on L293D high
}
  delay(200);
}

[code]
[/code][/code][/code]
Logged

Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield.
Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok se vieni su skype (facebook non mi piace) tra mezzoretta ti spiego un po' smiley-wink
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1722
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok se vieni su skype (facebook non mi piace) tra mezzoretta ti spiego un po' smiley-wink
No problem, thank you smiley-grin
Logged

Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield.
Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586

Pages: [1]   Go Up
Jump to: