Crea y controla tu propia pinza robotica

en: Bionic Makers

Dificultad:

Intermedio

Plataforma:

Arduino

Categoria:

Arduino

Favoritos:

favorite3

reportReportar

Descripción:

Pinza controlada con arduino mediante un sensor de presión resistivo y un acelerometro.

Licencia: Sin Licencia


Tags:

#MakerParty
#CPMX7
#JuanitoMaker

Componentes:

  • Servo Motor x 2
  • Arduino x 1
  • Sensor MMA8451 acelerometro x 1
  • Protoboard x 1
  • Sensor de presión resistivo x 1
  • Resistencias 330 ohms x 2
  • Prototipo de pinza simple x 1
  • Cables macho macho x 17
  • Arduino
  • Computadora x 1
  • Multimetro x 1

Paso 1:

  • HACER EL CONTROLADOR DE LOS SERVOMOTORES
  1. Se incluye la librería "servo.h" para poder controlar los servomotores.
  2. Se crean objetos de tipo servo, según el número de servomotores que vayan a controlarse.
  3. En la función void setup se definen los pines para el control de los servomotores.
  4. A lo largo de la función void loop es posible modificar la posición angular del servomotor mediante la función "nombreObjeto.write(angulo)", en éste caso sería: "myservo2.write(110)"


Código:

                                    
                                            /* 
 created 30 Jun 2016
 by Bionic Makers
 Campus Party 2016
*/

#include <Servo.h>

Servo myservo1;                                              // Creamos un objeto del tipo servo para controlar el servomotor 1
Servo myservo2;                                              //Creamos un objeto del tipo servo para controlar el servomotor 2

void setup() {
  myservo1.attach(9);                                           // Definimos el pin que controlará el servomotor 1
  myservo2.attach(10);                                          // Definimos el pin que controlará el servomotor 1
}

void loop() {
  myservo2.write(110);                               //Posicionamos el servomotor al ángulo especificado
}
                                    
                                

Paso 2:

LECTURA ANALÓGICA DEL SENSOR DE PRESIÓN RESISTIVO

  1. Definir el pin mediante el cual se realizara la lectura analógica, en éste caso es el "A0".
  2. Definir una variable donde se almacenara la lectura analógica del sensor.
  3. Definir una variable donde se almacenara el valor mapeado del sensor.
  4. En la función void loop se realiza la lectura del pin especificado mediante la función "analog.read(pin)"
  5. Se escala la lectura en bruto del sensor a un rango de valores entre 0 y 180, correspondientes a la posición angular del servomotor.
    Nota: En el código se trunco el rango de valores de 90 a 140 puesto que ese es el rango de acción de la pinza.
  6. Se varia la posición angular del servomotor (servomotor que controla apertura y cierre de la pinza) de acuerdo al valor previamente escalado.

Código:

                                    
                                            /* 
 created 30 Jun 2016
 by Bionic Makers
 Campus Party 2016
*/

#include <Servo.h>


Servo myservo1;                                              // Creamos un objeto del tipo servo para controlar el servomotor 1
Servo myservo2;                                              //Creamos un objeto del tipo servo para controlar el servomotor 2

const int analogInPin = A0;                                    // Entrada analógica a la cual se conectara el sensor de presión
int sensorValue = 0;                                           // Variable que almacena de valor leido del sensor de presión resistivo
int outputValue2;                                              // Variable que almacenará el valor mapeado para el posicionamiento de servo 2


void setup() {
  myservo1.attach(9);                                           // Definimos el pin que controlará el servomotor 1
  myservo2.attach(10);                                          // Definimos el pin que controlará el servomotor 1
}

void loop() {
    sensorValue = analogRead(analogInPin);                      //Leemos el sensor de presión resistivo
    outputValue = map(sensorValue1, 0, 1023, 170, 90);          //Mapeamos el valor del sensor a un valor correspondiente de ángulo de posición del servomotor
    myservo2.write(outputValue2);                               //Posicionamos el servomotor al ángulo mapeado

  delay (50);
}
                                    
                                

Paso 3:

CONTROL DE LA INCLINACIÓN DE LA PINZA MEDIANTE UN ACELEROMETRO

  1. Incluir e instalar las librerias "<Wire.h>","<Adafruit_MMA8451.h>" y "<Adafruit_Sensor.h>".
  2. Crear un objeto para el acelerometro con el comando "Adafruit_MMA8451 nombreObjeto = Adafruit_MMA8451()".
  3. En la función void setup inicializar el acelerometro con el comando "nombreObjeto.begin()".
  4. Realizar una lectura del acelerometro con la función "nombreObjeto.read()". Para leer individualmente cada eje del acelerometro se emplea la función "nombreObjeto.eje"
    Nota: Cada vez que se realice una nueva lectura de cualquier eje debe invocarse la función "nombreObjeto.read()".
  5. Se mapea el valor leído del sensor a un valor en posición angular con la función "map(nombreObjeto.eje,0,1023,170,90)".
  6. Se posiciona el servo con la función "nombreObjeto.write(angulo)"
    Nota: El nombreObjeto es el del segundo servomotor.



Código:

                                    
                                            /*
  created 30 Jun 2016
  by Bionic Makers
  Campus Party 2016
*/
#include <Wire.h>
#include <Servo.h>
#include <Adafruit_MMA8451.h>
#include <Adafruit_Sensor.h>



Servo myservo1;                                              // Creamos un objeto del tipo servo para controlar el servomotor 1
Servo myservo2;                                              //Creamos un objeto del tipo servo para controlar el servomotor 2
int valor = 0;
const int analogInPin = A0;                                    // Entrada analógica a la cual se conectara el sensor de presión
int sensorValue = 0;                                           // Variable que almacena de valor leido del sensor de presión resistivo
int outputValue;                                              // Variable que almacenará el valor mapeado para el posicionamiento de servo 2
Adafruit_MMA8451 Accel = Adafruit_MMA8451();


void setup() {
  myservo1.attach(9);                                           // Definimos el pin que controlará el servomotor 1
  myservo2.attach(10);                                          // Definimos el pin que controlará el servomotor 1
                                                 //Taza de transmisión del bluetooth

  Serial.begin(9600);
  Accel.begin();
 
  if (! Accel.begin()) {
    Serial.println("Couldnt Start");
    while (1);
  }
  Serial.println("MMA8451 found!");

}

void loop() {
  sensorValue = analogRead(analogInPin);                      //Leemos el sensor de presión resistivo
  outputValue = map(sensorValue, 0, 1023, 170, 90);          //Mapeamos el valor del sensor a un valor correspondiente de ángulo de posición del servomotor
  
  myservo2.write(outputValue);                               //Posicionamos el servomotor al ángulo mapeado
                                  
  

  delay (50);

  Accel.read();
  delay(50);
  if(Accel.y < 0)
  {
    myservo1.write(0);
    valor=0;
  } else
  valor = map(Accel.y,0,1023,170,90);
  myservo1.write(valor);
  
 
 
  delay(50);
}
                                    
                                

Comentarios:

  • ViriCruz ViriCruz

    muy claro el código y que bueno que pusieron imagenes del circuito. Se ve que si lo puedo realizar con la ayuda de este tutorial. Gracias chavos :)!

    01/07/2016

mode_edit