Vous êtes sur la page 1sur 15

Instituto Tecnolgico Superior de Coatzacoalcos

Ingeniera Mecatrnica

SALMORAN GARFIAS JOSE ILDEFONSO


Nombre del Alumno: ____________________________________________________
Apellido Paterno

Apellido Materno

Nombre(s)

CALCULADORA CON ARDUINO


Asignatura
Nombre de la Asignatura:
PROGRAMACION BASICA
______________________________
No. Control:
11
Semestre:

Nombre del Docente:

Apellido Paterno

Periodo:
ENERO-JUNIO 15
_____________________
2
Grupo:

Apellido Materno

Nombre(s)

Coatzacoalcos, Ver. a 16 de JUNIO de 2015

Objetivo:
El objetivo de este proyecto es demostrar Los conocimientos y habilidades obtenidas a
lo largo del curso de programacin bsica comprendido el en periodo enero junio

2015, a partir de los programas o practicas desarrolladas con anterioridad en el saln


de clases, creando un prototipo funcional de una calculadora capaz de resolver
ecuaciones lineales de hasta 3 incgnitas por el mtodo de GAUSS-JORDAN con la
ayuda de una placa de Arduino.
Desarrollo:

Como paso nmero 1 se procedi a desarrollar un cdigo o programa en


lenguaje c.

#include <stdio.h>
void PideDatos(int *Dim, float Sist[][102]);
void EscribeDatos(int Dim, float Sist[][102]);
void ResuelveGauss(int Dim, float Sist[][102]);
int main(void)
{
int C,Dimension;
float Sistema[101][102];
PideDatos(&Dimension,Sistema);
printf("\n\n\nEl SISTEMA introducido es el siguiente: \n\n");
EscribeDatos(Dimension,Sistema);
ResuelveGauss(Dimension,Sistema);
print("\n\n\nLas soluciones son:\n");
for(C=1;C<=Dimension;C++) printf("\n X%d=%f\n",C,Sistema[C][Dimension+1]);
break;
return(0);
}
void PideDatos(int *Dim,float Sist[][102])
{
int A,B;
printf("\n\n ||RESUELVE SISTEMAS LINEALES DETERMINADOS POR
GAUSS||");
printf("\n\n\n Introduce el numero de incognitas:(menor que 100)");
scanf("%d",&*Dim);
printf("\n\n PASE A INTRODUCIR CADA COMPONENTE DEL SISTEMA (A|B):");
printf("\n\n MATRIZ A:\n");
for(A=1;A<=*Dim;A++) for(B=1;B<=*Dim;B++){
printf("\n Termino A(%d,%d):",A,B); scanf("%f",&Sist[A][B]);}
printf("\n\n\n VECTOR B:\n");
for(A=1;A<=*Dim;A++){
printf("\n Termino B(%d):",A);scanf("%f",&Sist[A][*Dim+1]);
}
}
void EscribeDatos(int Dim, float Sist[][102])
{
int A,B;

for(A=1;A<=Dim;A++){
for(B=1;B<=(Dim+1);B++){
printf("%7.2f",Sist[A][B]);
if(B==Dim) printf(" |");}
printf("\n");
}}
void ResuelveGauss(int Dim, float Sist[][102])
{
int NoCero,Col,C1,C2,A;
float Pivote,V1;
for(Col=1;Col<=Dim;Col++){
NoCero=0;A=Col;
while(NoCero==0){
if((Sist[A][Col]>0.0000001)||((Sist[A][Col]<-0.0000001))){
NoCero=1;}
else A++;}
Pivote=Sist[A][Col];
for(C1=1;C1<=(Dim+1);C1++){
V1=Sist[A][C1];
Sist[A][C1]=Sist[Col][C1];
Sist[Col][C1]=V1/Pivote;}
for(C2=Col+1;C2<=Dim;C2++){
V1=Sist[C2][Col];
for(C1=Col;C1<=(Dim+1);C1++){
Sist[C2][C1]=Sist[C2][C1]-V1*Sist[Col][C1];}
}
}
for(Col=Dim;Col>=1;Col--) for(C1=(Col-1);C1>=1;C1--){
Sist[C1][Dim+1]=Sist[C1][Dim+1]-Sist[C1][Col]*Sist[Col][Dim+1];
Sist[C1][Col]=0;
}
}

COMO PASO NUMERO DE 2 SE PROCEDIO REESCRIBIR EL CODIGO POR


COMPLETO EL LENGUAJE DE PROGRAMACION DE ARDUINO:
void loop() {
//PROGAMA PRINCIPAL
//PIDE NUMERO DE ECUACIONES O NUMERO DE FILAS
lcd.print("No. ecuaciones");
do {
DAP = Teclado1.waitForKey() ;
if(DAP=='-'){
RESTAR2 = DAP -46;
lcd.setCursor(0,1);
lcd.print(DAP);
}
else
{
if(DAP=='1'||DAP=='2'||DAP=='3'||DAP=='4'||DAP=='5'||DAP=='6'||DAP=='7'||
DAP=='8'||DAP=='9'||DAP=='0'){

num = DAP-48;
lcd.setCursor(PUNTO,1);
lcd.print(DAP);
PUNTO++;
}
x = x * 10 + num;
k = x * RESTAR2;
D = k / 10;
}
//ESPERA POR LA TECLA "C" = A ENTER
} while (DAP != 'C');
//REGRISTRA LOS DATOS INGRESADOS
lcd.clear();
lcd.setCursor(2,1);
lcd.print(D);
delay(500);
lcd.clear();
for(i=1;i<=D;i++) {
for(j=1;j<=D;j++){
lcd.setCursor(0,LINE);
lcd.print("dato ");
lcd.print(i);
lcd.print(",");
lcd.print(j);
do {
PAD = Teclado1.waitForKey() ;
if(PAD=='1'||PAD=='2'||PAD=='3'||PAD=='4'||PAD=='5'||PAD=='6'||PAD=='7'||
PAD=='8'||PAD=='9'||PAD=='0'){
HASTAGSALVANDOELSEMESTRESALVANDOELSEMESTRE = PAD-48;
lcd.setCursor(POINT+1,LINE);
lcd.print(PAD);
POINT++;
}
if(PAD=='-'){
RESTAR = PAD -46;
lcd.setCursor(POINT,LINE);
lcd.print(PAD);
}
COD[i][j] = COD[i][j] * 10 +
HASTAGSALVANDOELSEMESTRESALVANDOELSEMESTRE;
V[i][j] = COD[i][j] * RESTAR;
W2M[i][j] = V[i][j] / 10;
} while (PAD != 'C');
LINE++;
if (POINT+1>=19){
POINT = 17;
}
if (LINE>=4){
LINE = 0;

}
delay(500);
lcd.clear();
}
//MUESTRA LOS DATOS INGRESADOS
}
for (i=1;i<=D;i++) {
for (j=1;j<=D;j++){
u[i][j] = W2M[i][j]/1.00;
lcd.clear();
lcd.setCursor(0,LINE);
lcd.print(" n ");
lcd.print(i);
lcd.print(",");
lcd.print(j);
lcd.print(" ");
lcd.print(u[i][j]);
LINE++;
if (LINE>=4){
LINE = 0;
}
delay(500);
}
}
//PIDE EL RESULTADO DE CADA ECUACION
lcd.clear();
for(i=1;i<=D;i++){
lcd.setCursor(0,LINE);
lcd.print("valor ec. ");
lcd.print(i);
do {
DAP = Teclado1.waitForKey() ;
if(DAP=='1'||DAP=='2'||DAP=='3'||DAP=='4'||DAP=='5'||DAP=='6'||DAP=='7'||
DAP=='8'||DAP=='9'||DAP=='0'){
num = DAP-48;
lcd.setCursor(POINT+1,LINE);
lcd.print(DAP);
POINT=POINT+3;
}
if(DAP=='-'){
RESTAR2 = DAP -46;
lcd.setCursor(POINT,LINE);
lcd.print(DAP);
}
COD[i][D+1] = COD[i][D+1] * 10 + num;
V[i][D+1] = COD[i][D+1] * RESTAR2;
W2M[i][D+1] = V[i][D+1] / 10;
// ESPERA LA TECLA "C" COMO CONFIRMACION
} while (DAP != 'C');
LINE++;
if (POINT+1>=19){

POINT = 17;
}
if (LINE>=4){
LINE = 0;
}
delay(500);
lcd.clear();
}
//LIMPIA PANTALLA
//MUESTRA LOS RESULTADOS DE CADA ECUACION
for(i=1;i<=D;i++){
u[i][D+1] = W2M[i][D+1]/1.00;
lcd.clear();
lcd.setCursor(0,LINE);
lcd.print(" X ");
lcd.print(i);
lcd.print(" = \n");
lcd.print(u[i][D+1]);
LINE++;
if (LINE>=4){
LINE = 0;
}
delay(200);
}
delay(800);
//APLICA METODO DE GAUSS PARA RESOLVER
for(FUU=1;FUU<=D;FUU++){
KAKASHI = 0; i = FUU;
while(KAKASHI==0){
if((u[i][FUU]>0.0000001)||((u[i][FUU]<-0.0000001))){
KAKASHI=1;}
else i++;}
INICIO=u[i][FUU];
for(KOF=1;KOF<=(D+1);KOF++){
VECTOR=u[i][KOF];
u[i][KOF]=u[FUU][KOF];
u[FUU][KOF]=VECTOR/INICIO;}
for(KING=FUU+1;KING<=D;KING++){
VECTOR=u[KING][FUU];
for(KOF=FUU;KOF<=(D+1);KOF++){
u[KING][KOF]=u[KING][KOF]-VECTOR*u[FUU][KOF];}
}}
for(FUU=D;FUU>=1;FUU--) for(KOF=(FUU-1);KOF>=1;KOF--){
u[KOF][D+1]=u[KOF][D+1]-u[KOF][FUU]*u[FUU][D+1];
u[KOF][FUU]=0;
}
lcd.clear();
//MUESTRA LOS RESULTADOS DE LAS "EQUIS"
for(s=1;s<=D;s++){
lcd.setCursor(0,LINE);
lcd.print("x");

lcd.print(s);
lcd.print(" = \n");
lcd.print(" ");
lcd.print(u[s][D+1]);
delay(2000);
LINE++;
if (LINE>=4){
LINE = 0;
}
delay(300);
}
delay(700);
lcd.clear();
}

COMO PASO NUMERO 3 SE PROCEDIO A CONFIGURAR LA PARTE DE LA


LCD Y EL TECLADO:
#include <LiquidCrystal.h>
#include <Keypad.h>
char DAP;
char PAD;
int num,k,i,ax,j,s;
int HASTAGSALVANDOELSEMESTRESALVANDOELSEMESTRE;
int x,D;
int RESTAR2 = 1;
int RESTAR = 1;
int PUNTO = 1;
int POINT = 12;
int LINE = 0;
float H = 1;
int Z = 1;
int W2M[10][10];
int V[10][10];
float u[10][10];
int COD[10][10];
int C;
const byte Filas = 4;
const byte Cols = 4;

//Cuatro filas
//Cuatro columnas

byte Pins_Filas[] = {7, 6, 5, 4};


byte Pins_Cols[] = {3, 2, 1, 0};
char Teclas [ Filas ][ Cols ] =
{
{'7','8','9','/'},
{'4','5','6','x'},
{'1','2','3','-'},
{'C','0','=','+'}
};

//Pines Arduino para las filas


// Pines Arduino para las columnas

int KAKASHI,FUU,KOF,KING,KYO,RYO=0;
float INICIO,VECTOR,VECTOR2,DETERMINANTE=1;
// INICIALIZA LA INTERFAZ CON LOS PINES SELECCIONADOS
LiquidCrystal lcd(9, 8, 10, 11, 12, 13);
// PINES DE LA LCD (RS, E, D4~D7)
Keypad Teclado1 = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols,
Filas, Cols);
void setup() {
// DEFINE NUMERO DE FILAS Y COLUMNAS:
lcd.begin(20, 4);
// escribe mensaje en la LCD.
lcd.print("\n\n HELLO WORLD! \n\n ");
lcd.print("\n ING. MECATRONICA :] ");
delay(1000);
lcd.clear();
lcd.print("\n\n PROG. BASICA \(0)/ ");
delay(700);
lcd.clear();
lcd.print("perceverancia es =");
lcd.print("\n\n\n\n\n\n\n\n ......a exito");
delay(1000);
lcd.clear();
lcd.print("\n\n METODO GAUSS ");
delay(500);
lcd.clear();

COMO PASO NUMERO 4 SE PROCEDIO A INVESTIGAR LAS ENTRADAS O


PINES QUE TIENE LA LCD:

VSS:
Que es el pin de negativo o masa o 0 volts o GND.
VDD:
Es la alimentacin principal de la pantalla y el chip, lleva 5 voltios (recomendable
ponerle en serie una resistencia para evitar daos, con una de 220 ohm es
suficiente).
VO:
Es el contraste de la pantalla, debe conectarse con un potencimetro de unos
10k ohm o una resistencia fija una vez que encontremos el valor deseado de
contraste. Tengan en cuenta que si no conectan esto, no vern nada.
RS:
Es el selector de registro (el microcontrolador le comunica a la LCD si quiere
mostrar caracteres o si lo que quiere es enviar comandos de control, como
cambiar posicin del cursor o borrar la pantalla, por ejemplo).
RW:
Es el pin que comanda la lectura/escritura. En nuestro caso siempre estar en 0
(conectado a GND) para que escriba en todo momento.
E:
Es enable, habilita la pantalla para recibir informacin.
D0~D7:

Como pueden ver la pantalla tiene un bus de datos de 8 bits, de D0 a D7. Nos
servirn para establecer las lneas de comunicacin por donde se transfieren los
datos.
A y K:
Son los pines del led de la luz de fondo de la pantalla. A se conectar a 4 o 5
volts y K a gnd.

COMO PASO NUMERO 5 SE PROCEDIO A HACER EL DIAGRAMA EN


FRITZING DE LAS CONEXIONES DE LA LCD Y EL ARDUINO:

NOTA: SE UTILIZO UNA RESISTENCIA DE 220 HMS EN LA SALIDA DE 5V QUE


ALIMENTA A LA LCD PARA PREVENIR UN POSIBLE DAO, TAMBIEN SE UTILIZO
UN POTENCIOMETRO DE 10KHMS PARA REGULAR EL CONTRASTE DE LA LCD

COMO PASO NUMERO 6 Y YA CON TODO LO DEMAS LISTO SE PROCEDIO


A SIMULARLO CON EL ISIS PROTEUS 8 PARA VER SI TANTO EL CODIGO
COMO LAS CONEXIONES REALIZADAS FUNCIONABAN ADECUADAMENTE.

COMO ULTIMO PASO DESPUES DE HABER COMPROBADO QUE TODO


FUNCIONARA DE MANERA CORRECTA, SE PROCEDIO A MONTARLO EN LA
BREADBOARD:

CONEXIN:
ALIMENTACION Y CONTROL DE CONTRASTE:

GND DEL ARDUINO -> A PIN 1 = VSS DE LA LCD


5V DEL ARDUINO CON UNA RESISTENCIA DE 220HMS -> A PIN 2 = VDD DE
LA LCD
GND DEL ARDUINO -> A PIN 5 = RW DE LA LCD PARA QUE ESTE
HABILITADA SIEMPRE
5V DEL ARDUINO -> A PIN 15 = A+ DE LA LCD
GND DEL ARDUINO -> A PIN 16 = K- DE LA LCD
PIN NEUTRO DEL POTENCIOMETRO (PATITA DE EN MEDIO) -> A PIN 3 = VO
DE LA LCD.
CONEXIN DE TRANFERENCIA DE DATOS ENTRE EL ARDUINO Y LA LCD:
PIN DE ARDUINO D9 -> PIN 4 = RS DE LA LCD
PIN DE ARDUINO D8 -> PIN 5 = E DE LA LCD
PINES DE ARDUINO D10~D13 -> PIN 11~14 DE LA LCD

CONCLUCION
A partir de nuestros conocimientos previos adquirido en clases al ponerlos en prctica
en este proyecto llegamos a la manera de reflexionar lo que es capaz de realizar un pin
accionando su funcin en base a las libreras del software, combinando diferentes
elementos y estructurarlos de manera que nos permite realizar y solucionar con xito la
problemtica del programa.
Al conocer y saber determinadas entradas del arduino se puede realizar diversas
funciones desde bsicas como encender un simple LED, aplicado en la vida cotidiana
en los semforos que encontramos a diario o generar un proyecto de alta complejidad
como son los muy distinguidos drones.
Tomando en cuenta que nuestro proyecto y sin descartar todo lo que hemos terminado
no es tan sencillo como suena realizar una calculadora con el mtodo de Gauss ya
que poder realizar la programacin esencial tomo ms tiempo del determinado, ya que
marcaba errores al copilar y se volva al inicio para corregir esos detalles asi afinando
un poco ms la practica individual de los integrantes al momento de programar.

Vous aimerez peut-être aussi