# Placa Arduino

## Pinout placa Arduino

La tarjeta de desarrollo Arduino UNO es la plataforma ideal para empezar a realizar las pruebas necesarias para el curso. Recordemos que antes de empezar a trabajar con cualquier plataforma de desarrollo es necesario conocer como mínimo el mapa de pines de esta. A continuación, se muestra el mapa de pines para la tarjeta Arduino UNO ([link](https://store-usa.arduino.cc/products/arduino-uno-rev3))

{% embed url="<https://github.com/UdeA-IoT/iot-2022_1/raw/main/percepcion/sesion1/arduino_uno/arduino_uno.png>" %}
Pin Out Arduino UNO
{% endembed %}

La siguiente tabla resume la información del mapa de pines para el Arduino UNO:

<table data-view="cards"><thead><tr><th>Tipo</th><th>Notación pines (placa)</th></tr></thead><tbody><tr><td>Digital/GPIO</td><td><p><code>D0, D1, D2, ~D3, D4, ~D5, ~D6,</code></p><p><code>D7, D8, ~D9</code></p></td></tr><tr><td>Analog in</td><td><code>A0, A1, A2, A3, A4, A5</code></td></tr><tr><td>PWM</td><td><code>~D3, ~D5, ~D6, ~D9, ~D10, ~D11</code></td></tr><tr><td>Serial (UART)</td><td><code>Tx->, Rx&#x3C;-</code></td></tr><tr><td>I2C</td><td><code>A4/SDA, A5/SCL</code></td></tr><tr><td>Digital SPI</td><td><code>~D10/SS, ~D11/MOSI, D12/MISO, D13/SCK</code></td></tr><tr><td>Interrupt</td><td><code>D1/INT0, D3/INT1</code></td></tr></tbody></table>

## Funciones principales del API

Es importante notar, que los pines son multifuncionales, es decir, pueden ser empleados para diferentes funciones. La determinación de la función que puede llevar un pin se hace por programación. Para analizar los ejemplos se recomienda que tenga a la mano el documento **Arduino Cheat Sheet** (adjunto a continuación). Este contiene un resumen de algunas de las principales funciones que se usan para programar plataformas Arduino. Para mas información sobre estas puede consultar la sección [Language Reference](https://www.arduino.cc/reference/en/).

{% file src="<https://4115294714-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxugokskCzICXfnqSP3ui%2Fuploads%2F5l7c502Hnlz69VOaLE5V%2FArduino-Cheat-Sheet.pdf?alt=media&token=68198021-6e57-41d5-9d3d-3fc5da704b1b>" %}
Arduino Cheat Sheet
{% endfile %}

## Librerias adicionales

Ademas de las funciones, propias del API de Arduino, es posible hacer uso de librerias para agregar funcionalidad extra (tal y como sucede con el software). Una de las mayores fortalezas de la plataforma Arduino se encuentra en que esta posee una gran numero de librerias. En la sección [Libraries](https://www.arduino.cc/reference/en/libraries/) se encuentra toda la información relacionada con diferentes librerias existentes, hardware soportado y, adicionalmente, se muestra como realizar una libreria. Hay tres cosas fundamentales para trabajar con librerias:

1. Instalación de librerias ([Installing Libraries](https://docs.arduino.cc/software/ide-v1/tutorials/installing-libraries))
2. Escritura de librerias ([Writing a Library for Arduino](https://docs.arduino.cc/learn/contributions/arduino-creating-library-guide))
3. Guia de estilo ([Arduino Style Guide for Creating Libraries](https://docs.arduino.cc/learn/contributions/arduino-library-style-guide))

## Ejemplos basicos

Cuando se tienen unas nociones basicas de programación, la mejor manera para aprender consiste en leer, ejecutar y comprender código a traves del desarrollo de ejemplos sencillos. Luego, y luego, aplicando lo ya aprendido realizar la adaptación del código al caso particular. Para hacer esto, nuestra recomendación es que tenga a la mano los siguientes materiales:

<table><thead><tr><th width="89.33333333333331">Item</th><th width="203">Material</th><th>Link</th></tr></thead><tbody><tr><td>1</td><td>Language Reference</td><td><a href="https://www.arduino.cc/reference/en/">https://www.arduino.cc/reference/en/</a></td></tr><tr><td>2</td><td>Built-in Examples</td><td><a href="https://docs.arduino.cc/built-in-examples/">https://docs.arduino.cc/built-in-examples/</a></td></tr><tr><td>3</td><td>Libraries</td><td><a href="https://www.arduino.cc/reference/en/libraries/">https://www.arduino.cc/reference/en/libraries/</a></td></tr><tr><td>4</td><td>Tutorials</td><td><a href="https://docs.arduino.cc/tutorials/">https://docs.arduino.cc/tutorials/</a></td></tr></tbody></table>

La idea es empezar a mirar unos cuantos ejemplos los cuales vienen implementados en IDE de arduino tal y como se muestra en la siguiente figura:

{% embed url="<https://github.com/UdeA-IoT/iot-2022_1/raw/main/percepcion/sesion1/arduino_uno/ejemplos_arduino-uno.png>" %}
Ejemplos integrados en el IDE de Arduino
{% endembed %}

### Ejemplo 1

En este ejemplo se pone a parpadear un led a un periodo de 2 segundos. La descripción completa del ejemplo se encuentra en [Blink](https://docs.arduino.cc/built-in-examples/basics/Blink).&#x20;

#### Código

```arduino
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  
  delay(1000);                       
  digitalWrite(LED_BUILTIN, LOW);    
  delay(1000);                       
}
```

#### Esquemático

<figure><img src="https://camo.githubusercontent.com/6d51cc59f4ba919ccd8455f78f936754afd853c12fe9a471834e753f74aa6f55/68747470733a2f2f646f63732e61726475696e6f2e63632f7374617469632f63386462656666373836653532363831633364306539656539353235653134302f32393131342f736368656d617469632e706e67" alt=""><figcaption><p>Esquematico</p></figcaption></figure>

#### Conexiones

<figure><img src="https://camo.githubusercontent.com/9552dc917334dc3d2c57f6c674c11dde52d933823520deacf36240d1a5ef7887/68747470733a2f2f646f63732e61726475696e6f2e63632f7374617469632f35326332333864626130396332653430623639653036313266663032656630662f61366433362f636972637569742e706e67" alt=""><figcaption><p>Diagrama de conexión</p></figcaption></figure>

### Ejemplo 2

Este ejemplo se encuentra en [How to Wire and Program a Button](https://docs.arduino.cc/built-in-examples/digital/Button). En éste se prende un led cuando se presiona un switch.

#### Código

```arduino
const int buttonPin = 2;     
const int ledPin =  13;      

int buttonState = 0;         

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);
}

void loop() {
  buttonState = digitalRead(buttonPin);

  if (buttonState == HIGH) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}
```

#### Esquemático

<figure><img src="https://camo.githubusercontent.com/8c0e489c01288cf38a4eb5616a1b8e201150ada0e26f8f1b9d16c44f8fe42891/68747470733a2f2f646f63732e61726475696e6f2e63632f7374617469632f66623834343962343833346466626266336330333232336338626333653562352f61366433362f736368656d617469632e706e67" alt=""><figcaption></figcaption></figure>

#### Conexiones

<figure><img src="https://camo.githubusercontent.com/b0a4fb506f98be53723649a318f2e1cb6a4054e81a85d14f65d4a845dfca288f/68747470733a2f2f646f63732e61726475696e6f2e63632f7374617469632f37333730326565313231383630666130346337663664623562633737313833622f61366433362f636972637569742e706e67" alt=""><figcaption></figcaption></figure>

### Ejemplo 3

Este ejemplo es tomado de [Fading](https://docs.arduino.cc/built-in-examples/analog/Fading). En este ejemplo se modifica el brillo de un led de manera automatica.

#### Código

```arduino
int ledPin = 9;    

void setup() {
  // nothing happens in setup
}

void loop() {

  for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
    analogWrite(ledPin, fadeValue);
    delay(30);

  }

  for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 5) {
    analogWrite(ledPin, fadeValue);
    delay(30);
  }
}

```

#### Esquemático

<figure><img src="https://camo.githubusercontent.com/aa48153864dcd5eeffaba878cdfac980d14d610dc5b7b40c3d60a364ed5d4082/68747470733a2f2f646f63732e61726475696e6f2e63632f7374617469632f64653432623364333938636634303736386331333530383933323432386664622f61366433362f736368656d617469632e706e67" alt=""><figcaption></figcaption></figure>

#### Conexiones

<figure><img src="https://camo.githubusercontent.com/6e7e7d3b56309d6991fdabdc705aa2461aa9b918e0c6430fc31bf2f8606cd856/68747470733a2f2f646f63732e61726475696e6f2e63632f7374617469632f30373962316261623337353836303361353663356439386531663539613838652f61366433362f636972637569742e706e67" alt=""><figcaption></figcaption></figure>

### Ejemplo 4

Este ejemplo es tomado de [Analog Read Serial](https://docs.arduino.cc/built-in-examples/basics/AnalogReadSerial). Aqui, se lee un potenciometro y se imprime su estado a traves del monitor serial.

#### Código

```arduino
void setup() {
  Serial.begin(9600);
}


void loop() {
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);
  delay(1);        
}

```

#### Esquemático

<figure><img src="https://camo.githubusercontent.com/ce9d705484b14efeca3dfd61aa1b45d032dbaba20b86c609084994de5e7718fb/68747470733a2f2f646f63732e61726475696e6f2e63632f7374617469632f33626238343265633038623861383366383863316137633332383030666534312f61366433362f736368656d617469632e706e67" alt=""><figcaption></figcaption></figure>

#### Conexiones

<figure><img src="https://camo.githubusercontent.com/b0360b87ecdba1c04adfb900bce571bdf70cb66e18b1319c0ba5a3e62129cab3/68747470733a2f2f646f63732e61726475696e6f2e63632f7374617469632f31303834326230343939613565346533373061656463643232326235326532632f35613139302f636972637569742e706e67" alt=""><figcaption></figcaption></figure>

### Ejemplo 5

Este ejemplo es tomado de [Analog In, Out Serial](https://docs.arduino.cc/built-in-examples/analog/AnalogInOutSerial). Aqui, se usa un potenciometro para controlar el brillo de un led; adicionalmente, se imprime su estado a traves del monitor serial.

#### Código

```arduino
const int analogInPin = A0;  
const int analogOutPin = 9; 

int sensorValue = 0;        
int outputValue = 0;        

void setup() {
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(analogInPin);
  outputValue = map(sensorValue, 0, 1023, 0, 255);
  analogWrite(analogOutPin, outputValue);
  Serial.print("sensor = ");
  Serial.print(sensorValue);
  Serial.print("\t output = ");
  Serial.println(outputValue);
  delay(2);
}
```

#### Esquemático

<figure><img src="https://camo.githubusercontent.com/9e5205d8f37b61cc1d592dd0bc6f8bff3edc56314c99fcd40c9d1d894540f28a/68747470733a2f2f646f63732e61726475696e6f2e63632f7374617469632f33396135646136653036633531333035666130626239303266336361623165332f61366433362f736368656d617469632e706e67" alt=""><figcaption></figcaption></figure>

#### Conexiones

<figure><img src="https://camo.githubusercontent.com/011cce030b1081d4618aca1f723bcdd4b7d1eb6f04e1f7d35edea568cffbc78e/68747470733a2f2f646f63732e61726475696e6f2e63632f7374617469632f37646266623462346330393062613162633532633261373739383232623866392f61366433362f636972637569742e706e67" alt=""><figcaption></figcaption></figure>

## Actividad

El proceso de trabajo a lo largo de esta sesión de trabajo será:

1. Descargar codigo.
2. Montar circuito.
3. Programar.
4. Probar.

## Referencias consultadas

* [https://wiki.seeedstudio.com/Grove\_Starter\_Kit\_v3/  ](https://wiki.seeedstudio.com/Grove_Starter_Kit_v3/https://learn.adafruit.com/groups/ladyadas-learn-arduinohttps://learn.adafruit.com/series/learn-arduinohttps://www.sparkfun.com/products/15631https:/learn.sparkfun.com/tutorials/tinker-kit-circuit-guidehttps://learn.adafruit.com/experimenters-guide-for-metro)
* [https://learn.adafruit.com/groups/ladyadas-learn-arduino  ](https://wiki.seeedstudio.com/Grove_Starter_Kit_v3/https://learn.adafruit.com/groups/ladyadas-learn-arduinohttps://learn.adafruit.com/series/learn-arduinohttps://www.sparkfun.com/products/15631https:/learn.sparkfun.com/tutorials/tinker-kit-circuit-guidehttps://learn.adafruit.com/experimenters-guide-for-metro)
* [https://learn.adafruit.com/series/learn-arduino  ](https://wiki.seeedstudio.com/Grove_Starter_Kit_v3/https://learn.adafruit.com/groups/ladyadas-learn-arduinohttps://learn.adafruit.com/series/learn-arduinohttps://www.sparkfun.com/products/15631https:/learn.sparkfun.com/tutorials/tinker-kit-circuit-guidehttps://learn.adafruit.com/experimenters-guide-for-metro)
* [https://www.sparkfun.com/products/15631  ](https://wiki.seeedstudio.com/Grove_Starter_Kit_v3/https://learn.adafruit.com/groups/ladyadas-learn-arduinohttps://learn.adafruit.com/series/learn-arduinohttps://www.sparkfun.com/products/15631https:/learn.sparkfun.com/tutorials/tinker-kit-circuit-guidehttps://learn.adafruit.com/experimenters-guide-for-metro)
* [https://learn.sparkfun.com/tutorials/tinker-kit-circuit-guide  \
  https://learn.adafruit.com/experimenters-guide-for-metro](https://wiki.seeedstudio.com/Grove_Starter_Kit_v3/https://learn.adafruit.com/groups/ladyadas-learn-arduinohttps://learn.adafruit.com/series/learn-arduinohttps://www.sparkfun.com/products/15631https:/learn.sparkfun.com/tutorials/tinker-kit-circuit-guidehttps://learn.adafruit.com/experimenters-guide-for-metro)
