Robots de suelo
ARDUINO
Prof. Daniel Tedesco

Ejercicios
TIPOS DE ROBOTS DE SUELO
Auto controlado por bluetooth
Auto Seguidor de línea
Auto Seguidor de luces
Esquiva, laberintos
Futbolista
Luchador-sumo
TIPOS DE ROBOTS INTERMEDIOS
Mano robótica
Brazo robótico
Ascensores
Sistemas integrados
MÉTODOS DE CONTROL
Movimientos independientes (Código para movimiento autónomo en bucle)
Control por módulo joystick
Control por pulsadores
Control por bluetooth
Control por Wi Fi
Control por red inalámbrica interna
Control por APP movil
0. Prueba de componentes
Módulo bluetooth HC05
L298N Doble puente h
Motoreductores
0.1 Receptor IR
Diagrama:
Receptor IR: pin 11 Arduino
LED RGB:
LED Rojo: Resistencia 220 y pin 2 Arduino
LED Verde: Resistencia 220 y pin 3 Arduino
LED Azul: Resistencia 220 y pin 4 Arduino
Negativo: GND o negativo (sin resistencia)
0.2 Receptor IR Buzzer
Diagrama:
Receptor IR: pin 11 Arduino
LED: pin 13 Arduino + Ressistencia 220 Ohms
Buzzer: pin 8 Arduino
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

Diseñá tu App en https://appinventor.mit.edu/
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:
Slider:
Max. Value: 255
Min. Value: 10
Number of steps: 100
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?
¿Cuál es el error de conexión?
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);
}
}3. Relé
App
Idem a la app de encendido LED
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


Diseñá tu App en https://appinventor.mit.edu/
5. Programación App

AlimentadorAutomático
Conexionado con App inventor y
con módulo Bluetooth


PROYECTO EXTRA

1. Versión compleja

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

Diseñá tu App en https://appinventor.mit.edu/
4. Programación APP

2. Versión simple
ManoArduino
Conexionado con App inventor y
con módulo Bluetooth


PROYECTO EXTRA

Mano robótica Arduino

Mano - Movimientos autónomos
PCA9685 (Controlador de Servos):
- VCC a 5V del Arduino
- GND a GND del Arduino
- SDA a A4 del Arduino (Comunicación I2C)
- SCL a A5 del Arduino (Comunicación I2C)
- V+ a una fuente de alimentación externa de 5V (para los servos, ya que el Arduino no puede suministrar suficiente corriente para 5 servos). Si tus servos son pequeños y de bajo consumo, podrías intentar alimentarlo desde el 5V del Arduino, pero es muy recomendable una fuente externa.
- Servos (5 unidades): Cada servo se conecta a una de las salidas del PCA9685 (0-15).
- Cable Naranja (Señal) al pin de señal del PCA9685.
- Cable Rojo (VCC) a V+ del PCA9685 (la misma fuente de 5V que alimenta el PCA9685).
- Cable Marrón (GND) a GND del PCA9685 (la misma GND que la fuente de 5V).
Indicaciones de conexión
Mano -Movimientos autónomos
Mano robótica Arduino
Mano - Movimientos con botonera

Mano robótica Arduino
Mano - Movimientos con APP
Diagrama
Código

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.
- 676