0% encontró este documento útil (0 votos)
26 vistas12 páginas

Practica6 Control-Potenciometros

Cargado por

Henry Flores
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
26 vistas12 páginas

Practica6 Control-Potenciometros

Cargado por

Henry Flores
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 12

UNIVERSIDAD TÉCNICA DE AMBATO

FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E


INDUSTRIAL

CARRERA DE INGENIERÍA EN ELECTRÓNICA Y COMUNICACIONES

Módulo o Asignatura
VLSI

Nivel y Paralelo
Octavo “A”

Tipo de Aporte – Número de Aporte


Informe Practica N.- 6

Tema del Aporte


Control de una plataforma movil variando los angulos de pitch, yaw y roll

Integrantes
 Balseca Vannesa
 Garzon Silvio
 Gómez Jonathan
 Pullutagsi Jonathan

Fecha de Envío:
Viernes 19 de octubre del 2018

Fecha de Entrega:
Viernes 26 de octubre del 2018

Docente: Ing. Edgar Patricio Córdova Córdova

SEPTIEMBRE 2018 – FEBRERO 2019


AMBATO - ECUADOR

2018-2019
1. TEMA

Control de una plataforma movil variando los angulos de pitch, yaw y roll

2. OBJETIVOS
a. Objetivo General
Desarrollar e implementar una plataforma móvil para lograr variar los ángulos pitch, yaw y roll.
b. Objetivos Específicos
 Diseñar el circuito que permita controlar los angulos pitch, yaw y roll..
 Investigar acerca de los ángulos de rotación en los ejes pitch, yaw, roll.
 Realizar el debido control para mantener estable la comunicación y variación de los
angulos.

3. FUNDAMENTACIÓN TEÓRICA

SENSOR MPU 6050

El sensor MPU-6050 es una pequeña pieza tecnológica de procesamiento de movimiento. El cual mediante
la combinación de un MEMS (Sistemas Micro electromecánicos) giroscopio de 3 ejes y un MEMS
acelerómetro de 3 ejes en la misma pastilla de silicio junto con un DMP™ (Movimiento Digital Processor),
es capaz de procesar los algoritmos de movimientos complejos de 9 ejes (MotionFusion™) en una placa.

Figura 1. Sensor MPU5060

EL ACELERÓMETRO
El acelerómetro mide la aceleración con respecto al eje de referencia. La aceleración puede expresarse en
3 ejes:
X, Y y Z (las tres dimensiones del espacio) como se puede ver en la figura .

Figura 2. Grados de libertad del sensor MPU6050

Si
Sabemos que la gravedad es 9.8 m/s², y sabemos que mesura dan los tres ejes del acelerómetro, por
trigonometría es posible calcular el ángulo de inclinación de la IMU. Una buena fórmula para calcular el
ángulo es:
AnguloY =atan ⁡
(√ ) x
y + z2
2

Angulox=atan ⁡
(√ )y
x + z2
2

EL GIROSCOPIO
En un principio, los giroscopios eléctricos eran unos voluminosos artefactos que valían la mayor parte del
presupuesto militar de un estado. Más tarde, durante la segunda guerra mundial se emplearon para dirigir
cohetes y torpedos. Por suerte, gracias la revolución digital y la miniaturización de circuitos, hoy en día
cualquier aficionado a la electrónica puede permitirse uno. Aunque no para construir misiles.
El giroscopio mide la velocidad angular. Si no tienes muy frescas tus lecciones de física del instituto voy a
recordarte que la velocidad angular es el número de grados que se gira en un segundo.

Si sabemos el ángulo inicial de la IMU, podemos sumarle el valor que marca el giroscopio para saber el
nuevo ángulo a cada momento. Supongamos que iniciamos la IMU a 0º. Si el giroscopio realiza una medida
cada segundo, y marca 3 en el eje X, tendremos el ángulo con esta sencilla fórmula: [1]

AnguloY = AnguloY Anterior +GiroscopioY . ∆ t

Donde ∆ t es el tiempo que transcurre cada vez que se calcula esta formula, AnguloYAnterior es el ángulo
calculado la última vez que se llamó esta fórmula y GiroscopioY es la lectura del ángulo Y del giroscopio.
Y lo mismo pasa con los ejes X, Z. Sólo que se suele ignorar el eje Z, puesto que al no poder calcular un
ángulo Z con el Acelerómetro, no se puede aplicar un Filtro Complementario para el eje Z (en seguida verás
qué es un Filtro Complementario [1]

SENSOR DE GAS MQ2


Los sensores de gas de la serie MQ son sensores analógicos por lo que son fáciles de implementar con
cualquier microcontrolador.

Figura 3. Sensor MQ

Estos sensores son electroquímicos y varían su resistencia cuando se exponen a determinados gases,
internamente posee un calentador encargado de aumentar la temperatura interna y con esto el sensor pueda
reaccionar con los gases provocando un cambio en el valor de la resistencia. El calentador dependiendo del
modelo puede necesitar un voltaje entre 5 y 2 voltios, el sensor se comporta como una resistencia y necesita
una resistencia de carga (RL) para cerrar el circuito y con este hacer un divisor de tención y poder leerlo
desde un microcontrolador:
Debido al calentador es necesario esperar un tiempo de calentamiento para que la salida sea estable y tenga
las características que el fabricante muestra en sus datasheet, dicho tiempo dependiendo del modelo puede
ser entre 12 y 48 horas. [3]

SENSOR DE HUMEDAD DHT11

Figura 4. Sensor DHT11

El DHT11 es un sensor digital de temperatura y humedad relativa de bajo costo y fácil uso. Utiliza un
sensor capacitivo de humedad y un termistor para medir el aire circundante, y muestra los datos mediante
una señal digital en el pin de datos (no posee salida analógica). Es bastante simple de usar tanto en
hardware como software. El único inconveniente de este sensor es que sólo se puede obtener nuevos datos
una vez cada 2 segundos.

El sensor DHT11 se caracteriza por tener la señal digital calibrada, asegurando alta estabilidad y fiabilidad
a lo largo del tiempo. El sensor integra unos sensores resistivos para temperatura (termistor) y otro para
humedad. Puede medir la humedad en un rango desde 20% hasta 90% y temperatura en el rango de 0ºC a
50ºC.

Cada sensor DHT11 está estrictamente calibrado en laboratorio, presentando una extrema precisión en la
calibración. Los coeficientes de calibración se almacenan como programas en la memoria OTP, que son
empleados por el proceso de detección de señal interna del sensor.

El protocolo de comunicación emplea un único hilo o cable, por lo tanto hace que la integración de este
sensor en nuestros proyectos sea rápida y sencilla. [4]

WI-FI

Las redes WiFi utilizan la tecnología de radio denominada IEEE 802.11a, 802.11b o 802.11g para
proporcionar una conexión inalámbrica segura, fiable y rápida. Una red WiFi se puede utilizar para
conectar ordenadores entre sí, a Internet y a las redes cableadas (que utilizan IEEE 802,3 o Ethernet). Las
redes WiFi operan sin necesidad de licencia en las bandas de radio de 2,4 y 5 GHz, con una velocidad de
transmisión de datos de 11 Mbps (802.11b) o 54 Mbps (802.11a) o con productos que contengan las dos
bandas (banda dual). Pueden proporcionar un rendimiento similar a las redes cableadas 10BaseT o
Ethernet.

4. MATERIALES Y EQUIPOS

 Protoboard  Giroscopio / Acelerómetro MPU6050


 Fuente de Alimentación  Servomotor
 Microcontrolador Arduino Mega  LCD 16x2
 Motor DC  Cables
 Puente H  Nodemcu
 Teclado 4x4

5. DESARROLLO
NODO SENSOR ACTUADOR

FUNCIONAMIENTO

El nodo sensor adquiere datos ingresados por entradas analógicas que son variadas con
potenciómetros y los envía mediante puerto serial al módulo wifi NODMCU el cual está conectado
a un nodo actuador que controla los servomotores.

SENSOR ACTUADOR CONDICIONES

Potenciómetros SERVOMOTOR El Angulo varia de 0 a 180º depende de los


Pitch (PITCH) valores ingresados en el serial de ‘pitch’ que
Roll
Yaw con un mapeo de -90 a 90 controla el
servomotor.

SERVOMOTOR El Angulo varia de 0 a 180º depende de los


(ROLL) valores ingresados en el serial de ‘roll’ que
con un mapeo de -90 a 90 controla el
servomotor.

SERVOMOTOR El Angulo varia de 0 a 180º depende de los


(YAW) valores ingresados en el serial de ‘yaw’ que
con un mapeo de -90 a 90 controla el
servomotor.

FUNCIONAMIENTO

El ingreso de las señales analógicas son por potenciómetros que son acondicionadas para que
varié de 0 a 5v y eso controle a los servomotores de 0 a 180º

Condición

0v  -90º
5v  90º

Esquema de Conexión

CÓDIGO

/----NODO SENSOR----/ // put your main code here, to run repeatedly:


/*####PLATAFORMA MÓVIL#######*/
//Librería LCD 16x2 float pitch=analogRead(A7);
#include <LiquidCrystal.h> float num1=((pitch*5.0)/1023.0);
const int rs = 13, en = 12, d4 = 11, d5 = 10, d6 = 9, d7 float ejex= map(num1,0.0,4.99,-90.0,90.0);
= 8; lcd.setCursor(0,0);
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); lcd.print(num1);
/*---------------------------*/ lcd.print(" ");
void setup() { lcd.setCursor(0,1);
Serial.begin(115200); lcd.print(ejex);
// put your setup code here, to run once: lcd.print(" ");
lcd.begin(16, 2);
lcd.setCursor(1,1); /*-------------------------*/
lcd.print("U.T.A. - VLSI"); //Prendido de pantalla float roll=analogRead(A6);
lcd.setCursor(0,0); float num2=((roll*5.0)/1023.0);
lcd.print("Bienvenidos"); //Prendido de pantalla float ejey= map(num2,0.0,4.99,-90.0,90.0);
delay (3000);
lcd.clear(); lcd.setCursor(6,0);
} lcd.print(num2);
lcd.print(" ");
void loop() { lcd.setCursor(6,1);
lcd.print(ejey); Serial.print(".");
lcd.print(" "); delay(500);
/*-------------------------*/ }
float yaw=analogRead(A5); Serial.println("Connected to wifi");
float num3=((yaw*5.0)/1023.0); Serial.print("Status: "); Serial.println(WiFi.status());
float ejez= map(num3,0.0,4.99,-90.0,90.0); // Network parameters
Serial.print("IP: "); Serial.println(WiFi.localIP());
lcd.setCursor(12,0); Serial.print("Subnet: ");
lcd.print(num3); Serial.println(WiFi.subnetMask());
lcd.print(" "); Serial.print("Gateway: ");
lcd.setCursor(12,1); Serial.println(WiFi.gatewayIP());
lcd.print(ejez); Serial.print("SSID: "); Serial.println(WiFi.SSID());
lcd.print(" "); Serial.print("Signal: "); Serial.println(WiFi.RSSI());
/*---------------------------------*/
Serial.print(1); }
Serial.print(","); void loop () {
Serial.print(ejex); /*--------------------------------------*/
Serial.print(","); //Identifica los separadores
Serial.print(ejey); WiFiClient client = server.available();
Serial.print(","); if (Serial.available())
Serial.println(ejez); {
str = Serial.readStringUntil('\n');
for (int i = 0; i < dataLength ; i++)
/*---------------------------------*/ {
} int index = str.indexOf(separator);
/--- WIFI ENVIO---/ data[i] = str.substring(0, index).toInt();
#include <SPI.h> str = str.substring(index + 1);
#include <ESP8266WiFi.h> }
//Bufer:::: //DEBUG_ARRAY(data);
#define DEBUG_ARRAY(a) {for (int index = 0; index }
< sizeof(a) / sizeof(a[0]); index++) /*--------------------------------------*/
{Serial.print(a[index]); Serial.print('\t');} if(client){
Serial.println();}; if(client.connected()){
String str = ""; client.print(data[0]);
const char separator = ','; client.print(",");
const int dataLength = 4; client.print(data[1]);
float data[dataLength]; client.print(",");
client.print(data[2]);
char ssid[] = "RED-DIEGO"; // SSID of your client.print(",");
home WiFi client.print(data[3]);
char pass[] = "12345678"; // password of client.println(",");
your home WiFi }}}
WiFiServer server(80);
/---WIFI RECEPCION---/
//IPAddress server(192, 168, 0, 5); // IP address #include <SPI.h>
of the serverº+ #include <ESP8266WiFi.h>
IPAddress ip(192, 168, 0, 5); // IP address of the //Lectura Buffer
serverº+ #define DEBUG_ARRAY(a) {for (int index = 0; index
IPAddress gateway(192, 168, 0, 1); // gateway of < sizeof(a) / sizeof(a[0]); index++)
your network {Serial.print(a[index]); Serial.print('\t');}
IPAddress subnet(255, 255, 255, 0); // subnet mask Serial.println();};
of your network String str = "";
const char separator = ',';
const int dataLength = 4;
void setup() { float data[dataLength];
Serial.begin(115200); // only for debug byte ledPin = 2;
WiFi.config(ip, gateway, subnet); // forces to use char ssid[] = "RED-DIEGO"; // SSID of your
the fix IP home WiFi
WiFi.begin(ssid, pass); // connects to the char pass[] = "12345678"; // password of your
WiFi router home WiFi
server.begin(); // starts the server
while (WiFi.status() != WL_CONNECTED) IPAddress server(192, 168, 0, 5); // the fix IP address
{ of the server
WiFiClient client; float data[dataLength];

void setup() { /*Variables de servomotores*/


Serial.begin(115200); // only for debug //------ eje x --------//
WiFi.begin(ssid, pass); // connects to the WiFi Servo myservox; //variable donde se escribe el
router angulo
while (WiFi.status() != WL_CONNECTED) int pinServox=9; //PIN a donde se conecta el servo
{ (cable AMARILLO)
Serial.print("."); //------ eje y --------//
delay(500); Servo myservoy; //variable donde se escribe el
} angulo
Serial.println("Connected to wifi"); int pinServoy=10; //PIN a donde se conecta el servo
Serial.print("Status: "); Serial.println(WiFi.status()); (cable AMARILLO)
// Network parameters //------ eje z --------//
Serial.print("IP: "); Serial.println(WiFi.localIP()); Servo myservoz; //variable donde se escribe el
Serial.print("Subnet: "); angulo
Serial.println(WiFi.subnetMask()); int pinServoz=11; //PIN a donde se conecta el servo
Serial.print("Gateway: "); (cable AMARILLO)
Serial.println(WiFi.gatewayIP());
Serial.print("SSID: "); Serial.println(WiFi.SSID()); void setup() {
Serial.print("Signal: "); Serial.println(WiFi.RSSI()); Serial.begin(115200);
/*Servomotores*/
} //------ eje x --------//
myservox.attach(pinServox);
void loop () { //------ eje y --------//
myservoy.attach(pinServoy);
if (client.connect(server, 80)) { //------ eje z --------//
str = client.readStringUntil('\n'); myservoz.attach(pinServoz);
for (int i = 0; i < dataLength ; i++)
{ lcd.begin(16, 2);
int index = str.indexOf(separator); lcd.setCursor(1,1);
data[i] = str.substring(0, index).toInt(); lcd.print("U.T.A. - VLSI"); //Prendido de pantalla
str = str.substring(index + 1); lcd.setCursor(0,0);
} lcd.print("Bienvenidos"); //Prendido de pantalla
} delay(1000);
Serial.print(data[0]); lcd.clear();
Serial.print(","); }
Serial.print(data[1]);
Serial.print(","); void loop() {
Serial.print(data[2]); if (Serial.available())
Serial.print(","); {
Serial.println(data[3]); str = Serial.readStringUntil('\n');
delay(50); for (int i = 0; i < dataLength ; i++)
} {
int index = str.indexOf(separator);
/--- NODO ACTUADOR ---/ data[i] = str.substring(0, index).toFloat();
/*Pataforma Movil -- Recepción*/ str = str.substring(index + 1);
//Definicion de Trama }
#define DEBUG_ARRAY(a) {for (int index = 0; index //DEBUG_ARRAY(data);
< sizeof(a) / sizeof(a[0]); index++) }
{Serial.print(a[index]); Serial.print('\t');} if(data[0]==1){
Serial.println();}; lcd.setCursor(0,0);
lcd.print("Modo Manual"); //Prendido de pantalla
/*Libreria del LCD 16x2*/ //------ eje x --------//
#include <LiquidCrystal.h> int dato1=data[1];
#include<Servo.h> //Libreria para trabajar con el int ejex = map(dato1, -90, 90, 0, 180); // escalamos
Servomotor la lectura a un valor entre 0 y 180
LiquidCrystal lcd(8,7,6,5,4,3); myservox.write(ejex); // enviamos el valor escalado
al servo.
/*Declaracion de Variables de Trama*/ //------ eje y --------//
String str = ""; int dato2=data[2];
const char separator = ','; int ejey = map(dato2, -90, 90, 0, 180); // escalamos
const int dataLength = 4; la lectura a un valor entre 0 y 180
myservoy.write(ejey); // enviamos el valor escalado myservox.write(ejex); // enviamos el valor escalado
al servo. al servo.
//------ eje z --------// //------ eje y --------//
int dato3=data[3]; int dato2=data[2];
int ejez = map(dato3, -90, 90, 0, 180); // escalamos int ejey = map(dato2, -90, 90, 0, 180); // escalamos
la lectura a un valor entre 0 y 180 la lectura a un valor entre 0 y 180
myservoz.write(ejez); // enviamos el valor escalado myservoy.write(ejey); // enviamos el valor escalado
al servo. al servo.
//--------------------// //------ eje z --------//
lcd.setCursor(0,1); int dato3=data[3];
lcd.print("x="); int ejez = map(dato3, -90, 90, 0, 180); // escalamos
lcd.setCursor(2,1); la lectura a un valor entre 0 y 180
lcd.print(dato1); myservoz.write(ejez); // enviamos el valor escalado
lcd.print(" "); al servo.
Serial.print(dato1); //--------------------//
lcd.setCursor(6,1); lcd.setCursor(0,1);
lcd.print("y="); lcd.print("x=");
lcd.setCursor(8,1); lcd.setCursor(2,1);
lcd.print(dato2); lcd.print(dato1);
lcd.print(" "); lcd.print(" ");
Serial.print(dato2); Serial.print(dato1);
lcd.setCursor(11,1); lcd.setCursor(6,1);
lcd.print("Z="); lcd.print("y=");
lcd.setCursor(13,1); lcd.setCursor(8,1);
lcd.print(dato3); lcd.print(dato2);
lcd.print(" "); lcd.print(" ");
Serial.println(dato3); Serial.print(dato2);
delay(100); lcd.setCursor(11,1);
//-------------------// lcd.print("Z=");
} lcd.setCursor(13,1);
lcd.print(dato3);
if(data[0]==2){ lcd.print(" ");
lcd.setCursor(0,0); Serial.println(dato3);
lcd.print("Modo Automatico"); //Prendido de pantalla delay(100);
//------ eje x --------// //---------------------//
int dato1=data[1]; }
int ejex = map(dato1, -90, 90, 0, 180); // escalamos
la lectura a un valor entre 0 y 180 }

6. DIAGRAMAS O ESQUEMAS
NODEMCU

TECLADO
PITCH
MATRICIAL
NODO MANUAL
GIROSCOPIO
YAW
(MPU)

ROLL
NODEMCU PITCH

NODO GIROSCOPIO
YAW
AUTOMATICO (MPU)

ROLL

7. RESULTADOS

 Resultados Esperados

Se estima que al implementar de manera física el circuito cumpla con el control establecido a
través de la programación. Mediante el cual nos permita girar nuestra plataforma de 0 a 90
grados en los ejes Roll, Pitch y yaw y lograr asi un control estable de nuestra plataforma y
nuestro circuito mediante la comunicación wifi.

 Resultados Obtenidos

8. CONCLUSIONES

 Se logró realizar el control entre nodemcus para así mantener estable nuestra
comunicación
 Para poder realizar una buena implementación del circuito se procedió a investigar
acerca del funcionamiento del sensor MPU 6050, Giroscopio – Acelerómetro

 La implementación del circuito ayuda a corregir problemas tanto de conexión, de


diseño y de lógica de código para que el sistema funcione de manera eficiente.
 Se consolido la investigación acerca de los ángulos de rotación en los ejes pitch, yaw,
roll para poder comprender el tipo de control de ángulos que se deseaba mejorar.

9. RECOMENDACIONES
 Se recomienda tener los equipos y materiales adecuados para el desarrollo de la práctica,
y así evitar cualquier inconveniente.
 Se recomienda revisar los equipos disponibles en el laboratorio, para de esa forma tener
una idea del dimensionamiento de los circuitos.
10. BIBLIOGRAFÍA

[1] J. Artuano, MIcroprocesador de datos MPU, Mexico : Universidad Estatal de Mexico, 2010 .

[2] A. Saritah, «INtegration,» National INtrument , Estados Unidos , 2011.

[3] D. Pachar, «Sensores de robotica,» Universidad de Cantabria , 01 03 2010. [En línea].

Available: https://www.sparkfun.com/datasheets/BOT/QRD1114.pdf. [Último acceso: 09 10


2018].

[4] B. Hernandez, 2007. [En línea]. Available: https://www.ecured.cu/Circuitos_de_fuerza_y_de_

mando_de_un_motor_trif%C3%A1sico. [Último acceso: 9 10 2018].

[5] T. Wildi, «Máquinas eléctricas y sistemas de potencia,» 2010. [En línea]. Available:
https://books.google.com.ec/books?
id=ehxKXip1j6EC&pg=PA158&dq=potencia+trifasica&hl=

es&sa=X&ved=0ahUKEwidvJOSi5vaAhWozlkKHYulBGUQ6AEIJTAA#v=onepage&q=

potencia%20trifasica&f=false.

También podría gustarte