int duration; // Stores duratiuon of pulse in
int distance; // Stores distance
int srfPin = 2; // Pin for SRF05
void setup(){
Serial.begin(9600);
}
void loop(){
pinMode(srfPin, OUTPUT);
digitalWrite(srfPin, LOW); // Make sure pin is low before sending a short high to trigger ranging
delayMicroseconds(2);
digitalWrite(srfPin, HIGH); // Send a short 10 microsecond high burst on pin to start ranging
delayMicroseconds(10);
digitalWrite(srfPin, LOW); // Send pin low again before waiting for pulse back in
pinMode(srfPin, INPUT);
duration = pulseIn(srfPin, HIGH); // Reads echo pulse in from SRF05 in micro seconds
distance = duration/58; // Dividing this by 58 gives us a distance in cm
Serial.println(distance);
delay(50); // Wait before looping to do it again
}
const int numOfReadings = 10; // number of readings to take/ items in the array
int readings[numOfReadings]; // stores the distance readings in an array
int arrayIndex = 0; // arrayIndex of the current item in the array
int total = 0; // stores the cumlative total
int averageDistance = 0; // stores the average value
// setup pins and variables for SRF05 sonar device
int echoPin = 12; // SRF05 echo pin (digital 2)
int initPin = 13; // SRF05 trigger pin (digital 3)
unsigned long pulseTime = 0; // stores the pulse in Micro Seconds
unsigned long distance = 0; // variable for storing the distance (cm)
int motor1Pin1 = 3; // pin 2 on L293D
int motor1Pin2 = 4; // pin 7 on L293D
int enable1Pin = 9; // pin 1 on L293D
int motor2Pin1 = 5; // pin 10 on L293D
int motor2Pin2 = 6; // pin 15 on L293D
int enable2Pin = 10; // pin 9 on L293D
void setup() {
// set the motor pins as outputs:
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
pinMode(enable2Pin, OUTPUT);
// set enablePins high so that motor can turn on:
digitalWrite(enable1Pin, HIGH);
digitalWrite(enable2Pin, HIGH);
pinMode(initPin, OUTPUT); // set init pin 3 as output
pinMode(echoPin, INPUT); // set echo pin 2 as input
// create array loop to iterate over every item in the array
for (int thisReading = 0; thisReading < numOfReadings; thisReading++) {
readings[thisReading] = 0;
}
}
void loop() {
digitalWrite(initPin, HIGH); // send 10 microsecond pulse
delayMicroseconds(10); // wait 10 microseconds before turning off
digitalWrite(initPin, LOW); // stop sending the pulse
pulseTime = pulseIn(echoPin, HIGH); // Look for a return pulse, it should be high as the pulse goes low-high-low
distance = pulseTime/58; // Distance = pulse time / 58 to convert to cm.
total= total - readings[arrayIndex]; // subtract the last distance
readings[arrayIndex] = distance; // add distance reading to array
total= total + readings[arrayIndex]; // add the reading to the total
arrayIndex = arrayIndex + 1; // go to the next item in the array
// At the end of the array (10 items) then start again
if (arrayIndex >= numOfReadings) {
arrayIndex = 0;
}
averageDistance = total / numOfReadings; // calculate the average distance
delay(10);
// check the average distance and move accordingly
if (averageDistance <= 10){
// go backwards
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
}
if (averageDistance <= 25 && averageDistance > 10) {
// turn
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
}
if (averageDistance > 25) {
// go forward
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, HIGH);
}
}
int echopin = 13; // a saido echo do SRF05 liga no pin 13
int trigerpin = 12; // a saida triger do SRFo5 liga no pin 12
int motor1pin1 = 11; // Ponte H motor 1 saida 1
int motor1pin2 = 10; // Ponte H motor 1 saida 2
int motor2pin1 = 6; // Ponte H motor 2 saida 1
int motor2pin2 = 5; // Ponte H motor 2 saida 2
int distancia; // Variavel distancia suponho eu em cm
int duracao; //Variavel duracao
void setup()
{
pinMode(motor1pin1, OUTPUT);
pinMode(motor1pin2, OUTPUT);
pinMode(motor2pin2, OUTPUT);
pinMode(motor2pin2, OUTPUT);
pinMode(trigerpin, OUTPUT);
pinMode(echopin, INPUT);
}
void loop()
{
digitalWrite(trigerpin, LOW); // da um sinal baixo ao triger
delayMicroseconds(2);
digitalWrite(trigerpin,HIGH); // da um sinal alto ao triger
delayMicroseconds(10);
digitalWrite(trigerpin,LOW); // da um sinal baixo ao triger
delayMicroseconds(10);
duracao = pulseIn(trigerpin, HIGH); // isto a que ainda nao percebo bem o que é loOl
distancia = duracao/58; // converte para cm
if (distancia >= 5) // se a distancia for maior ou igual que 5 cm
{
digitalWrite(motor1pin1, HIGH);
digitalWrite(motor1pin2,LOW);
digitalWrite(motor2pin1,HIGH);
digitalWrite(motor2pin2,LOW);
//anda sempre em frente ...
}
if (distancia <= 4) // se a distancia for menor ou igual que 4 cm
{
digitalWrite(motor1pin1,LOW);
digitalWrite(motor1pin2,HIGH);
digitalWrite(motor2pin1,LOW);
digitalWrite(motor2pin2,HIGH);
delay(1000);
// vira para a direita durante 1 segundo
}
}
Não, só te disse o que acho estar errado!
Olha ai código de exemplo
http://letsmakerobots.com/node/1669 (http://letsmakerobots.com/node/1669)
http://luckylarry.co.uk/arduino-projects/arduino-sonic-range-finder-with-srf05/ (http://luckylarry.co.uk/arduino-projects/arduino-sonic-range-finder-with-srf05/)
http://luckylarry.co.uk/arduino-projects/arduino-processing-getting-values-from-srf05-ultrasound-sensor-serial-port/ (http://luckylarry.co.uk/arduino-projects/arduino-processing-getting-values-from-srf05-ultrasound-sensor-serial-port/)
É que basta meter arduino srf05 no google..
int motor1pin1 =1;
int motor1pin2 = 3;
int motor2pin1 = 5;
int motor2pin2 = 6;
void setup()
{
digitalWrite(motor1pin1, OUTPUT);
digitalWrite(motor1pin2, OUTPUT);
digitalWrite(motor2pin1,OUTPUT);
digitalWrite(motor2pin2,OUTPUT);
}
void loop()
{
digitalWrite(motor1pin1, HIGH);
digitalWrite(motor1pin2,LOW);
digitalWrite(motor2pin1,HIGH);
digitalWrite(motor2pin2,LOW);
delay(2);
digitalWrite(motor1pin1,HIGH);
digitalWrite(motor1pin2,LOW);
digitalWrite(motor2pin1,LOW);
digitalWrite(motor2pin2,HIGH);
delay(1);
}
int motor1pin1 = 1;
int motor1pin2 = 3;
int motor2pin1 = 5;
int motor2pin2 = 6;
void setup()
{
pinMode(motor1pin1, OUTPUT);
pinMode(motor1pin2, OUTPUT);
pinMode(motor2pin1, OUTPUT);
pinMode(motor2pin2, OUTPUT);
}
void loop()
{
digitalWrite(motor1pin1, HIGH);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, HIGH);
digitalWrite(motor2pin2, LOW);
delay(2000);
digitalWrite(motor1pin1, HIGH);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, HIGH);
delay(1000);
}
é normal a ponte H aquecer muito ? é que ja estava a testar isto com o ultrasonico e meti o dedo na ponte H e ela "fervia"
int echopin = 13; // a saido echo do SRF05 liga no pin 13
int trigerpin = 12; // a saida triger do SRFo5 liga no pin 12
int motor1pin1 = 11; // Ponte H motor 1 saida 1
int motor1pin2 = 10; // Ponte H motor 1 saida 2
int motor2pin1 = 6; // Ponte H motor 2 saida 1
int motor2pin2 = 5; // Ponte H motor 2 saida 2
unsigned long pulsetime = 0; // Variavel que faz a leitura do pulso
unsigned long distancia = 0; //Variavel que que armazena a distancia
void setup()
{
pinMode(motor1pin1, OUTPUT);
pinMode(motor1pin2, OUTPUT);
pinMode(motor2pin2, OUTPUT);
pinMode(motor2pin2, OUTPUT);
pinMode(trigerpin, OUTPUT);
pinMode(echopin, INPUT);
}
void loop()
{
digitalWrite(trigerpin, HIGH);
delayMicroseconds(50);
digitalWrite(trigerpin,LOW);
pulsetime = pulseIn(echopin, HIGH);
distancia = pulsetime/58; // converte para cm
if (distancia > 6) // se a distancia for maior que 6 cm
{
digitalWrite(motor1pin1,LOW);
digitalWrite(motor1pin2,HIGH);
digitalWrite(motor2pin1,LOW);
digitalWrite(motor2pin2,HIGH);
//anda sempre em frente ...
}
if (distancia <= 5) // se a distancia for menor ou igual que 5 cm
{
digitalWrite(motor1pin1,HIGH);
digitalWrite(motor1pin2,LOW);
digitalWrite(motor2pin1,LOW);
digitalWrite(motor2pin2,HIGH);
delay(1000);
// vira para a direita durante 1 segundo
}
}
Com um multimetro.
Sabes medir correntes?
#include <Servo.h>
int maxspeed = 100;
#define MotorR 5
#define MotorL 3
int pause = 1000;
#define sensorpin 2
int duration;
int distance;
Servo servo;
void getDistance(){
pinMode(sensorpin, OUTPUT);
digitalWrite(sensorpin, LOW); // Make sure pin is low before sending a short high to trigger ranging
delayMicroseconds(2);
digitalWrite(sensorpin, HIGH); // Send a short 10 microsecond high burst on pin to start ranging
delayMicroseconds(10);
digitalWrite(sensorpin, LOW); // Send pin low again before waiting for pulse back in
pinMode(sensorpin, INPUT);
duration = pulseIn(sensorpin, HIGH); // Reads echo pulse in from SRF05 in micro seconds
distance = duration/58; // Dividing this by 58 gives us a distance in cm
}
void rightForward(void){
digitalWrite(8, HIGH);
digitalWrite(11, LOW);
}
void leftForward(void){
digitalWrite(12, LOW);
digitalWrite(7, HIGH);
}
void rightBackward(){
digitalWrite(8, LOW);
digitalWrite(11, HIGH);
}
void leftBackward(void){
digitalWrite(12, HIGH);
digitalWrite(7, LOW);
}
void accelerate(){
analogWrite(MotorR, 0);
analogWrite(MotorL, 0);
for(int i = 0; i < maxspeed; i += 10){
analogWrite(MotorR, i);
analogWrite(MotorL, i);
delay(40);
}
analogWrite(MotorR, maxspeed);
analogWrite(MotorL, maxspeed);
delay(40);
}
void slowdown(){
for(int i = maxspeed; i > 0; i -= 10){
analogWrite(MotorR, i);
analogWrite(MotorL, i);
delay(40);
}
analogWrite(MotorR, 0);
analogWrite(MotorL, 0);
}
void setup(){
Serial.begin(9600);
// right motor
pinMode(8, OUTPUT); // 1A
pinMode(11, OUTPUT); // 1B
pinMode(MotorR, OUTPUT); // PWM
// left Motor
pinMode(MotorL, OUTPUT); // PWM
pinMode(12, OUTPUT); // 2A
pinMode(7, OUTPUT); // 2B
servo.attach(6);
servo.write(80);
}
void loop(){
int incomingByte = 0;
if(Serial.available() > 0){
incomingByte = Serial.read();
}
if(incomingByte == 102){
rightForward();
leftForward();
accelerate();
}
if(incomingByte == 98){
rightBackward();
leftBackward();
accelerate();
}
if(incomingByte == 108){
rightForward();
leftBackward();
accelerate();
}
if(incomingByte == 114){
rightBackward();
leftForward();
accelerate();
}
if(incomingByte == 100){
slowdown();
}
if(incomingByte == 76){
servo.write(170);
}
if(incomingByte == 77){
servo.write(80);
}
if(incomingByte == 82){
servo.write(0);
}
delay(100);
getDistance();
Serial.println(distance, DEC);
}
Neste codigo aqui, quais é que sao os pins dos motores ?#include <Servo.h>
int maxspeed = 100;
#define MotorR 5
#define MotorL 3
int pause = 1000;
#define sensorpin 2
int duration;
int distance;
Servo servo;
void getDistance(){
pinMode(sensorpin, OUTPUT);
digitalWrite(sensorpin, LOW); // Make sure pin is low before sending a short high to trigger ranging
delayMicroseconds(2);
digitalWrite(sensorpin, HIGH); // Send a short 10 microsecond high burst on pin to start ranging
delayMicroseconds(10);
digitalWrite(sensorpin, LOW); // Send pin low again before waiting for pulse back in
pinMode(sensorpin, INPUT);
duration = pulseIn(sensorpin, HIGH); // Reads echo pulse in from SRF05 in micro seconds
distance = duration/58; // Dividing this by 58 gives us a distance in cm
}
void rightForward(void){
digitalWrite(8, HIGH);
digitalWrite(11, LOW);
}
void leftForward(void){
digitalWrite(12, LOW);
digitalWrite(7, HIGH);
}
void rightBackward(){
digitalWrite(8, LOW);
digitalWrite(11, HIGH);
}
void leftBackward(void){
digitalWrite(12, HIGH);
digitalWrite(7, LOW);
}
void accelerate(){
analogWrite(MotorR, 0);
analogWrite(MotorL, 0);
for(int i = 0; i < maxspeed; i += 10){
analogWrite(MotorR, i);
analogWrite(MotorL, i);
delay(40);
}
analogWrite(MotorR, maxspeed);
analogWrite(MotorL, maxspeed);
delay(40);
}
void slowdown(){
for(int i = maxspeed; i > 0; i -= 10){
analogWrite(MotorR, i);
analogWrite(MotorL, i);
delay(40);
}
analogWrite(MotorR, 0);
analogWrite(MotorL, 0);
}
void setup(){
Serial.begin(9600);
// right motor
pinMode(8, OUTPUT); // 1A
pinMode(11, OUTPUT); // 1B
pinMode(MotorR, OUTPUT); // PWM
// left Motor
pinMode(MotorL, OUTPUT); // PWM
pinMode(12, OUTPUT); // 2A
pinMode(7, OUTPUT); // 2B
servo.attach(6);
servo.write(90
);
}
void loop(){
int incomingByte = 0;
if(Serial.available() > 0){
incomingByte = Serial.read();
}
if(incomingByte == 102){
rightForward();
leftForward();
accelerate();
}
if(incomingByte == 98){
rightBackward();
leftBackward();
accelerate();
}
if(incomingByte == 108){
rightForward();
leftBackward();
accelerate();
}
if(incomingByte == 114){
rightBackward();
leftForward();
accelerate();
}
if(incomingByte == 100){
slowdown();
}
if(incomingByte == 76){
servo.write(170);
}
if(incomingByte == 77){
servo.write(80);
}
if(incomingByte == 82){
servo.write(0);
}
delay(100);
getDistance();
Serial.println(distance, DEC);
}
Só estás a uma ponte H de casa chip porque?
Isso é falta de uns condensadores de decoupling, que deve ser uma ruideira na alimentação que o arduino entra em modo de reset.
Comeco a ficar frustrado com isto... nao sei mais o que fazer...
já lhe meti os condesadores, segui tal e qual este esquema :
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2F3235658022_7f505922e3_o.jpg&hash=5f99cd56dd71c5c08e59056413014eccc9309434)
a unica diferenca é no pin 1 (enable) liguei ao pin 5 do arduino, e do outro CI liguei tb o pin 1 ao pin 3 do arduino, como diz o codigo, para ter o PWM.
Mas nada, o gajo continua a nao dar sinal de vida...
o servo, quando ligo o arduino via UBS, nada, quando ligo o arduino com uma pilha de 9 Volts o gajo gira ate aos 180 e fica ali, aquele LED amarelo que os arduinos tem que esta sempre acesso quando o servo gira e fica nos 180 quase que se apaga parece que esta ali algum curto circuito ou assim...
deixo aqui mais umas fotos de varios angulos da ponte H e as suas ligacoes, sei que é dificil de perceber mas vejam lá se descobrem algo de errado... é que mto sinceramente, ja nao sei mais o que fazer com isto...se tiverem alguma duvida de onde é que vai ligar onde perguntei que eu digo.
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0095.jpg&hash=d62ea42323a037f58f052b25916076a455ca6bd9) (https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0094.jpg&hash=13675668c2410e37b2660b2022ade792d338ed62) (https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0093.jpg&hash=964292a12b19e49d2a7261e026ebbf97f30ba0c2) (https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0089.jpg&hash=d90f59260e94946b42b035f1b81d7b0684a231eb) (https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0091.jpg&hash=059a624682f80c898b4a9debfedd8dc45d371209) (https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0090.jpg&hash=3afd8d5ef1bc5d98722d377f339afee0063d8a8f) (https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0092.jpg&hash=e9296248200a124a32dc3e72ee6fed48947673ef) (https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0088.jpg&hash=416144f41b9b029e9e8cd2867299ef842da47558) (https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0087.jpg&hash=bed240b484737d81122321e795ddf606336b6c48) (https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0087.jpg&hash=bed240b484737d81122321e795ddf606336b6c48) (https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi296.photobucket.com%2Falbums%2Fmm184%2FCrazyBony%2FIMAG0086.jpg&hash=3665bea5b317b1764063bd4e4a84dc09fb846845)
cumps
acho que nao tenho nenhem regulador de voltagem... estas a falar de que foto ?
void loop()
{
funcaosensor();
if(distancia > 10) // se esta tudo em ordem
{
frente(); // sempre em frente
}
else
{ // obstaculo a frente
para(); // Ele para, e vai girar o servo a
servo1(); // 180 graus, para a direita e
funcaosensor();// teste do sensor.
if(distancia > 10)// se a distancia for maior que 10 cm, portanto
{ //esta livre, vira a direita.
for( byte repete = 0; repete >= 3; repete++ )
{
direita();// vira a direita
delay(1000);
}
frente(); // ao fim de virar a direita durante 1s segue outra x sempre em frente...
servo.write(90); // alinha o servo em relacao ao robot
delay(100);