3. DISEÑO MOLECULAR
4.2. Estudio de agregación del compuesto 5
Apresentar o Arduino e sua linguagem de programação.
Funções e Conceitos Utilizados
Hardware e linguagem de programação do ArduinoIntrodução
Existem toneladas de informações disponíveis sobre o projeto Arduino, seu hardware e software, além de diversas aplicações. Qual quer abordagem introdutória será certamente deficiente, se comparada a vasta quantidade de ―introduções‖, ―descrições‖, ―apresentações‖ e outras, disponíveis na internet. A página oficial do Arduino (http://www.arduino.cc/) é sem dúvida uma boa referência tanto para o hardware como para o software. É de lá que se pode ―baixar‖ o ambiente integrado de programação e comunicação com a placa. A placa pode ser adquirida em lojas eletrônicas especializadas ou eventualmente em lojas de artigos eletrônicos. Segue uma página, em português, que pode servir de ponto de partida, para uma pesquisa inicial, caso desejado: http://www.robotizando.com.br/curso_arduino_intro_pg1.php.
Nesta introdução, vamos nos focar nas entradas e saídas, analógicas e digitais, as quais vamos utilizar nas tarefas práticas. A figura a seguir, extraída da página mencionada, apresenta a sua disposição em uma placa Arduino Uno.
Figura – Disposição da Placa Arduino Uno
153 A tabela a seguir lista os 20 pinos de entradas e saídas e as suas funções, quase sempre definidas por programação do ambiente.
Bloco Pino Funções dos Pinos
Digital D0 Entrada Digital Saída Digital Serial Rx Digital D1 Entrada Digital Saída Digital Serial Tx
Digital D2 Entrada Digital Saída Digital Interrupção Ext Digital D3 Entrada Digital Saída Digital Saída PWM Interrupção Ext Digital D4 Entrada Digital Saída Digital
Digital D5 Entrada Digital Saída Digital Saída PWM
Digital D6 Entrada Digital Saída Digital Saída PWM Comp Analógico Digital D7 Entrada Digital Saída Digital Comp Analógico Digital D8 Entrada Digital Saída Digital
Digital D9 Entrada Digital Saída Digital Saída PWM Digital D10 Entrada Digital Saída Digital Saída PWM SPI SS Digital D11 Entrada Digital Saída Digital Saída PWM SPI MOSI Digital D12 Entrada Digital Saída Digital SPI MISO Digital D13 Entrada Digital Saída Digital SPI SCK Analógico A0 Entrada Analógica Saída Digital
Analógico A1 Entrada Analógica Saída Digital Analógico A2 Entrada Analógica Saída Digital Analógico A3 Entrada Analógica Saída Digital Analógico A4 Entrada Analógica Saída Digital Analógico A5 Entrada Analógica Saída Digital
A respeito da programação, o Arduino possui uma linguagem baseada em C, a qual permite utilizar todos os pinos acima descritos. Embora a linguagem implemente diversas funções e comandos do chamado ―C ANSI‖, existem algumas diferenças importantes.
Um programa Arduino se compõe de dois módulos básicos. O primeiro deles é o SETUP, que é executado apenas uma vez, e que é utilizado para as definições e inicializações necessárias ao programa que se vai implementar. É no setup que definimos a função dos diversos pinos que se pretende utilizar.
Uma implementação em Arduino consiste basicamente no monitoramento contínuo de ―entradas‖ e, a partir do que se encontrou nestas entradas, a determinação de ―saídas‖ correspondentes. Este processo se repete indefinidamente até que alguém desligue o circuito. Exatamente por isto, a linguagem Arduino define o módulo LOOP, que se repete ―ad infinitum‖. É neste módulo que se define o processo de tratamento de cada entrada e respectivas saídas.
Os programas a seguir exemplificam o uso dos diversos terminais disponíveis, assim como a linguagem de programação. Embora seja possível, ainda que limitado, utilizar apenas a placa do Arduino, a verdadeira ―graça‖ consiste na implementação de circuitos externos. Assim, alguns dos exemplos vão indicar algum tipo de circuito externo a ser implementado junto com o programa.
154
Programas Exemplo
Exemplo 1 // Blink
// Faz com que o LED associado ao pino 13 pisque de forma regular int led = 13;
// Note que a variavel “led” foi definida de forma global, ou seja, sera // “conhecida” tanto no módulo SETUP quanto no modulo LOOP
// O SETUP é executado apenas uma vez, na primeira execucao do programa, ou // quando se aperta RESET
void setup() {
// inicializa o pino 13 como saida digital pinMode(led, OUTPUT);
}
// O LOOP se repete até que se desligue a placa: void loop() {
digitalWrite(led, HIGH); // Liga o LED (nivel HIGH no pino 13) delay(1000); // Espera aproximadamente 1000 ms
digitalWrite(led, LOW); // Desliga o LED (nivel LOW no pino 13) delay(1000); // Espera aproximadamente 1000 ms
}
Exemplo 2 // Exemplo 2 int led = 13;
int frequencia = 4;
// As variaveis globais “led” e "frequencia" representam respectivamente // os pinos 13 e 4 void setup() { pinMode(led, OUTPUT); pinMode(frequencia, INPUT); } void loop() {
int periodo; /* periodo do led */ int troca = 0;
if (digitalRead(frequencia)== 0)periodo = 1000; else periodo = 100;
digitalWrite(led, HIGH); // Liga o LED (nivel HIGH no pino 13) delay(periodo);
digitalWrite(led, LOW); // Desliga o LED (nivel LOW no pino 13) delay(periodo);
155
Exemplo 3 /*
Este programa vai requerer que voce abra o "Serial Monitor", no menu "Tools"
O programa vai ler uma tensao analogica no pino A0 e transmiti-la para o "Serial Monitor". Caso queira, voce pode acoplar um potenciomentro de cerca de
10Kohms da seguinte forma: 5V A0 GND | | | --- | Pot 10K | ---
Alternativamente, voce pode simplesmente conectar o pino A0 a 0V, 3,3V ou 5V, todas disponiveis na placa.
Uma leitura proxima a 5V resultara em um numero proximo a 1023 enquanto que proxima a 0 resultara em 0
*/
void setup() {
// inicializa a comunicacao serial a 9600 bps Serial.begin(9600);
}
void loop() {
// Le a tensao em A0
int valorSensor = analogRead(A0);
// Escreve o valor lido na porta serial, para envio ao Serial Monitor Serial.println(valorSensor);
delay(1); // pequeno atraso entre as leituras para estabilidade }
Exemplo 4 /*
Este programa vai utilizar a saida PWM do Arduino para alterar o brilho de um LED.
O programa vai ler uma tensao analogica no pino A0 e traduzi-la como o brilho do LED.
Tal como antes, voce pode conectar o pino A0 a 0V, 3,3V ou 5V, disponiveis na placa, montar o circuito
externo proposto: 5V A0 GND | | | --- | Pot 10K | ---
Para o circuito de saida, sera necessario um led medio conectado atraves de um resistor de 1K, da seguinte forma: --- |\ | D9 --| 1K |--- | \| --GND --- |/ |
Enquanto que a entrada analogica varia resulta em um numero entre 0 1023, a saida PWM varia de 0 a 255.
156
De forma ilustrativa, a mesma tensao lida no pino A0 sera enviada ao Serial Monitor.
*/
int led = 9; // LED no pino 9
int brilhoLed; // indica o brilho a ser aplicado
//int fadeAmount = 5; // how many points to fade the LED by void setup() {
// Pino 9, do LED externo, sera uma saida pinMode(led, OUTPUT);
Serial.begin(9600); }
void loop() {
// Le a tensao em A0 e a converte em um valor PWM (maximo de 1023 para maximo de 255)
brilhoLed = analogRead(A0) / 4;
// Escreve o brilho na saida PWM do pino 9 analogWrite(led, brilhoLed);
Serial.println(brilhoLed);
delay(5); }
Tarefas
1. Elabore um programa que implemente um flip-flop tipo T (―toggle‖), de forma a que, a cada pulso de 0 para 1 em uma entrada, ele altere o estado do led interno (pino D13).
2. Escreva um programa capaz de contar uma quantidade de eventos (ex: objetos em uma esteira – associados a uma entrada digital), e a cada 5 eventos acionar uma determinada saída.
3. Escreva um programa capaz de controlar uma saída PWM a partir do Serial Monitor
4. Escreva um programa capaz de receber uma informação a partir do Serial Monitor e transmiti-la a um outro Arduino (conectado por fios), que, por sua vez, irá apresentar a informação recebida, no seu respectivo Serial Monitor (NOTA: esta tarefa aborda o rudimento da comunicação de dados entre dois computadores e permitirá que se identifique (e eventualmente resolva) os seguintes problemas:
Como conectar dois Arduinos de forma segura?
Como implementar uma comunicação serial entre os dois Arduinos? Como transformar a mensagem recebida em bits, para transmiti-la
157