miércoles, 11 de septiembre de 2019

Implementación Proyecto Tecnológico Parte 2

Makeblock control remoto Bluetooth

Recuerde ubicar el modulo bluetooth correctamente en el mBot.




-Código

El código completo del control remoto se muestra a continuación.
recuerde que se utilizo la extensión "bluetooth controller" y una variable nombrada "potencia" para definir la velocidad del motor.




Para realizar el código en Arduino recuerde instalar la librería.


#include <MePS2.h>
#include <MeMCore.h>
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>

float Potencia = 0;

MePS2 MePS2(PORT_5);
MeDCMotor motor_9(9);
MeDCMotor motor_10(10);
void move(int direction, int speed) {
int leftSpeed = 0;
int rightSpeed = 0;
if(direction == 1) {
leftSpeed = speed;
rightSpeed = speed;
} else if(direction == 2) {
leftSpeed = -speed;
rightSpeed = -speed;
} else if(direction == 3) {
leftSpeed = -speed;
rightSpeed = speed;
} else if(direction == 4) {
leftSpeed = speed;
rightSpeed = -speed;
}
motor_9.run((9) == M1 ? -(leftSpeed) : (leftSpeed));
motor_10.run((10) == M1 ? -(rightSpeed) : (rightSpeed));
}


void _delay(float seconds) {
long endTime = millis() + seconds * 1000;
while(millis() < endTime) _loop();
}


void setup() {
MePS2.begin(115200);
Potencia = 100;
while(1) {
if(MePS2.ButtonPressed(11)){
Potencia = 255;


}
if(MePS2.ButtonPressed(10)){
Potencia = 191.25;


}
if(MePS2.ButtonPressed(12)){
Potencia = 127.5;


}
if(MePS2.ButtonPressed(9)){
Potencia = 63.75;


}
if((MePS2.ButtonPressed(18)) || (MePS2.ButtonPressed(20))){
motor_9.run(0);
motor_10.run(0);


}
if(((MePS2.MeAnalog(8) > 0) && (MePS2.MeAnalog(6) == 0.000000)) || ((MePS2.MeAnalog(4) > 0) && (MePS2.MeAnalog(2) == 0.000000))){
move(1, Potencia / 100.0 * 255);


}
if(((MePS2.MeAnalog(8) == 0.000000) && (MePS2.MeAnalog(6) > 0)) || ((MePS2.MeAnalog(4) == 0.000000) && (MePS2.MeAnalog(2) > 0))){
move(4, Potencia / 100.0 * 255);


}
if(((MePS2.MeAnalog(8) < 0) && (MePS2.MeAnalog(6) == 0.000000)) || ((MePS2.MeAnalog(4) < 0) && (MePS2.MeAnalog(2) == 0.000000))){
move(2, Potencia / 100.0 * 255);


}
if(((MePS2.MeAnalog(8) == 0.000000) && (MePS2.MeAnalog(6) < 0)) || ((MePS2.MeAnalog(4) == 0.000000) && (MePS2.MeAnalog(2) < 0))){
move(3, Potencia / 100.0 * 255);


}
if(MePS2.ButtonPressed(14)){
move(1, Potencia / 100.0 * 255);


}
if(MePS2.ButtonPressed(17)){
move(4, Potencia / 100.0 * 255);


}
if(MePS2.ButtonPressed(15)){
move(2, Potencia / 100.0 * 255);


}
if(MePS2.ButtonPressed(16)){
move(3, Potencia / 100.0 * 255);


}
if((MePS2.ButtonPressed(5)) && (MePS2.ButtonPressed(1))){
move(1, Potencia / 100.0 * 255);


}
if(MePS2.ButtonPressed(7)){
move(3, Potencia / 100.0 * 255);
_delay(0.1);
move(3, 0);


}
if(MePS2.ButtonPressed(3)){
move(4, Potencia / 100.0 * 255);
_delay(0.1);
move(4, 0);


}
if(MePS2.ButtonPressed(13)){
while(!(!(0)))
{
_loop();
}
if(Potencia == 255.000000){
Potencia = 255;


}else{
Potencia = (Potencia + 17);


}


}


_loop();
}


}


void _loop() {
MePS2.loop();
}


void loop() {
_loop();
}

Seguidor de linea y evasor de obstáculos

Recuerde conectar los sensores y darle la mejor ubicación para que cumpla correctamente con la función.

En este caso los sensores están ubicados en los puerto 2 y 4.
2 para el sensor de linea y 4 para el sensor de ultrasonido.


- Código
En el cogido creado se realizo un propio código de bloques para el seguidor de linea y utilizamos una variable nombrada "potencia" para definir la velocidad.

Para realizar el código en Arduino recuerde instalar la librería.


#include <MeMCore.h>
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>

float Potencia = 0;

MeLineFollower linefollower_2(2);
MeDCMotor motor_9(9);
MeDCMotor motor_10(10);
void move(int direction, int speed) {
int leftSpeed = 0;
int rightSpeed = 0;
if(direction == 1) {
leftSpeed = speed;
rightSpeed = speed;
} else if(direction == 2) {
leftSpeed = -speed;
rightSpeed = -speed;
} else if(direction == 3) {
leftSpeed = -speed;
rightSpeed = speed;
} else if(direction == 4) {
leftSpeed = speed;
rightSpeed = -speed;
}
motor_9.run((9) == M1 ? -(leftSpeed) : (leftSpeed));
motor_10.run((10) == M1 ? -(rightSpeed) : (rightSpeed));
}
void Linea (){
if(((1 ? (2 == 0 ? linefollower_2.readSensors() == 0 :
(linefollower_2.readSensors() & 2) == 2) :
(2 == 0 ? linefollower_2.readSensors() == 3 :
(linefollower_2.readSensors() & 2) == 0))) && ((1 ? (1 == 0 ? linefollower_2.readSensors() == 0 :
(linefollower_2.readSensors() & 1) == 1) :
(1 == 0 ? linefollower_2.readSensors() == 3 :
(linefollower_2.readSensors() & 1) == 0)))){
move(1, Potencia / 100.0 * 255);

}else{
if((1 ? (2 == 0 ? linefollower_2.readSensors() == 0 :
(linefollower_2.readSensors() & 2) == 2) :
(2 == 0 ? linefollower_2.readSensors() == 3 :
(linefollower_2.readSensors() & 2) == 0))){
move(3, Potencia / 100.0 * 255);

}else{
if((1 ? (1 == 0 ? linefollower_2.readSensors() == 0 :
(linefollower_2.readSensors() & 1) == 1) :
(1 == 0 ? linefollower_2.readSensors() == 3 :
(linefollower_2.readSensors() & 1) == 0))){
move(4, Potencia / 100.0 * 255);

}else{
move(1, 50 / 100.0 * 255);
_delay(0.5);
move(1, 0);

}

}

}

}

MeUltrasonicSensor ultrasonic_4(4);

void _delay(float seconds) {
long endTime = millis() + seconds * 1000;
while(millis() < endTime) _loop();
}

void setup() {
pinMode(A7, INPUT);

Potencia = 150;
while(!((0 ^ (analogRead(A7) > 10 ? 0 : 1))))
{
_loop();
}
while(!((1 ^ (analogRead(A7) > 10 ? 0 : 1))))
{
_loop();
}
while(1) {
if(ultrasonic_4.distanceCm() < 10){
move(3, 50 / 100.0 * 255);
_delay(0.25);
move(3, 0);
move(1, 50 / 100.0 * 255);
_delay(0.5);
move(1, 0);
move(1, 50 / 100.0 * 255);
_delay(0.5);
move(1, 0);
move(4, 50 / 100.0 * 255);
_delay(0.25);
move(4, 0);
move(1, 50 / 100.0 * 255);
while(!((((1 ? (2 == 0 ? linefollower_2.readSensors() == 0 :
(linefollower_2.readSensors() & 2) == 2) :
(2 == 0 ? linefollower_2.readSensors() == 3 :
(linefollower_2.readSensors() & 2) == 0))) && ((1 ? (1 == 0 ? linefollower_2.readSensors() == 0 :
(linefollower_2.readSensors() & 1) == 1) :
(1 == 0 ? linefollower_2.readSensors() == 3 :
(linefollower_2.readSensors() & 1) == 0)))) || ((((1 ? (2 == 0 ? linefollower_2.readSensors() == 0 :
(linefollower_2.readSensors() & 2) == 2) :
(2 == 0 ? linefollower_2.readSensors() == 3 :
(linefollower_2.readSensors() & 2) == 0))) && ((0 ? (1 == 0 ? linefollower_2.readSensors() == 0 :
(linefollower_2.readSensors() & 1) == 1) :
(1 == 0 ? linefollower_2.readSensors() == 3 :
(linefollower_2.readSensors() & 1) == 0)))) || (((0 ? (2 == 0 ? linefollower_2.readSensors() == 0 :
(linefollower_2.readSensors() & 2) == 2) :
(2 == 0 ? linefollower_2.readSensors() == 3 :
(linefollower_2.readSensors() & 2) == 0))) && ((1 ? (1 == 0 ? linefollower_2.readSensors() == 0 :
(linefollower_2.readSensors() & 1) == 1) :
(1 == 0 ? linefollower_2.readSensors() == 3 :
(linefollower_2.readSensors() & 1) == 0)))))))
{
_loop();
}
move(4, 50 / 100.0 * 255);
_delay(0.25);
move(4, 0);

}else{
Linea();

}

_loop();
}

}

void _loop() {
}


domingo, 8 de septiembre de 2019

Implementación Proyecto Tecnológico Parte 1

Montaje

El ensamble del robot mBot es muy simple, los sensores tienen un color respectivo que indica a que puerto se conecta en la placa de programable y los motores también tienen su respectivo puerto, así como lo indica el diagrama.
En el caso del robot que se esta utilizando, se tiene conectado el sensor de linea al puerto 2 y el sensor de ultrasonido al puerto 3, los motores respectivos y una batería lipo.


La primera programación que se realizo es para seguidor de linea, asi como lo muestra el video.



La programación es muy sencilla y se realizo en mBlock 5.0, utiliza la variable potencia y esta es la primera programación, que sirve de base para implementar otras ordenes:



jueves, 5 de septiembre de 2019

Makeblock control remoto Bluetooth




Material:ABS
Versión de Bluetooth:4.0+
Distancia de transferencia:20m
Corriente de trabajo: ≤25mA
Potencia de emision:4dBm
Data transmission:≤100ms
Baterias: 2 AA


Para que funcione el control, se debe ubicar en la placa del robot mBot el modulo bluetooth.



Para programar el control remoto se utilizo mBlock 5 y se instalo la extensión Bluetooth controller.


  • Programación de los botones 

Para programar los botones señalados con los avalos azules, utilizaremos el bloque que asigna el nombre del botón que se desee utilizar:









Por ejemplo asignamos los botones en "t" (←↑→↓) para dirección, los botones de números para velocidades, el botón ⇛ para detener y el botón "+" para aumentar velocidades en 50%. También se asigna la velocidad con una variable llamada "potencia", que se puede crear en los bloques variables. 



  • Programación de los joystick

Se debe utilizar el bloque que asigna la dirección del joystick en X y Y dependiendo si es el derecho que se designa con una "L" o el izquierdo que se designa con una "R".



Por ejemplo se asignan las direcciones de los dos joystick para que avance si "Y" es mayor a 0 y "X" es igual a 0, para que avance si "Y" es menor a 0 y "X" es igual a 0, para que gire hacia la derecha si "Y" es igual a 0 y "X" mayor a 0 y para que gire a la izquierda si "Y" es igual a 0 y "X" menor a 0. Se sigue utilizando la variable "potencia"




Nota: Recuerde que la potencia máxima de los motores es de 255.


Para calcular los valores del joystick debe realizar un programa básico en el software de Arduino instalando las librerías correspondientes, luego con ayuda del monitor serial se leen y asignan los valores correspondientes. En este caso se utilizo el siguiente programa.