• Nenhum resultado encontrado

Conceitos do Projeto Arduino

N/A
N/A
Protected

Academic year: 2021

Share "Conceitos do Projeto Arduino"

Copied!
27
0
0

Texto

(1)

Conceitos do Projeto Arduino

Por Antônio Cruvinel

(2)

O que é arduino?

É uma plataforma de hardware e softwares livres que torna acessível a prototipagem  de  projetos  de  eletrônica.  O  hardware  é  um  computador  completo  com  microprocessador,  memórias  e  entradas/saídas  analógicas/digitais  com  o  qual  podemos  controlar  LEDs,  motores,  capturar  dados  de  sensores,  dentre  outras  coisas!  A  linguagem  é  baseada  em  C/C++  e  sua  biblioteca  padrão  é  bastante  completa.

(3)

Meu Primeiro Tutorial de Arduino.

Para entendermos um pouco mais!

Arduino  é  um  computador  físico  baseado  numa  simples  plataforma  código  livre  de  hardware,  projetada  com  um  microcontrolador  de  placa  única,  com  suporte  de  I/O  embutido e uma linguagem de programação padrão, na qual tem origem em Wiring e  é  essencialmente  C/C++  (Com  várias  pequenas  modificações  antes  de  ser  transformada em avr­gcc)

Uma  plataforma  eletrônica  open­source  ideal  para  quem  quer  receber  dados  do  ambiente  como  sensores  de  temperatura,  luz  e  atuar  pequenos  motores  criando  interação.

Toda  programação  é  baseada  em  uma  linguagem  recentemente  nova  também,  chamada processing. Todavia pode ser utilizado outras linguagens como Max/MSP,  Pure Data, SuperCollider, ActionScript e Java.

  No  ambiente  de  desenvolvimento  existe  também  várias  funções  que  facilitam  o  desenvolvimento  de  qualquer  programa,  do  mais  simples  ao  complexo,  alem  também  de  bibliotecas  prontas  para  facilitar  o  interfaceamento  com  outros  hardwares.

O objetivo do projeto é a criação de sistemas de controle que permitam o manuseio  por pessoas sem a necessidade de entendimento de procedimentos complexos.  Uma  típica  placa  Arduino  é  composta  por  um  controlador,  linhas  de  I/O  digital  e  analógica, além de uma interface serial ou USB para interligar­se ao hospedeiro, que  é usado para programá­lo e interagi­lo. 

Os módulos de Arduino (Shield) possibilitam acoplamento de funcionalidades como  interface  de  rede,  buffers  para  ligação  de  motores,  relés,  sensores  e  demais  possibilidades. 

O Hardware é montado normalmente por um microcontrolador Atmel AVR e pode ser  extendido  por  outros  componentes  ou  ferramentas.  Desta  forma  permite  a  interligação de vários projetos em paralelo.

Inicado na Itália em 2005, o projeto Arduino visava que cada usuário montasse sua  própria  placa.  Atualmente  é  facilmente  encontrado  projetos  prontos  que  facilitam  muito a vida dos usuários iniciantes. 

(4)

O  sucesso  do  projeto  Arduino  foi  sinalizado  com  o  recebimento  de  uma  menção  honrosa na categoria Comunidades Digitais em 2006, pela Prix Ars Electronica, além  da marca de mais de 50.000 placas vendidas até outubro de 2008.

Alguns conceitos de programação

Para  começarmos  o  primeiro  projeto  precisamos  de  ter  uma  pequena  noção  de  programação.

Função Void

Em inglês, void quer dizer vazio e é isto mesmo que o void é. Este tipo de função  permite  permite  fazer  funções  que  não  retornam  nada  e  funções  que  não  têm  parâmetros. Desta forma pode­se criar estruturas que não necessitam de dar retorno a si mesmo  ou a outras funções.   void nome_da_função (declaração_de_parâmetros);   Numa função, como a acima, não temos valor de retorno na declaração return.   Podemos, também, fazer funções que não têm parâmetros:   tipo_de_retorno nome_da_função (void);   ou, ainda, que não tem parâmetros e não retornam nada:   void nome_da_função (void);   Um exemplo de funções que usam o tipo void:  #include <stdio.h> void Mensagem (void); int main () { Mensagem(); printf ("\tDiga de novo:\n"); Mensagem(); return 0; } void Mensagem (void) { printf ("Ola! Eu estou vivo.\n"); }

(5)

Se quisermos que a função retorne algo, devemos usar a declaração return. Se não  quisermos,  basta  declarar  a  função  como  tendo  tipo­de­retorno  void.  Devemos  lembrar  agora  que  a  função  main()  é  uma  função  e  como  tal  devemos  tratá­la.  O  compilador  acha  que  a  função  main()  deve  retornar  um  inteiro.  Isto  pode  ser  interessante se quisermos que o sistema operacional receba um valor de retorno da  função main(). Se assim o quisermos, devemos nos lembrar da seguinte convenção:  se  o  programa  retornar  zero,  significa  que  ele  terminou  normalmente,  e,  se  o  programa  retornar  um  valor  diferente  de  zero,  significa  que  o  programa  teve  um  término anormal. Se não estivermos interessados neste tipo de coisa, basta declarar  a função main como retornando void.   As duas funções main() abaixo são válidas:     main (void) { .... return 0; } void main (void) { .... }

A função Void Setup 

void setup()  { // Escreva o código que será executado apenas uma vez. }

Função Void loop

Void loop() { // Escreva o código que será executado infinitas vezes }

Função setup()

(6)

Para  a  execução  de  uma  função  no  código  que  permita  execução  do  código  uma  única  vez  quando  o  microcontrolador  for  energizado  ou  no  momento  em  que  este  seja reiniciado.

Esta função deve ser utilizada para: o Iniciar variáveis.

o O  modo  como  os  pinos  devem  operar:  entrada(INPUT)  ou  saída(OUTPUT) o Bibliotecas. o Cabeçalhos 

Função loop()

Esta função tem o propósito fundamental de repetir infinitamente o que  está escrito.  Seu prinicpal propósito é que a repetição indefinida dos comando que estão dentro  desta função. Desta forma a função loop() repetirá indefinidamente o comando. A função  setup() determinará o que seu sistema suporta. 

Comentários

Para fazer comentários no código utilizamos  // (duas barras invertidas).  O objetivo desta boa prática de programação é permitir o entendimento do código  em futuras manutenções pelo próprio desenvolvedorr ou por outros  desenvolvedores.  Todos os comentários são descartados no momento da compilação do sistema.

Aula 1 – Piscando um LED

(7)

Para  este  projeto  será  preciso  um  LED  ,  um  resistor  e  fios  e  uma  matriz  de  contatos:  

 

 

De quais componentes precisaremos:

O LED:

LED é a sigla em inglês para Light Emitting Diode, ou Diodo Emissor de Luz.

O  LED  é  um  diodo  semicondutor  (junção  P­N)  que  quando  energizado  emite  luz  visível.  A  luz  normalmente  é  monocromática  e  é  produzida  pelas  interações  energéticas dos elétrons. O processo de emissão de luz pela aplicação de uma fonte  elétrica  de  energia  é  chamado  eletroluminescência.  Em  qualquer  junção  P­N  polarizada  diretamente,  dentro  da  estrutura,  próximo  à  junção,  ocorrem  recombinações  de  lacunas  e  elétrons.  Essa  recombinação  exige  que  a  energia  possuída  por  esse  elétron,  que  até  então  era  livre,  seja  liberada,  o  que  ocorre  na  forma de calor ou fótons de luz.

(8)

que  o  polo  positivo  possui  uma  perna  maior.  Alguns  Leds  apresentam  o  polo  negativo com um chanfro(parte ligeiramente plana) no seu encapsulamento. No Arduino temos os pinos:  VCC(+)   GND ou Ground como (­). Por ser um diodo, um LED funcionará corretamente apenas se ligarmos ele da forma  correta. 

O RESISTOR:

Resistores  são  componentes  que  tem  por  finalidade  oferecer  uma  oposição  à  passagem  da  corrente  elétrica,  através  de  seu  material.  A  essa  oposição  damos  o  nome de resistência elétrica, que possui como unidade o Ohm (Ω). Os resistores são  classificados  em  dois  tipos:  fixos  e  variáveis.  Os  resistores  fixos  são  aqueles  cuja  resistência  não  pode  ser  alterada,  enquanto  as  variáveis  têm  a  sua  resistência  modificada dentro de uma faixa de valores por meio de um cursor móvel

As faixas de cores determina quanto é maior essa resistência. 

A MATRIZ DE CONTATOS

A matriz de contatos possui apenas pontos interligados num sentido vertical. O que  permite combinar e interligar os componentes rapidamente.

(9)

Veja na imagem abaixo duas fileiras independentes("A" e "B") com seus respectivos  pontos interligados.

Os

 

fios

Para  este  projeto  utilizaremos  um  modelo  de  fiação  já  previamente  preparada  que  permite fácil conexão e que permite ligações seguras e com rapidez.

A Montagem

Vamos montar o circuito:

(10)

Para  fazermos  o  nosso  projeto  funcionar  corretamente  devemos  desenvolver  o  código para que possamos inseri­lo no hardware. Assim devemos abrir a interface do arduino para desenvolvimento do código: Em seguida devemos escrever o código: /*Programa pisca led */ void setup() {

pinMode(12,  OUTPUT);  //Declara  que  o  pino  12  do  arduino  é  de  Saída.  Assim  ele  será energizado. 

}

void loop() {

digitalWrite(12, HIGH);  // Energiza o pino 12 do arduino. Logo LED estará ligado delay(1000); // Espera por 1s

(11)

digitalWrite(12,  LOW);  //    Desenergiza  o  pino  12  do  arduino  está  .  Logo  o  LED  desligará. delay(1000); // Espera por 1s }

Comentários sobre o código:

Comentando o código:  digitalWrite(12,HIGH); diz que o pino 12 é o polo + que alimenta o LED. Logo há um  polo(+) e outro (­) e o Led liga pois é possível fluir a energia.  digitalWrite(12,LOW);  diz que o pino 12 é o pólo ­ logo não há fluxo de energia com  dois polos(­) e o LED fica desligado.  delay(1000);  No arduino trabalhamos com milésimo de segundos assim 1000 quer  dizer 1 segundo.  Altere o parâmetro de delay para 100 e depois para 5000 para ver qual a diferença.

Utilizando o comando Random

/*Programa pisca led */ void setup() {

pinMode(12,  OUTPUT);  //Declara  que  o  pino  12  do  arduino  é  de  Saída.  Assim  ele  será energizado. 

}

void loop() {

(12)

delay(random(100)); // Espera por 1s

digitalWrite(12,  LOW);  //    Desenergiza  o  pino  12  do  arduino  está  .  Logo  o  LED  desligará. delay(random(100)); // Espera por 1s } o comando random() gera números aleatórios. Mas ao inserir um valor como 100 em  random() estamos informando que o número deve variar entre 0 e 99 Desta forma  temos um comportamento inesperado no piscar do LED, o que gera um efeito  interessante.

Aula 2 – Exercícios com LED

(13)

Montar na a matriz de contatos conforme orientação abaixo:

­Atenção  é  importante  notar  que  os  LEDs  devem  estar  ligados  um  paralelo  com  o  outro e com polos opostos.

­O  resistor  pode  ser  de  outro  valor  como  330R  ou  470R,  a  modificação  altera  no  brilho do LED. 

(14)

O código do programa:

/* teste com LEDs */ int ledPin1 =11; int ledPin2 =10; void setup() { pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); } void loop() { digitalWrite(ledPin1, HIGH); digitalWrite(ledPin2, LOW); delay(1000); }

Sobre o Software:

­Como  temos  o  LedPin1  em  estado  HIGH(LIGADO,  5V)  e  o  LedPin2  no  estado  LOW(Baixo,  0V)  temos  um  fluxo  de  elétrons  em  um  sentido.  Como  o  LED  é  um 

(15)

diodo  e  como  tal  permite  apenas  a  passagem  de  corrente  em  um  sentido(LED  é  polarizado) temos apenas um Led ligado.

Modificando o Software:

/* teste com LEDs */ int ledPin1 =11; int ledPin2 =10; void setup() { pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); } void loop() { digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, HIGH); delay(1000); }

Sobre o Software modificado:

­Com  a  Mudança  do  HIGH  para  o  LOW  no  LedPin1  e  LedPin2  temos  o  outro  Led  ligado.

(16)

/* teste com LEDs */ int ledPin1 =11; int ledPin2 =10; void setup() { pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); } void loop() { digitalWrite(ledPin1, HIGH); digitalWrite(ledPin2, LOW); delay(1000); digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, HIGH); delay(1000); } Comentário deste código:

(17)

Temos  agora  um  pisca  LED  do  tipo  que  tem  em  estacionamentos  de  carro.  Em  determinado tempo temos um fluxo de energia num sentido que liga um LED e em  outro momento temos um fluxo em sentido contrário que liga o outro LED.

Acrescentando um botão

­Adicionar um botão e um resistor 220k.  Clicar na imagem para ampliar.

Modificando novamente Software:

(18)

/* teste com LEDs */ int ledPin1 = 11; int ledPin2 = 10; int Botao1 = 7; int val=0; void setup() { pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(Botao1, INPUT); } void loop() { val = digitalRead(Botao1); if(val==LOW) { digitalWrite(ledPin1, HIGH); digitalWrite(ledPin2, LOW); } else{ digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, HIGH); } } Comentário deste novo código: ­É feita a leitura do botão e uma condição é criada: 1° Caso o botão não esteja pressionado o LedPin1 deve estar ligado. 

(19)

2° Caso contrário o LedPin2 deve ficar ligado.  Então quando não pressionamos o botão o LED Vermelho indica que está desligado  e quando pressionamos o LED Verde indica que está ligado. Trata­se então de uma chave que indica quando o seu aparelho está sendo usado  ou não. 

Aula 3 – Comunicação

(20)

Nesta etapa vamos aprender como fazer a comunicação do computador com o  sistema microcontrolado. Assim vamos montar o seguinte circuito para entendermos o que vamos realizar. O programa a seguir apresenta a novidade de um monitor para controle de ações no  microcontrolador. O material necessário será  o Arduino,  um led,  um resistor,  fios, e a matriz de contatos

O código do programa:

/* controlando um led */ int ledPin =  13; void setup()    {  Serial.begin(9600); // inicializa a porta serial para possibilitar a comunicação entre o  computador e o Arduino  pinMode(ledPin, OUTPUT); //informa que a variável ledPin é do tipo saída }  

(21)

void loop() {  char tecla; //cria a variável de nome tecla do tipo char chamada tecla    tecla = Serial.read();  // armazena na variável "tecla" o retorno da função read().  Leitura do que foi escrito na porta serial   if(tecla == 'l') //verifica se a o que foi digitado é igual a letra l. Se for igual entra na  condição e liga o led   {  digitalWrite(ledPin, HIGH); //liga o LED   }   else // se não   if(tecla == 'd') //verfica se a tecla digitada é igual a letra d. Se for igual entra na  condição.  {  digitalWrite(ledPin, LOW); //desliga o led  } delay(1000); // aguarda 1 segundo } Após compilar e fazer o upload, clicar no ícone – Serial Monitor Aparecerá a seguinte tela:

(22)

Na primeira linha você irá digitar o comando e clicar no ícone enviar (send). Exemplo 2:

O código do programa:

/* Monitora botoeira*/ int BotaoPino = 7; // pino a ser lido int val= 0; // cria e inicializa a variável Val com o valo zero int i=0; // cria e inicializa a variável i com o valor zero

(23)

int i2=0; // cria e inicializa a variável i2 com o valor zero void setup()  { pinMode(BotaoPino, INPUT); // define que BotaoPino é uma variável de entrada Serial.begin(9600); // inicializa a porta serial } void loop() { val= digitalRead(BotaoPino); //a variável Val recebe o valor de BotaoPino delay(1000); //Aguarda 100 milesegundos  if(val!=0) //Condicional – se o valor de Val for diferente de zero {     Serial.print(i++); //porta serial recebe o valor da variável i mais 1    Serial.print("­ A botoeira esta solta ­Valor:"); // a porta serial recebe o texto “­Valor:”    Serial.println(val); // a porta serial recebe o valor da variável val    }   else  {    Serial.print(i2++); //porta serial recebe o valor da variável i mais 1    Serial.print("­ A botoeira foi apertada ­Valor:"); // a porta serial recebe o texto “­ Valor:”    Serial.println(val); // a porta serial recebe o valor da variável val  } }

(24)

Comentário sobre o Programa e o Circuito:

O programa faz a leitura constantemente do botão e exibe se detectou nível lógico  alto  (1)  ou  baixo(0)  o  seu  valor  na  tela  informando  que  detectou  a  alteração  do  estado. Os Resistores são para manter o nível lógico alto sem permitir quando a botoeira é  apertada.

Exemplo 3

Controlando Leds pelo Teclado Arduino Neste passo deve­se analisar como os dados são lidos pelo arduino e como  controlar LEDs pelas teclas do computador. Montar o seguinte circuito:

(25)

O código do programa:

/* Controle de Led no teclado */ int n; int pin7 = 7; int pin8 = 8; void setup()  { Serial.begin(9600); //inicia a porta serial pinMode(pin7, OUTPUT); //define o pino 7 como saída pinMode(pin8, OUTPUT); //define o pino 7 como saída Serial.println("Automacao na Engenharia Agricola"); //título inicial Serial.println("Digite:\n 2­Vermelho \n 3­Verde \n 4­Vermelho e Verde \n 5­Apagar  Todos"); //Orientacao inicial para o usuário  }

(26)

void loop() { if (Serial.available() >0)  // recebendo dado do teclado { n = Serial.read(); // Armazena na variável n o valor digitado Serial.print("Voce digitou: \n"); Serial.println(n, BYTE); // Imprime na tela o valor do teclado em BYTE //testes condicionais if( n==50 ){   // 2­vermelho  digitalWrite(pin7,HIGH); //acender o led vermelho digitalWrite(pin8,LOW); //apaga o led verde } if(n==51){   // 3­Verde digitalWrite(pin8,HIGH); //acender o led verde digitalWrite(pin7,LOW); //apaga o led vermelho } if(n==52){  // 4­vermelho e Verde  digitalWrite(pin8,HIGH); //acender o led verde digitalWrite(pin7,HIGH); //acender o led vermelho }

(27)

if(n==53){  // 5­desliga LEDs digitalWrite(pin8,LOW); //apaga o led verde digitalWrite(pin7,LOW); //apaga o led vermelho } } }

Comentário sobre o Programa e o Circuito:

O  programa  inicia  trazendo  informações  para  o  usuário.  Faz  a  leitura  constantemente da tecla no teclado, exibe o que o foi digitado e executa o comando  correspondente. 

Referências

Documentos relacionados

1º – O Trabalho de Conclusão de Curso é um componente curricular obrigatório do Curso de Graduação em Nutrição da Faculdade de Ciências da Saúde (FS) da

Art. 9º Na composição de turmas, o número de alunos será definido respeitando-se as orientações da Coordenação do Curso de Turismo, de forma a salvaguardar a

Reconhecimento de face utilizando banco de imagens monocromáticas e coloridas através dos métodos da análise do componente principal (PCA) e da Rede Neural Artificial (RNA)

Estamos em um nível pré-expressivo 1 , onde o ator trabalha, em seu treinamento cotidiano, sua energia, sua presença, “o bios de suas ações e não seu significado” como nos

The objective of this study was to evaluate fruit yield of the strawberry crop using bare root transplants and plug transplants grown with different volumes of substrate...

“Comparação” (entre duas épocas históricas ou culturas diferentes), de “Contextualização” (definição das especificidades de cada época histórica), de

Educação Física Educação Infantil: reflexões acerca da teoria e prática Nutrição AVALIAÇÃO DA ACEITAÇÃO DA MERENDA ESCOLAR DE DUAS ESCOLA DO MUNICIPIO DE VILA VELHA. ES

c.4) Não ocorrerá o cancelamento do contrato de seguro cujo prêmio tenha sido pago a vista, mediante financiamento obtido junto a instituições financeiras, no