Robots de suelo

ARDUINO

Prof. Daniel Tedesco

TIPOS DE ROBOTS DE SUELO

Auto controlado por bluetooth

Auto Seguidor de línea

Auto Seguidor de luces

Futbolista

Luchador

0. Prueba de componentes

Módulo bluetooth HC05

L298N Doble puente h

Motoreductores

 

1. Control del módulo Bluetooth

Características de los módulos Bluetooth HC05 o HC06

1. Control del módulo Bluetooth

Con módulos Bluetooth HC05 o HC06

Código

char NOMBRE[5]= "LabTI";
char VELOCIDAD = '4';  // '1'=1200, '2'=2400, '3'=4800, '4'=9600, '5'=19200, '6'=38400, '7'=57600, '8'=115200, 
char pin[5] = "4444";

void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
delay(10000);
digitalWrite(13, LOW);

Serial.print("AT");
delay(1000);

Serial.print("AT+NAME");
Serial.print(NOMBRE);
delay(1000);

Serial.print("AT+BAUD");
Serial.print(VELOCIDAD);
delay(1000);

Serial.print("AT+PIN");
Serial.print(pin);
delay(1000);
}
void loop() {
digitalWrite(13, !digitalRead(13));
delay(500);
}

2. Conexión alternativa HC-05

2. Código alternativo HC-05

#include <SoftwareSerial.h>   // Incluimos la librería  SoftwareSerial  
SoftwareSerial BT(10,11);    // Definimos los pines RX y TX del Arduino conectados al Bluetooth
 
void setup()
{
  BT.begin(9600);       // Inicializamos el puerto serie BT (Para Modo AT 2)
  Serial.begin(9600);   // Inicializamos  el puerto serie  
}
 
void loop()
{
  if(BT.available())    // Si llega un dato por el puerto BT se envía al monitor serial
  {
    Serial.write(BT.read());
  }
 
  if(Serial.available())  // Si llega un dato por el monitor serial se envía al puerto BT
  {
     BT.write(Serial.read());
  }
}

3. Conexión alternativa HC-06

3. Código alternativo HC-06

#include <SoftwareSerial.h>   // Incluimos la librería  SoftwareSerial  
SoftwareSerial BT(10,11);    // Definimos los pines RX y TX del Arduino conectados al Bluetooth
 
void setup()
{
  BT.begin(9600);       // Inicializamos el puerto serie BT que hemos creado
  Serial.begin(9600);   // Inicializamos  el puerto serie  
}
 
void loop()
{
  if(BT.available())    // Si llega un dato por el puerto BT se envía al monitor serial
  {
    Serial.write(BT.read());
  }
 
  if(Serial.available())  // Si llega un dato por el monitor serial se envía al puerto BT
  {
     BT.write(Serial.read());
  }
}

4. Control de motoreductores

Con módulos doble puente H L298N

4. Control de motoreductores

Diagrama

Ver en el slide siguiente Alimentación del arduino

2. Alimentación del Arduino

Diagrama

ATENCIÓN

En nuestras placas él

puerto Vin está cruzado

2. Código

// Define los pines del puente H doble
const int ENA = 9;   // Velocidad motor A
const int IN1 = 2;   // Dirección motor A
const int IN2 = 3;   // Dirección motor A
const int ENB = 10;  // Velocidad motor B
const int IN3 = 4;   // Dirección motor B
const int IN4 = 5;   // Dirección motor B

void setup() {
  // Inicializa los pines como salidas
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop() {
  // Mueve el motor A hacia adelante a la mitad de velocidad
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, 128);  // Valor entre 0 y 255 para la velocidad

  // Mueve el motor B hacia adelante a la mitad de velocidad
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
  analogWrite(ENB, 128);

  delay(2000);  // Espera 2 segundos

  // Detiene ambos motores
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, 0);  // Detiene el motor A
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  analogWrite(ENB, 0);  // Detiene el motor B

  delay(2000);  // Espera 2 segundos

  // Mueve el motor A hacia atrás a la mitad de velocidad
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  analogWrite(ENA, 128);

  // Mueve el motor B hacia atrás a la mitad de velocidad
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
  analogWrite(ENB, 128);

  delay(2000);  // Espera 2 segundos

  // Detiene ambos motores nuevamente
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, 0);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
  analogWrite(ENB, 0);

  delay(2000);  // Espera 2 segundos
}

Inalámbricos

Ejercicios básicos con módulo Bluethoot

1. Control del módulo Bluetooth

Prueba preliminar de monitor serie

/* prueba de encendido de led a través del monitor
serial. para pruebas, abrir el monitor serial y digitar 1 para encender el led
o digitar 2 para apagarlo
Luego conectar el bluethoot y encender y aappgar desde la app
Prof. Daniel Tedesco*/

int led=13;// creamos la variable led en el pin 13
int estado=0; // creamos la variable estado con lectura=0


void setup() {
 Serial.begin(9600);//inicializamos monitor serie
 pinMode (led, OUTPUT);// seteamos el pin 13 correspondinte al led como salida

}

void loop() {
  if (Serial.available()>0){ // condicional si el valor del monitor serie es mayor a 0, se lee el estado
    estado = Serial.read();
  }
 if (estado=='1'){ //si el estado es igual a 1 (encendido) se enciende el led
  digitalWrite(led, HIGH);
 }
 if(estado=='2'){ // si el estado es igual a 2, se apaga el led
  digitalWrite(led, LOW);
 }
}

1. Control del módulo Bluetooth

Con módulos Bluetooth HC05 o HC06

Código

/* prueba de encendido de led a través del monitor
serial. para pruebas, abrir el monitor serial y digitar 1 para encender el led
o digitar 2 para apagarlo
Luego conectar el bluethoot y encender y aappgar desde la app
Prof. Daniel Tedesco*/

int led=13;// creamos la variable led en el pin 13
int estado=0; // creamos la variable estado con lectura=0


void setup() {
 Serial.begin(9600);//inicializamos monitor serie
 pinMode (led, OUTPUT);// seteamos el pin 13 correspondinte al led como salida

}

void loop() {
  if (Serial.available()>0){ // condicional si el valor del monitor serie es mayor a 0, se lee el estado
    estado = Serial.read();
  }
 if (estado=='1'){ //si el estado es igual a 1 (encendido) se enciende el led
  digitalWrite(led, HIGH);
 }
 if(estado=='2'){ // si el estado es igual a 2, se apaga el led
  digitalWrite(led, LOW);
 }
}

App Diseño

App Programación

2. Brillo de led con Bluetooth

Con módulos Bluetooth HC05 o HC06

Código

int led=9;
int data=0;

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);

}

void loop() {
  if(Serial.available()>0){
    data=Serial.read();
    Serial.println(data);
    analogWrite(led, data);
  }
}

App

Diseño

Diseñá tu App en:

https://appinventor.mit.edu/

App

Bloques

3. Relé

Encendido de lámpara con módulos Bluetooth y relé

3. Relé

Diagrama

Desafío: ¿Cómo conectarías el

módulo Bluetooth?

3. Relé

Código


int led = 13;
int estado = 0;

void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);

}

void loop() {
if(Serial.available()>0){
  estado = Serial.read();
}
if(estado=='1'){
  digitalWrite(led, HIGH);
}
if(estado=='2'){
  digitalWrite(led, LOW);
}
}

CarruajeArduino

Conexionado con App inventor y

con módulo Bluetooth

1. Diagrama

1. Código

int izqA = 5;
int izqB = 6;
int derA = 9;
int derB = 10;
int vel = 255;
int estado = 'c';
int sensor = A0;
int led = 3;
int led1= 2;
int lectura;
int rojo = 11;
int rojo1 = 12;
int blanco = 4;
int blanco1 = 7;
int buz = 8;

void setup() {
 Serial.begin(9600);
 pinMode(izqA, OUTPUT);
  pinMode(izqB, OUTPUT);
   pinMode(derA, OUTPUT);
    pinMode(derB, OUTPUT);
     pinMode(led, OUTPUT);
    pinMode(led1, OUTPUT);
    pinMode(13, OUTPUT);
    pinMode(rojo, OUTPUT);
    pinMode(rojo1, OUTPUT);
    pinMode(blanco, OUTPUT);
    pinMode(blanco1, OUTPUT);
   pinMode(buz, OUTPUT);
   
    digitalWrite(blanco, 1);

   digitalWrite(blanco1, 1);
   
   digitalWrite(rojo, 1);
   
   digitalWrite(rojo1, 1);
}

void loop() {
if(Serial.available()>0){
  estado = Serial.read();
 
}
if(estado=='a'){
  analogWrite(derB, 0);                        //adelante
  analogWrite(izqB, 0);
  analogWrite(derA, vel);
  analogWrite(izqA, vel);
}
if(estado=='b'){
  analogWrite(derB, 0);                        //derecha
  analogWrite(izqB, 0);
  analogWrite(derA, vel);
  analogWrite(izqA, 0);
}
if(estado=='c'){
  analogWrite(derB, 0);                        //parar los motores
  analogWrite(izqB, 0);
  analogWrite(derA, 0);
  analogWrite(izqA, 0);
}
if(estado=='d'){
  analogWrite(derB, 0);                        //izquierda
  analogWrite(izqB, 0);
  analogWrite(derA, 0);
  analogWrite(izqA, vel);
}
if(estado=='e'){
  analogWrite(derB, vel);                        //atras
  analogWrite(izqB, vel);
  analogWrite(derA, 0);
  analogWrite(izqA, 0);
}
{
lectura = analogRead(sensor);
 Serial.println(lectura);
 if (lectura <300) {
  digitalWrite( led, HIGH);
  digitalWrite( led1, HIGH);
 
  
 }
else {
  digitalWrite( led, LOW);
  digitalWrite( led1, LOW);

}
}
if(estado=='l'){
  digitalWrite(13, 1);
}
if(estado=='m'){
  digitalWrite(13, 0);
}
if(estado=='h'){
  digitalWrite(derA, 1);
}
if(estado=='j'){
  digitalWrite(derA, 0);
}
if(estado=='r'){
  digitalWrite(derB, 1);
}
if(estado=='s'){
  digitalWrite(derB, 0);
}
if(estado=='n'){
  digitalWrite(izqA, 1);
}
if(estado=='k'){
  digitalWrite(izqA, 0);
}
if(estado=='p'){
  digitalWrite(izqB, 1);
}
if(estado=='u'){
  digitalWrite(izqB, 0);
}
if(estado == '1'){
  digitalWrite(buz, HIGH);
  
}
  if(estado == '2'){
  digitalWrite(buz, LOW);
}

}

1. App

BrazoRobóticoArduino

Conexionado con App inventor y

con módulo Bluetooth

PROYECTO EXTRA

1. Esquema

2. Diagrama

3. Código



#include <SoftwareSerial.h> // Libreria de Tx Rx Serial para Bluetooth 
#include <Servo.h>// Incluye la Libreria Servo

int bluetoothTx = 0; // bluetooth tx al pin 0
int bluetoothRx = 1; // bluetooth rx al pin 1

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

Servo ser1;
Servo ser2;
Servo ser3;
Servo ser4;

  void setup() {
  Serial.begin(9600);
  bluetooth.begin(9600); // Setea la conexion Serial del Bluetooth al Cel
  ser1.attach(3);
 ser2.attach(9);
  ser3.attach(10);
   ser4.attach(11);
  }
 
  void loop() {
  //Lee desde el bluetooth y escribe al USB Serial
  if(bluetooth.available()>= 0 )
  {
    int servopos = bluetooth.read();
    int servopos1 = bluetooth.read();
     int realservo = (servopos1 *256) + servopos; 
    Serial.println(realservo); 
    
    if (realservo >= 1000 && realservo <1180){
    int servo1 = realservo;
    servo1 = map(servo1, 1000,1180,0,180);
    ser1.write(servo1);
    Serial.println(" ON");
    delay(10);

    

    }

     if (realservo >=2000 && realservo <2180){
    int servo2 = realservo;
    servo2 = map(servo2,2000,2180,0,180);
    ser2.write(servo2);
    Serial.println(" ON");
    delay(10);
      
    }
    if (realservo >=3000 && realservo <3180){
    int servo3 = realservo;
    servo3 = map(servo3,3000,3180,0,180);
    ser3.write(servo3);
    Serial.println(" ON");
    delay(10);
  }
  if (realservo >=4000 && realservo <4180){
    int servo4 = realservo;
    servo4 = map(servo4,4000,4180,0,180);
    ser4.write(servo4);
    Serial.println("ON");
    delay(10);

} 
  }
  }
   

4. Diseño App

5. Programación App

ComederoAutomático

 

Conexionado con App inventor y

con módulo Bluetooth

PROYECTO EXTRA

1. Esquema

2. Diagrama

2. Código

#include <Stepper.h>
#define STEPS 64 // Cambiar a 100 y a 200 

// Secuencia 1-3-2-4
Stepper motor(STEPS, 8, 10, 9, 11); 

int pasos;
char val;
void setup() { 
Serial.begin(9600);
}

void loop() { 
if( Serial.available() ) {
val = Serial.read();
Serial.print(val);
if( val == '1' )
{
motor.setSpeed(200);
motor.step(5);
}
if( val == '2' )
{
motor.setSpeed(200);
motor.step(-5);
}
if( val == '3' )
{
motor.setSpeed(200);
motor.step(10);
}
if( val == '4' )
{
motor.setSpeed(200);
motor.step(-10);
}
if( val == '5' )
{
motor.setSpeed(200);
motor.step(15);
}
if( val == '6' )
{
motor.setSpeed(200);
motor.step(-15);
}
if( val == '7' )
{
motor.setSpeed(200);
motor.step(20);
}
if( val == '8' )
{
motor.setSpeed(200);
motor.step(-20);
}
if( val == 'A' )
{
motor.setSpeed(200);
motor.step(10);
}
if( val == 'B' )
{
motor.setSpeed(200);
motor.step(-10);
}

} 
}

3. Diseño APP

4. Programación APP

SIGN UP FOR FREE

Sign in to give it a try.
If you're not already a member, sign up for free.

SIGN IN

Roobots de suelo

By profdanieltedesco

Roobots de suelo

Now you can add a personal touch to your slides with freehand drawing! Use it to highlight content, draw illustrations and much more.

  • 211