# Kit Arduino Uno # Instalação #### Objetivo: Familiarização com placa Arduino compatível UNO (Fig.1) e exemlo de utilização usando o IDE Arduino. #### Lista de material:
[![usb_cable.jpg](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/usb-cable.jpg)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/usb-cable.jpg)[![arduino_board.jpg](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/arduino-board.jpg)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/arduino-board.jpg)
(a) (b)
Fig.1 - Conjunto de desenvolvimento composto por cabo USB (a) e placa Arduino compatível UNO (b).
##### Software
[![b7Xe2cV.png](https://i.imgur.com/b7Xe2cV.png)](https://i.imgur.com/b7Xe2cV.png)[![board-ide0.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-ide0.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-ide0.png)
Fig.2 - [Software IDE Arduino](https://www.arduino.cc/en/software).
O software IDE (Integrated Development Environment) Arduino é uma aplicação multiplataforma que permite desenvolver programas e carregue-los para a placa de desenvolvimento, cuja instalação se recomenda [\[8\]](https://www.arduino.cc/en/software), e se assume por diante (Fig.2). #### Contextualização: ##### Placa Arduino compatível UNO A placa Arduino compatível UNO contém um microcontrolador e um chip USB para série CH340 (Fig.3). Um microcontrolador é um componente que contém um ou mais processadores, uma memória e interface compatível com entrada e saída de periféricos que permite processar dados e executar tarefas de informática básica. A placa Arduino compatível UNO dispõe de duas formas de ser alimentada. A primeira é por meio da conexão com cabo USB tipo A ([Fig.1 (a)](#bkmrk-%28a%29)), que pode ser conectado a um computador, sendo por essa conexão, também possível enviar software para a placa.
[![board_subtitled2.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-subtitled2.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-subtitled2.png)[![board_drawing.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-drawing.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-drawing.png)
abotão de reset
bconector USB
cfonte de alimentação
dconectores de alimentação elétrica
eentradas analógicas
fconexões digitais
gindicador LED de energia
hindicadores LED de estado de comunicação série RX/TX
iindicador LED programável
Fig.3 - Elementos principais selecionados de placa Arduino compatível UNO.
##### Gestor de placas O pacote **Arduino AVR Boards**, deve estar instalado no IDE Arduino de forma a que se possa compilar e transferir programas para a placa Arduino compatível UNO. Tal como ilustrado na Fig.4, o IDE Arduino dispõe de um gestor de placas, que permite gerir e instalar pacotes para várias placas de desenvlvimento.
[![board_ide1.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-ide1.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-ide1.png)[![board_ide2.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-ide2.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-ide2.png)
Fig.4 - Exemplo de utilização de gestor de placas do IDE Arduino para instalação de pacote **Arduino AVR Boards**.
##### Configuração da placa Tal como ilustrado na Fig.5, o IDE Arduino permite a seleção da placa e da porta lógica onde está conectada a placa.
[![mdLUtEA.png](https://i.imgur.com/mdLUtEA.png)](https://i.imgur.com/mdLUtEA.png)[![cOL8uZU.png](https://i.imgur.com/cOL8uZU.png)](https://i.imgur.com/cOL8uZU.png)
(a)(b)
[![gR2ft4p.png](https://i.imgur.com/gR2ft4p.png)](https://i.imgur.com/gR2ft4p.png)[![9bJYHY2.png](https://i.imgur.com/9bJYHY2.png)](https://i.imgur.com/9bJYHY2.png)
(c)(d)
Fig.5 - Exemplo de utilização do IDE Arduino para configuração da placa de desenvolvimento Arduino compatível UNO.
Por vezes, dependendo das características particulares do sistema usado, a placa de desenvolvimento Arduino compatível UNO pode não ser automaticamente reconhecida. Na eventualidade da placa ligada ao computador através de cabo USB não aparecer na lista de portas lógicas listadas no IDE Arduino (Fig.5 (b)), sugere-se a instalação dos drivers do CH340, tal como em [\[7\]](https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all). #### Exemplo de utilização (Pisca LED): Um exemplo clássico para iniciar a programação de placa Arduino e placas compatíveis é o Pisca LED, que consiste em ligar e desligar um LED em intervalos de 1 segundo (Fig.7). Um programa é composto de uma sequência de comandos, normalmente escritos em um arquivo de texto. Considerando o IDE Arduino previamente configurado para a placa de desenvolvimento ligada ao computador e o seguinte programa de exemplo (Código.1), sugere-se a consulta da Fig.6 para reprodução do exemplo de programação do Arduino compatível UNO.
```C void setup() { pinMode(LED_BUILTIN, OUTPUT); } void loop() { digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); } ```
Código.1 - Programa Pisca LED.
[![q3yo3F3.png](https://i.imgur.com/q3yo3F3.png)](https://i.imgur.com/q3yo3F3.png)[![Q8s2IVM.png](https://i.imgur.com/Q8s2IVM.png)](https://i.imgur.com/Q8s2IVM.png)
[![board_ide5.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-ide5.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-ide5.png)[![board_ide6.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-ide6.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-ide6.png)
Fig.6 - Ilustração da programação da placa Arduino compatível UNO com o IDE Arduino.
[![uno.gif](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/uno.gif)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/uno.gif)
Fig.7 - Exemplo de Arduino compatível UNO a executar o programa que controla o LED da placa de desenvolvimento.
#### Outros exemplos
*[![w4QdtAr.png](https://i.imgur.com/w4QdtAr.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps)**[![h8eDfvF.png](https://i.imgur.com/h8eDfvF.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled)**[![orKSYyb.png](https://i.imgur.com/orKSYyb.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec)*
[\[a\]](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps)[\[b\]](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled)[\[c\]](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec)
\[a\] DEEC - FCTUC. Kit Arduino Uno > \[exemplo\] módulo GPS. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps) (acedido em 10/04/2024). \[b\] DEEC - FCTUC. Kit Arduino Uno > \[exemplo\] I2C OLED. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled) (acedido em 10/04/2024). \[c\] DEEC - FCTUC. Kit Arduino Uno > \[exemplo\] rumo ao DEEC. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec) (acedido em 10/04/2024). #### Referências \[1\] Arduino. Documentação de Referência da Linguagem Arduino. url: [https://docs.arduino.cc/learn/programming/reference/](https://docs.arduino.cc/learn/programming/reference/) (acedido em 03/04/2024). \[2\] Arduino. Introdução ao IDE (Integrated Development Environment) Arduino. url: [https://docs.arduino.cc/software/ide-v2/tutorials/getting-started-ide-v2/ ](https://docs.arduino.cc/software/ide-v2/tutorials/getting-started-ide-v2/)(acedido em 03/04/2024). \[3\] Arduino. Introdução a Programação para Arduino. url: [https://docs.arduino.cc/learn/programming/sketches/](https://docs.arduino.cc/learn/programming/sketches/) (acedido em 03/04/2024). \[4\] Arduino. Instalação do IDE Arduino. url: [https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-downloading-and-installing](https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-downloading-and-installing) (acedido em 03/04/2024). \[5\] Arduino. Instalação de Suporte para Placa no IDE. url: [https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-board-manager](https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-board-manager) (acedido em 03/04/2024). \[6\] Arduino. Transferência de Sketches (Programas) para Placa Arduino. url: [https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-uploading-a-sketch](https://docs.arduino.cc/software/ide-v2/tutorials/getting-started/ide-v2-uploading-a-sketch) (acedido em 03/04/2024). \[7\] SparkFun. How to Install CH340 Drivers. url: [https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all](https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all) (acedido em 03/04/2024). \[8\] Arduino. Downloads. url: [https://www.arduino.cc/en/software](https://www.arduino.cc/en/software) (acedido em 10/04/2024). # [exemplo] módulo GPS #### Objetivo: Demonstrar o uso de módulo GPS (Global Positioning System) com Arduino para obter dados GPS. #### Lista de material:
[![board_overview.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-overview.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-overview.png)[![board_drawing.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-drawing.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-drawing.png)
Fig.1 - Placa Arduino compatível UNO.
[![gps_mod.jpg](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/gps-mod.jpg)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/gps-mod.jpg)[![R53TQnH.png](https://i.imgur.com/R53TQnH.png)](https://i.imgur.com/R53TQnH.png)
Fig.2 - Módulo GPS com interface UART/TTL.
#### Contextualização: ##### Sistema de posicionamento global O sistema de posicionamento global, mais conhecido pela sigla GPS (em inglês Global Positioning System), é um sistema de navegação por satélite que fornece a um aparelho receptor móvel a sua posição, assim como o horário.
[![GPS24goldenSMALL.gif](https://upload.wikimedia.org/wikipedia/commons/e/e5/GPS24goldenSMALL.gif)](https://upload.wikimedia.org/wikipedia/commons/e/e5/GPS24goldenSMALL.gif)[![Hyperbolic_Navigation.svg](https://upload.wikimedia.org/wikipedia/commons/9/91/Hyperbolic_Navigation.svg)](https://upload.wikimedia.org/wikipedia/commons/9/91/Hyperbolic_Navigation.svg)[![Comparison_satellite_navigation_orbits.svg](https://upload.wikimedia.org/wikipedia/commons/b/b4/Comparison_satellite_navigation_orbits.svg)](https://upload.wikimedia.org/wikipedia/commons/b/b4/Comparison_satellite_navigation_orbits.svg)
Fig.3 - Apontamentos sobre GPS retirados de \[2\].
##### Set-up
[![70uITOr.png](https://i.imgur.com/70uITOr.png)](https://i.imgur.com/70uITOr.png)
placa Arduino compatível UNO módulo GPS com interface UART/TTL
3.3V----------------------V
GND----------------------G
2----------------------R
3----------------------T
Fig.3 - Montagem ilustrativa das ligações a estabelecer entre placa de desenvolvimento e módulo GPS com interface UART/TTL.
##### Bibliotecas Bibliotecas são coleções de código que perimitem ampliar a capacidade da placa de desenvolvimento facilitando a sua utilização. O IDE Arduino integra um gestor de Bibliotecas cujo uso se exemplifica na Fig.4. A placa Arduino compatível UNO possui suporte integrado para comunicação série nos pinos 0 e 1. A Biblioteca *SoftwareSerial* permite estabelecer comunicação série nos restantes pinos digitais da placa. Neste exemplo sugere-se a utilização desta abordagem para proporcionar que o módulo GPS e a placa possam comunicar. No exemplo abaixo, os pinos digitais 2 e 3 da placa Arduino compatível UNO são usados como linhas série RX e TX virtuais. Desta forma estabelece-se a ligação que permite que a placa escute a porta série do GPS e, quando os dados são recebidos do módulo, eles são enviados para placa. Sendo os dados comunicados pelo módulo GPS tipicamente numa linguagem padrão do GPS é comum o uso de Bibliotecas como a *TinyGPSPlus* para facilitar o uso da informação disponibilizada pelo módulo GPS num formato legível e útil.
[![oHv2Eft.png](https://i.imgur.com/oHv2Eft.png)](https://i.imgur.com/oHv2Eft.png)[![X2LQZxM.png](https://i.imgur.com/X2LQZxM.png)](https://i.imgur.com/X2LQZxM.png)
(a)(b)
Fig.4 - Exemplo de utilização do gestor de bibliotecas do IDE Arduino para instalação da Biblioteca *TinyGPSPlus*.
##### Programa
```C #include #include SoftwareSerial gpsSerial(2, 3); // RX, TX TinyGPSPlus gps; void setup() { gpsSerial.begin(9600); Serial.begin(115200); } void loop() { while (gpsSerial.available() > 0){ if (gps.encode(gpsSerial.read())) displayInfo(); } if (millis() > 5000 && gps.charsProcessed() < 10) { Serial.println(F("No GPS detected: check wiring.")); while(true); } } void displayInfo() { Serial.print(F("Location: ")); if (gps.location.isValid()) { Serial.print(gps.location.lat(), 12); Serial.print(F(",")); Serial.print(gps.location.lng(), 12); } else { Serial.print(F("INVALID")); } Serial.print(F(" Date/Time: ")); if (gps.date.isValid()) { Serial.print(gps.date.month()); Serial.print(F("/")); Serial.print(gps.date.day()); Serial.print(F("/")); Serial.print(gps.date.year()); } else { Serial.print(F("INVALID")); } Serial.print(F(" ")); if (gps.time.isValid()) { if (gps.time.hour() < 10) Serial.print(F("0")); Serial.print(gps.time.hour()); Serial.print(F(":")); if (gps.time.minute() < 10) Serial.print(F("0")); Serial.print(gps.time.minute()); Serial.print(F(":")); if (gps.time.second() < 10) Serial.print(F("0")); Serial.print(gps.time.second()); Serial.print(F(".")); if (gps.time.centisecond() < 10) Serial.print(F("0")); Serial.print(gps.time.centisecond()); } else { Serial.print(F("INVALID")); } Serial.println(); } ```
Código.1 - Programa exemplo de utilização de módulo GPS e biblioteca *TinyGPSPlus* com placa Arduino compatível UNO.
\[exemplo\] módulo GPS
[![9JSllQV.png](https://i.imgur.com/9JSllQV.png)](https://i.imgur.com/9JSllQV.png)[![45GQYAe.png](https://i.imgur.com/45GQYAe.png)](https://i.imgur.com/45GQYAe.png)
Fig.5 - Exemplo de utilização de módulo GPS com placa Arduino compatível UNO programada para processar os dados disponibilizados pelo módulo GPS e exibi-los através de comunicação série.
#### Outros exemplos
*[![MMnvvKD.png](https://i.imgur.com/MMnvvKD.png)](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)**[![h8eDfvF.png](https://i.imgur.com/h8eDfvF.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled)**[![orKSYyb.png](https://i.imgur.com/orKSYyb.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec)*
[\[a\]](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)[\[b\]](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled)[\[c\]](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec)
\[a\] DEEC - FCTUC. Kit Arduino Uno > Instalação. url: [https://kb.deec.uc.pt/books/deec/page/instalacao-irK](https://kb.deec.uc.pt/books/deec/page/instalacao-irK) (acedido em 10/04/2024). \[b\] DEEC - FCTUC. Kit Arduino Uno > \[exemplo\] I2C OLED. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled) (acedido em 10/04/2024). \[c\] DEEC - FCTUC. Kit Arduino Uno > \[exemplo\] rumo ao DEEC. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec) (acedido em 10/04/2024). #### Referências \[1\] Arduino. Software Serial Example. url: [https://wiki-content.arduino.cc/en/Tutorial/LibraryExamples/SoftwareSerialExample](https://wiki-content.arduino.cc/en/Tutorial/LibraryExamples/SoftwareSerialExample) (acedido em 11/04/2024). \[2\] Wikipedia. Sistema de posicionamento global. url: [https://pt.wikipedia.org/wiki/Sistema\_de\_posicionamento\_global](https://pt.wikipedia.org/wiki/Sistema_de_posicionamento_global) (acedido em 11/04/2024). # [exemplo] I2C OLED #### Objetivo: Demonstrar o uso de ecrã OLED com placa Arduino compatível UNO para exibir texto. #### Lista de material:
[![board_overview.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-overview.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-overview.png)[![board_drawing.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-drawing.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-drawing.png)
Fig.1 - Placa Arduino compatível UNO.
[![oled.jpg](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/oled.jpg)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/oled.jpg)[![olde_i2c.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/olde-i2c.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/olde-i2c.png)
Fig.2 - Ecrã OLED (organic light-emitting diode) SSD1306 de 0,96 polegadas com resolução de 128×64.
##### Set-up
[![olde_i2c_ex.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/olde-i2c-ex.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/olde-i2c-ex.png)
placa Arduino compatível UNO ecrã OLED
3.3V----------------------VCC
GND----------------------GND
A4----------------------SCA
A5-----------------------SDL
Fig.3 - Montagem ilustrativa das ligações a estabelecer entre placa de desenvolvimento e o ecrã OLED.
##### Biblioteca
[![CZevjQJ.png](https://i.imgur.com/CZevjQJ.png)](https://i.imgur.com/CZevjQJ.png)[![lYBzNfV.png](https://i.imgur.com/lYBzNfV.png)](https://i.imgur.com/lYBzNfV.png)
[![9cxx0A2.png](https://i.imgur.com/9cxx0A2.png)](https://i.imgur.com/9cxx0A2.png)[![MClmUQY.png](https://i.imgur.com/MClmUQY.png)](https://i.imgur.com/MClmUQY.png)
Fig.4 - Exemplo de utilização do gestor de bibliotecas do IDE Arduino para instalação da Biblioteca *Adafruit SSD1306*.
##### Programa
```C #include #include #include // OLED display TWI address #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); int dummyVal = 0; void setup() { // inicializa ecrã if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } display.clearDisplay(); display.display(); // imprime linha de texto display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(55, 30); display.print(F("...")); // actualiza ecrã display.display(); } void loop() { display.clearDisplay(); display.display(); display.setTextSize(3); display.setTextColor(WHITE); display.setCursor(60, 25); if (dummyVal == 0) { display.print(F("\\")); } else if (dummyVal == 1) { display.print(F("|")); } else if (dummyVal == 2) { display.print(F("/")); } else if (dummyVal == 3) { display.print(F("-")); } if (dummyVal >= 3) { dummyVal = 0; } else { dummyVal = dummyVal + 1; } display.display(); } ```
Código.1 - Programa exemplo de utilização de ecrã OLED com placa Arduino compatível UNO para exibir texto
##### \[exemplo\] I2C OLED
[![dElvfCc.png](https://i.imgur.com/dElvfCc.png)](https://i.imgur.com/dElvfCc.png)[![2oEmtMR.png](https://i.imgur.com/2oEmtMR.png)](https://i.imgur.com/2oEmtMR.png)[![Ui1VooD.png](https://i.imgur.com/Ui1VooD.png)](https://i.imgur.com/Ui1VooD.png)[![LDCkZXB.png](https://i.imgur.com/LDCkZXB.png)](https://i.imgur.com/LDCkZXB.png)
Fig.5 - Ilustração da sequência de símbolos a surgir no ecrã.
#### Outros exemplos
*[![MMnvvKD.png](https://i.imgur.com/MMnvvKD.png)](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)**[![w4QdtAr.png](https://i.imgur.com/w4QdtAr.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps)**[![orKSYyb.png](https://i.imgur.com/orKSYyb.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec)*
[\[a\]](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)[\[b\]](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps)[\[c\]](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec)
\[a\] DEEC - FCTUC. Kit Arduino Uno > Instalação. url: [https://kb.deec.uc.pt/books/deec/page/instalacao-irK](https://kb.deec.uc.pt/books/deec/page/instalacao-irK) (acedido em 10/04/2024). \[b\] DEEC - FCTUC. Kit Arduino Uno > \[exemplo\] módulo GPS. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps) (acedido em 10/04/2024). \[c\] DEEC - FCTUC. Kit Arduino Uno > \[exemplo\] rumo ao DEEC. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec) (acedido em 10/04/2024). # [exemplo] rumo ao DEEC #### Objetivo:
Chegar ao DEEC - FCTUC via sistema de posicionamento global com Arduino. ##### Requisitos
*[![MMnvvKD.png](https://i.imgur.com/MMnvvKD.png)](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)**[![w4QdtAr.png](https://i.imgur.com/w4QdtAr.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps)**[![h8eDfvF.png](https://i.imgur.com/h8eDfvF.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled)*
[\[a\]](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)[\[b\]](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps)[\[c\]](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled)
##### \[exemplo\] rumo ao DEEC
*[![tracker1.jpg](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/tracker1.jpg)](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)*[![tracker2.jpg](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/tracker2.jpg)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/tracker2.jpg)
##### Set-up
*[![gxq9zCf.png](https://i.imgur.com/gxq9zCf.png)](https://i.imgur.com/gxq9zCf.png)**[![ZcZapjK.png](https://i.imgur.com/ZcZapjK.png)](https://i.imgur.com/ZcZapjK.png)**[![f9H7Yyg.png](https://i.imgur.com/f9H7Yyg.png)](https://i.imgur.com/f9H7Yyg.png)*
*[![luAWx2A.png](https://i.imgur.com/luAWx2A.png)](https://i.imgur.com/luAWx2A.png)*
Arduino compatível UNO módulo GPSecrã OLED
3.3V ------------ VCC
------------V
GND ------------ GND
------------G
2------------R
3------------T
A4------------ SDA
A5------------ SDL
##### Programa ```C #include #include #include #include #include // OLED display TWI address #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); SoftwareSerial gpsSerial(2, 3); // RX, TX TinyGPSPlus gps; bool selector = false; void setup() { // inicializa ecrã if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } display.clearDisplay(); display.display(); // imprime linha de texto display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(27, 30); display.print(F("...")); // actualiza ecrã display.display(); gpsSerial.begin(9600); Serial.begin(115200); } void loop() { while (gpsSerial.available() > 0){ if (gps.encode(gpsSerial.read())) displayInfo(); } if (millis() > 5000 && gps.charsProcessed() < 10) { Serial.println(F("No GPS detected: check wiring.")); while(true); } } void displayInfo() { bool chalk_a = true; bool chalk_b = true; selector = false; Serial.print(F("Location: ")); if (gps.location.isValid()) { Serial.print(gps.location.lat(), 12); Serial.print(F(",")); Serial.print(gps.location.lng(), 12); if (chalk_a) { chalk_a = false; } } else { Serial.print(F("INVALID")); } Serial.print(F(" Date/Time: ")); if (gps.date.isValid()) { Serial.print(gps.date.month()); Serial.print(F("/")); Serial.print(gps.date.day()); Serial.print(F("/")); Serial.print(gps.date.year()); } else { Serial.print(F("INVALID")); } Serial.print(F(" ")); if (gps.time.isValid()) { if (gps.time.hour() < 10) Serial.print(F("0")); Serial.print(gps.time.hour()); Serial.print(F(":")); if (gps.time.minute() < 10) Serial.print(F("0")); Serial.print(gps.time.minute()); Serial.print(F(":")); if (gps.time.second() < 10) Serial.print(F("0")); Serial.print(gps.time.second()); Serial.print(F(".")); if (gps.time.centisecond() < 10) Serial.print(F("0")); Serial.print(gps.time.centisecond()); if (chalk_b) { chalk_b = false; } } else { Serial.print(F("INVALID")); } display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); if (!chalk_a) { static const double DEECFCTUC_LAT = 40.18639388156963, DEECFCTUC_LON = -8.416520235329802; unsigned long distanceKmToDEEC = (unsigned long)TinyGPSPlus::distanceBetween( gps.location.lat(), gps.location.lng(), DEECFCTUC_LAT, DEECFCTUC_LON); if (distanceKmToDEEC > 1000) { distanceKmToDEEC = distanceKmToDEEC / 1000; selector = true; } Serial.println(distanceKmToDEEC); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(30, 35); display.print(distanceKmToDEEC); display.setCursor(90, 35); if (selector) { display.print(F("km")); } else { display.print(F("m")); } display.setTextSize(1); display.setTextColor(WHITE); } else { display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(40, 35); display.print(F("...")); display.setCursor(90, 35); if (selector) { display.print(F("km")); } else { display.print(F("m")); } display.setTextSize(1); display.setTextColor(WHITE); } display.setCursor(5, 5); display.print(F("agora")); display.setCursor(5, 20); display.print(F("faltam")); display.setCursor(5, 55); display.print(F("para chegar ao DEEC")); if (!chalk_b) { display.setCursor(50, 5); display.print(gps.time.hour()); display.setCursor(63, 5); display.print(":"); display.setCursor(70, 5); display.print(gps.time.minute()); display.setCursor(83, 5); } else { display.setCursor(50, 5); display.print(F("00")); display.setCursor(63, 5); display.print(":"); display.setCursor(70, 5); display.print(F("00")); display.setCursor(83, 5); } display.display(); Serial.println(); } ``` #### Outros exemplos
*[![MMnvvKD.png](https://i.imgur.com/MMnvvKD.png)](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)**[![w4QdtAr.png](https://i.imgur.com/w4QdtAr.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps)**[![h8eDfvF.png](https://i.imgur.com/h8eDfvF.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled)*
[\[a\]](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)[\[b\]](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps)[\[c\]](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled)
\[a\] DEEC - FCTUC. Kit Arduino Uno > Instalação. url: [https://kb.deec.uc.pt/books/deec/page/instalacao-irK](https://kb.deec.uc.pt/books/deec/page/instalacao-irK) (acedido em 10/04/2024). \[b\] DEEC - FCTUC. Kit Arduino Uno > \[exemplo\] módulo GPS. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps) (acedido em 10/04/2024). \[c\] DEEC - FCTUC. Kit Arduino Uno > \[exemplo\] I2C OLED. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled](https://kb.deec.uc.pt/books/deec/page/exemplo-i2c-oled) (acedido em 10/04/2024). # [exemplo] acelerómetro e giroscópio MPU-6050 #### Objetivo: Demonstrar o uso de sensor com acelerómetro e giroscópio para obter dados de sensores inerciais. #### Lista de material:
[![board_overview.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-overview.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-overview.png)[![board_drawing.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-drawing.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-drawing.png)
Fig.1 - Placa Arduino compatível UNO.
[![mxrQ0wq.png](https://i.imgur.com/mxrQ0wq.png)](https://i.imgur.com/mxrQ0wq.png)[![oR8cmlO.png](https://i.imgur.com/oR8cmlO.png)](https://i.imgur.com/oR8cmlO.png)
Fig.2 - Sensor MPU-6050.
#### Contextualização: Uma unidade de medição inercial (IMU do inglês ***i**nertial **m**easurement **u**nit*) é um dispositivo eletrónico que permite quantificar a força específica de um corpo, a taxa angular e, por vezes, a orientação do corpo, usando uma combinação de acelerómetros, giroscópios e, às vezes, magnetómetros \[1\].
[![Apollo_Command_Module_primary_guidance_system_locations.png](https://upload.wikimedia.org/wikipedia/commons/8/8e/Apollo_Command_Module_primary_guidance_system_locations.png)](https://upload.wikimedia.org/wikipedia/commons/8/8e/Apollo_Command_Module_primary_guidance_system_locations.png)[![Apollo_Inertial_Measurement_Unit.png](https://upload.wikimedia.org/wikipedia/commons/1/1e/Apollo_Inertial_Measurement_Unit.png)](https://upload.wikimedia.org/wikipedia/commons/1/1e/Apollo_Inertial_Measurement_Unit.png)[![Apollo_IMU_at_Draper_Hack_the_Moon_exhibit.agr.jpg](https://upload.wikimedia.org/wikipedia/commons/3/35/Apollo_IMU_at_Draper_Hack_the_Moon_exhibit.agr.jpg)](https://upload.wikimedia.org/wikipedia/commons/3/35/Apollo_IMU_at_Draper_Hack_the_Moon_exhibit.agr.jpg)
Fig.3 - Ilustrações dos principais componentes do sistema de orientação do módulo de comando e serviço Apollo, um dos componentes usado para o programa Apollo, que pousou astronautas na Lua entre 1969 e 1972.
##### Set-up
[![AtHzynb.png](https://i.imgur.com/AtHzynb.png)](https://i.imgur.com/AtHzynb.png)
placa Arduino compatível UNO sensor MPU-6050
3.3V----------------------VCC
GND----------------------GND
A5----------------------SCL
A4----------------------SDA
Fig.4 - Montagem ilustrativa das ligações a estabelecer entre placa de desenvolvimento e sensor MPU-6050.
##### Bibliotecas
*[![LFBQpBy.png](https://i.imgur.com/LFBQpBy.png)](https://i.imgur.com/LFBQpBy.png)**[![QrHgT1y.png](https://i.imgur.com/QrHgT1y.png)](https://i.imgur.com/QrHgT1y.png)**[![qoDdwQl.png](https://i.imgur.com/qoDdwQl.png)](https://i.imgur.com/qoDdwQl.png)*
Fig.5 - Exemplo de utilização do gestor de bibliotecas do IDE Arduino para instalação da biblioteca *Adafruit MPU6050*.
##### Programa
```C // Demonstração de utilização de sensor Adafruit MPU6050 #include "Adafruit_MPU6050.h" #include "Adafruit_Sensor.h" #include "Wire.h" Adafruit_MPU6050 mpu; void setup(void) { Serial.begin(115200); while (!Serial) delay(10); Serial.println("a testar sensor MPU6050!"); // Try to initialize! if (!mpu.begin()) { Serial.println("Falhou inicialização de MPU6050"); while (1) { delay(10); } } Serial.println("MPU6050 inicializado!"); mpu.setAccelerometerRange(MPU6050_RANGE_8_G); Serial.print("Gamara de valores selecionada para acelerómetro: "); switch (mpu.getAccelerometerRange()) { case MPU6050_RANGE_2_G: Serial.println("+-2G"); break; case MPU6050_RANGE_4_G: Serial.println("+-4G"); break; case MPU6050_RANGE_8_G: Serial.println("+-8G"); break; case MPU6050_RANGE_16_G: Serial.println("+-16G"); break; } mpu.setGyroRange(MPU6050_RANGE_2000_DEG); Serial.print("Gamara de valores selecionada para giroscópio: "); switch (mpu.getGyroRange()) { case MPU6050_RANGE_250_DEG: Serial.println("+- 250 deg/s"); break; case MPU6050_RANGE_500_DEG: Serial.println("+- 500 deg/s"); break; case MPU6050_RANGE_1000_DEG: Serial.println("+- 1000 deg/s"); break; case MPU6050_RANGE_2000_DEG: Serial.println("+- 2000 deg/s"); break; } mpu.setFilterBandwidth(MPU6050_BAND_21_HZ); Serial.print("Filtro a considerar: "); switch (mpu.getFilterBandwidth()) { case MPU6050_BAND_260_HZ: Serial.println("260 Hz"); break; case MPU6050_BAND_184_HZ: Serial.println("184 Hz"); break; case MPU6050_BAND_94_HZ: Serial.println("94 Hz"); break; case MPU6050_BAND_44_HZ: Serial.println("44 Hz"); break; case MPU6050_BAND_21_HZ: Serial.println("21 Hz"); break; case MPU6050_BAND_10_HZ: Serial.println("10 Hz"); break; case MPU6050_BAND_5_HZ: Serial.println("5 Hz"); break; } Serial.println(""); delay(100); } void loop() { /* leitura dos valores reportados */ sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp); /* impressão das leituras */ Serial.print("Aceleração X: "); Serial.print(a.acceleration.x); Serial.print(", Y: "); Serial.print(a.acceleration.y); Serial.print(", Z: "); Serial.print(a.acceleration.z); Serial.println(" m/s^2"); Serial.print("Rotação X: "); Serial.print(g.gyro.x); Serial.print(", Y: "); Serial.print(g.gyro.y); Serial.print(", Z: "); Serial.print(g.gyro.z); Serial.println(" rad/s"); Serial.print("Temperatura: "); Serial.print(temp.temperature); Serial.println(" ºC"); Serial.println(""); delay(500); } ```
Código.1 - Programa exemplo de utilização de sensor MPU-6050 e biblioteca *Adafruit MPU6050* com placa Arduino compatível UNO.
#### Referências \[1\] Wikipedia. Unidade de medição inercial. url: [https://en.wikipedia.org/wiki/Inertial\_measurement\_unit](https://en.wikipedia.org/wiki/Inertial_measurement_unit) (acedido em 26/04/2024).