Brazo robótico que se mueve de forma automática cada x segundos (programable) y también permite accionarlo de forma manual para calibrar su posición.
Video
https://www.youtube.com/watch?v=fBL2MIFbImQ
Fotos



Temporizador

Dispositivo con el temporizador apagado (muestra un “0”) en este modo sólo podrá mover el brazo de forma manual (pulsando botón derecho)


Temporizador activado (pulsando botón Izquierdo). Se puede incrementar el tiempo de 10 en 10 segundos hasta 60, y si bajamos de 10s tendremos un rango de 1 a 10 segundos. (accionándolo con los botones arriba y abajo)

Botones de accionamiento y programación
Código fuente Arduino
#include <Makeblock.h>
#include <Arduino.>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <Servo.h>
MePort port(PORT_6); // Adaptador RJ25
Me4Button btn(PORT_7); // Botones
Me7SegmentDisplay disp(PORT_3); // Display de 7 segmentos
Servo myservo1;
int servo1pin = port.pin1(); // Servo en slot1 del adaptador
int speed = 10.5; //- tiempo entre accionamientos
int onoff= 0;
unsigned long tiempo = 0;
void setup()
{
myservo1.attach(servo1pin);
myservo1.write(15);
Serial.begin(9600);
//- inicializar display
disp.init();
disp.set(BRIGHT_TYPICAL);
disp.display(0, 0); //- temporizador apagado inicialmente
}
void loop()
{
switch(btn.pressed()) // check del botón presionado
{
case KEY1:
Serial.println("Velocidad -");
//- disminuir tiempo entre movimientos
if(speed<=10) speed--;
if(speed>10) speed-=10;
if(speed<=0) speed = 1;
mostar_tiempo();
break;
case KEY2:
//- apagado / encendido
Serial.println("On/Off");
onoff=!onoff;
if(onoff){
disp.display(0x00,0x7f);
}else{
disp.clearDisplay();
disp.display(0, 0);
}
mostar_tiempo();
break;
case KEY3:
//- incremento de la velocidad o tiempo entre accionamientos
Serial.println("Velocidad +");
if(speed>=10) speed+=10;
if(speed<10) speed+=1;
if(speed>60)speed=60;
mostar_tiempo();
break;
case KEY4:
//- modo manual
Serial.println("Test1");
bajar_brazo();
break;
}
delay(10);
//- Si esté en ON ejectutar temporizador programado
if(onoff){
if(tiempo==0) tiempo = millis();
if( millis()-tiempo >= speed*1000){
Serial.println("Tiempo: ");
Serial.println(tiempo);
Serial.println(millis());
Serial.println( millis()-tiempo );
bajar_brazo();
tiempo=millis();
}
}
}
void bajar_brazo(){
Serial.println("Brazo");
myservo1.write(0); //- Bajo brazo
delay(250);
myservo1.write(15); //- Subo brazo
}
void mostar_tiempo(){
if(!onoff) return;
if(speed>=10){
disp.display(2, speed/10);
disp.display(3, 0);
}else{
disp.display(0x02,0x7f);
disp.display(3, speed);
}
}
Brazo robótico que se mueve de forma automática cada x segundos (programable) y también permite accionarlo de forma manual para calibrar su posición.
Video
------------------
https://www.youtube.com/watch?v=fBL2MIFbImQ
Fotos
------------------



### Temporizador

Dispositivo con el temporizador apagado (muestra un “0”) en este modo sólo podrá mover el brazo de forma manual (pulsando botón derecho)


Temporizador activado (pulsando botón Izquierdo). Se puede incrementar el tiempo de 10 en 10 segundos hasta 60, y si bajamos de 10s tendremos un rango de 1 a 10 segundos. (accionándolo con los botones arriba y abajo)

Botones de accionamiento y programación
Código fuente Arduino
------------------
````
#include <Makeblock.h>
#include <Arduino.>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <Servo.h>
MePort port(PORT_6); // Adaptador RJ25
Me4Button btn(PORT_7); // Botones
Me7SegmentDisplay disp(PORT_3); // Display de 7 segmentos
Servo myservo1;
int servo1pin = port.pin1(); // Servo en slot1 del adaptador
int speed = 10.5; //- tiempo entre accionamientos
int onoff= 0;
unsigned long tiempo = 0;
void setup()
{
myservo1.attach(servo1pin);
myservo1.write(15);
Serial.begin(9600);
//- inicializar display
disp.init();
disp.set(BRIGHT_TYPICAL);
disp.display(0, 0); //- temporizador apagado inicialmente
}
void loop()
{
switch(btn.pressed()) // check del botón presionado
{
case KEY1:
Serial.println("Velocidad -");
//- disminuir tiempo entre movimientos
if(speed<=10) speed--;
if(speed>10) speed-=10;
if(speed<=0) speed = 1;
mostar_tiempo();
break;
case KEY2:
//- apagado / encendido
Serial.println("On/Off");
onoff=!onoff;
if(onoff){
disp.display(0x00,0x7f);
}else{
disp.clearDisplay();
disp.display(0, 0);
}
mostar_tiempo();
break;
case KEY3:
//- incremento de la velocidad o tiempo entre accionamientos
Serial.println("Velocidad +");
if(speed>=10) speed+=10;
if(speed<10) speed+=1;
if(speed>60)speed=60;
mostar_tiempo();
break;
case KEY4:
//- modo manual
Serial.println("Test1");
bajar_brazo();
break;
}
delay(10);
//- Si esté en ON ejectutar temporizador programado
if(onoff){
if(tiempo==0) tiempo = millis();
if( millis()-tiempo >= speed*1000){
Serial.println("Tiempo: ");
Serial.println(tiempo);
Serial.println(millis());
Serial.println( millis()-tiempo );
bajar_brazo();
tiempo=millis();
}
}
}
void bajar_brazo(){
Serial.println("Brazo");
myservo1.write(0); //- Bajo brazo
delay(250);
myservo1.write(15); //- Subo brazo
}
void mostar_tiempo(){
if(!onoff) return;
if(speed>=10){
disp.display(2, speed/10);
disp.display(3, 0);
}else{
disp.display(0x02,0x7f);
disp.display(3, speed);
}
}
````
editado 25 Mar '16 a las 9:55 am