En este proyecto, lo que hemos tratado de conseguir es el control de este brazo robótico intentando controlar los 6 motores por los que está compuesto y hacerles girar tanto en un sentido como en otro.
Para ello hemos diseñado una placa compuesta principalmente por 3 integrados para poder controlar el giro de los motores: L293DNE (puente en H).
Aparte le hemos colocado unos pulsadores a esta placa para poder moverlos tambien desde ahí. Con cada integrado conseguimos mover y alimentar dos motores,los cuales los alimentaremos a 9V de corriente continua (podemos alimentarlos hasta 12V sin problema ya que este integrado aguanta hasta 36V y más de 1A de intensidad), tambien podemos destacar que cada motor viene con un final de carrera incorporado.
Finales de carrera : Circuito integrado L293DNE
Aparte de controlar el movimiento con pulsadores gracias a nuestro Arduino con un programa que más abajo veremos, hemos creado un programma de Processing y una aplicación en App Inventor para Android.
- Para planificar este proyecto y organizarnos paso a paso he utilizado este Granttproyect:
Componentes utilizados para el diseño de la placa:
- Intedragos L293DNE (3).
- Pulsodres de dos patillas (12).
- Condensadores 100 nanos para los integrados (3).
- Diodos 1N4007 (24).
- Resistencias SMD 5k6 (12).
- Bornas de conexión pcb, 2 pines (12) y de 3 pines (6).
- Pines hembra y macho.
- DISEÑO DE NUESTRA PLACA EN ISIS Y EN ARES:
- Una vez terminado todo este proceso creamos la placa de pruebas en ácido, realizamos los taladros y empezamos a soldar componentes y resistencias smd y así nos quedo:
TODO ESTO HA SIDO CONTROLADO POR DOS MICROCONTROLADORES DE ARDUINO, ARDUINO UNO Y ARDUINO MEGA (para pulsadores).
1. PULSADORES
- PROGRAMA :
int motor6;
int motor5;
int motor5;
int btnRight = 2; // pulsadores
int btnLeft = 4;
int btnalante = 5;
int btnatras = 6;
int btnLeft = 4;
int btnalante = 5;
int btnatras = 6;
int Right = 8;
int Left = 9;
int alante = 12;
int atras = 11;
int Left = 9;
int alante = 12;
int atras = 11;
int buttonRight;
int buttonLeft;
int buttonalante;
int buttonatras;
int buttonLeft;
int buttonalante;
int buttonatras;
void setup(){
pinMode (btnRight, INPUT);
pinMode (btnLeft, INPUT);
pinMode (Right, OUTPUT);
pinMode (Left, OUTPUT);
pinMode (btnalante, INPUT);
pinMode (btnatras, INPUT);
pinMode (alante, OUTPUT);
pinMode (atras, OUTPUT);
pinMode (btnRight, INPUT);
pinMode (btnLeft, INPUT);
pinMode (Right, OUTPUT);
pinMode (Left, OUTPUT);
pinMode (btnalante, INPUT);
pinMode (btnatras, INPUT);
pinMode (alante, OUTPUT);
pinMode (atras, OUTPUT);
}
void loop(){
buttonRight = digitalRead(btnRight);
buttonLeft = digitalRead(btnLeft);
if (buttonRight == HIGH){
digitalWrite(Right, HIGH);
}
else if (buttonLeft == LOW){
digitalWrite(Left, HIGH);
}
else{
digitalWrite(Right, LOW);
digitalWrite(Left, LOW);
}
buttonalante = digitalRead(btnalante);
buttonatras = digitalRead(btnatras);
if (buttonalante == HIGH){
digitalWrite(alante, HIGH);
}
else if (buttonatras == LOW){
digitalWrite(atras, HIGH);
}
else{
digitalWrite(alante, LOW);
digitalWrite(atras, LOW);
}
buttonRight = digitalRead(btnRight);
buttonLeft = digitalRead(btnLeft);
if (buttonRight == HIGH){
digitalWrite(Right, HIGH);
}
else if (buttonLeft == LOW){
digitalWrite(Left, HIGH);
}
else{
digitalWrite(Right, LOW);
digitalWrite(Left, LOW);
}
buttonalante = digitalRead(btnalante);
buttonatras = digitalRead(btnatras);
if (buttonalante == HIGH){
digitalWrite(alante, HIGH);
}
else if (buttonatras == LOW){
digitalWrite(atras, HIGH);
}
else{
digitalWrite(alante, LOW);
digitalWrite(atras, LOW);
}
delay(500); // retardo 0.5 segundo
}
2. PROCESSING Y APP INVENTOR
PROCESSING:
import cc.arduino.*;
import processing.serial.*;
Serial myPort;
int Izquierda = 2;
int Derecha = 3;
int Alante = 4;
int Atras = 5;
Arduino arduino;
void setup ()
{
size(600, 300); // TAMAÑO DEL CUADRO DE MANDOS
println(Serial.list());
String portName = Serial.list()[0];
myPort=new Serial(this, portName,9600);
myPort.buffer(1);
}
void draw (){
if (mousePressed == true){
if(mouseX < 300 && mouseY < 50){
fill(250,45,23);
rect(0,0,300,50);
}
else{
if (mouseX > 300 && mouseY < 50){
fill(33,250,23); // COLORES
rect(300,0,600,50);
}
}
}
if (mousePressed == true){
if(mouseX < 300 && mouseY > 50 && mouseY < 100){
fill(34,227,154);
rect(0,50,300,50);
}
else{
if(mouseX > 300 && mouseY > 50 && mouseY < 100){
fill(240,204,73);
rect(300,50,600,50);
}
}
}
textSize(20);
fill(0);
text("IZQUIERDA", 75,25,150,200); // texto y cordenadas para que aparezca en su casilla correspondiente
text("DERECHA", 400,25,500,100);
text("ALANTE", 75,75,150,300);
text("ATRAS", 400,75,500,400);
}
}
void mousePressed(){
if(mouseX > 0 && mouseX < 300 && mouseY > 0 && mouseY < 50){
myPort.write('q');
}
if(mouseX > 300 && mouseX < 600 && mouseY > 0 && mouseY < 50){
myPort.write('a');
}
if(mouseX > 0 && mouseX < 300 && mouseY > 50 && mouseY < 100){
myPort.write('w');
}
if(mouseX > 300 && mouseX < 600 && mouseY > 50 && mouseY < 100){
myPort.write('s');
}
}
void mouseReleased(){
println("Released");
if(mouseX > 0 && mouseX < 300 && mouseY > 0 && mouseY < 50){
myPort.write('o');
}
if(mouseX > 300 && mouseX < 600 && mouseY > 0 && mouseY < 50){
myPort.write('o');
}
if(mouseX > 0 && mouseX < 300 && mouseY > 50 && mouseY < 100){
myPort.write('o');
}
if(mouseX > 300 && mouseX < 600 && mouseY > 50 && mouseY < 100){
myPort.write('o');
}
}
RESULTADO :
VIDEO DEMOSTRATIVO:
https://www.youtube.com/watch?v=zxNLURThqe4
APP INVENTOR PARA ANDROID :
Para este proceso hemos usado un modulo bluetooh para arduino, el cual conectamos asi:
Cogemos RX y TX de arduino y los cruzamos con TX y RX del bluetooh y ya alimentamos con 5V y GND.
VIDEO DEMOSTRATIVO DE LA APLICACIÓN CONECTADA MEDIANTE BLUETOOH:
https://www.youtube.com/watch?v=d_plIIJ2_4Q
POR ÚLTIMO EL PROGRAMA UTILIZADO PARA AMBRAS COSAS (bluetooh y processing):
int motorDerecha = 2; // pin 2 de L293 va a girar a derecha
int motorIzquierda = 3; // pin 7 de L293 va a girar a izquierda
int motorAlante = 4;
int motorAtras = 5;
void setup() { // declaramos los pines de salida
pinMode(motorDerecha, OUTPUT);
pinMode(motorIzquierda, OUTPUT);
pinMode(motorAlante, OUTPUT);
pinMode(motorAtras, OUTPUT);
Serial.begin(9600);
}
char letras;
void loop() {
letras = 'z';
if(Serial.available() > 0){
letras = Serial.read();
flag=0;
}
if (letras == 'o') {
digitalWrite(motorDerecha, LOW); // ponemos el pin 2 del L293 bajo
digitalWrite(motorIzquierda, LOW); // ponemos el pin 7 de L293 en bajo tb, para que pare cuando pulsemos 0.
digitalWrite(motorAlante, LOW);
digitalWrite(motorAtras, LOW);
if(flag == 0){
Serial.println("Motor: off");
flag=1;
}
}
else if (letras == 'q') {
digitalWrite(motorDerecha, LOW); // pin 2 de L293 en bajo
digitalWrite(motorIzquierda, HIGH); // pin 7 de L293 en alto
if(flag == 0){
Serial.println("Motor: Derecha");
flag=1;
}
}
else if (letras == 'a') {
digitalWrite(motorDerecha, HIGH); // pin 2 de L293 en alto
digitalWrite(motorIzquierda, LOW); // pin 7 de L293 en bajo
if(flag == 0){
Serial.println("Motor: Izquierda");
flag=1;
}
}
else if (letras == 'w') {
digitalWrite(motorAlante, HIGH); // pin 10 de L293 en alto
digitalWrite(motorAtras, LOW); // pin 15 de L293 en bajo
if(flag == 0){
Serial.println("Motor: Alante");
flag=1;
}
}
else if (letras == 's') {
digitalWrite(motorAtras, HIGH); // pin 10 de L293 en alto
digitalWrite(motorAlante, LOW); // pin 15 de L293 en bajo
if(flag == 0){
Serial.println("Motor: Atras");
flag=1;
}
}
}
- DIARGRAMA DE ESTADO:
ARES:
ARDUINO QUE INCORPORA:
PLACA FINAL:
VIDEOS DEMOSTRATIVOS CON ESTA PLACA FINAL:
No hay comentarios:
Publicar un comentario