Explicacion Basica:

Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.

El hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida. Los microcontroladores más usados son el Atmega168, Atmega328, Atmega1280, ATmega8 por su sencillez y bajo coste que permiten el desarrollo de múltiples diseños. Por otro lado el software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring y el cargador de arranque (boot loader) que corre en la placa.

Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software del ordenador (por ejemplo: Macromedia Flash, Processing, Max/MSP, Pure Data). Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede descargar gratuitamente.

Al ser open-hardware, tanto su diseño como su distribución es libre. Es decir, puede utilizarse libremente para el desarrollo de cualquier tipo de proyecto sin haber adquirido ninguna licencia.

La placa Arduino Standard tiene 14 pines con entradas/salidas digitales (6 de las cuales pueden ser usadas como salidas PWM), 6 entradas analógicas, un cristal oscilador a 16Mhz, conexión USB, entrada de alimentación, una cabecera ISCP, y un botón de reset.

Los programas hechos con Arduino se dividen en tres partes principales: estructura, valores (variables y constantes), y funciones. El Lenguaje de programación Arduino se basa en C/C++.

https://arduino.cc/es/Reference/HomePage

Al ser un entorno Open hardware y ser una gran comunidad, se han diseñado muchos tipos de placas Arduino distintas aparte de las mencionadas anteriormente. Como todas están basadas en la misma base de programación vamos a centrarnos en la Placa Arduino UNO que es una placa standard y nos permite hacer pruebas de una manera sencilla. 

Existen varios tipos de Placas Arduino por ejemplo:

  • Arduino Nano
  • Arduino Mini
  • Arduino BT
  • LilyPad Arduino
  • Arduino Fio
  • Arduino Pro
  • Arduino Pro Mini
  • Xbee shield
  • Ethernet shield
  • Arduino UNO
  • Arduino Mega

Entradas y Salidas

Cada uno de los 14 pines digitales del Arduino puede ser usado como entrada o salida digital, usando las funciones :

-pinMode()

-digitalWrite()

-digitalRead()

Operan a 5 voltios. Cada pin puede proporcionar o recibir un máximo de 40 mA y tiene una resistencia interna "pull-up" (desconectada por defecto) de 20-50 KOhms. Además, algunos pines tienen funciones especiales:

Pines serie Rx y Tx : Sirven para recibir transmitir datos (TTL), están conectados al chip FTDI, el cual hace conversión de USB a serie- TTL.

Interruptores externos: 2 y 3. Estos pines pueden ser configurados para disparar un interruptor en un valor bajo, un margen creciente o decreciente, o un cambio de valor. Con la función:

-attachInterrupt().

PWM: 3, 5, 6, 9, 10 y 11. Proporcionan salida PWM de 8 bits con la función:

- analogWrite() .

I ²C: 4 (SDA) y 5 (SCL): El software Arduino incluye una librería Wire para simplifcar el uso del bus I ²C. Son buses para comunicarse con otros dispositivos. Soportan comunicación con libreria Wire. Esta libreria se utiliza para comunicarse con elementos TWI (Two Wire Interfaces) que tienen mas velocidad.

SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines soportan comunicación SPI, la cual, aunque proporcionada por el hardware subyacente, no está actualmente incluida en el lenguaje Arduino.

LED: 13. Hay un LED empotrado conectado al pin digital 13. Cuando el pin está a valor HIGH, el LED está encendido, cuando el pin está a LOW, está apagado.

Tiene 6 entradas analógicas, cada una de las cuales proporciona 10 bits de resolución (por ejemplo 1024 valores diferentes). Por defecto miden 5 voltios desde tierra, aunque es posible cambiar el valor más alto de su rango usando el pin AREF y algún código de bajo nivel. Para programar y leer la entrada de estos pines analógicos utilizamos la función:

-analogRead()

Además, algunos pines tienen funcionalidad especializada:

AREF: Voltaje de referencia para las entradas analógicas. Usado con analogReference(). Es para entradas analógicas. Nos permite dar a la placa un voltaje de referencia al suministrarle una alimentación externa. si queremos medir el voltaje con un rango máximo de 3,3v, alimentaríamos 3,3v en el pin AREF con un regulador de voltaje IC. entonces el ADC representaría 3,22 mV.

Reset. Pone esta linea a LOW para resetear el microcontrolador. Típicamente usada para añadir un botón de reset a dispositivos que bloquean a la placa principal.

Comunicación

Serial: Arduino tiene un numero de infraestructuras para comunicarse con un ordenador, otro Arduino, u otros microcontroladores. Los microcontroladores mas populares actualmente son los ATmega que utiliza proveen comunicación serie UART TTL (5 V), la cual está disponible en los pines digitales 0 (Rx) y 1 (Tx). Usados para recibir (Rx) y transmitir (Tx) datos TTL en serie. Estos pines estan conectados a los pines correspondientes del chip FTDI USB-a-TTL Serie.

Por ejemplo: Las placas Arduino Diecimila y Duemilanove utilizan chip FTDI FT232RL como conversor USB-Serial. La Arduino UNO utiliza un chip Atmega16U2.

Un FTDI en la placa canaliza esta comunicación serie al USB y los drivers FTDI (incluidos con el software Arduino) proporcionan un puerto de comunicación virtual al software del ordenador. El software Arduino incluye un monitor serie que permite a datos de texto simple ser enviados a y desde la placa Arduino.

Una librería SoftwareSerial permite comunicación serie en cualquiera de los pines digitales de Arduino.

Programación

El Arduino puede ser programado con el software Arduino.

El ATmega del Arduino vienen con un bootloader pregrabado que permite subirle nuevo código sin usar un programador hardware externo. Se comunica usando el protocolo original STK500. También puedes saltar el bootloader y programar el ATmega a través de la cabecera ICSP (In-Circuit Serial Programming).

Alimentación

Puede ser alimentado vía la conexión USB o con una fuente de alimentación externa. El origen de la alimentación se selecciona automáticamente. Las fuentes de alimentación externas (no-USB) pueden ser tanto un transformador o una batería. El transformador se puede conectar usando un conector jack macho de 2.1mm con centro positivo en el conector hembra de la placa. Los cables de la batería puede conectarse a los pines Gnd y Vin en los conectores de alimentación (POWER).

Los pines de alimentación son los siguientes:

-VIN. La entrada de voltaje a la placa Arduino cuando se esta usando una fuente externa de alimentación (en opuesto a los 5 voltios de la conexión USB). Se puede proporcionar voltaje a través de este pin.

-5V. La fuente de voltaje estabilizado usado para alimentar el microcontrolador y otros componentes de la placa. Esta puede provenir de VIN a través de un regulador integrado en la placa, o proporcionada directamente por el USB o otra fuente estabilizada de 5V.

-3V3. Una fuente de voltaje a 3.3 voltios generada en el chip FTDI integrado en la placa. La corriente máxima soportada 50mA.

-GND. Pines de toma de tierra..

Arduino UNO

La Placa Arduino UNO tiene un micro controlador ATMEGA16U2-MU que utiliza como conversor USB en vez del chip FTDI que utilizaban las antiguas placas.

Ademas tiene un procesador micocontrolador Atemega328, siendo mas rápida y optima que las antiguas Arduino Duemilanove y la Diecimila con microcontrolador Atemega168.

IOREF

En el bloque de alimentación se han añadido 2 pines, uno marcado como IOref servirá para que la placa reconozca el tipo de alimentación que requieren los shieds (3.3v ó 5v) y al otro se le dará uso en futuras versiones.

Entorno de Desarrollo para Arduino (Arduino Software)

El entorno de Desarrollo Arduino está constituido por un editor de texto para escribir el código, un área de mensajes, una consola de texto, una barra de herramientas con botones para las funciones comunes, y una serie de menús. Permite la conexión con el hardware de Arduino para cargar los programas y comunicarse con ellos. 

Referencia del lenguaje

https://www.arduino.cc/en/Reference/HomePage

Librerias

https://www.arduino.cc/en/Reference/Libraries


REFERENCIA PARA EL PROGRAMADOR DEL LENGUAJE ARDUINO

Referencias para el programador del lenguaje Arduino, con las distintas instrucciones y sentencias disponibles en el lenguaje, organizados por categorías y con un ejemplo de cada caso.

Esta referencia no es un manual de programación. Es una orientacion a gente con conocimientos de programación, que sirve para aprendizaje rápido, consulta, y compendio de la sintaxis de programación del lenguaje Arduino.

OPERADORES Y COMPARADORES

COMPARADORES

//x igual a y

x == y 

//x distinto de y

x != y 

//x menor que y 

 x < y 

 //x mayor que y

x > y 

//x menor o igual que y

x <= y 

//x mayor o igual que y

x >= y  

OPERADORES ARITMÉTICOS

//operador de asignación

a = b 

//adición

a + b 

//substracción

a - b 

//multiplicación

a * b 

//división

a / b 

//modulo

a % b

OPERADORES DE BITS

/ /and binario

a & b 

 //or binario

a ' b 

 //xor binario

a ^ b 

 //not binario

a ~ b

 //desplazamiento a izquierda

a << b 

 //desplazamiento a derecha

a >> b  

OPERADORES COMPUESTOS

//incremento

a++ 

//decremento

a-- 

//adición compuesta

a += b 

//substracción compuesta

a -= b

//multiplicación compuesta

a *= b 

//división compuesta

a /= b 

//and compuesto

a &= b 

//or compuesto

a '= b

OPERADORES BOOLEANOS

//not

!a 

//and

a && b 

//or

a '' b 

OPERADORES DE ACCESO

//operacion indirección

*variable 

//operacion dirección

&variable 

DECLARACIÓN Y CONVERSIÓN DE TIPOS DE VARIABLES

//tipo vacio (solo para funciones)

void 

BOOLEANOS

//booleano, false o true

boolean = false;

o

boolean = true;  

ENTEROS

//entero, 16 bits, de -32,768 a 32,767

int var = 100; 

//entero, 16 bits, de 0 a 65535 (excepto en Due, donde son 32 bits)

unsigned int var = 100; 

//entero, 16 bits, de 0 a 65535

short var = 100; 

//entero, 32 bits, de -2,147,483,648 a 2,147,483,647

long var = 100000L; 

//entero, 32bits, de 0 a 4,294,967,295

unsigned long var = 100000L;

COMA FLOTANTE

//coma floante, 32 bits, de -3.4028235E+38 a 3.4028235E+38. Precision 6 digitos

float var = 1.117; 

//idéntico a float, excepto en Arduino Due donde es flotante de 64 bits

double var = 1.117;

BYTES

//8 bits, de 0 a 255

byte var = B10010; 

//16bits, sin signo, de 0 a 65535

word var = 10000; 

CARACTERES

//8 bits, de -128 a 127

char var = 'A'; 

//8 bits, de 0 a 255

unsigned char var = 240;

CONVERSIÓN ENTRE VARIABLES

//convierte a char

char(variable); 

//convierte a byte

byte(variable); 

//convierte a int

int(variable); 

//convierte a word

word(variable); 

//convierte a long

long(variable); 

//convierte a floa

tfloat(variable); 

CUALIFICADORES DE VARIABLES

//STATIC: Variables visibles únicamente en el interior de una función, y cuyo valor se mantiene entre llamadas a la misma.

static int variable; 

//CONST//Variables cuyo valor no puede ser redefinido tras la inicialización

const float pi = 3.14; 

//VOLATILE: Variables en las que se indica al compilador que no guarde en los registros del microprocesador, sino que fuerza la actualización en memoria. Esto se hace cuando existe la posibilidad de que el valor de la variable sea modificado por otro proceso que se ejecuta concurrentemente con el actual (por ejemplo cuando se emplean hilos o interrupciones)

volatile int variable = LOW; 

VECTORES

CREACIÓN DE VECTORES

//declarar vector

int miArray[5]; 

//iniciar vector

int miArray[] = {2, 4, 8, 3, 6}; 

//declarar e iniciar vector

int miArray[5] = {2, 4, -8, 3, 2}; 

MANIPULACIÓN VECTORES

//asignar valor a elemento del vector

miArray[0] = 10; 

//obtener valor de elemento del vector

x = miArray[4]; 

CADENAS DE TEXTO

TEXTOS COMO VECTOR DE CARACTERES

char cadena1[15];

char cadena2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};

char cadena3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};

char cadena4[ ] = "texto";

char cadena5[8] = "texto";

char cadena6[15] = "texto"; 

//vector de cadenas

char* cadenaArray[]={"Cadena 1", "Cadena 2", "Cadena 3","Cadena 4", "Cadena 5", "Cadena 6"}; 

TEXTOS COMO OBJETO STRING

// literal de cadena de texto

String txtMsg = "Hola";

 // convirtiendo un char a String

String txtMsg = String('a'); 

// convirtiendo un literal a String

String txtMsg = String("Texto"); 

// concatenando dos literales a String

String txtMsg = String("texto1" + "texto2"); 

CONDICIONALES

CONDICIONAL ABREVIADO

condition ? true : false;

CONDICIONAL IF

if (variable < 10){ 

 // accion A

}

 if (variable < 10){ 

 // accion A

}else{ 

 // 

accion B

 if (variable < 10){ 

 // accion A

}else if (variable >= 100){ 

 // accion B

}else{ 

 // accion C

CONDICIONAL SWITCH / CASE OF

switch (variable) { 

 case 1: 

 // accion A 

 break; 

 case 2: 

 // accion B 

 break; 

 default: 

 // caso por defecto (opcional)} 

BUCLES

BUCLE FOR

for (int i=0; i <= 100; i++){ 

 // accion

}  

BUCLE WHILE

variable = 0; 

while(variable < 100){ 

 // accion 

 variable++;


BUCLE DO WHILE

do

 //accion 

 variable++;

while (variable < 100); 

FUNCIONES MATEMÁTICAS

FUNCIONES DE RANGO

//devuelve mínimo entra a y b

min(a,b); 

//devuelve máximo entra a y b

max(a,b); 

//devuelve valor absoluto de a

abs(a); 

//devuelve x restringido a (a,b)

constrain(x, a, b); 

//interpola linealmente y entre x1,y1 x2,y2

map(x, x1, x2, y1, y2); 

POTENCIACIÓN

//devuelve a^b (ambos tipo float)

pow(a,b); 

//devuelve la raiz cuadrada de a

sqrt(a); 

NÚMEROS ALEATORIOS

//inicializa la semilla del generador de numeros pseudo aleatorios

randomSeed(semilla); 

//devuelve un numero aleatorio entre a y b (ambos tipo long)

random(a, b); 

TRIGONOMETRIA

//devuelve el seno de a (a tipo float y en radianes)

sin(a);

//devuelve el coseno de a (a tipo float y en radianes)

cos(a); 

//devuelve la tangente de a (a tipo float y en radianes)

tan(a); 

FUNCIONES DE BITS Y BYTES

//devuelve el byte menos signiticativo de una palabra o variable.

lowByte(variable); 

//devuelve el byte más significativo de una palabra (o el segundo byte menos significativo en variables mayores)

highByte(variable); 

//devuelve el bit n de una variable x (siendo el bit 0 el menos significativo)

bitRead(x, n); 

//escribe el bit n de la variable x con el valor b (siendo el bit 0 el menos significativo)

bitWrite(x, n,b ); 

//pone a 1 el bit n de la variable 

xbitSet(x, n); 

//pone a 0 el bit n de la variable 

xbitClear(x, n); 

//obtiene el valor del bit n (idéntico a 2^n)

bit(n); 

FUNCIONES DE TEXTOS

//delvuelve el caracter en la posición 3 (idéntico a txtMsg[3];)

txtMsg.charAt(3); 

//sustituye el caracter en la posición 3 por "A" (idéntico a txtMsg[3]="A";)

txtMsg.setCharAt("A", 3); 

//concatena texto 1 y texto 2 (idéntico a texto1=texto1+texto2;)

texto1.concat("texto2"); 

//devuelve la longitud de la cadena

txtMsg.length(); 

//devuelve la cadena convertida en minúsculas

txtMsg.toLowerCase(); 

//devuelve la cadena convertida en mayúsculas

txtMsg.toUpperCase(); 

//elimina espacios y carácteres incorrectos

txtMsg.trim(); 

//devuelve la cadena de texto como entero

txtMsg.toInt(); 

COMPARACIÓN

//compara dos cadenas. Devuelve 1 si texto1 es mayor que texto2, 0 si son iguales, y -1 en caso contrario

texto1.compareTo(texto2); 

//compara si dos cadenas son iguales (idéntico a texto1==texto2)

texto1.equals(texto2); 

//compara si dos cadenas son iguales, ignorando mayúsculas y minúsculas

texto1.equalsIgnoreCase(texto2);

SUBCADENAS

//devuelve una subcadena de la posicion 3 a la 10

txtMsg.substring(3, 10); 

//comprueba si la cadena empieza por "texto", con offset 3

txtMsg.startsWith("texto", 3); 

//comprueba si la cadena empieza por "texto", con offset 3

txtMsg.endsWith("texto"); 

BÚSQUEDA Y SUSTITUCIÓN

//devuelve el índice de la primera ocurrencia de 'A', a partir de la posición offset

txtMsg.indexOf('A', offset); 

//devuelve el índice de la última ocurrencia de 'A' previa a la posición offset

txtMsg.lastIndexOf('A', offset); 

//sustituye las ocurrencias de "texto1" por "texto2"

txtMsg.replace("texto1", "texto2"); 

FUNCIONES DE USUARIO

VARIABLES GLOBALES

int option=1; 

int cambiar(){ 

 option=4;

void setup(){ 

 Serial.begin(9600);

void loop(){ 

 cambiar(); 

 Serial.print(option);  //muestra 4 

 delay(10000);


PASO DE PARÁMETROS POR VALOR

int cambiar(var){ 

 var=4;

void setup(){ 

 Serial.begin(9600);

void loop(){ 

 int option=1; 

 cambiar(option); 

 Serial.print(option); //muestra 1 

 delay(10000);


PASO DE PARÁMETROS POR REFERENCIA

int cambiar(int &var){ 

 var=4;

void setup(){ 

 Serial.begin(9600);

void loop(){ 

 int option=1; 

 cambiar(option); 

 Serial.print(option); //muestra 4 

 delay(10000);


PASO DE PARÁMETROS POR PUNTERO

int cambiar(int* var){

 *var=4;

void setup(){ 

 Serial.begin(9600);

void loop(){ 

 int option=1; 

 cambiar(&option); 

 Serial.print(option); //muestra 4 

 delay(10000);

DEVOLUCIÓN DE VALORES

int cambiar(){ 

 int var=4; return var;

void setup(){ 

 Serial.begin(9600);

void loop(){ 

 int option=1; 

 option=cambiar(); 

 Serial.print(option); //muestra 4 

 delay(10000);


TIPOS DATOS AVANZADOS (ENUM / STRUCT / TYPEDEF)

ENUMERACIONES

//declaracion

enum miEnumeracion { 

 opcion1, 

 opcion2, 

 opcion3

}; 

//ejemplo de uso

miEnumeracion variable = opcion2; 

if (variable==opcion2){

 //accion


ESTRUCTURAS

//declaracion

struct miEstructura

 int campo1; 

 int campo2; 

 char campo3;

}; 

//ejemplo de uso

struct miEstructura variable; 

variable.campo1=10; 

DEFINICION DE TIPOS DE DATOS DE USUARIO

//declaraciones

typedef int nuevotipo;

typedef enum miEnumeracion nuevotipo;

typedef struct miEstructura nuevotipo; 

//ejemplo de usonuevo

tipo variable; 

CLASES

EJEMPLO DE USO DE CLASE

class MiRobot;

//definicion de clase ejemplo

class MiRobot

{

public:

void saludar(); //muestra "Hola"

void incCont(); //incrementa contador

int getCont(); //devuelve contador

void sayCont(); //muestra valor contador

void setCont(int); //inicializa contador a un valor

private:

int cont=0; //variable contador privada

};

//muestra "Hola"

void MiRobot::saludar(){

Serial.println("Hola");

}

void MiRobot::incCont(){

this->cont++;

}

//devuelve contador

void MiRobot::getCont(){

return this->cont;

}

//muestra valor contador

void MiRobot::sayCont(){

Serial.println(this->cont);

}

//inicializa contador a un valor

void MiRobot::setCont(int _cont){

this->cont=_cont;

}

void setup(){

Serial.println("Iniciando");

Serial.begin(9600);

MiRobot robot;

robot.saludar(); //se muestra hola

}

void loop(){

robot.incCont(); //se incrementa el contador

robot.sayCont(); //muestra el valor

delay(1000);

}

¡Crea tu página web gratis! Esta página web fue creada con Webnode. Crea tu propia web gratis hoy mismo! Comenzar