INTRODUCCIÒN
En este blog les mostraremos un poco sobre el proyecto que
como estudiantes en ingeniería en sistemas hemos resalizado
porque a través de ello aprendemos como utilizar el Arduino, el
protoboard, entre otros materiales. En la materia que es sistemas
programables ya que aprendemos las funciones de cada circuito
y conocemos de nuevas tecnologías
y conocemos de nuevas tecnologías
El proyecto que les presentaremos a continuación es sobre un carro que
detecta un objeto o una persona ya que a través de una aplicación en
el teléfono o celular nos muestra un mensaje, esperando y pueda ser un proyecto que
pueda ser de mucha importancia para otros alumnos de la institución.
OBJETIVO
Se desea desarrollar un “carrito” que sea controlado por un
microcontrolador mediante el uso de diferentes dispositivos, tales como
sensores, motores de corriente directa, etc.
El objetivo principal del “carrito” detectar objetos o personas que se encuentren
enfrente de su trayectoria. Para ello se el control de este utilizará un sensor
de donde obtendrá lecturas, no solo en la
trayectoria del movimiento, sino que también de otros ángulos para
tener opciones y poder lograr detectar el obstáculo.
MATERIALES
Jumpers
1 protoboard
1 Arduino
1 servomotor
Pilas recargables
1 cable de impresora
1 sensor ultrasónico
4 llantas
Piezas que conforman un carro
El Código usado fue el siguiente:
#include <SoftwareSerial.h>
SoftwareSerial BT(2, 3); // RX, TX
const int trig = 13;
const int echo = 12;
const int delay_time = 1000; // Retardo de cada medida
#define in1 4
#define in2 5
#define in3 6
#define in4 7
int xAxis=140, yAxis=140;
int motorSpeedA = 0;
int motorSpeedB = 0;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
Serial.begin(9600);
BT.begin(9600); // Default communication rate of the Bluetooth module
delay(500);
}
void loop() {
// Default value - no movement when the Joystick stays in the center
xAxis = 140;
yAxis = 140;
// Read the incoming data from the Smartphone Android App
while (BT.available() >= 2) {
xAxis = BT.read();
delay(10);
yAxis = BT.read();
Serial.print(xAxis);
Serial.print(",");
Serial.println(yAxis);
}
delay(10);
// Makes sure we receive corrent values
if (xAxis > 130 && xAxis <150 && yAxis > 130 && yAxis <150){Stop();}
if (yAxis > 130 && yAxis <150){
if (xAxis < 130){turnRight();
motorSpeedA = map(xAxis, 130, 60, 0, 255);
motorSpeedB = map(xAxis, 130, 60, 0, 255);
}
if (xAxis > 150) {turnLeft();
motorSpeedA = map(xAxis, 150, 220, 0, 255);
motorSpeedB = map(xAxis, 150, 220, 0, 255);
}
}else{
if (xAxis > 130 && xAxis <150){
if (yAxis < 130){forword();}
if (yAxis > 150){backword();}
if (yAxis < 130){
motorSpeedA = map(yAxis, 130, 60, 0, 255);
motorSpeedB = map(yAxis, 130, 60, 0, 255);
}
if (yAxis > 150){
motorSpeedA = map(yAxis, 150, 220, 0, 255);
motorSpeedB = map(yAxis, 150, 220, 0, 255);
}
}else{
if (yAxis < 130){forword();}
if (yAxis > 150){backword();}
if (xAxis < 130){
motorSpeedA = map(xAxis, 130, 60, 255, 50);
motorSpeedB = 255;
}
if (xAxis > 150){
motorSpeedA = 255;
motorSpeedB = map(xAxis, 150, 220, 255, 50);
}
}
}
//Serial.print(motorSpeedA);
//Serial.print(",");
//Serial.println(motorSpeedA);
//analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
//analogWrite(enB, motorSpeedB); // Send PWM signal to motor B
////////////////////////////////
float duracion;
float distancia;
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duracion = pulseIn(echo, HIGH);
distancia = (duracion / 2) * 0.034;
//distancia = tiempo de ida y vuelta del sonido dividido entre dos, por la velocidad del sonido.
Serial.print(distancia);
Serial.println(" cm");
delay(1000);
int DatoaEnviar = (int) (distancia * 100);
byte Datos[3];
Datos[0] = 97; // Clave de comunicación entre el móvil y Arduino.
Datos[1] = DatoaEnviar/256; // Viene con 1023 valores, debe pasarlo a dos bytes.
Datos[2] = DatoaEnviar%256;
if(BT.available() > 0)
if(BT.read() == 97) // Clave de conexión con el móvil
{
BT.write(Datos[0]);
BT.write(Datos[1]);
BT.write(Datos[2]);
}
////////////////////////////////
}
/////////////////////////////final de vid loop
void forword()
{
Serial.println("forword");
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(10);
}
void backword()
{
Serial.println("backword");
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(10);
}
void turnRight()
{
Serial.println("turnRight");
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(10);
}
void turnLeft()
{
Serial.println("turnLeft");
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(10);
}
void Stop(){
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
Serial.println("stop");
}
Algunas Imágenes del código
Y se programo el control en APP Inventor 2 El código es el siguiente:
Apk. Android, control del carrito.
OBJETIVO
Se desea desarrollar un “carrito” que sea controlado por un
microcontrolador mediante el uso de diferentes dispositivos, tales como
sensores, motores de corriente directa, etc.
El objetivo principal del “carrito” detectar objetos o personas que se encuentren
enfrente de su trayectoria. Para ello se el control de este utilizará un sensor
de donde obtendrá lecturas, no solo en la
trayectoria del movimiento, sino que también de otros ángulos para
tener opciones y poder lograr detectar el obstáculo.
MATERIALES
Jumpers
1 protoboard
1 Arduino
1 servomotor
Pilas recargables
1 cable de impresora
1 sensor ultrasónico
4 llantas
Piezas que conforman un carro
DESCRIPCIÓN
Para poder llegar a nuestro modelo final el “Carrito paso por un proceso
de experimentación ya que se probó funcionar el carrito, su
funcionamiento es que al detectar un objeto o una persona tuvimos que
desarrollar una aplicación en el teléfono o celular ya que mediante la
APP nos muestra que es lo que está detectando el carrito enviando un
mensaje al celular, cuando el carrito detecta el objeto ya no sigue
avanzando porque solamente esta programado para cada movimiento
que el podrá realizar al momento de su funcionamiento.
El Código usado fue el siguiente:
#include <SoftwareSerial.h>
SoftwareSerial BT(2, 3); // RX, TX
const int trig = 13;
const int echo = 12;
const int delay_time = 1000; // Retardo de cada medida
#define in1 4
#define in2 5
#define in3 6
#define in4 7
int xAxis=140, yAxis=140;
int motorSpeedA = 0;
int motorSpeedB = 0;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
Serial.begin(9600);
BT.begin(9600); // Default communication rate of the Bluetooth module
delay(500);
}
void loop() {
// Default value - no movement when the Joystick stays in the center
xAxis = 140;
yAxis = 140;
// Read the incoming data from the Smartphone Android App
while (BT.available() >= 2) {
xAxis = BT.read();
delay(10);
yAxis = BT.read();
Serial.print(xAxis);
Serial.print(",");
Serial.println(yAxis);
}
delay(10);
// Makes sure we receive corrent values
if (xAxis > 130 && xAxis <150 && yAxis > 130 && yAxis <150){Stop();}
if (yAxis > 130 && yAxis <150){
if (xAxis < 130){turnRight();
motorSpeedA = map(xAxis, 130, 60, 0, 255);
motorSpeedB = map(xAxis, 130, 60, 0, 255);
}
if (xAxis > 150) {turnLeft();
motorSpeedA = map(xAxis, 150, 220, 0, 255);
motorSpeedB = map(xAxis, 150, 220, 0, 255);
}
}else{
if (xAxis > 130 && xAxis <150){
if (yAxis < 130){forword();}
if (yAxis > 150){backword();}
if (yAxis < 130){
motorSpeedA = map(yAxis, 130, 60, 0, 255);
motorSpeedB = map(yAxis, 130, 60, 0, 255);
}
if (yAxis > 150){
motorSpeedA = map(yAxis, 150, 220, 0, 255);
motorSpeedB = map(yAxis, 150, 220, 0, 255);
}
}else{
if (yAxis < 130){forword();}
if (yAxis > 150){backword();}
if (xAxis < 130){
motorSpeedA = map(xAxis, 130, 60, 255, 50);
motorSpeedB = 255;
}
if (xAxis > 150){
motorSpeedA = 255;
motorSpeedB = map(xAxis, 150, 220, 255, 50);
}
}
}
//Serial.print(motorSpeedA);
//Serial.print(",");
//Serial.println(motorSpeedA);
//analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
//analogWrite(enB, motorSpeedB); // Send PWM signal to motor B
////////////////////////////////
float duracion;
float distancia;
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duracion = pulseIn(echo, HIGH);
distancia = (duracion / 2) * 0.034;
//distancia = tiempo de ida y vuelta del sonido dividido entre dos, por la velocidad del sonido.
Serial.print(distancia);
Serial.println(" cm");
delay(1000);
int DatoaEnviar = (int) (distancia * 100);
byte Datos[3];
Datos[0] = 97; // Clave de comunicación entre el móvil y Arduino.
Datos[1] = DatoaEnviar/256; // Viene con 1023 valores, debe pasarlo a dos bytes.
Datos[2] = DatoaEnviar%256;
if(BT.available() > 0)
if(BT.read() == 97) // Clave de conexión con el móvil
{
BT.write(Datos[0]);
BT.write(Datos[1]);
BT.write(Datos[2]);
}
////////////////////////////////
}
/////////////////////////////final de vid loop
void forword()
{
Serial.println("forword");
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(10);
}
void backword()
{
Serial.println("backword");
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(10);
}
void turnRight()
{
Serial.println("turnRight");
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(10);
}
void turnLeft()
{
Serial.println("turnLeft");
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(10);
}
void Stop(){
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
Serial.println("stop");
}
Algunas Imágenes del código
Y se programo el control en APP Inventor 2 El código es el siguiente:
Este es el Resultado final
Proyecto del Carrito Con sistema programable
Apk. Android, control del carrito.
Vídeo del Proyecto
Nos basamos en estos vídeos para realizar el proyecto
App Inventor












