Go Down

Topic: .. (Read 1 time) previous topic - next topic

Luis_M

Apr 10, 2015, 04:33 am Last Edit: Apr 21, 2015, 10:20 am by Luis_M
      ..

surbyte

Hola Luis, un gusto que con 16 años estes haciendo estas cosas.
Buen futuro te espera con la robótica!!

Date una vuelta por las Normas del foro y mira como se deben insertar códigos, imágenes y enlaces.

Veamos tu problema: Tienes dos códigos, que funcionan bien según tus palabras.
Este  Programación arduino  (Ves como luce cuando usas tags es lo mismo que Programación arduino    goo.gl/AdjxIc), parece tener integrados servo y sensor ultrasónico.

Ya comprendo tu dilema pero lo que no has puesto es cual es la equivalencia entre tu segundo código y los movimientos del primero en ángulo.
especificamente, esto que pones en el loop del segundo
Code: [Select]
void loop(void)
{
  derecha(148);   //148
  izquierda(300);   //300
  derecha(400);    //400
  izquierda(500);    //500
  derecha(525);   //525
  izquierda(544);    //544
}


Como se corresponde con

Code: [Select]
miservo.write(0);
 miservo.write(180);
 miservo.write(90);


Espero haberte entendido bien.

Espero tu respuesta.

surbyte

Ahhh, ahora te comprendo.
Te agradezco por haber editado tu post#1, ahora luce mas claro para todos.

Como lo que necesitas es solo moverlo 0, 90 y 180, busca que cantidad de pulsos te dan esas posiciones.
Luego sera facil.


surbyte

Ahh dices que cada pulso son 7.5 grados? Ok

0 nada
90/7.5 = 12
180/7.5 = 24

Esta bien esto?

surbyte

No me quedan claras varias cosas.
No has explicado que quieres hacer con el segundo ultrasónico, ni que condición controla
Aca te pongo un borrador de lo que hasta ahroa entendí.
Tampoco se si debo poner izquierda o derecha para emular los movimientos de 90 y 180 grados.

Code: [Select]
//#include<Servo.h> 
#include<Ultrasonic.h> 

#define MA_1 8
#define MA_2 9
#define MB_1 10
#define MB_2 11

int estado;
int contador;
 
//declaramos un objeto ultrasonic de la la librería Ultrasonic para referirnos a ella. 
Ultrasonic ultrasonic(7,A0);     
Ultrasonic ultrasonic(6,A1);     
 
//declaramos un objeto miservo de la la libreria Servo para referirnos a ella. 
//Servo miservo;   
 
int Distancia1; 
int Distancia2;

void setup(){ 
 
    //definimos el pin2 para controlar el servo 
    //miservo.attach(3); 
 
    // coloca el servo en su posición central 
    //miservo.write(90);    //90

pinMode(MA_1,OUTPUT);
pinMode(MA_2,OUTPUT);
pinMode(MB_1,OUTPUT);
pinMode(MB_2,OUTPUT);
contador = 1;
estado = 1;

 
void loop(){ 
 
    //leemos el sensor de ultrasonidos y guardamos el valor en una variable 
    Distancia1 = ultrasonic.Ranging(CM); 
    Distancia2 = ultrasonic.Ranging(CM); 
 
    //si la Distancia1 es menor de 20... 
    if (Distancia1 <=20){    //<20
 
        //movemos el servo en una dirección 
        izquierda(0); 
        delay(500);  //500
 
        //movemos el servo en dirección opuesta 
        derecha(1000);
        delay(500);  //500
    }else{ 
 
        //si no hay nada, vamos mirando de frente 
        izquierda(500);    //90
    } 
 
    delay(500); 


void derecha(int pulso) {
  do  {
    delay(30); 
    switch(estado)  {
      case 1:
        digitalWrite(MA_1,HIGH);
        digitalWrite(MA_2,LOW);
        digitalWrite(MB_1,LOW);
        digitalWrite(MB_2,LOW);
        estado = 2;
      break;
      case 2:
        digitalWrite(MA_1,LOW);
        digitalWrite(MA_2,HIGH);
        digitalWrite(MB_1,LOW);
        digitalWrite(MB_2,LOW);
        estado = 3;
      break;
      case 3:
        digitalWrite(MA_1,LOW);
        digitalWrite(MA_2,LOW);
        digitalWrite(MB_1,HIGH);
        digitalWrite(MB_2,LOW);
        estado = 4;
      break;
      case 4:
        digitalWrite(MA_1,LOW);
        digitalWrite(MA_2,LOW);
        digitalWrite(MB_1,LOW);
        digitalWrite(MB_2,HIGH);
        estado = 1;
      break;
    }
  } while (++contador<=pulso);
}
 
 
 
void izquierda(int pulso) {
do  {
    delay(30); 
    switch(estado)    {
      case 1:
        digitalWrite(MA_1,HIGH);
        digitalWrite(MA_2,LOW);
        digitalWrite(MB_1,LOW);
        digitalWrite(MB_2,LOW);
        estado = 4;
      break;
      case 2:
        digitalWrite(MA_1,LOW);
        digitalWrite(MA_2,HIGH);
        digitalWrite(MB_1,LOW);
        digitalWrite(MB_2,LOW);
        estado = 1;
      break;
      case 3:
        digitalWrite(MA_1,LOW);
        digitalWrite(MA_2,LOW);
        digitalWrite(MB_1,HIGH);
        digitalWrite(MB_2,LOW);
        estado = 2;
      break;
      case 4:
        digitalWrite(MA_1,LOW);
        digitalWrite(MA_2,LOW);
        digitalWrite(MB_1,LOW);
        digitalWrite(MB_2,HIGH);
        estado = 3;
      break;
    }
} while(++contador<=pulso);
     
    digitalWrite(MA_1,LOW);
    digitalWrite(MA_2,LOW);
    digitalWrite(MB_1,LOW);
    digitalWrite(MB_2,LOW);
}

surbyte

Esta bien pero intenta clarificar más aún tu idea.. que valores harán que.
Lo que te postee sirve? funciona, no funciona.
Probaste los valores para ver si abre la puerta como deseas?

surbyte

esos errores que muestras, en la captura yo no alcanzo a verlos.
Intenta hacer un copiado y pegado y al ponerlos en el post debes  insertarlos como código.

Bien, o yo te malentiendo o no tienes claras algunas cosas.
Dos sensores ultarasónicos ? Debes definiri qeu hará cada uno.

SU1 (Sensor Ultrasónico 1) y SU2.
Dibuja un esquema y muestra para donde apunta uno y otro y que funciones deben cumplir cada cual.

Esto clarificará tus ideas y nos permitirá ayudarte.

Go Up