Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1038
http://cesarecacitti.wordpress.com/
|
 |
« on: December 07, 2012, 10:18:25 am » |
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: 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
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #1 on: December 07, 2012, 10:37:06 am » |
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
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7340
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #2 on: December 07, 2012, 10:40:06 am » |
Qualcuno sa illuminarmi???
"Fiat Lux" 
|
|
|
|
|
Logged
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1038
http://cesarecacitti.wordpress.com/
|
 |
« Reply #3 on: December 07, 2012, 10:45:12 am » |
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 
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #4 on: December 07, 2012, 10:49:36 am » |
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?  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
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1038
http://cesarecacitti.wordpress.com/
|
 |
« Reply #5 on: December 07, 2012, 10:54:40 am » |
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?  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: 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
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #6 on: December 07, 2012, 10:58:36 am » |
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
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1038
http://cesarecacitti.wordpress.com/
|
 |
« Reply #7 on: December 08, 2012, 01:09:20 pm » |
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?
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #8 on: December 08, 2012, 03:00:47 pm » |
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 
|
|
|
|
|
Logged
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1038
http://cesarecacitti.wordpress.com/
|
 |
« Reply #9 on: December 09, 2012, 08:22:20 am » |
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?
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #10 on: December 09, 2012, 08:47:55 am » |
metti i 2 codici, vediamo cosa si può fare
|
|
|
|
|
Logged
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1038
http://cesarecacitti.wordpress.com/
|
 |
« Reply #11 on: December 09, 2012, 08:51:50 am » |
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  . Questi sono i due sketch: #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
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #12 on: December 09, 2012, 09:18:16 am » |
ok se vieni su skype (facebook non mi piace) tra mezzoretta ti spiego un po' 
|
|
|
|
|
Logged
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1038
http://cesarecacitti.wordpress.com/
|
 |
« Reply #13 on: December 09, 2012, 09:23:43 am » |
ok se vieni su skype (facebook non mi piace) tra mezzoretta ti spiego un po'  No problem, thank you 
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
|