Skip to content

Commit

Permalink
Merge pull request #2 from clubroboticagranada/alfa
Browse files Browse the repository at this point in the history
0.20 Alfa a Master
  • Loading branch information
pedroruizf committed Oct 24, 2020
2 parents 841f6e2 + f7c0722 commit 96a2455
Show file tree
Hide file tree
Showing 19 changed files with 560 additions and 136 deletions.
134 changes: 129 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,28 @@
# Autoría
*Prudencio Luna* y *Pedro Ruiz*
*Prudencio Luna*, *Pedro Ruiz*

# Aportaciones
* *Antonio Gómez*
* *Jose Antonio Vacas*
* *Maribel Ruiz Martínez*

# Control de Versiones
- 0.20 (04/09/2020): sexta versión, puede controlar sensores como ultrasonidos e infrarrojos.
- 0.15 (16/04/2019): quinta versión, se puede mover los motores mediante procedimiento de medio paso (tipo 3) y se corrigen fallos en constructor con parámetros para elegir modos de paso.
- 0.14 (14/04/2019):cambio de nombre de procedimiento stop por Stop, se arregla procedimiento versión en .h, cambios en procedimiento pushButton, cambios en archivo de ejemplo. Limpieza de código.
- 0.13 (08/03/2017): se añade funciones driveD (mueve por distancia en cm) y turnA (gira por ángulos).
- 0.12 (28/02/2017): se cambia sentido de marcha, se facilita pasar parámetros con diccionario, se añade función ledState y traducciones varias. Se adecua archivo de ejemplo.
- 0.11 (19/11/2017): se añade procedimiento blueT(), para conocer el dato recibido por bluetooth.
- 0.1 (8/11/2017): primera versión del programa, incorpora control de motores paso a paso (avances, retrocesos, giros, parada), elección del tipo de excitación de bobinas, control de leds, zumbador y botonera.
# Librería para arduino Escornabot
Repositorio para albergar librería para manejar de forma amigable los motores paso a paso de Escornabot.
Repositorio para albergar librería para programar de forma amigable escornabot.

![](images/escornabot.jpg "escornabot")
## Antecedentes
Unos de los problemas de escornabot es la ausencia de instrucciones amigables en arduino para controlar sus elementos (motores paso a paso, botonera, leds y zumbador), todo ello pensando en el acercamiento del uso de dicho robot para estudiantes de secundaria. Por este motivo desde el club de Tecnología, programación y robótica de Granada nos planteamos desarrollar una librería para dicho fin.
Unos de los problemas de escornabot era la ausencia de instrucciones amigables en arduino para controlar sus elementos (motores paso a paso, botonera, leds y zumbador, e incluso la adición de sensores), todo ello pensando en el acercamiento del uso de dicho robot para estudiantes de secundaria. Por este motivo desde el Club de Robótica de Granada nos planteamos desarrollar una librería para dicho fin.
## Librería
La librería debemos cargar en arduino por los métodos tradicionales, incluyendo el zip o copiandola descomprimida en la carpeta "libraries" de arduino.
### procedimientos
### Procedimientos
- **objetoEscornabot.drive (vueltas, velocidad)**: Sirve para avanzar o retroceder. Se mueve el número de vueltas indicado, si son negativas va en el sentido contrario. La velocidad se da rpm
- **objetoEscornabot.driveD (distancia, velocidad)**: Igual que el anterior pero le pasamos la cantidad de cm que queremos que se mueva.
- **objetoEscornabot.turn (vueltas, velocidad)**: Sirve para girar. Se indica como antes el número de vueltas o fracción a girar, si son positivas gira en un sentido y negativas en el contrario. La velocidad se da en rpm.
Expand All @@ -33,8 +35,19 @@ La librería debemos cargar en arduino por los métodos tradicionales, incluyend
- **objetoEscornabot.buzzOFF ()**: apaga el zumbador.
- **objetoEscornabot.pushButton()**: devuelve el valor del botón pulsado o la posición en inglés. 1 o forward (delantero), 3 o backward (trasero), 4 o right (derecho), 2 o left (izquierdo), 5 o central (central).
- **objetoEscornabot.blueT()**: devuelve el valor numérico correspondiente a el carácter enviado por bluetooth a escornabot.
- **objetoEscornabot.infrared(pin izquierdo, pin derecho)**: configura los pines para los sensores izquierdo y derecho .
- **objetoEscornabot.blackRight()**: devuelve true si el sensor derecho infrarrojo está a negro, false cuando no está a negro.
- **objetoEscornabot.blackLeft()**: devuelve true si el sensor izquierdo infrarrojo está a negro, false cuando no está a negro.
- **objetoEscornabot.whiteRight()**: devuelve true si el sensor derecho infrarrojo está a blanco, false cuando no está a blanco.
- **objetoEscornabot.whiteLeft()**: devuelve true si el sensor izquierdo infrarrojo está a blanco, false cuando no está a blanco.
- **objetoEscornabot.us(pin trigger, pin echo)**: configura los pines trigger y echo de un sensor de ultrasonidos.
- **objetoEscornabot.distance()**: devuelve la distancia en cm a la que detecta un objeto el sensor de ultrasonidos definido previamente.
- **objetoEscornabot.buzzer( pin_zumbador)**: configura el pin al que se conecta el zumbador.
- **objetoEscornabot.tono(frecuencia, duración)**: emite un sonido en el zumbador configurado anteriormente, de una cierta frecuencia en Hz y duración en ms.
- **objetoEscornabot.version()**: nos devuelve la versión de la librería utilizada.

### Ejemplo de código de test

### Ejemplo test
~~~
#include <escornabot.h>
Expand Down Expand Up @@ -175,3 +188,114 @@ void invierteLed(int i) {
}
}
~~~

### Ejemplo us ###
~~~
#include <escornabot.h>
escornabot mirobot;
boolean funciona = false;
void setup() {
mirobot.us(11, 12); //configuramos los pines trigger y echo
}
void loop() {
compruebaBoton();
if (funciona == true) {
mirobot.driveD(-5, 10);
if (mirobot.distance() <= 15) {
mirobot.driveD (5, 10);
mirobot.turnA (-45, 10);
}
}
else if (funciona == false) {
mirobot.Stop();
}
}
void compruebaBoton () {
if (mirobot.pushButton() == right) {
funciona = !funciona;
delay (300);
}
}
~~~
### Ejemplo line follower
~~~
#include <escornabot.h>
escornabot miescorni;
boolean funciona = false;
void setup() {
miescorni.infrared(11,12);
}
void loop() {
compruebaBoton();
if (funciona == true) {
if (miescorni.blackRight() && miescorni.whiteLeft()) {//si sensor izquierdo encuentra blanco
miescorni.turnA(-5, 10);//gira hacia la derecha en el sentido contrario a la marcha
}
if (miescorni.whiteRight() && miescorni.blackLeft()) {//si sensor derecho encuentra blanco
miescorni.turnA(5, 10);//gira hacia la izquierda en el sentido contrario a la marcha
}
if (miescorni.blackRight() && miescorni.blackLeft()) {//si los dos sensores encuentran negro
miescorni.driveD(-2, 13);//se mueve hacia delante en el sentido contrario a la marcha
}
if (miescorni.whiteRight() && miescorni.whiteLeft()) {//si los dos sensores encuentran blanco
miescorni.driveD(2, 13);//se mueve hacia detrás en el sentido contrario a la marcha
}
}
else if (funciona == false) {
miescorni.Stop();
}
}
void compruebaBoton () {
if (miescorni.pushButton() == right) {
funciona = !funciona;
delay (300);
}
~~~
### Ejemplo buzzer
~~~
#include <escornabot.h>
escornabot miescorni;
void setup() {
miescorni.buzzer(10);
}
void loop() {
for (int x = 0; x < 1000; x = x + 100) {
miescorni.tono(x, 500);
}
for (int x = 1000; x >=0; x = x - 100) {
miescorni.tono(x, 500);
}
}
~~~
# Piezas para sensores

Os enlazo el repositorio [Piezas escornabot](https://github.com/plunax/Piezas-escornanbot) de @plunax (*Prudencio Luna*) dónde están alojadas las piezas para poder incorporar sensores a escornabot.

Binary file modified escornabot.zip
Binary file not shown.
138 changes: 126 additions & 12 deletions escornabot/escornabot.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
Librería escornabot por Prudencio Luna y Pedro Ruiz
V 0.20 (04/09/2020): sexta versión, se le pueden colocar sensores como ultrasonidos e infrarrojos.
V 0.15 (16/04/2019): quinta versión, se puede mover los motores mediante procedimiento de medio paso (tipo 3) y se corrigen fallos en constructor con parámetros para elegir modos de paso
V 0.14 (14/04/2019): cuarta versión del programa, cambiado nombre de procedimiento stop por Stop, se arregla procedimiento versión en .h, cambios en procedimiento pushButton, cambios en archivo de ejemplo.
V 0.13 (07/03/2018): tercera versión del programa, incorpora control de motores paso a paso (avances, retrocesos, giros, parada)
Expand Down Expand Up @@ -27,7 +28,7 @@ V 0.13 (07/03/2018): tercera versión del programa, incorpora control de motores

/*Pinout*/
const int pinMotor[8]={2,3,4,5,6,7,8,9};//pines de motores
const int buzz = 10; //pin del zumbador

const int led[4] = {14,15,16,17}; // 1 Azul, blue;2 Rojo, red;3 Amarillo, yellow;4 Verde, green
const int pushButtons = A7; //Es una variable analógica. En un circuito paralelo que en función de la tecla que pulsemos obtenemos un valor analógico distinto

Expand Down Expand Up @@ -84,13 +85,13 @@ escornabot::escornabot(int kindStep) //aquí se construye el objeto escornabot c
pinMode(pushButtons,INPUT_PULLUP);
//comprueba el parámetro pasado de tipo de paso de bobina


if (kindStep==2) {// se excitan dos bobinas a la vez en paso completo (más par más consumo)
/* Ahora la matriz debe cambiar a
/* Ahora la matriz debe cambiar a
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1}*/
{1, 0, 0, 1}*/
step [0][1] =1;step [1][2]=1;step[2][3]=1;step [3][0]=1;//se cambian los 0 por 1 en la matriz para el paso completo con una bobina por paso
}

Expand All @@ -107,7 +108,7 @@ escornabot::escornabot(int kindStep) //aquí se construye el objeto escornabot c
step[1][0]=1;step[2][1]=1;step[2][2]=0;//se cambian los 0 por 1 y los 1 por 0 en la matriz para el medio paso
step[3][1]=1;step[3][2]=1;step[3][3]=0;
step[4][2]=1;step[5][2]=1;step[5][3]=1;
step[6][3]=1;step[7][0]=1;step[7][3]=1;
step[6][3]=1;step[7][0]=1;step[7][3]=1;
stepsLap=4096;
nSteps=8;
tstep1rpm=14648;//es el nº de microsegundos que tardaría en dar 1 paso a 1rpm, 60/4096 y pasarlo a microsegundos
Expand All @@ -126,7 +127,7 @@ void escornabot::drive (float laps, int speed) {//vueltas son el nº de vueltas
while (int(laps*stepsLap)>=stepsDone) {
stepsDone ++;
coilPosition=stepsDone % nSteps;//calcula el resto para saber en la posición de bobina que está
//cuando un pin está en una fila de la matriz el del otro motor está a la inversa pin 2 col 4 pin 6 col 1 por ejemplo
//cuando un pin está en una fila de la matriz el del otro motor está a la inversa pin 2 col 4 pin 6 col 1 por ejemplo
digitalWrite(pinMotor[0], step[coilPosition][3]);//pin 2
digitalWrite(pinMotor[4], step[coilPosition][0]);//pin 6
digitalWrite(pinMotor[1], step[coilPosition][2]);//pin 3
Expand Down Expand Up @@ -274,23 +275,23 @@ int escornabot::pushButton(){
int value=0;
if(analogRead(pushButtons)>=748 && analogRead(pushButtons)<=788) {//atras
value=3;
//delay(200);
//delay(200);
}
else if(analogRead(pushButtons)>=492 && analogRead(pushButtons)<=532) {//adelante
value=1;
//delay(200);
//delay(200);
}
else if(analogRead(pushButtons)>=862 && analogRead(pushButtons)<=902) {//derecha
value=4;
//delay(200);
//delay(200);
}
else if(analogRead(pushButtons)>=663 && analogRead(pushButtons)<=703) {//izquierda
value=2;
//delay(200);
//delay(200);
}
else if(analogRead(pushButtons)>=799 && analogRead(pushButtons)<=839) {//centro
value=5;
//delay(200);
//delay(200);
}
else {
value=0;
Expand All @@ -314,6 +315,119 @@ int escornabot::blueT(){
version() procedimiento que devuelve la versión de la librería
*/
float escornabot::version(){
return 0.15;
return 0.20;
}

//A propuesta de Antonio Gómez

/*
infrared procedimiento que configura los pines de los sensores infrarrojos
*/
void escornabot::infrared(int izq, int der){
_IRL=izq;
_IRR=der;
pinMode(_IRL,INPUT);
pinMode(_IRR,INPUT);
}

/*
us procedimiento que configura los pines del sensor de ultrasonidos
*/
void escornabot::us(int trig, int echo){
_trig=trig;
_echo=echo;
pinMode(_trig,OUTPUT);
pinMode(_echo,INPUT);
}


/*
distance() procedimiento que devuelve la distancia en cm del sensor de ultrasonidos
*/
long escornabot::distance(){

long espacio;
long tiempo;
digitalWrite(_trig,LOW);
delayMicroseconds(4);
digitalWrite(_trig,HIGH);
delayMicroseconds(10);
digitalWrite(_trig,LOW);
tiempo=pulseIn(_echo,HIGH);
espacio=tiempo/58.309037901;
return espacio;
}

/*
blackRight procedimiento que nos devuelve true o false si el sensor de ir derecho está a negro
*/
bool escornabot::blackRight(){
bool negro;
if (digitalRead(_IRR)==1){
negro=true;
}
else{
negro=false;
}
return negro;
}

/*
blackLeft procedimiento que nos devuelve true o false si el sensor de ir izquierdo está a negro
*/
bool escornabot::blackLeft(){
bool negro;
if (digitalRead(_IRL)==1){
negro=true;
}
else{
negro=false;
}
return negro;
}

/*
whiteRight procedimiento que nos devuelve true o false si el sensor de ir derecho está a blanco
*/
bool escornabot::whiteRight(){
bool blanco;
if (digitalRead(_IRR)==1){
blanco=false;
}
else{
blanco=true;
}
return blanco;
}


/*
whiteLeft procedimiento que nos devuelve true o false si el sensor de ir izquierdo está a blanco
*/
bool escornabot::whiteLeft(){
bool blanco;
if (digitalRead(_IRL)==1){
blanco=false;
}
else{
blanco=true;
}
return blanco;
}

/*
buzzer procedimiento para indicar el pin al que se conecta un zumbador
*/
void escornabot::buzzer(int pin){
_buzz=pin;
pinMode(_buzz,OUTPUT);
}

/*
tono procedimiento para indicar la frecuencia y duración del sonido del zumbador
*/
void escornabot::tono(int frequency, int time){
tone(_buzz, frequency,time);
delay(time);
noTone(_buzz);
}
Loading

0 comments on commit 96a2455

Please sign in to comment.