Operaciones matemáticas y lógicas como sumar, restar, multiplicar, dividir, etc. pueden ser realizadas con la placa Arduino Uno. Esto permite que los proyectos, diseños y circuitos desarrollados con el microcontrolador de la placa Arduino uno, se puedan computarizar, es decir se puedan medir, procesar, aplicarles algoritmos, etc. en otras palabras la placa Arduino Uno es como una calculadora. en este articulo veremos cómo se puede usar Arduino Uno, con instrucciones matemáticas.

 

 

Muchas veces cuando queremos computar o cuantificar un problema, acudimos a la calculadora para resolver los posibles valores encontrados en el problema. Cuando se desarrollan circuitos con microcontrolador, podemos leer sensores prácticamente de cualquier tipo de señal y de acuerdo a unas reglas de funcionamiento, aplicar operaciones aritméticas para obtener el resultado deseado. Vamos a poner por ejemplo un control de temperatura para el control de un ambiente. Tenemos el sensor de temperatura y tenemos algunos setpoints para enfriamiento y calentamiento. Otro ejemplo, puede ser una fábrica de jabón, donde son usadas cintas transportadoras, con sus respectivos sensores para contar y actuadores para empaquetar los jabones en cajas. Aunque en el presente artículo no se muestren los programas completos para estos ejemplos, los vamos a usar como una referencia y poder entender el significado de las operaciones aritméticas y cómo podemos usarlas en nuestros proyectos.

En la Figura 1 podemos ver la placa de Arduino Uno y en la Figura 2 el software para el desarrollo de proyectos, el cual puede ser bajado de la página web de Arduino. En la Figura 3 mostramos la similitud o igualdad que hay entre la tarjeta de Arduino Uno y una Calculadora, pues los 2 permiten hacer operaciones aritméticas. En este artículo estudiaremos estas operaciones o instrucciones.

 

Figura 1. Targeta de Arduino Uno
Figura 1. Targeta de Arduino Uno

 

 

Figura 2. IDE de Arduino Uno
Figura 2. IDE de Arduino Uno

 

 

Figura 3. Igualdad entre Arduino Uno y la Calculadora
Figura 3. Igualdad entre Arduino Uno y la Calculadora

 

 

LA INSTRUCCIÓN SUMA (+)

La instrucción suma es la operación matemática que nos permite adicionar a un valor otro, por ejemplo:

2+7 = 9

En la operación de suma anterior, usamos la instrucción suma que normalmente encontramos en cualquier libro o calculo. Lo usamos a diario, normalmente en el trabajo, escuela, colegio, etc. Pero también la podemos usar en los circuitos que podamos crear o inventar con Arduino Uno. ¿Cómo puedo usar la suma para computar los circuitos electrónicos hechos con Arduino Uno? Esta pregunta puede ser desarrollada o entendida de la siguiente manera: La placa Arduino Uno tiene una memoria RAM, mas esta en blanco y sin etiquetar. Es decir, puedo almacenar valores pero necesito etiquetar o dar nombre a cada valor. Por ejemplo, para crear una variable o localización de memoria, puedo utilizar una instrucción como:

 

Int sensorTemperatura;

La línea de código anterior, está creando una variable o localización de memoria llamada sensorTemperatura. Es decir, está etiquetando un espacio de la memoria RAM. La memoria RAM, puede verse como una serie de cajones o compartimientos como es mostrado en la Figura 4.

 

Figura 4. Memoria RAM
Figura 4. Memoria RAM

 

 

Cuando se inicia un proyecto nuevo, estos cajones están sin nombre o sin etiquetar, pero después de escribir una instrucción como:

 

Int sensorTemperatura;

 

Entonces la memoria RAM estaría como es mostrado en la Figura 5.

 

Figura 5. Memoria RAM con etiqueta
Figura 5. Memoria RAM con etiqueta

 

 

Así, puedo dar nombre o etiquetar las variables necesitadas en los proyectos o circuitos que este creando. Vamos a crear más una variable en la memoria RAM. La llamaremos setpoint . El código quedaría como:

 

Int sensorTemperatura;

Int setpoint;

 

Ahora la memoria RAM se parecerá a lo mostrado en la Figura 6.

 

Figura 6. Memoria RAM con etiqueta
Figura 6. Memoria RAM con etiqueta

 

 

Al ejecutar el programa las variables pueden tener cualquier valor entre 0 y 65.535. Esto se debe a que la memoria RAM es del tipo aleatorio, es decir, al energizar el microcontrolador, la memoria RAM puede tener cualquier valor. Por ejemplo, una vez que se energice, el microcontrolador puede tener valores como mostrado en la Figura 7.

 

Figura 7. Valores de inicio en Memoria RAM
Figura 7. Valores de inicio en Memoria RAM

 

 

Pero si apagamos el circuito y volvemos a energizar, pueden aparecer valores como los mostrados en la Figura 8.

 

Figura 8. Valores de inicio en Memoria RAM
Figura 8. Valores de inicio en Memoria RAM

 

 

Si volvemos a apagar y de nuevo energizar el circuito, la memoria RAM puede tener los valores mostrados en la Figura 9.

 

Figura 9. Valores de inicio en Memoria RAM
Figura 9. Valores de inicio en Memoria RAM

 

 

Así, podemos comprender que por ser la memoria RAM, una memoria de tipo aleatorio (Random Access Memory), sus valores iniciales son desconocidos. Por este motivo es recomendable, inicializar con algún valor, las variables que estemos usando en nuestro proyecto o circuito. Para hacer esto, vasta asignarle un valor, cuando damos el nombre a la variable. Observe el código siguiente:

 

Int sensorTemperatura = 0;

 

Int setpoint = 33;

 

Se ha asignado un valor a cada variable y así el compilador genera instrucciones para que las variables sean iniciadas con sus respectivos valores. Si ejecutamos el programa en el microcontrolador, las localizaciones de memoria o variables, tendrán los valores mostrados en la Figura 10.

 

Figura 10. Valores Asignados en Memoria RAM
Figura 10. Valores Asignados en Memoria RAM

 

 

Si apagamos el circuito y lo volvemos a energizar, entonces los valores serán iguales a los mostrados en la Figura 10. Esto es válido para cada vez que se apague y se energice el circuito.

Vamos a crear 3 variables más en nuestro programa, como mostrado en la Figura 11.

 

 

Figura 11. Variables Asignados enRAM  para termostato
Figura 11. Variables Asignados enRAM para termostato

 

 

Esto puede ser usado para la construcción de un termostato o control de temperatura como mostrado en la Figura 12.

 

Figura 12. Termostato digital
Figura 12. Termostato digital

 

 

Como dicho anteriormente, los programas mostrados son ejemplos básicos para explicar las operaciones aritméticas. Vamos a inicializar sus valores como mostrado en el siguiente programa:

 

int sensorTemperatura = 0;

int setpoint = 33;

int setpointCalentamiento = 0;

int display = 0;

int histeresis = 2;



void setup() {

}



void loop() {

   setpointCalentamiento = setpoint + histerisis;

   sensorTemperatura = analogRead(A0);

   display = sensorTemperatura;

}

 

 

Al ejecutar el programa, los valores de la memoria RAM, estarán como mostrado en la Figura 13.

 

Figura 13. Variables en RAM  para termostato despues de ejecutado el programa
Figura 13. Variables en RAM para termostato despues de ejecutado el programa

 

 

Observemos que la variabledisplay, siempre tendrá el valor de la variable sensorTemperatura. Esto se debe a que la instrucción:

display = sensorTemperatura;

 

Está instrucción mueve el contenido de sensorTemperatura paradisplay . Recordemos que el símbolo igual (=) es llamado en la lenguaje C/C++, como operador de asignación y es usado para mover datos de una localización de memoria para otra. Podemos ver que el sensor de temperatura está leyendo 17.

También, podemos observar en la Figura 13, que el valor de setpointCalentamiento es 35. Al inicio del programa esta variable la iniciamos con cero (0) como muestra la siguiente instrucción:

int setpointCalentamiento = 0;

Pero al ejecutar el programa, esta variable pasa para 35, pues realizamos una suma y el resultado lo almacenamos en la variable setpointCalentamiento. Esto lo hace la instrucción:

setpointCalentamiento = setpoint + histerisis;

Así, podemos usar la suma en nuestros proyectos o circuitos con Arduino Uno.

 

LA INSTRUCCIÓN RESTA (-)

La instrucción resta es la operación que nos permite sustraer algo de un valor. Por ejemplo:

7-5=3

Hemos sustraído de 7, el valor de 5 y así su resultado es 3. ¿Pero cómo puedo usar esto, en el microcontrolador Arduino Uno? Veamos el siguiente programa ejemplo donde creamos una variable llamada setpointEnfriamientos.

 

Figura 14. Variables asignadas en RAM  para termostato
Figura 14. Variables asignadas en RAM para termostato

 

 

La Figura 14 muestra los valores asignados al inicio del programa. Las otras variables son similares al ejemplo usado anteriormente:

int sensorTemperatura = 0;

Int setpoint = 33;

int setpointCalentamiento = 0;

int setpointEnfriamiento = 0;

int display = 0;

int histeresis = 2;


void setup() {

}


void loop() {

setpointCalentamiento = setpoint + histerisis;

setpointEnfriamiento = setpoint - histerisis;

sensorTemperatura = analogRead(A0);

display = sensorTemperatura;

}

 

 Cuando ejecutamos el programa, los valores estarán como iniciando en la Figura 15.

 

Figura 15. Variables en RAM  para termostato despues de ejecutar el programa
Figura 15. Variables en RAM para termostato despues de ejecutar el programa

 

 

Podemos observar que la variable setpointEnfriamiento fue iniciado en cero (0). Pero al ejecutarse la instrucción:

setpointEnfriamiento = setpoint - histerisis;

 

la variable pasa a tener el valor el valor de 31, pues estamos restando o sustrayendo el valor de la variable histéresis (2), del valor de la variable setpoint (33).

En el siguiente programa, hemos inicializado la variable histéresis para 4. Después de ejecutar el programa, los valores de las variables o localizaciones de memoria, estarían como los mostrados en la Figura 16.

 

Figura 16. Variables en RAM  para termostato despues de ejecutar el programa
Figura 16. Variables en RAM para termostato despues de ejecutar el programa

 

 

int sensorTemperatura = 0;

Int setpoint = 33;

int setpointCalentamiento = 0;

int setpointEnfriamiento = 0;



int display = 0;

int histeresis = 4;


void setup() {

}


void loop() {

setpointCalentamiento = setpoint + histerisis;

setpointEnfriamiento = setpoint - histerisis;

sensorTemperatura = analogRead(A0);

display = sensorTemperatura;

}

 

Analice los resultados y observe como podemos ejecutar operaciones aritméticas en la placa Arduino Uno, con facilidad, como si fuera una calculadora.

 

LA INSTRUCCION MULTIPLICAR (*)

La instrucción multiplicar usa el símbolo asterisco (*) en el lenguaje C/C++. Veamos el siguiente ejemplo:

3*7 = 21

Recordemos que en matemática usamos normalmente la X para operaciones de multiplicar. Así, la anterior operación sería como:

3 X 7 = 21

Arduino Uno usa el lenguaje C/C++, por eso, debemos usar el asterisco (*) para hacer operaciones matemáticas de multiplicar.

 

 

Cinta
Cinta

 

 

Como ejemplo didáctico usaremos una fábrica productora de jabón, las cuales normalmente usan cintas transportadoras y contadores para estadísticas y control de producción. El peso de cada jabón es de 500 gramos o medio kilo. Veamos el siguiente programa:

int pesoJabon = 500;

Int contadorJabon = 7;

int pesoTotal = 0;


void setup() {

}


void loop() {

   pesoTotal = pesoJabon * contadorJabon;

}

 

 En la Figura 18 podemos ver los valores de las localizaciones de memoria, usadas en el programa.

 

 

Figura 18. Variables en RAM  para cinta transportadora despues de ejecutar el programa
Figura 18. Variables en RAM para cinta transportadora despues de ejecutar el programa

 

 

Observe que la variable pesoTotal fue inicializada con cero (0), pero después de ejecutar el programa, este valor es de 3500. Así, la instrucción:

pesoTotal = pesoJabon * contadorJabon;

 

va calculando o computando el peso total, cada vez que se incremente la variable contador de jabones (contadorJabones). Veamos de nuevo el siguiente programa donde la variable contadorJabon se ha inicializado con el valor de 12:

 

int pesoJabon = 500;

Int contadorJabon = 12;

int pesoTotal = 0;



void setup() {

}



void loop() {

   pesoTotal = pesoJabon * contadorJabon;

}

 

La Figura 19 muestra los resultados. Así, podemos usar la instrucción matemática multiplicar momo deseemos en nuestro circuito.

 

 

Figura 19. Variables en RAM  para cinta transportadora despues de ejecutar el programa
Figura 19. Variables en RAM para cinta transportadora despues de ejecutar el programa

 

 

LA INSTRUCCIÓN DIVICION (/)

La instrucción división en la lenguaje C/C++, usa el carácter slash (/), que se asemeja a una barra inclinada. Veamos el siguiente ejemplo:

7 / 3 = 2

En la anterior operación el resultado es 2. Si hubiera un sobrante o resto, este no hace parte del resultado, ya que estamos trabajando con números enteros, es decir sin parte decimal o fracción. Veamos el siguiente programa:

 

int pesoJabon = 500;

Int contadorJabon = 237;

int pesoTotal = 0;

contadorCajas = 0;


void setup() {

}



void loop() {

pesoTotal = pesoJabon * contadorJabon;

contadorCajas = contadorJabon / 12;

}

 

 

Vamos a suponer que en la fábrica de jabones queremos empaquetar 12 jabones por caja. Entonces usamos la siguiente instrucción:

contadorCajas = contadorJabon / 12;

 

La Figura 20, muestra el resultado del programa. Así, podemos usar la operación división en nuestros circuitos hechos con Arduino Uno.

 

Figura 20. Variables en RAM  para cinta transportadora despues de ejecutar el programa
Figura 20. Variables en RAM para cinta transportadora despues de ejecutar el programa

 

 

LA INSTRUCCIÓN INCREMENTAR (++)

La instrucción incrementar lo que hace es sumar uno (1) a una localización de memoria. Para hacer esto en el programa usado anteriormente, en la variable contador de jabones, tenemos que usar una línea de código como:

contadorJabon = contadorJabon + 1;

 

Para facilitar las cosas, el lenguaje C/C++, usa una instrucción de incremento usando la siguiente nomenclatura:

contadorJabon++;

 

Así, se pueden usar cualquiera de las 2 formas de incrementar, mostradas anteriormente, por que las 2 dan el mismo resultado. Observemos el siguiente programa:

 

int pesoJabon = 500;

Int contadorJabon = 7;

int pesoTotal = 0;

contadorCajas = 0;

 

void setup() {

contadorJabon ++;

}

 

void loop() {

pesoTotal = pesoJabon * contadorJabon;

 

contadorCajas = contadorJabon / 12;

}

 

La Figura 21 muestra los valores de inicialización de la memoria RAM.

 

Figura 21. Variables inicializadas en RAM  para cinta transportadora
Figura 21. Variables inicializadas en RAM para cinta transportadora

 

 

Observemos que la variablecontadorJabones, fue iniciada con 7. En la función setup(), se uso la instrucción:

contadorJabon++;

 

Así, en la Figura 22 se muestran los valores después de ejecutarse el programa y podemos observar que esta variable se incrementó en uno (1).

 

Figura 22. Variables en RAM  para cinta transportadora despues de ejecutar el programa.
Figura 22. Variables en RAM para cinta transportadora despues de ejecutar el programa.

 

Recordemos que la función setup(), solo se ejecuta una vez en un programa. Aquí, en este ejemplo, fue colocada la instrucción de incremento en la función setup(), para fines didácticos, pero esta instrucción debe estar en el loop principal y ser ejecutada cada vez que el sensor de un contador detecta que paso un jabón por la cinta rodante.

 

LA INSTRUCCIÓN DECREMENTAR (--)

La instrucción decrementar, resta o quita 1 a la variable o localización de memoria. Por ejemplo:

contadorJabon = contadorJabon + 1;

 

La anterior instrucción, lo que hace es restar o sustraer 1 a la variable contador de jabones (contadorJabones). En el lenguaje C/C++, para simplificar la escrita de código podemos usar la siguiente instrucción:

contadorJabon--;

 

Así, podemos usar cualquier de las 2 instrucciones vistas anteriormente. Pero la segunda instrucción es más cómoda y simple de escribir. Veamos el siguiente ejemplo:

 

int pesoJabon = 500;

Int contadorJabon = 7;

int pesoTotal = 0;

contadorCajas = 0;


void setup() {

contadorJabon--;

}


void loop() {

pesoTotal = pesoJabon * contadorJabon;

contadorCajas = contadorJabon / 12;

}

 

La Figura 23 muestra los resultados. Observemos que la variable contador de jabones (contadorJabones), fue iniciada con 7.

 

 

Figura 23. Variables en RAM  para cinta transportadora despues de ejecutar el programa – copia
Figura 23. Variables en RAM para cinta transportadora despues de ejecutar el programa – copia

 

 

En la función setup(), se decremento en 1, con la siguiente instrucción:

contadorJabon--;

Por ese motivo en la Figura 23, la localización de memoria contadorJabones aparece con el valor 6.

 

ACELEROMETRO DE 2 EJES.

Para ver el uso de operaciones aritméticas en circuitos y proyectos electrónicos, vamos a usar un acelerómetro como ejemplo. El circuito integrado Mensic 2125 es un acelerómetro de 2 ejes con salida digital capaz de medir la aceleración hasta más o menos 2g. También se puede medir inclinación, rotación, y vibración. El circuito puede ser visto en la Figura 24 y Figura 25.

 

Figura 24. Acelerometro MEMSIC 2125
Figura 24. Acelerometro MEMSIC 2125

 

 

Figura 25. Acelerometro MEMSIC 2125
Figura 25. Acelerometro MEMSIC 2125

 

 

Los pines de salida emiten pulsos cuya duración corresponde a la aceleración de ese eje. Con la función pulseIn(), podemos medir la duración de un pulso en microsegundos y así conocer la velocidad de aceleración. El circuito tiene un triángulo en la parte superior para el uso correcto de orientación. Vea la Figura 26.

 

 

Figura 26. Diagrama del MEMSIC 2125
Figura 26. Diagrama del MEMSIC 2125

 

 

Conecte los pines de voltaje a 5 Volts y GND a tierra. Conecte el pin digital 2 de la placa Arduino Uno, al pin de salida X del acelerómetro y el pin de salida digital 3 al pin de salida Y. Observemos, como hacemos uso de operaciones matemáticas para hacer los respectivos cálculos. En próximos artículos podemos extender el uso y practicas con acelerómetros, los cuales son cada día más usados en casi todos los equipos electrónicos. La Figura 27 muestra el circuito electrónico y la Figura 28 como montar el circuito en un protoboard.

 

Figura 27. Circuito electronico con Arduino Uno y MEMSIC 2125
Figura 27. Circuito electronico con Arduino Uno y MEMSIC 2125

 

 

 

Figura 28. Montaje en protoboard del MEMSIC 2125
Figura 28. Montaje en protoboard del MEMSIC 2125

 

 

El siguiente código lo encontramos en la IDE de Arduino, en el menú:Archivo->Ejemplos->06.Sensor->Memsic2125 . Vea la Figura 29, para ver el menú.

 

Figura 29. Menu de programa ejemplo para el acelerometro MEMSIC 2125
Figura 29. Menu de programa ejemplo para el acelerometro MEMSIC 2125

 

 

// these constants won't change:

const int xPin = 2; // X output of the accelerometer

const int yPin = 3; // Y output of the accelerometer



void setup() {

// initialize serial communications:

Serial.begin(9600);

// initialize the pins connected to the accelerometer as inputs:

pinMode(xPin, INPUT);

pinMode(yPin, INPUT);

}



void loop() {

// variables to read the pulse widths:

int pulseX, pulseY;

// variables to contain the resulting accelerations

int accelerationX, accelerationY;



// read pulse from x- and y-axes:

pulseX = pulseIn(xPin, HIGH);

pulseY = pulseIn(yPin, HIGH);


// convert the pulse width into acceleration

// accelerationX and accelerationY are in milli-g's:

// Earth's gravity is 1000 milli-g's, or 1 g.

accelerationX = ((pulseX / 10) - 500) * 8;

accelerationY = ((pulseY / 10) - 500) * 8;



// print the acceleration

Serial.print(accelerationX);

// print a tab character:

Serial.print("\t");

Serial.print(accelerationY);

Serial.println();



delay(100);

}

 

CONCLUCION.

El poder de un microcontrolador para hacer operaciones aritméticas es muy grande. En este artículo hemos visto las operaciones básicas, pero con estas, podemos usar o crear operaciones y cálculos prácticamente ilimitados, como raíz cuadrada, mínimos y máximos, estadísticas, etc. Con la práctica se puede ver que podemos hacer cualquier cálculo aritmético o matemático en la placa Arduino Uno. También podemos hacer aritmética con parte decimal.

Buscador de Datasheets



N° de Componente