0% encontró este documento útil (0 votos)
34 vistas16 páginas

Curso Avanzado de Arduino Nivel 2

El documento explica qué son las matrices y su papel en Arduino. Las matrices son estructuras de datos bidimensionales que organizan elementos en filas y columnas, lo que facilita el acceso y manipulación de datos. En Arduino, las matrices permiten almacenar y manipular conjuntos de valores de manera organizada, por ejemplo para almacenar píxeles de imágenes o valores de sensores.
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 PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
34 vistas16 páginas

Curso Avanzado de Arduino Nivel 2

El documento explica qué son las matrices y su papel en Arduino. Las matrices son estructuras de datos bidimensionales que organizan elementos en filas y columnas, lo que facilita el acceso y manipulación de datos. En Arduino, las matrices permiten almacenar y manipular conjuntos de valores de manera organizada, por ejemplo para almacenar píxeles de imágenes o valores de sensores.
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 PDF, TXT o lee en línea desde Scribd

S

CURSO DE ARDUINO 2

Las Matrices
Instructor: Ing. Konrad Peschka

Edición y textos PDF: Ing. Pablo Aquim [email protected]


Curso de Arduino nivel 2

¿QUÉ SON LAS MATRICES ?

En matemáticas y programación, una matriz es una estructura de datos


que organiza elementos en filas y columnas. Es similar a una tabla
bidimensional o una cuadrícula.

Puedes imaginar una matriz como una colección de elementos


dispuestos en filas y columnas, donde cada elemento tiene una posición única
definida por su fila y columna. Cada elemento de la matriz se denomina
"elemento de la matriz" o "entrada de la matriz".

Las matrices se utilizan para almacenar y manipular datos de manera


estructurada. Puedes acceder a los elementos de la matriz utilizando índices
que indican la posición del elemento en la matriz. Los índices de fila y
columna comienzan típicamente desde 0.

Por ejemplo, considera la siguiente matriz de 3 filas y 4 columnas:

2 4 6 8
1 3 5 7
9 0 2 4

Instructor: Ing. Konrad Peschka 1


Curso de Arduino nivel 2

En esta matriz, el elemento en la primera fila y la segunda columna es el


número 3.

Las matrices se utilizan en una variedad de aplicaciones, como


representar datos tabulares, realizar cálculos numéricos, manipular imágenes
y procesar datos en algoritmos.

Es importante tener en cuenta que las matrices pueden tener diferentes


dimensiones, es decir, diferentes números de filas y columnas. Pueden ser
matrices unidimensionales (vectores), matrices bidimensionales (como en el
ejemplo anterior) o incluso matrices multidimensionales con más de dos
dimensiones.

En definitiva, una matriz es una estructura de datos bidimensional que


organiza elementos en filas y columnas, lo que facilita el acceso y la
manipulación de datos de manera estructurada.

¿QUÉ PAPEL JUEGA UNA MATRIZ EN ARDUINO ?

ANTES HAGAMOS

UN REPASO DE VECTORES

Instructor: Ing. Konrad Peschka 2


Curso de Arduino nivel 2

VECTORES O ARRAYS
Recordemos que para crear un vector o array lo escribimos de la
siguiente forma, supongamos además ponerle como nombre justamente
VECTOR:

El número escrito entre corchetes es lo que


indicará cuántas variables vamos a necesitar
int vector [ 3 ] bajo este mismo nombre (vector en este caso)
y será además la misma cantidad de espacios
de memoria que ocuparemos.

Este es el nombre del vector o array La gran ventaja que tendremos es


(elegimos como nombre vector para el que bajo un mismo nombre (vector en
ejemplo y suponemos que sea una este caso) podremos acceder a distintas
variable de tipo int. variables. El programa lo hará en forma
Nótese que tendremos tres variables bajo secuencial.
un mismo nombre: vector

int vector [ 3 ] = { 3 , 4, 5 }

Memoria
Arduino
3 4 5 (posiciones
de memoria)

La sintaxis entre llaves le indicará al programa que en la primera posición


de la memoria de Arduino cargue el valor 3, en la segunda posición cargue el
valor 4 y en la tercera el valor 5.

Cuando creamos un vector o array, el programa automáticamente


reserva el primer espacio para el vector, espacio que corresponde a un índice
cero (en este primer espacio se almacenará el primer valor indicado en la
inicialización) y en los siguientes espacios, índice 1, índice 2, índice 3, etc,
almacenará los restantes valores indicados en la inicialización, en nuestro
ejemplo primero el 3, luego el 4 y en la posición tres o índice tres el 5.

Instructor: Ing. Konrad Peschka 3


Curso de Arduino nivel 2

De acuerdo a nuestro ejemplo:

int vector [0] int vector [1] int vector [2]

Corresponde a Corresponde a
Corresponde a 3º espacio
1º espacio 2º espacio

3 4 5

Memoria con datos del vector

VOLVAMOS AHORA AL CONCEPTO DE MATRICES EN EL


CONTEXTO DE ARDUINO

Podemos imaginar a una matriz en Arduino como vectores superpuestos,


en donde el vector es unidimensional (una sóla fila) en cambio ya
superpuestos se convierten en una matriz que ahora es de más de una
dimensión (varias filas), en el ejemplo siguiente tenemos una matriz
bidimensional: dos filas y cinco columnas:

Colum 0 Colum 1 Colum 2 Colum 3 Colum 4

fila 0 247 230 110 52 75

fila 1 74 19 126 8 47

Se puede decir que un vector es una matriz unidimensional en cierto


sentido. Ambos son estructuras de datos que almacenan elementos en
posiciones contiguas en la memoria. Tanto los vectores como las matrices se
utilizan para almacenar conjuntos de valores del mismo tipo.

Instructor: Ing. Konrad Peschka 4


Curso de Arduino nivel 2

La diferencia principal radica en la dimensión de la estructura. Un vector


es un arreglo unidimensional, lo que significa que almacena elementos en una
sola dirección utilizando un único índice. Por otro lado, una matriz es una
estructura bidimensional que organiza los elementos en filas y columnas, lo
que implica el uso de dos índices para acceder a los elementos.

Entonces, aunque un vector y una matriz comparten algunas similitudes


en términos de almacenamiento y manipulación de datos, la diferencia clave
está en la dimensión de la estructura. Un vector es una matriz
unidimensional, pero una matriz en general se refiere a una estructura
bidimensional o multidimensional.

En el contexto de Arduino, una matriz es una estructura de datos


bidimensional que se utiliza para almacenar y manipular conjuntos de valores
de manera organizada. Puedes pensar en una matriz como una tabla o una
cuadrícula que tiene filas y columnas.

En Arduino, una matriz se declara especificando su tamaño, es decir, el


número de filas y columnas que tendrá. Por ejemplo, si quieres crear una
matriz de 3 filas y 4 columnas, puedes hacerlo de la siguiente manera:
int matriz[3][4];

En esta declaración, `matriz` es el nombre que le damos a la matriz, y


`[3][4]` indica que tendrá 3 filas y 4 columnas. Puedes ajustar el tamaño de la
matriz según tus necesidades.

Una vez que has creado la matriz, puedes acceder a sus elementos
utilizando los índices de fila y columna. Por ejemplo, para acceder al elemento
en la fila 2 y columna 3 de la matriz, puedes hacer lo siguiente:
int elemento = matriz[1][2];

Aquí, el índice `[1][2]` se refiere a la segunda fila (índice 1) y tercera


columna (índice 2) de la matriz. Recuerda que los índices en Arduino y en la
mayoría de los lenguajes de programación comienzan desde 0.

Las matrices en Arduino son útiles cuando necesitas almacenar y


manipular datos en una estructura de dos dimensiones, como almacenar
píxeles de una imagen, valores de sensores en una cuadrícula, o cualquier
otro conjunto de datos que requiera una organización en filas y columnas.

Instructor: Ing. Konrad Peschka 5


Curso de Arduino nivel 2

APLICACIÓN PRÁCTICA
A UN CONTROL DE ACCESO

OBJETIVO

En base a la codificación de la clase anterior (ver recurso 6.2 Control de


acceso con RFID) nos proponemos desarrollar un sistema RFID que permita
dar acceso a los dos identificadores utilizados anteriormente, el llavero de
acceso y la tarjeta de acceso.

A tal efecto se deberán cargar una matriz, en una fila los números
identificatorios del llavero y en la fila siguiente los números identificatorios de
la tarjeta.

De tal forma que cuando se presente cualquiera de los identificadores,


llavero o tarjeta , el sistema permita el acceso, pero para cualquier otra
tarjeta deniegue el acceso.

El sistema dará un mensaje de bienvenida: “Apoye Tarjeta”.

Al apoyar la tarjeta entregará el mensaje: “Tarjeta detectada”.

Si la identificación de la tarjeta conicide con el código guardado en la


matríz, entregará el mensaje: “Acceso Aceptado” y encenderá el Led Verde.

Si la identificación de la tarjeta no conicide con el código guardado en la


matríz, entregará el mensaje: “Acceso Denegado” y encenderá el Led Rojo.

Instructor: Ing. Konrad Peschka 6


Curso de Arduino nivel 2

DIAGRAMA DE FLUJO

Instructor: Ing. Konrad Peschka 7


Curso de Arduino nivel 2

Instructor: Ing. Konrad Peschka 8


Curso de Arduino nivel 2

SOLUCION DE LA PROGRAMACIÓN

const int ledrojo=A1 ;


const int ledverde=A0 ;

#include <SPI.h>
#include <RFID.h>
#define RST_PIN 9
#define SS_PIN 10

RFID tarjeta_rfid(SS_PIN, RST_PIN);

const int id_usuario [2] [5]= {{74,19,126,8,47},


{247,230,110,52,75} };

int fila=0;

void setup()
{
pinMode(ledrojo, OUTPUT);
pinMode(ledverde,OUTPUT);

Serial.begin(9600);

SPI.begin();
tarjeta_rfid.init();

Serial.println("Apoye su tarjeta o tag RFID");


}

void loop()
{
if (tarjeta_rfid.isCard())
{
Serial.println("Tarjeta detectada:");

if(chequeo_tarjeta()==1)
{

Instructor: Ing. Konrad Peschka 9


Curso de Arduino nivel 2

Serial.println("Acceso Aceptado");
digitalWrite(ledverde, HIGH);

delay(3000);
digitalWrite(ledverde, LOW);

}
else
{
Serial.println("Acceso Denegado");
digitalWrite(ledrojo, HIGH);
delay(3000);
digitalWrite(ledrojo, LOW);
}
}
delay(1000);
}

bool chequeo_tarjeta()
{
tarjeta_rfid.readCardSerial();

fila=0;

for(int i=0;i<5;i++)
{
if (tarjeta_rfid.serNum[i]!=id_usuario [fila] [i])
{
fila++;

i=0;

if (fila>1) // salgo de la function si ya se terminaron de chequear todas las filas


{
return 0;
}
}
}
return 1;
}

Instructor: Ing. Konrad Peschka 10


Curso de Arduino nivel 2

ANÁLICEMOS LAS INSTRUCCIONES ANTERIORES

//-----------------------------------------------------------------------------------
// Este codigo se encarga de leer el ID de la tarjeta
// Libreria original modificado y traducido al español de :
// https://www.instructables.com/id/Interfacing-RFID-RC522-With-Arduino-MEGA-
a-Simple-/
// Traduccion y adaptacion: Konrad Peschka 2020
// Instagram: @konredus
//-------------------------------------------------------------------------------------

/*
PINOUT de como conectamos el Modulo al Arduino:
RC522 Uno/Nano MEGA
SDA / NSS D10 D9
SCK D13 D52
MOSI D11 D51
MISO / MIOS 12 D50
IRQ N/C N/C
GND GND GND
RST D9 D8
3.3V 3.3V 3.3V
*/

//Incluimos las librerias del SPI y del RFID


#include <SPI.h>
#include <RFID.h>

//Se definen los pines que son puntuales para este Modulo
//Que son el Reset y el SS (Select)
#define RST_PIN 9
#define SS_PIN 10

Instructor: Ing. Konrad Peschka 11


Curso de Arduino nivel 2

//Creo la Clase RFID


RFID tarjeta_rfid(SS_PIN, RST_PIN);

//creo una matriz con los datos id_usuario que quiero chequear
//estos codigos los obtenemos del ejemplo de lectura

const int id_usuario [2] [5]= {{74,19,126,8,47}, // id tarjeta


{247,230,110,52,75} }; // id llavero

int fila=0; // esta variable me permitirá saltar de fila

const int ledrojo=A1 ;


const int ledverde=A0 ;

void setup()
{
pinMode(ledrojo, OUTPUT);
pinMode(ledverde,OUTPUT);

Serial.begin(9600);

//inicia la comunicación en modo SPI (Serial Peripheral Interface).


SPI.begin();
//inicia la comunicación en modo SPI (Serial Peripheral Interface).
// inicializa el módulo o la tarjeta RFID antes de comenzar a utilizarla.
tarjeta_rfid.init();

//muestro un mensaje por puerto serie


Serial.println("Apoye su tarjeta o tag RFID");
}

void loop()
{
//se queda esperando si se detecta una tarjeta RFID
if (tarjeta_rfid.isCard())
{
//imprimimos por Serial que detectamos una tarjeta
Serial.println("Tarjeta detectada:");

Instructor: Ing. Konrad Peschka 12


Curso de Arduino nivel 2

//lo que hago en este if es llamar a la funcion que


//se encarga de chequear posicion por posicion lo
//que se leyo de la tarjeta

if(chequeo_tarjeta()==1)
{
Serial.println("Acceso Aceptado");

digitalWrite(ledverde, HIGH);
delay(3000);
digitalWrite(ledverde, LOW);

}
else
{
Serial.println("Acceso Denegado");
// enciendo luz roja
digitalWrite(ledrojo, HIGH);
delay(3000);
// luego de 3 segundos apago luz roja
digitalWrite(ledrojo, LOW);
}
}
delay(1000);
}

//Aqui esta la funcion que se encarga de verificar


//si cada una de las posiciones coincide con el id_usuario
//que ingresamos arriba de todo

bool chequeo_tarjeta()
{

// la función chequeo_tarjeta() utiliza la siguiente función


// tarjeta_rfid.readCardSerial() para obtener el número de serie de la tarjeta
//RFID y luego compara ese número con el número de serie del usuario
//almacenado en id_usuario[][] para determinar si la tarjeta es válida o no.

Instructor: Ing. Konrad Peschka 13


Curso de Arduino nivel 2

tarjeta_rfid.readCardSerial();

//con el siguiente for recorremos todas las posiciones

fila=0; // con esto me aseguro que fila arranque en cero.

for(int i=0;i<5;i++)
{
//el truco de este if es chequear si alguna de las posiciones NO coinciden
if(tarjeta_rfid.serNum[i]!=id_usuario [fila] [i])
{

fila++; // antes de salir incremento fila

i=0; // reseteamos i para que vuelva a posicionarse en la columna cero

if (fila>1) // salgo de la function si ya se terminaron de chequear todas las filas


{
return 0;
}
}
}
//si llego hasta aca, es por que todas las posiciones coincidieron
//por ende esta funcion nos va a retornar 1
return 1;
}

Instructor: Ing. Konrad Peschka 14


Curso de Arduino nivel 2

PRUEBA FUNCIONAL

Acceso Aceptado: (autoriza el LLAVERO)


247
230
110
52
75

Acceso Aceptado: (autoriza la TARJETA)


74
19
126
8
47

Instructor: Ing. Konrad Peschka 15

También podría gustarte