Archivos de la categoría Arduino

Taller de robótica en la F11

Ayer estuve en el taller de robótica de Reset (clase F11) y estuve probando algunas cosas.

La primera fue desarrollar la oruga de Obijuan. Como todavía no tengo la impresora disponible, hice los módulos con plantillas y la Dremel.

Estas son las fotos del desarrollo. Las plantillas como siempre están colocadas en el Thingiverse:

La plancha de PVC a mecanizar
Colocando las plantillas
Plantillas ya hechas

Colocados los servos

Después de ponerles los servos, probé a ponerles un programa siempre:

#include

Servo myservo; // crea un objeto tipo servo para controlar el servo
Servo myservo2; // crea un objeto tipo servo para controlar el servo
int pos = 90; // variable para almacenar la posición del servo
int pos2 = 90;
Servo myservo3;
int pos3 = 90;// crea un objeto tipo servo para co// crea un objeto tipo servo para co// variable para almacenar la posición del servo
void setup()
{
myservo.attach(9); // liga el servo conectado en el pin 9 al objeto servo
myservo2.attach(6);
myservo2.attach(10); // liga el servo conectado en el pin 6 al objeto servo
}

void loop()
{
pos2=180/2;
for(pos = 0; pos < 180; pos += 1) // va de 0 a 180 grados { // en pasos de 1 grado myservo.write(pos); pos2 -= 1; myservo2.write(pos2/2); // dice al servo que se posicione en la posición indicada por la variable ‘pos’ delay(15); myservo.write(pos);// espera 15 ms para dar tiempo al servo a llegar a la nueva posición } pos2=90; for(pos = 180; pos>=1; pos-=1) // va de 180 a 0 grados
{
myservo.write(pos);
pos2 += 1;
myservo2.write(pos2/2); // dice al servo que se posicione en la posición indicada por la variable ‘pos’
delay(15);
myservo3.write(pos);// espera 15 ms para dar tiempo al servo a llegar a la nueva posición
}
pos3=90;
for(pos = 180; pos>=1; pos-=1) // va de 180 a 0 grados
{
myservo.write(pos);
pos2 += 1;
myservo2.write(pos2/2); // dice al servo que se posicione en la posición indicada por la variable ‘pos’
delay(15);
myservo3.write(pos);// espera 15 ms para dar tiempo al servo a llegar a la nueva posición
}

}

Tiene fallos de montaje, pero los corregiré cuando Obijuan suba las librerías de las orugas, ya que con dichas librerías sí que podré simular el movimiento perfectamente.

Por otra parte, estuve ayudando al control de servos continuos, con el que ya tenía cierta experiencia, como comenté en la entrada anterior. He hecho un programa muy simple para control de un servo continuo:

#include

Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created

int pos = 0; // variable to store the servo position

void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop()
{

pos=0;
myservo.write(pos);
delay(1000);
pos=180;
myservo.write(pos);
delay(1000);
pos=94;
myservo.write(pos);
delay(1000);

}

Vamos ahora con otro experimento: los Legos MindStorms. Mi experiencia fue muy buena, y aunque yo jamás tuve Legos de chico, fue muy fácil de aprender a dominar su manejo. Dejo un video de un robot que hice, aunque espero en el futuro hacer una entrada sobre ello:

Entrega 1 de Cilindrín: Pruebas con sensores, servos y placa


Ayer terminé de circuitear el Cilindrín, el cual se presentará como modelo de ejemplo en el Cybertech. Esta entrada formará parte de su documentación.

Prueba de sensores

Estuve probando los diferentes sensores y estos fueron los resultados:

Programa de prueba:

#define inPin 1
int value = 0; /
void setup()
{
Serial.begin(9600);
pinMode(inPin, INPUT);
}
void loop()
{
value = analogRead(inPin);
Serial.println(value);
delay (500);
}

Finales de carrera (End-Stops): Las pruebas con los sensores se hicieron con el esquema que viene en los talleres, pero debe ser al revés cuando es la entrada es digital.

LDRs: Mismo esquema que en el anterior pero cambiando el final de carrera por el LDR. Solo 200 puntos de diferencia en la entrada analógica, lo que indica mucha sensibilidad.

Potenciómetro: Igual que LDRs, pero con total recorrido de puntos en la entrada para un potenciómetro de 4K7.


Sensores de distancia y fotodetectores.

Esquema

En el sensor analógico el valor máximo es 650


El sensor digital presenta un led rojo.
Array optodetectores (digital)

Con componentes básicos: fotodiodo y fototransistor

El fototransistor pasa de no conducir a 20 k (haría falta un transistor para amplificar). Conectado directamente es 60 puntos de diferencia.
Funciona igual reflejando en superficies blancas
Para puentear, habría que amplificar con transistor. Mejor utilizar el integrado 4n37

Foto del montaje


Receptor ir preparado:

Parece que da el valor en digital.

Esquema

http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
Hay que realizar una modificación para las versiones modernas (viene al principio de la página)
El que mejor va es el ejemplo irreceiverdump.

Controlo de servo continuo (trucado o no)

Los diferentes valores dan diferentes velocidades y sentidos de giro:
Pos=0, sentido antihorario
Pos=180, sentido horario
Siempre hay una posición que bloquea las ruedas, en nuestro caso es 94
No hemos podido alimentar la placa de potencia con el microcontrolador.
Ejemplo práctico a modificar para placa de control:

int inpuA = 2; // define function INTPUT 1 (IC2)
int inpuB = 12; // define function INTPUT 2 (IC2)
int inpuC = 8; // define function INTPUT 3 (IC2)
int inpuD = 7; // define function INTPUT 4 (IC2)
int pwm1 = 11; // define function ENABLE A (IC2)
int pwm2 = 10; // define function ENABLE A (IC2)
void setup()
{
pinMode (inpuA, OUTPUT); // definir la pa