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
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:
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
Diseñá tu App en https://appinventor.mit.edu/
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
Diseñá tu App en https://appinventor.mit.edu/
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