Arduino Maker
Arduino Maker
Sobre o Autor:
Nesse guia você aprenderá de tudo um pouco para dar os primeiros passos
para criações de projetos com arduino .
Contato :
[Link]/basicode
[Link]/basicodetech
Website : [Link]
Arduino Maker
2
Arduino - Visão Geral
3
Tipos de placa
Vários tipos de placas Arduino estão disponíveis, dependendo dos diferentes
microcontroladores usados. No entanto, todas as placas do Arduino têm uma coisa em
comum: elas são programadas através do IDE do Arduino.
As diferenças são baseadas no número de entradas e saídas (número de sensores, LEDs
e botões que você pode usar em uma única placa), velocidade, tensão operacional, fator
de forma etc. Algumas placas são projetadas para serem incorporadas e não têm
programação interface (hardware), que você precisaria comprar separadamente. Alguns
podem funcionar diretamente a partir de uma bateria de 3,7V, outros precisam de pelo
menos 5V.
Aqui está uma lista de diferentes placas Arduino disponíveis.
Placas Arduino baseadas no microcontrolador ATMEGA328
Nome do Volt de Velocidade E/S Entradas PWM UART Interface de
Conselho operação do relógio digital Analógicas programação
4
SMD
Placa
5V 16MHz 14 6 6 1 USB via FTDI
vermelha
Arduino Cabeçalho
Pro 3.3v / 3.3V 8MHz 14 6 6 1 compatível
8 MHz com FTDI
Arduino Cabeçalho
Pro 5V / 5V 16MHz 14 6 6 1 compatível
16MHz com FTDI
Arduino Cabeçalho
mini 05 5V 16MHz 14 8 6 1 compatível
com FTDI
Arduino Cabeçalho
Pro mini compatível
3.3V 8MHz 14 8 6 1
3.3v / com FTDI
8mhz
Arduino Cabeçalho
Pro mini 5v 5V 16MHz 14 8 6 1 compatível
/ 16mhz com FTDI
Arduino Cabeçalho
Ethernet 5V 16MHz 14 6 6 1 compatível
com FTDI
Cabeçalho
Arduino
3.3V 8MHz 14 8 6 1 compatível
Fio
com FTDI
Placa Cabeçalho
principal compatível
do LilyPad 3.3V 8MHz 14 6 6 1 com FTDI
Arduino
328
5
Quadro Cabeçalho
simples compatível
3.3V 8MHz 9 4 5 00
LilyPad com FTDI
Arduino
6
FTDI
7
USB de alimentação
A placa Arduino pode ser alimentada usando o cabo USB do seu
computador. Tudo o que você precisa fazer é conectar o cabo USB à conexão
USB (1).
Regulador de voltagem
A função do regulador de tensão é controlar a tensão fornecida à placa Arduino
e estabilizar as tensões CC usadas pelo processador e outros elementos.
8
Oscilador de cristal
O oscilador de cristal ajuda o Arduino a lidar com problemas de tempo. Como
o Arduino calcula o tempo? A resposta é, usando o oscilador de cristal. O
número impresso na parte superior do cristal do Arduino é 16.000H9H. Diz-nos
que a frequência é 16.000.000 Hertz ou 16 MHz.
Arduino Reset
Você pode redefinir sua placa Arduino, ou seja, iniciar seu programa desde o
início. Você pode redefinir a placa UNO de duas maneiras. Primeiro, usando o
botão de reset (17) na placa. Segundo, você pode conectar um botão de reset
externo ao pino do Arduino chamado RESET (5).
Pinos analógicos
A placa UNO do Arduino possui seis pinos de entrada analógica A0 a
A5. Esses pinos podem ler o sinal de um sensor analógico, como o sensor de
umidade ou sensor de temperatura, e convertê-lo em um valor digital que pode
ser lido pelo microprocessador.
Microcontrolador principal
Cada placa Arduino possui seu próprio microcontrolador (11). Você pode
assumi-lo como o cérebro do seu quadro. O principal IC (circuito integrado) do
Arduino é um pouco diferente de placa para placa. Os microcontroladores são
geralmente da empresa ATMEL. Você deve saber qual é o IC da sua placa
antes de carregar um novo programa no IDE do Arduino. Esta informação está
disponível na parte superior do IC. Para mais detalhes sobre a construção e
funções do IC, consulte a folha de dados.
9
Pino ICSP
Principalmente, o ICSP (12) é um AVR, um pequeno cabeçalho de
programação para o Arduino que consiste em MOSI, MISO, SCK, RESET,
VCC e GND. É freqüentemente chamado de SPI (Serial Peripheral Interface),
que pode ser considerada uma "expansão" da saída. Na verdade, você está
escravizando o dispositivo de saída para o mestre do barramento SPI.
LEDs TX e RX
Na sua placa, você encontrará dois rótulos: TX (transmissão) e RX
(recebimento). Eles aparecem em dois lugares no quadro da Arduino
UNO. Primeiro, nos pinos digitais 0 e 1, para indicar os pinos responsáveis pela
comunicação serial. Segundo, os LEDs TX e RX (13). O led TX pisca com
velocidade diferente ao enviar os dados seriais. A velocidade do piscar depende
da taxa de transmissão usada pela placa. RX pisca durante o processo de
recebimento.
E / S digital
A placa Arduino UNO possui 14 pinos de E / S digitais (15) (dos quais 6
fornecem saída PWM (Pulse Width Modulation). Esses pinos podem ser
configurados para funcionar como pinos digitais de entrada para ler valores
lógicos (0 ou 1) ou como digitais pinos de saída para acionar módulos
diferentes, como LEDs, relés, etc. Os pinos rotulados como "~" podem ser
usados para gerar PWM.
AREF
AREF significa Referência Analógica. Às vezes, é usado para definir uma
tensão de referência externa (entre 0 e 5 Volts) como o limite superior para os
pinos de entrada analógicos.
Arduino - Instalação
10
Nesta seção, aprenderemos em etapas fáceis, como configurar o Arduino IDE em
nosso computador e preparar a placa para receber o programa via cabo USB.
Etapa 1 - Primeiro você deve ter sua placa Arduino (você pode escolher sua placa
favorita) e um cabo USB. Caso você utilize o Arduino UNO, o Arduino Duemilanove,
o Nano, o Arduino Mega 2560 ou o Diecimila, será necessário um cabo USB padrão
(plugue A para plugue B), do tipo que você conectaria a uma impressora USB,
conforme mostrado na imagem a seguir.
Caso você use o Arduino Nano, precisará de um cabo A para Mini-B, conforme
mostrado na imagem a seguir.
11
Etapa 3 - Ligue sua placa.
O Arduino Uno, Mega, Duemilanove e Arduino Nano consomem energia
automaticamente, da conexão USB ao computador ou de uma fonte de alimentação
externa. Se você estiver usando um Arduino Diecimila, verifique se a placa está
configurada para extrair energia da conexão USB. A fonte de alimentação é
selecionada com um jumper, um pequeno pedaço de plástico que se encaixa em dois
dos três pinos entre as tomadas USB e de alimentação. Verifique se ele está nos dois
pinos mais próximos da porta USB.
Conecte a placa Arduino ao seu computador usando o cabo USB. O LED verde de
energia (rotulado como PWR) deve acender.
Etapa 4 - Inicie o Arduino IDE.
Após o download do software IDE do Arduino, é necessário descompactar a
pasta. Dentro da pasta, você pode encontrar o ícone do aplicativo com um rótulo
infinito ([Link]). Clique duas vezes no ícone para iniciar o IDE.
12
Etapa 5 - Abra seu primeiro projeto.
Depois que o software inicia, você tem duas opções -
13
Para abrir um exemplo de projeto existente, selecione Arquivo → Exemplo → Básico
→ Piscar.
14
Aqui, estamos selecionando apenas um dos exemplos com o nome Blink . Acende e
apaga o LED com algum atraso. Você pode selecionar qualquer outro exemplo da lista.
Etapa 6 - Selecione sua placa Arduino.
Para evitar qualquer erro ao carregar o programa na placa, você deve selecionar o
nome correto da placa Arduino, que corresponda à placa conectada ao seu computador.
Vá em Ferramentas → Quadro e selecione seu quadro.
Aqui, selecionamos o painel Arduino Uno de acordo com o nosso tutorial, mas você
deve selecionar o nome correspondente ao painel que está usando.
Etapa 7 - Selecione sua porta serial.
Selecione o dispositivo serial da placa Arduino. Vá para o menu Ferramentas →
Porta serial . É provável que seja COM3 ou superior (COM1 e COM2 são geralmente
15
reservados para portas seriais de hardware). Para descobrir, você pode desconectar a
placa do Arduino e reabrir o menu; a entrada que desaparecer deve ser da placa do
Arduino. Reconecte a placa e selecione essa porta serial.
16
A - Usado para verificar se há algum erro de compilação.
B - Usado para carregar um programa na placa do Arduino.
C - Atalho usado para criar um novo esboço.
D - Usado para abrir diretamente um dos esboços de exemplo.
E - Usado para salvar seu esboço.
F - Monitor serial usado para receber dados seriais da placa e enviar os dados seriais
para a placa.
Agora, basta clicar no botão "Upload" no ambiente. Aguarde alguns segundos; você
verá os LEDs RX e TX na placa piscando. Se o upload for bem-sucedido, a mensagem
"Concluído upload" aparecerá na barra de status.
Nota - Se você possui um Arduino Mini, NG ou outra placa, precisa pressionar
fisicamente o botão de reset na placa, imediatamente antes de clicar no botão de upload
no software Arduino.
Estrutura
Os programas do Arduino podem ser divididos em três partes principais: Estrutura,
Valores (variáveis e constantes) e Funções . Neste tutorial, aprenderemos sobre o
17
programa de software Arduino, passo a passo, e como podemos escrever o programa
sem nenhum erro de sintaxe ou compilação.
Vamos começar com a estrutura . A estrutura do software consiste em duas funções
principais -
Função Setup ()
Função Loop ()
Void setup ( ) {
}
OBJETIVO - A função setup () é chamada quando um esboço é iniciado. Use-
o para inicializar as variáveis, modos de pinos, começar a usar bibliotecas etc.
A função de configuração será executada apenas uma vez, após cada
inicialização ou redefinição da placa Arduino.
ENTRADA - -
SAÍDA - -
RETORNO - -
18
Void Loop ( ) {
}
OBJETIVO - Depois de criar uma função setup () , que inicializa e define os
valores iniciais, a função loop () faz exatamente o que o nome sugere e faz um
loop consecutivo, permitindo que o programa mude e responda. Use-o para
controlar ativamente a placa Arduino.
ENTRADA - -
SAÍDA - -
RETORNO - -
vazio boleano Caracteres Caracter não byte int Int não palavra
identifcado assinado
vazio
A palavra-chave void é usada apenas em declarações de função. Indica que a função
deve retornar nenhuma informação para a função da qual foi chamada.
Exemplo
Void Loop ( ) {
// rest of the code
}
boleano
Um booleano contém um dos dois valores, verdadeiro ou falso. Cada variável booleana
ocupa um byte de memória.
19
Exemplo
boolean val = false ; // declaration of variable with type boolean and initialize it with
false
boolean state = true ; // declaration of variable with type boolean and initialize it with
true
Caracteres
Um tipo de dados que ocupa um byte de memória que armazena um valor de
caractere. Literais de caracteres são escritos em aspas simples como esta: 'A' e para
vários caracteres, as seqüências de caracteres usam aspas duplas: "ABC".
No entanto, os caracteres são armazenados como números. Você pode ver a
codificação específica no gráfico ASCII . Isso significa que é possível executar
operações aritméticas em caracteres, nos quais o valor ASCII do caractere é usado. Por
exemplo, 'A' + 1 tem o valor 66, pois o valor ASCII da letra maiúscula A é 65.
Exemplo
Char chr_a = ‘a’ ;//declaration of variable with type char and initialize it with character
a
Char chr_c = 97 ;//declaration of variable with type char and initialize it with character
97
20
caracter não identifcado
Caracter não assinado é um tipo de dados não assinado que ocupa um byte de
memória. O tipo de dados char não assinado codifica números de 0 a 255.
Exemplo
Unsigned Char chr_y = 121 ; // declaration of variable with type Unsigned char and
initialize it with character y
21
byte
Um byte armazena um número não assinado de 8 bits, de 0 a 255.
Exemplo
byte m = 25 ;//declaration of variable with type byte and initialize it with 25
int
Os números inteiros são o tipo de dados principal para armazenamento de números. int
armazena um valor de 16 bits (2 bytes). Isso gera um intervalo de -32.768 a 32.767
(valor mínimo de -2 ^ 15 e um valor máximo de (2 ^ 15) - 1).
O tamanho int varia de placa para placa. No Arduino Due, por exemplo,
um int armazena um valor de 32 bits (4 bytes). Isso gera um intervalo de -
[Link] a [Link] (valor mínimo de -2 ^ 31 e um valor máximo de (2 ^
31) - 1).
Exemplo
int counter = 32 ;// declaration of variable with type int and initialize it with 32
Exemplo
Unsigned int counter = 60 ; // declaration of variable with
type unsigned int and initialize it with 60
Palavra
No Uno e em outras placas baseadas em ATMEGA, uma palavra armazena um número
não assinado de 16 bits. No vencimento e no zero, ele armazena um número não
assinado de 32 bits.
Exemplo
word w = 1000 ;//declaration of variable with type word and initialize it with 1000
22
Longo
Variáveis longas são variáveis de tamanho estendido para armazenamento de números
e armazenam 32 bits (4 bytes), de -[Link] a [Link].
Exemplo
Long velocity = 102346 ;//declaration of variable with type Long and initialize it with
102346
Exemplo
Unsigned Long velocity = 101006 ;// declaration of variable with
type Unsigned Long and initialize it with 101006
baixo
Um curto é um tipo de dados de 16 bits. Em todos os Arduinos (baseados em ATMega
e ARM), um pequeno armazena um valor de 16 bits (2 bytes). Isso gera um intervalo
de -32.768 a 32.767 (valor mínimo de -2 ^ 15 e um valor máximo de (2 ^ 15) - 1).
Exemplo
short val = 13 ;//declaration of variable with type short and initialize it with 13
Flutuador
O tipo de dados para o número de ponto flutuante é um número que possui um ponto
decimal. Números de ponto flutuante são frequentemente usados para aproximar os
valores analógicos e contínuos porque eles têm maior resolução que números inteiros.
Os números de ponto flutuante podem ser tão grandes quanto 3,4028235E + 38 e tão
baixos quanto -3,4028235E + 38. Eles são armazenados como 32 bits (4 bytes) de
informação.
Exemplo
float num = 1.352;//declaration of variable with type float and initialize it with 1.352
23
Duplo
No Uno e em outras placas baseadas em ATMEGA, o número de ponto flutuante de
precisão dupla ocupa quatro bytes. Ou seja, a implementação dupla é exatamente igual
à flutuação, sem ganho de precisão. No Arduino Due, os duplos têm precisão de 8
bytes (64 bits).
Exemplo
double num = 45.352 ;// declaration of variable with type double and initialize it wit
Variáveis locais
Variáveis declaradas dentro de uma função ou bloco são variáveis locais. Eles podem
ser usados apenas pelas instruções que estão dentro dessa função ou bloco de
código. As variáveis locais não são conhecidas por funcionar fora de suas próprias. A
seguir, o exemplo usando variáveis locais -
Void setup () {
Void loop () {
int x , y ;
int z ; Local variable declaration
x = 0;
y = 0; actual initialization
z = 10;
}
24
Variáveis globais
Variáveis globais são definidas fora de todas as funções, geralmente na parte superior
do programa. As variáveis globais manterão seu valor durante toda a vida útil do seu
programa.
Uma variável global pode ser acessada por qualquer função. Ou seja, uma variável
global está disponível para uso em todo o programa após a declaração.
O exemplo a seguir usa variáveis globais e locais -
Int T , S ;
float c = 0 ; Global variable declaration
Void setup () {
Void loop () {
int x , y ;
int z ; Local variable declaration
x = 0;
y = 0; actual initialization
z = 10;
}
Arduino - Operadores
Operadores aritméticos
Operadores de comparação
Operadores booleanos
Operadores bit a bit
Operadores compostos
Operadores aritméticos
Assuma que a variável A possui 10 e a variável B possui 20, em seguida -
Mostrar Exemplo
25
operador simples
A + B dará
Adição + Adiciona dois operandos
30
A - B dará
subtração - Subtrai o segundo operando do primeiro
-10
A * B dará
multiplicação * Multiplique os dois operandos
200
B / A dará
divisão / Divida o numerador pelo denominador
2
Operadores de comparação
Assuma que a variável A possui 10 e a variável B possui 20, em seguida -
Mostrar Exemplo
26
a condição se torna verdadeira. verdadeiro
Operadores booleanos
Assuma que a variável A possui 10 e a variável B possui 20, em seguida -
Mostrar Exemplo
27
Chamado operador NÃO lógico. Use para
reverter o estado lógico de seu operando. Se ! (A && B) é
não !
uma condição for verdadeira, o operador falso
Logical NOT se tornará falso.
(A | B) dará
Operador OR binário copia um pouco se ele
ou | 61, que é 0011
existir em qualquer operando
1101
(~ A) dará -
O operador de complemento binário é
não ~ 60, que é 1100
unário e tem o efeito de 'inverter' os bits.
0011
28
especificado pelo operando da direita. 1111
Operadores compostos
Assuma que a variável A possui 10 e a variável B possui 20, em seguida -
Mostrar Exemplo
Subtrair E operador de
B-=Aé
subtração atribuição. Subtrai o operando direito do
-= equivalente a B
composta operando esquerdo e atribui o resultado
=B-A
ao operando esquerdo
Operador de multiplicação e
B*=Aé
multiplicação atribuição. Multiplica o operando direito
*= equivalente a B
composta pelo operando esquerdo e atribui o
=B*A
resultado ao operando esquerdo
29
Módulo E operador de atribuição. Ele B% = A é
módulo
%= pega o módulo usando dois operandos e equivalente a B
composto
atribui o resultado ao operando esquerdo = B% A
A|=2éo
composto bit a operador OR inclusivo e de atribuição bit
|= mesmo que A
bit ou a bit
=A|2
A&=2éo
composto bit a
&= Operador de atribuição AND bit a bit mesmo que A
bit e
=A&2
30
As declarações de controle são elementos no código-fonte que controlam o fluxo de
execução do programa. Eles são -
Se declaração
1 É preciso uma expressão entre parênteses e uma declaração ou bloco de
declarações. Se a expressão for verdadeira, a instrução ou bloco de instruções
será executado, caso contrário, essas instruções serão ignoradas.
Operador condicional? :
5
O operador condicional? : é o único operador ternário em C.
Arduino - Loops
31
A linguagem de programação C fornece os seguintes tipos de loops para lidar com os
requisitos de loop.
enquanto loop
1 enquanto os loops se repetem continuamente e infinitamente, até que a expressão
entre parênteses, () se torne falsa. Algo deve mudar a variável testada, ou o loop
while nunca sairá.
para laço
Loop aninhado
4 A linguagem C permite que você use um loop dentro de outro loop. O exemplo a
seguir ilustra o conceito.
32
Loop infinito
5
Como o loop não tem condição de término, o loop se torna infinito.
Arduino - Funções
33
Declaração de Função
Uma função é declarada fora de qualquer outra função, acima ou abaixo da função de
loop.
Podemos declarar a função de duas maneiras diferentes -
A primeira maneira é apenas escrever a parte da função chamada protótipo de
função acima da função de loop, que consiste em -
Exemplo
int sum_func (int x, int y) // function declaration {
int z = 0;
z = x+y ;
return z; // return the value
}
void setup () {
Statements // group of statements
}
Void loop () {
int result = 0 ;
result = Sum_func (5,6) ; // function call
}
A segunda parte, chamada de definição ou declaração de função, deve ser declarada
abaixo da função de loop, que consiste em -
Exemplo
int sum_func (int , int ) ; // function prototype
34
void setup () {
Statements // group of statements
}
Void loop () {
int result = 0 ;
result = Sum_func (5,6) ; // function call
}
Arduino - String
Strings são usadas para armazenar texto. Eles podem ser usados para exibir texto em
um LCD ou na janela Monitor serial do Arduino IDE. Strings também são úteis para
armazenar a entrada do usuário. Por exemplo, os caracteres que um usuário digita em
um teclado conectado ao Arduino.
Existem dois tipos de strings na programação do Arduino -
35
void setup() {
char my_str[6]; // an array big enough for a 5 character string
[Link](9600);
my_str[0] = 'H'; // the string consists of 5 characters
my_str[1] = 'e';
my_str[2] = 'l';
my_str[3] = 'l';
my_str[4] = 'o';
my_str[5] = 0; // 6th array element is a null terminator
[Link](my_str);
}
void loop() {
}
O exemplo a seguir mostra do que uma string é composta; uma matriz de caracteres
com caracteres imprimíveis e 0 como o último elemento da matriz para mostrar que é
aí que a cadeia termina. A sequência pode ser impressa na janela Monitor serial do
Arduino IDE usando [Link] () e passando o nome da sequência.
Este mesmo exemplo pode ser escrito de uma maneira mais conveniente, como
mostrado abaixo -
Exemplo
void setup() {
char my_str[] = "Hello";
[Link](9600);
[Link](my_str);
}
void loop() {
}
Neste esboço, o compilador calcula o tamanho da matriz de cadeias e também nula
automaticamente termina a cadeia com um zero. Uma matriz com seis elementos e
composta por cinco caracteres seguidos por um zero é criada exatamente da mesma
maneira que no esboço anterior.
Exemplo
void setup() {
char like[] = "I like coffee and cake"; // create a string
[Link](9600);
// (1) print the string
36
[Link](like);
// (2) delete part of the string
like[13] = 0;
[Link](like);
// (3) substitute a word into the string
like[13] = ' '; // replace the null terminator with a space
like[18] = 't'; // insert the new word
like[19] = 'e';
like[20] = 'a';
like[21] = 0; // terminate the string
[Link](like);
}
void loop() {
Resultado
I like coffee and cake
I like coffee
I like coffee and tea
O esboço funciona da seguinte maneira.
Encurtando a String
A cadeia de caracteres é reduzida, substituindo o 14º caractere por um zero que termina
nulo (2). Este é o elemento número 13 na matriz de cadeias, contando de 0.
Quando a sequência é impressa, todos os caracteres são impressos até o novo zero final
nulo. Os outros caracteres não desaparecem; eles ainda existem na memória e a matriz
de cadeias ainda tem o mesmo tamanho. A única diferença é que qualquer função que
funcione com cadeias verá apenas a cadeia até o primeiro terminador nulo.
37
string para de imprimir os caracteres da string quando encontra o primeiro terminador
nulo.
Exemplo
void setup() {
char str[] = "This is my string"; // create a string
char out_str[40]; // output from string functions placed here
int num; // general purpose integer
[Link](9600);
38
void loop() {
Resultado
This is my string
String length is: 17
Size of the array: 18
This is my string
This is my string sketch.
String length is: 25
Size of the array out_str[]: 40
O esboço funciona da seguinte maneira.
Imprimir a sequência
A sequência recém-criada é impressa na janela Serial Monitor, como feito nos esboços
anteriores.
39
Anexar uma String a uma String (Concatenate)
O esboço une uma sequência a outra, conhecida como concatenação. Isso é feito
usando a função strcat (). A função strcat () coloca a segunda string passada no final da
primeira string passada a ele.
Após a concatenação, o comprimento da string é impresso para mostrar o novo
comprimento da string. O comprimento da matriz é impresso para mostrar que temos
uma cadeia de 25 caracteres em uma matriz de 40 elementos.
Lembre-se de que a cadeia longa de 25 caracteres ocupa 26 caracteres da matriz devido
ao zero que termina nulo.
Limites da matriz
Ao trabalhar com strings e matrizes, é muito importante trabalhar dentro dos limites de
strings ou matrizes. No esboço de exemplo, foi criada uma matriz, com 40 caracteres,
para alocar a memória que poderia ser usada para manipular seqüências de caracteres.
Se a matriz fosse muito pequena e tentássemos copiar uma sequência maior que a
matriz, ela seria copiada no final da matriz. A memória além do final da matriz pode
conter outros dados importantes usados no esboço, que serão substituídos pela nossa
string. Se a memória além do final da sequência for excedida, poderá travar o esboço
ou causar comportamento inesperado.
O que é um objeto?
Um objeto é uma construção que contém dados e funções. Um objeto String pode ser
criado como uma variável e atribuído um valor ou string. O objeto String contém
funções (chamadas "métodos" na programação orientada a objetos (OOP)) que operam
nos dados da string contidos no objeto String.
O seguinte esboço e explicação tornarão claro o que é um objeto e como o objeto
String é usado.
Exemplo
void setup() {
String my_str = "This is my string.";
[Link](9600);
40
// (2) change the string to upper-case
my_str.toUpperCase();
[Link](my_str);
void loop() {
Resultado
This is my string.
THIS IS MY STRING.
My new string.
My new Arduino sketch.
String length is: 22
Um objeto de sequência é criado e recebe um valor (ou sequência) na parte superior do
esboço.
String my_str = "This is my string." ;
Isso cria um objeto String com o nome my_str e atribui a ele o valor "Esta é minha
string".
Isso pode ser comparado à criação de uma variável e à atribuição de um valor, como
um número inteiro -
int my_var = 102;
O esboço funciona da seguinte maneira.
Imprimindo a sequência
A sequência pode ser impressa na janela Serial Monitor, como uma sequência de
caracteres.
41
Converter a seqüência de caracteres em maiúsculas
O objeto de cadeia my_str que foi criado, possui várias funções ou métodos que podem
ser operados nele. Esses métodos são chamados usando o nome dos objetos seguido
pelo operador de ponto (.) E, em seguida, o nome da função a ser usada.
my_str.toUpperCase();
A função toUpperCase () opera na string contida no objeto my_str, que é do tipo
String e converte os dados da string (ou texto) que o objeto contém em caracteres
maiúsculos. Uma lista das funções que a classe String contém pode ser encontrada na
referência de String do Arduino. Tecnicamente, String é chamado de classe e é usado
para criar objetos String.
42
Você precisa se certificar de que não escreve além do final dos limites da matriz com
matrizes de string. O objeto String não possui esse problema e cuidará dos limites da
string para você, desde que haja memória suficiente para operar. O objeto String pode
tentar gravar na memória que não existe quando fica sem memória, mas nunca gravará
no final da string em que está operando.
Arduino - Tempo
função delay ()
1 O funcionamento da função delay () é bastante simples. Ele aceita um único
argumento inteiro (ou número). Este número representa o tempo (medido em
milissegundos).
Função delayMicroseconds ()
função millis ()
3 Esta função é usada para retornar o número de milissegundos no momento em que
a placa Arduino começa a executar o programa atual.
função micros ()
43
Arduino - Matrizes
Um subscrito deve ser um número inteiro ou expressão inteira (usando qualquer tipo
integral). Se um programa usar uma expressão como um subscrito, o programa avaliará
a expressão para determinar o subscrito. Por exemplo, se assumirmos que a variável a é
igual a 5 e que a variável b é igual a 6, a instrução adiciona 2 ao elemento C da matriz
[11].
Um nome de matriz subscrito é um lvalue, pode ser usado no lado esquerdo de uma
atribuição, assim como nomes de variáveis que não são de matriz.
Vamos examinar a matriz C na figura fornecida, mais de perto. O nome de toda a
matriz é C. Seus 11 elementos são referidos como C [0] a C [10]. O valor de C [0] é -
45, o valor de C [1] é 6, o valor de C [2] é 0, o valor de C [7] é 62 e o valor de C [10] é
78
44
Para imprimir a soma dos valores contidos nos três primeiros elementos da matriz C,
escreveríamos:
[Link] (C[ 0 ] + C[ 1 ] + C[ 2 ] );
Para dividir o valor de C [6] por 2 e atribuir o resultado à variável x, escreveríamos:
x = C[ 6 ] / 2;
Declarando matrizes
Matrizes ocupam espaço na memória. Para especificar o tipo dos elementos e o número
de elementos exigidos por uma matriz, use uma declaração do formulário -
type arrayName [ arraySize ] ;
O compilador reserva a quantidade apropriada de memória. (Lembre-se de que uma
declaração, que reserva memória, é mais conhecida como definição). O arraySize deve
ser uma constante inteira maior que zero. Por exemplo, para dizer ao compilador para
reservar 11 elementos para a matriz inteira C, use a declaração -
int C[ 12 ]; // C is an array of 12 integers
As matrizes podem ser declaradas para conter valores de qualquer tipo de dados sem
referência. Por exemplo, uma matriz do tipo string pode ser usada para armazenar
cadeias de caracteres.
void setup () {
void loop () {
for ( int i = 0; i < 10; ++i ) // initialize elements of array n to 0 {
n[ i ] = 0; // set element at location i to 0
[Link] (i) ;
45
[Link] (‘\r’) ;
}
for ( int j = 0; j < 10; ++j ) // output each array element's value {
[Link] (n[j]) ;
[Link] (‘\r’) ;
}
}
Resultado - produz o seguinte resultado -
Element Value
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
void setup () {
void loop () {
for ( int i = 0; i < 10; ++i ) {
[Link] (i) ;
46
[Link] (‘\r’) ;
}
for ( int j = 0; j < 10; ++j ) // output each array element's value {
[Link] (n[j]) ;
[Link] (‘\r’) ;
}
}
Resultado - produz o seguinte resultado -
Element Value
0 32
1 27
2 64
3 18
4 95
5 14
6 90
7 70
8 60
9 37
void setup () {
}
void loop () {
// sum contents of array a
for ( int i = 0; i < arraySize; ++i )
total += a[ i ];
47
[Link] (“Total of array elements : ”) ;
[Link](total) ;
}
Resultado - produz o seguinte resultado -
Total of array elements: 849
As matrizes são importantes para o Arduino e precisam de muito mais atenção. Os
seguintes conceitos importantes relacionados à matriz devem ser claros para um
Arduino -
2 Matrizes multidimensionais
Arduino - Funções de E / S
48
alterações aparentemente aleatórias no estado do pino, captam ruído elétrico do
ambiente ou acoplam capacitivamente o estado de um alfinete próximo.
Resistores de pull-up
Os resistores pull-up são geralmente úteis para direcionar um pino de entrada para um
estado conhecido se nenhuma entrada estiver presente. Isso pode ser feito adicionando
um resistor de pull-up (a + 5V) ou um resistor de pull-down (resistor ao terra) na
entrada. Um resistor de 10K é um bom valor para um resistor pull-up ou pull-down.
49
Tentar executar dispositivos de alta corrente a partir dos pinos de saída, pode danificar
ou destruir os transistores de saída no pino ou danificar todo o chip
Atmega. Freqüentemente, isso resulta em um pino "morto" no microcontrolador, mas
os chips restantes ainda funcionam adequadamente. Por esse motivo, é uma boa idéia
conectar os pinos de SAÍDA a outros dispositivos através de resistores de 470Ω ou 1k,
a menos que seja necessária uma corrente máxima extraída dos pinos para uma
aplicação específica.
Função pinMode ()
A função pinMode () é usada para configurar um pino específico para se comportar
como uma entrada ou uma saída. É possível ativar os resistores pull-up internos com o
modo INPUT_PULLUP. Além disso, o modo INPUT desativa explicitamente as pull-
ups internas.
void setup () {
pinMode(button , INPUT_PULLUP);
// set the digital pin as input with pull-up resistor
pinMode(button , OUTPUT); // set the digital pin as output
}
void setup () {
If (digitalRead(button ) == LOW) // if button pressed {
digitalWrite(LED,HIGH); // turn on led
delay(500); // delay for 500 ms
digitalWrite(LED,LOW); // turn off led
delay(500); // delay for 500 ms
}
}
Função digitalWrite ()
A função digitalWrite () é usada para gravar um valor ALTO ou BAIXO em um pino
digital. Se o pino tiver sido configurado como OUTPUT com pinMode () , sua tensão
será ajustada para o valor correspondente: 5V (ou 3,3V em placas de 3,3V) para
ALTO, 0V (terra) para BAIXO. Se o pino estiver configurado como INPUT,
50
digitalWrite () habilitará (HIGH) ou desabilitará (LOW) o pullup interno no pino de
entrada. É recomendável definir o pinMode () como INPUT_PULLUP para ativar o
resistor de pull-up interno.
Se você não definir o pinMode () como OUTPUT e conectar um LED a um pino, ao
chamar digitalWrite (HIGH), o LED poderá parecer escuro. Sem definir explicitamente
pinMode (), o digitalWrite () ativará o resistor de pull-up interno, que age como um
grande resistor limitador de corrente.
void setup () {
pinMode(LED, OUTPUT); // set the digital pin as output
}
void setup () {
digitalWrite(LED,HIGH); // turn on led
delay(500); // delay for 500 ms
digitalWrite(LED,LOW); // turn off led
delay(500); // delay for 500 ms
}
função analogRead ()
O Arduino é capaz de detectar se há uma tensão aplicada a um de seus pinos e relatá-la
através da função digitalRead (). Há uma diferença entre um sensor liga / desliga (que
detecta a presença de um objeto) e um sensor analógico, cujo valor muda
continuamente. Para ler esse tipo de sensor, precisamos de um tipo diferente de pino.
Na parte inferior direita da placa Arduino, você verá seis pinos marcados com “Entrada
Analógica”. Esses pinos especiais não apenas informam se há tensão aplicada a eles,
mas também seu valor. Usando a função analogRead () , podemos ler a tensão
aplicada a um dos pinos.
Esta função retorna um número entre 0 e 1023, que representa tensões entre 0 e 5
volts. Por exemplo, se houver uma tensão de 2,5 V aplicada ao número de pino 0,
analogRead (0) retornará 512.
51
pin - o número do pino de entrada analógica para leitura (0 a 5 na maioria das
placas, 0 a 7 no Mini e Nano, 0 a 15 no Mega)
Exemplo
int analogPin = 3;//potentiometer wiper (middle terminal)
// connected to analog pin 3
int val = 0; // variable to store the value read
void setup() {
[Link](9600); // setup serial
}
void loop() {
val = analogRead(analogPin); // read the input pin
[Link](val); // debug value
}
Função analogReference ()
Configura a tensão de referência usada para a entrada analógica (ou seja, o valor usado
como o topo da faixa de entrada). As opções são -
PADRÃO - A referência analógica padrão de 5 volts (em placas Arduino de
5V) ou 3,3 volts (em placas Arduino de 3,3V)
INTERNO - Uma referência interna, igual a 1,1 volts no ATmega168 ou
ATmega328 e 2,56 volts no ATmega8 (não disponível no Arduino Mega)
INTERNAL1V1 - Uma referência 1.1V integrada (somente Arduino Mega)
INTERNAL2V56 - Uma referência interna de 2,56 V (somente Arduino Mega)
EXTERNO - A tensão aplicada ao pino AREF (apenas 0 a 5V) é usada como
referência
52
() . Caso contrário, você reduzirá a tensão de referência ativa (gerada internamente) e o
pino AREF, possivelmente danificando o microcontrolador na placa Arduino.
Como alternativa, você pode conectar a tensão de referência externa ao pino AREF
através de um resistor de 5K, permitindo alternar entre as tensões de referência
externas e internas.
Observe que o resistor altera a voltagem usada como referência, porque existe um
resistor interno de 32K no pino AREF. Os dois atuam como um divisor de tensão. Por
exemplo, 2,5V aplicados através do resistor produzirão 2,5 * 32 / (32 + 5) = ~ 2,2V no
pino AREF.
Exemplo
int analogPin = 3;// potentiometer wiper (middle terminal) connected to analog pin 3
int val = 0; // variable to store the read value
void setup() {
[Link](9600); // setup serial
analogReference(EXTERNAL); // the voltage applied to the AREF pin (0 to 5V only)
// is used as the reference.
}
void loop() {
val = analogRead(analogPin); // read the input pin
[Link](val); // debug value
}
Todos os dados são inseridos nos computadores como caracteres, o que inclui letras,
dígitos e vários símbolos especiais. Nesta seção, discutiremos os recursos do C ++ para
examinar e manipular caracteres individuais.
53
A biblioteca de manipulação de caracteres inclui várias funções que executam testes e
manipulações úteis de dados de caracteres. Cada função recebe um caractere,
representado como int, ou EOF como argumento. Os caracteres são frequentemente
manipulados como números inteiros.
Lembre-se de que o EOF normalmente tem o valor -1 e que algumas arquiteturas de
hardware não permitem que valores negativos sejam armazenados em variáveis de
caracteres. Portanto, as funções de manipulação de caracteres manipulam caracteres
como números inteiros.
A tabela a seguir resume as funções da biblioteca de manipulação de caracteres. Ao
usar funções da biblioteca de manipulação de caracteres, inclua o cabeçalho <cctype> .
54
int iscntrl (int c)
8 Retorna 1 se c for um caractere de controle, como nova linha ('\ n'), avanço de
formulário ('\ f'), retorno de carro ('\ r'), guia horizontal ('\ t'), guia vertical (' \ v '),
alerta (' \ a ') ou backspace (' \ b ') - e 0 caso contrário.
Exemplos
O exemplo a seguir demonstra o uso das funções isdigit, isalpha,
isalnum e isxdigit . A função isdigit determina se seu argumento é um dígito (0–9). A
função isalpha determina se seu argumento é uma letra maiúscula (AZ) ou uma letra
minúscula (a – z). A função isalnum determina se o argumento é uma letra maiúscula,
minúscula ou um dígito. A função isxdigit determina se seu argumento é um dígito
hexadecimal (A – F, a – f, 0–9).
Exemplo 1
void setup () {
[Link] (9600);
[Link] ("According to isdigit:\r");
[Link] (isdigit( '8' ) ? "8 is a": "8 is not a");
[Link] (" digit\r" );
[Link] (isdigit( '8' ) ?"# is a": "# is not a") ;
[Link] (" digit\r");
[Link] ("\rAccording to isalpha:\r" );
[Link] (isalpha('A' ) ?"A is a": "A is not a");
[Link] (" letter\r");
[Link] (isalpha('A' ) ?"b is a": "b is not a");
[Link] (" letter\r");
[Link] (isalpha('A') ?"& is a": "& is not a");
[Link] (" letter\r");
[Link] (isalpha( 'A' ) ?"4 is a":"4 is not a");
55
[Link] (" letter\r");
[Link] ("\rAccording to isalnum:\r");
[Link] (isalnum( 'A' ) ?"A is a" : "A is not a" );
void loop () {
Resultado
According to isdigit:
8 is a digit
# is not a digit
According to isalpha:
A is a letter
b is a letter
& is not a letter
4 is not a letter
According to isalnum:
A is a digit or a letter
8 is a digit or a letter
# is not a digit or a letter
According to isxdigit:
F is a hexadecimal digit
J is not a hexadecimal digit
7 is a hexadecimal digit
56
Usamos o operador condicional (? :) com cada função para determinar se a sequência
"é uma" ou a sequência "não é" deve ser impressa na saída para cada caractere
testado. Por exemplo, a linha a indica que se '8' for um dígito - ou seja,
se isdigit retornar um valor verdadeiro (diferente de zero) - a sequência "8 é a" será
impressa. Se '8' não for um dígito (ou seja, se o dígito for retornar 0), a string "8 não é
a" será impressa.
Exemplo 2
O exemplo a seguir demonstra o uso das funções islower e isupper . A
função islower determina se seu argumento é uma letra minúscula (a – z). A
função isupper determina se o argumento é uma letra maiúscula (A – Z).
int thisChar = 0xA0;
void setup () {
[Link] (9600);
[Link] ("According to islower:\r") ;
[Link] (islower( 'p' ) ? "p is a" : "p is not a" );
[Link] ( " lowercase letter\r" );
[Link] ( islower( 'P') ? "P is a" : "P is not a") ;
[Link] ("lowercase letter\r");
[Link] (islower( '5' ) ? "5 is a" : "5 is not a" );
[Link] ( " lowercase letter\r" );
[Link] ( islower( '!' )? "! is a" : "! is not a") ;
[Link] ("lowercase letter\r");
void setup () {
Resultado
According to islower:
p is a lowercase letter
P is not a lowercase letter
5 is not a lowercase letter
! is not a lowercase letter
57
According to isupper:
D is an uppercase letter
d is not an uppercase letter
8 is not an uppercase letter
$ is not an uppercase letter
Exemplo 3
O exemplo a seguir demonstra o uso das funções isspace, iscntrl, ispunct,
isprint e isgraph .
A função isspace determina se seu argumento é um caractere de espaço em
branco, como espaço (''), avanço de formulário ('\ f'), nova linha ('\ n'), retorno
de carro ('\ r'), guia horizontal ('\ t') ou guia vertical ('\ v').
A função iscntrl determina se o argumento é um caractere de controle, como
guia horizontal ('\ t'), guia vertical ('\ v'), feed de formulário ('\ f'), alerta ('\ a'),
backspace ( '\ b'), retorno de carro ('\ r') ou nova linha ('\ n').
A função ispunct determina se seu argumento é um caractere de impressão que
não seja um espaço, dígito ou letra, como $, #, (,), [,], {,},;,: ou%.
A função isprint determina se o argumento é um caractere que pode ser exibido
na tela (incluindo o caractere de espaço).
A função isgraph testa os mesmos caracteres que isprint, mas o caractere de
espaço não está incluído.
void setup () {
[Link] (9600);
[Link] ( " According to isspace:\rNewline ") ;
[Link] (isspace( '\n' )? " is a" : " is not a" );
[Link] ( " whitespace character\rHorizontal tab") ;
[Link] (isspace( '\t' )? " is a" : " is not a" );
[Link] ( " whitespace character\n") ;
[Link] (isspace('%')? " % is a" : " % is not a" );
58
[Link] (isprint('\a' ) ?" is a" : " is not a" );
[Link] (" printing character\rSpace ");
[Link] (isprint(' ' ) ?" is a" : " is not a" );
[Link] (" printing character\r");
void loop () {
Resultado
According to isspace:
Newline is a whitespace character
Horizontal tab is a whitespace character
% is not a whitespace character
According to iscntrl:
Newline is a control character
$ is not a control character
According to ispunct:
; is a punctuation character
Y is not a punctuation character
# is a punctuation character
According to isprint:
$ is a printing character
Alert is not a printing character
Space is a printing character
According to isgraph:
Q is a printing character other than a space
Space is not a printing character other than a space
A biblioteca Arduino Math (math.h) inclui várias funções matemáticas úteis para
manipular números de ponto flutuante.
Macros de biblioteca
A seguir, estão as macros definidas no cabeçalho math.h -
Dada a seguir, é apresentada a lista de macros definidas no cabeçalho math.h
59
Funções da Biblioteca
As seguintes funções são definidas no cabeçalho math.h -
Dada a seguir, a lista de funções é definida no cabeçalho math.h
Exemplo
O exemplo a seguir mostra como usar as funções mais comuns da biblioteca math.h -
double double__x = 45.45 ;
double double__y = 30.20 ;
void setup() {
[Link](9600);
[Link]("cos num = ");
[Link] (cos (double__x) ); // returns cosine of x
[Link]("absolute value of num = ");
[Link] (fabs (double__x) ); // absolute value of a float
[Link]("floating point modulo = ");
[Link] (fmod (double__x, double__y)); // floating point modulo
[Link]("sine of num = ");
[Link] (sin (double__x) ) ;// returns sine of x
[Link]("square root of num : ");
[Link] ( sqrt (double__x) );// returns square root of x
[Link]("tangent of num : ");
[Link] ( tan (double__x) ); // returns tangent of x
[Link]("exponential value of num : ");
[Link] ( exp (double__x) ); // function returns the exponential value of x.
[Link]("cos num : ");
void loop() {
60
Resultado
cos num = 0.10
absolute value of num = 45.45
floating point modulo =15.25
sine of num = 0.99
square root of num : 6.74
tangent of num : 9.67
exponential value of num : ovf
cos num : 1.55
tangent of num : 0.59
arc tangent of num : 3.82
cos num : 1.66
logarithm of num to base 10 : inf
power of num : 2065.70
Você precisa usar a trigonometria praticamente como calcular a distância para o objeto
em movimento ou a velocidade angular. O Arduino fornece funções trigonométricas
tradicionais (sin, cos, tan, asin, acos, atan) que podem ser resumidas escrevendo seus
protótipos. Math.h contém o protótipo da função trigonometria.
Exemplo
double sine = sin(2); // approximately 0.90929737091
double cosine = cos(2); // approximately -0.41614685058
double tangent = tan(2); // approximately -2.18503975868
61
Possui 54 pinos de entrada / saída digitais (dos quais 12 podem ser usados como
saídas PWM)
12 entradas analógicas
4 UARTs (portas seriais de hardware)
Relógio de 84 MHz, uma conexão compatível com USB OTG
2 DAC (digital para analógico), 2 TWI, uma tomada de força, um cabeçalho
SPI, um cabeçalho JTAG
Botão de redefinição e um botão de apagar
Comunicação
4 UARTs de hardware
2 I2C
62
1 Interface CAN (protocolo de comunicação automotiva)
1 SPI
1 interface JTAG (10 pinos)
1 host USB (como Leonardo)
1 porta de programação
Diferentemente da maioria das placas Arduino, a placa Arduino Due funciona a
3,3V. A tensão máxima que os pinos de E / S podem tolerar é de 3,3V. A aplicação de
tensões superiores a 3,3V a qualquer pino de E / S pode danificar a placa.
A placa contém tudo o necessário para suportar o microcontrolador. Você pode
simplesmente conectá-lo a um computador com um cabo micro-USB ou alimentá-lo
com um adaptador CA-CC ou bateria para começar. O Due é compatível com todos os
escudos do Arduino que funcionam em 3.3V.
Arduino Zero
O Zero é uma extensão simples e poderosa de 32 bits da plataforma estabelecida pela
ONU. A placa Zero expande a família, fornecendo desempenho aprimorado,
possibilitando uma variedade de oportunidades de projeto para dispositivos, e atua
como uma ótima ferramenta educacional para aprender sobre o desenvolvimento de
aplicativos de 32 bits.
Recursos importantes são -
Os aplicativos Zero abrangem desde dispositivos inteligentes de IoT, tecnologia
vestível, automação de alta tecnologia, até robótica maluca.
A placa é alimentada pelo SAMD21 MCU da Atmel, que possui um núcleo
ARM Cortex® M0 + de 32 bits.
Um de seus recursos mais importantes é o Embedded Debugger (EDBG) da
Atmel, que fornece uma interface de depuração completa sem a necessidade de
hardware adicional, aumentando significativamente a facilidade de uso para
depuração de software.
O EDBG também suporta uma porta COM virtual que pode ser usada para
programação de dispositivo e carregador de inicialização.
63
Características da placa Arduino Zero
A modulação por largura de pulso ou PWM é uma técnica comum usada para variar a
largura dos pulsos em um trem de pulsos. O PWM possui muitas aplicações, como o
controle de servos e controladores de velocidade, limitando a potência efetiva de
motores e LEDs.
Período
Como mostrado na figura, T on indica o tempo de ativação e T off indica o tempo de
desativação do sinal. Período é a soma dos tempos de ativação e desativação e é
calculado como mostrado na equação a seguir -
$$ T_ {total} = T_ {ativado} + T_ {desativado} $$
Ciclo de trabalho
O ciclo de serviço é calculado como o horário do período. Usando o período calculado
acima, o ciclo de serviço é calculado como -
$$ D = \ frac {T_ {on}} {T_ {on} + T_ {off}} = \ frac {T_ {on}} {T_ {total}} $$
Função analogWrite ()
A função analogWrite () grava um valor analógico (onda PWM) em um pino. Pode
ser usado para acender um LED com brilho variável ou acionar um motor em várias
velocidades. Após uma chamada da função analogWrite (), o pino gerará uma onda
quadrada constante do ciclo de trabalho especificado até a próxima chamada para
analogWrite () ou uma chamada para digitalRead () ou digitalWrite () no mesmo
pino. A frequência do sinal PWM na maioria dos pinos é de aproximadamente 490
Hz. Nas placas Uno e similares, os pinos 5 e 6 têm uma frequência de
aproximadamente 980 Hz. Os pinos 3 e 11 no Leonardo também funcionam a 980 Hz.
Na maioria das placas Arduino (aquelas com ATmega168 ou ATmega328), essa
função funciona nos pinos 3, 5, 6, 9, 10 e 11. No Arduino Mega, funciona nos pinos 2 -
13 e 44 - 46. Arduino mais antigo as placas com um ATmega8 suportam
apenas analogWrite () nos pinos 9, 10 e 11.
65
O Arduino Due suporta analogWrite () nos pinos 2 a 13 e nos pinos DAC0 e
DAC1. Ao contrário dos pinos PWM, o DAC0 e o DAC1 são conversores de Digital
para Analógico e atuam como saídas analógicas verdadeiras.
Você não precisa chamar pinMode () para definir o pino como uma saída antes de
chamar analogWrite ().
void setup() {
pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop() {
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023,
// analogWrite values from 0 to 255
}
Para gerar números aleatórios, você pode usar as funções de números aleatórios do
Arduino. Temos duas funções -
randomSeed (semente)
aleatória()
randomSeed (semente)
A função randomSeed (seed) redefine o gerador de números pseudo-aleatórios do
Arduino. Embora a distribuição dos números retornados por random () seja
essencialmente aleatória, a sequência é previsível. Você deve redefinir o gerador para
algum valor aleatório. Se você tiver um pino analógico desconectado, ele poderá captar
ruídos aleatórios no ambiente ao redor. Podem ser ondas de rádio, raios cósmicos,
interferência eletromagnética de telefones celulares, luzes fluorescentes e assim por
diante.
66
Exemplo
randomSeed(analogRead(5)); // randomize using noise from analog pin 5
aleatória( )
A função aleatória gera números pseudo-aleatórios. A seguir está a sintaxe.
Exemplo
long randNumber;
void setup() {
[Link](9600);
// if analog input pin 0 is unconnected, random analog
// noise will cause the call to randomSeed() to generate
// different seed numbers each time the sketch runs.
// randomSeed() will then shuffle the random function.
randomSeed(analogRead(0));
}
void loop() {
// print a random number from 0 to 299
[Link]("random1=");
randNumber = random(300);
[Link](randNumber); // print a random number from 0to 299
[Link]("random2=");
randNumber = random(10, 20);// print a random number from 10 to 19
[Link] (randNumber);
delay(50);
}
Vamos agora atualizar nosso conhecimento sobre alguns dos conceitos básicos, como
bits e bytes.
Bits
Um bit é apenas um dígito binário.
O sistema binário usa dois dígitos, 0 e 1.
Semelhante ao sistema de números decimais, no qual os dígitos de um número
não têm o mesmo valor, a 'significância' de um bit depende de sua posição no
número binário. Por exemplo, os dígitos no número decimal 666 são iguais,
mas têm valores diferentes.
67
Bytes
Um byte consiste em oito bits.
Se um bit é um dígito, é lógico que os bytes representem números.
Todas as operações matemáticas podem ser executadas sobre elas.
Os dígitos em um byte também não têm o mesmo significado.
O bit mais à esquerda tem o maior valor chamado de bit mais significativo
(MSB).
O bit mais à direita tem o menor valor e, portanto, é chamado de bit menos
significativo (LSB).
Como oito zeros e os de um byte podem ser combinados de 256 maneiras
diferentes, o maior número decimal que pode ser representado por um byte é
255 (uma combinação representa um zero).
Arduino - Interrupções
68
Caracteristicas importantes
Aqui estão alguns recursos importantes sobre interrupções -
As interrupções podem vir de várias fontes. Nesse caso, estamos usando uma
interrupção de hardware que é acionada por uma alteração de estado em um dos
pinos digitais.
A maioria dos projetos do Arduino possui duas interrupções de hardware
(chamadas de "interrupt0" e "interrupt1") conectadas aos pinos de E / S digitais
2 e 3, respectivamente.
O Arduino Mega possui seis interrupções de hardware, incluindo as
interrupções adicionais ("interrupt2" a "interrupt5") nos pinos 21, 20, 19 e 18.
Você pode definir uma rotina usando uma função especial denominada "Rotina
de serviço de interrupção" (geralmente conhecida como ISR).
Você pode definir a rotina e especificar condições na borda ascendente,
descendente ou em ambos. Nessas condições específicas, a interrupção seria
atendida.
É possível executar essa função automaticamente, sempre que um evento ocorre
em um pino de entrada.
69
Tipos de interrupções
Existem dois tipos de interrupções -
Interrupções de hardware - Elas ocorrem em resposta a um evento externo,
como um pino de interrupção externo ficando alto ou baixo.
Interrupções de software - ocorrem em resposta a uma instrução enviada no
software. O único tipo de interrupção suportado pelo "idioma do Arduino" é a
função attachInterrupt ().
void setup() {
pinMode(13, OUTPUT); //set pin 13 as output
attachInterrupt(digitalPinToInterrupt(pin), blink, CHANGE);
//interrupt at pin 2 blink ISR when pin to change the value
}
void loop() {
70
digitalWrite(13, state); //pin 13 equal the state value
}
void blink() {
//ISR function
state = !state; //toggle the state when the interrupt occurs
}
Arduino - Comunicação
Comunicação Paralela
A conexão paralela entre o Arduino e os periféricos via portas de entrada / saída é a
solução ideal para distâncias menores até vários metros. No entanto, em outros casos,
quando é necessário estabelecer comunicação entre dois dispositivos para distâncias
maiores, não é possível usar a conexão paralela. Interfaces paralelas transferem vários
bits ao mesmo tempo. Eles geralmente exigem barramentos de dados - transmitindo
através de oito, dezesseis ou mais fios. Os dados são transferidos em enormes ondas de
1 e 0.
71
Módulos de comunicação serial
Hoje, a maioria das placas Arduino são construídas com vários sistemas diferentes para
comunicação serial como equipamento padrão.
Qual desses sistemas é usado depende dos seguintes fatores -
Bits de sincronização
Bits de dados
Bits de paridade
Taxa de transmissão
Bits de sincronização
Os bits de sincronização são dois ou três bits especiais transferidos com cada pacote de
dados. Eles são o bit inicial e o (s) bit (s) de parada. Fiel ao seu nome, esses bits
marcam o início e o fim de um pacote, respectivamente.
72
Sempre existe apenas um bit de início, mas o número de bits de parada é configurável
para um ou dois (embora normalmente seja deixado em um).
O bit inicial é sempre indicado por uma linha de dados ociosa indo de 1 a 0, enquanto o
(s) bit (s) de parada retornam ao estado ocioso mantendo a linha em 1.
Bits de dados
A quantidade de dados em cada pacote pode ser configurada para qualquer tamanho de
5 a 9 bits. Certamente, o tamanho padrão dos dados é o byte básico de 8 bits, mas
outros tamanhos têm seus usos. Um pacote de dados de 7 bits pode ser mais eficiente
que 8, especialmente se você estiver apenas transferindo caracteres ASCII de 7 bits.
Bits de paridade
O usuário pode selecionar se deve haver um bit de paridade ou não e, se sim, se a
paridade deve ser ímpar ou par. O bit de paridade é 0 se o número de 1s entre os bits de
dados for par. Paridade ímpar é exatamente o oposto.
Taxa de transmissão
O termo taxa de transmissão é usado para indicar o número de bits transferidos por
segundo [bps]. Observe que se refere a bits, não bytes. Geralmente, é exigido pelo
protocolo que cada byte seja transferido junto com vários bits de controle. Isso
significa que um byte no fluxo de dados serial pode consistir em 11 bits. Por exemplo,
se a taxa de transmissão for de 300 bps, o máximo de 37 e o mínimo de 27 bytes
poderão ser transferidos por segundo.
Arduino UART
O código a seguir fará com que o Arduino envie alô mundo quando for inicializado.
void setup() {
[Link](9600); //set up serial library baud rate to 9600
[Link]("hello world"); //print hello world
}
void loop() {
73
Digite qualquer coisa na caixa superior do Monitor serial e pressione enviar ou entrar
no teclado. Isso enviará uma série de bytes para o Arduino.
O código a seguir retorna o que recebe como entrada.
O código a seguir fará com que o Arduino entregue a saída, dependendo da entrada
fornecida.
void setup() {
[Link](9600); //set up serial library baud rate to 9600
}
void loop() {
if([Link]()) //if number of bytes (characters) available for reading from {
serial port
[Link]("I received:"); //print I received
[Link]([Link]()); //send what you read
}
}
Observe que [Link] e [Link] enviarão de volta o código ASCII real,
enquanto [Link] enviará de volta o texto real. Consulte os códigos ASCII para
obter mais informações.
74
Placa I2C Pins
O barramento I2C consiste em dois sinais - SCL e SDA. SCL é o sinal do relógio e
SDA é o sinal de dados. O atual mestre do barramento sempre gera o sinal do
relógio. Alguns dispositivos escravos podem forçar o relógio a reduzir o tempo às
vezes para atrasar o envio de mais dados pelo mestre (ou exigir mais tempo para
preparar os dados antes que o mestre tente registrá-los). Isso é conhecido como
"alongamento do relógio".
A seguir, estão os pinos para diferentes placas Arduino -
Arduino I2C
Temos dois modos - código mestre e código escravo - para conectar duas placas
Arduino usando I2C. Eles são -
Transmissor Mestre
As seguintes funções são usadas para inicializar a biblioteca do Wire e ingressar no
barramento I2C como mestre ou escravo. Isso normalmente é chamado apenas uma
vez.
[Link] (endereço) - O endereço é o endereço escravo de 7 bits no nosso
caso, pois o mestre não está especificado e ele ingressará no barramento como
mestre.
[Link] (address) - Inicie uma transmissão para o dispositivo
escravo I2C com o endereço fornecido.
[Link] (value) - enfileira os bytes para transmissão de um dispositivo
mestre para um escravo (chamadas intermediárias para beginTransmission () e
endTransmission ()).
[Link] () - Termina uma transmissão para um dispositivo
escravo iniciado por beginTransmission () e transmite os bytes que foram
enfileirados por [Link] ().
Exemplo
#include <Wire.h> //include wire library
75
void setup() //this will run only once {
[Link](); // join i2c bus as master
}
short age = 0;
void loop() {
[Link](2);
// transmit to device #2
[Link]("age is = ");
[Link](age); // sends one byte
[Link](); // stop transmitting
delay(1000);
}
Receptor Escravo
As seguintes funções são usadas -
[Link] (endereço) - Endereço é o endereço escravo de 7 bits.
[Link] (manipulador de dados recebido) - Função a ser chamada
quando um dispositivo escravo recebe dados do mestre.
[Link] () - Retorna o número de bytes disponíveis para recuperação
com [Link] (). Isso deve ser chamado dentro do manipulador
[Link] ().
Exemplo
#include <Wire.h> //include wire library
void loop() {
delay(250);
}
76
Receptor Mestre / Transmissor Escravo
Vamos agora ver o que é o receptor principal e o transmissor escravo.
Receptor Mestre
O mestre é programado para solicitar e, em seguida, ler bytes de dados que são
enviados do Slave Arduino endereçado exclusivamente.
A seguinte função é usada -
[Link] (endereço, número de bytes) - Usado pelo mestre para solicitar
bytes de um dispositivo escravo. Os bytes podem então ser recuperados com as
funções [Link] () e [Link] ().
Exemplo
#include <Wire.h> //include wire library void setup() {
[Link](); // join i2c bus (address optional for master)
[Link](9600); // start serial for output
}
void loop() {
[Link](2, 1); // request 1 bytes from slave device #2
while ([Link]()) // slave may send less than requested {
char c = [Link](); // receive a byte as character
[Link](c); // print the character
}
delay(500);
}
Transmissor Escravo
A seguinte função é usada.
[Link] (manipulador) - Uma função é chamada quando um mestre solicita
dados deste dispositivo escravo.
Exemplo
#include <Wire.h>
void setup() {
[Link](2); // join i2c bus with address #2
[Link](requestEvent); // register event
}
Byte x = 0;
void loop() {
delay(100);
}
77
// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {
[Link](x); // respond with message of 1 bytes as expected by master
x++;
}
78
Modo 0 (o padrão) - O relógio normalmente é baixo (CPOL = 0) e os dados
são amostrados na transição de baixa para alta (borda superior) (CPHA = 0).
Modo 1 - O relógio normalmente é baixo (CPOL = 0) e os dados são
amostrados na transição de alto para baixo (borda de fuga) (CPHA = 1).
Modo 2 - O relógio normalmente é alto (CPOL = 1) e os dados são amostrados
na transição de alto para baixo (borda principal) (CPHA = 0).
Modo 3 - O relógio normalmente é alto (CPOL = 1) e os dados são amostrados
na transição de baixa para alta (borda de fuga) (CPHA = 1).
[Link] (manipulador) - Função a ser chamada quando um
dispositivo escravo recebe dados do mestre.
Agora, conectaremos duas placas Arduino UNO juntas; um como mestre e o outro
como escravo.
(SS): pino 10
(MOSI): pino 11
(MISO): pino 12
(SCK): pino 13
O chão é comum. A seguir, é apresentada a representação esquemática da conexão
entre as duas placas -
79
SPI como MASTER
Exemplo
#include <SPI.h>
Exemplo
#include <SPI.h>
char buff [50];
volatile byte indx;
volatile boolean process;
80
}
}
Os LEDs são luzes pequenas e poderosas usadas em muitas aplicações diferentes. Para
começar, trabalharemos para piscar um LED, o Hello World dos microcontroladores. É
tão simples quanto acender e apagar uma luz. O estabelecimento dessa importante
linha de base fornecerá uma base sólida à medida que trabalhamos em direção a
experimentos mais complexos.
Componentes Necessários
Você precisará dos seguintes componentes -
1 × Breadboard
1 × Arduino Uno R3
1 × LED
Resistor 1 × 330Ω
2 × Jumper
Procedimento
Siga o diagrama do circuito e conecte os componentes na tábua de pão, como mostra a
imagem abaixo.
81
Nota - Para descobrir a polaridade de um LED, observe-o de perto. A mais curta das
duas pernas, em direção à borda plana da lâmpada, indica o terminal negativo.
82
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra o novo arquivo de esboço clicando em Novo.
Código Arduino
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
*/
// the setup function runs once when you press reset or power the board
83
// the loop function runs over and over again forever
void loop() {
digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(2, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Código a Nota
pinMode (2, OUTPUT) - Antes de poder usar um dos pinos do Arduino, você precisa
informar ao Arduino Uno R3 se é um INPUT ou OUTPUT. Usamos uma "função"
interna chamada pinMode () para fazer isso.
digitalWrite (2, HIGH) - Quando você está usando um pino como uma SAÍDA, pode
comandá-lo como ALTO (saída 5 volts) ou BAIXO (saída 0 volts).
Resultado
Você deve ver o LED acender e apagar. Se a saída necessária não for vista, verifique se
você montou o circuito corretamente e verifique e carregou o código na sua placa.
Componentes Necessários
Você precisará dos seguintes componentes -
1 × Breadboard
1 × Arduino Uno R3
1 × LED
Resistor 1 × 330Ω
2 × Jumper
Procedimento
Siga o diagrama do circuito e conecte os componentes na tábua de pão, como mostra a
imagem abaixo.
84
Nota - Para descobrir a polaridade de um LED, observe-o de perto. A mais curta das
duas pernas, em direção à borda plana da lâmpada, indica o terminal negativo.
85
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra o novo arquivo de esboço clicando em Novo.
Código Arduino
/*
Fade
This example shows how to fade an LED on pin 9 using the analogWrite() function.
The analogWrite() function uses PWM, so if you want to change the pin you're using,
be
sure to use another PWM capable pin. On most Arduino, the PWM pins are identified
with
a "~" sign, like ~3, ~5, ~6, ~9, ~10 and ~11.
*/
86
int led = 9; // the PWM pin the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by
// the setup routine runs once when you press reset:
void setup() {
// declare pin 9 to be an output:
pinMode(led, OUTPUT);
}
void loop() {
// set the brightness of pin 9:
analogWrite(led, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
// wait for 30 milliseconds to see the dimming effect
delay(300);
}
Código a Nota
Depois de declarar o pino 9 como seu pino de LED, não há nada a fazer na função
setup () do seu código. A função analogWrite () que você usará no loop principal do
seu código requer dois argumentos: um, informando a função em que pino gravar e o
outro indicando qual valor PWM a ser gravado.
Para apagar e acender o LED, aumente gradualmente os valores de PWM de 0 (até o
fim) para 255 (até o fim) e depois volte para 0 para concluir o ciclo. No esboço
fornecido acima, o valor PWM é definido usando uma variável chamada brilho. Cada
vez que passa pelo loop, ele aumenta pelo valor da variável fadeAmount .
Se o brilho estiver no extremo de seu valor (0 ou 255), fadeAmount será alterado para
negativo. Em outras palavras, se fadeAmount for 5, será definido como -5. Se for -5,
será definido como 5. Na próxima vez que ocorrer um loop, essa alteração fará com
que o brilho mude também a direção.
analogWrite () pode alterar o valor PWM muito rapidamente, portanto o atraso no
final do esboço controla a velocidade do desbotamento. Tente alterar o valor do atraso
e veja como ele altera o efeito de desbotamento.
Resultado
Você deve ver o brilho do LED mudar gradualmente.
87
Arduino - Leitura de tensão analógica
Este exemplo mostra como ler uma entrada analógica no pino analógico 0. A entrada é
convertida de analogRead () em voltagem e impressa no monitor serial do Arduino
Software (IDE).
Componentes Necessários
Você precisará dos seguintes componentes -
1 × Breadboard
1 × Arduino Uno R3
Resistor variável de 1 × 5K (potenciômetro)
2 × Jumper
Procedimento
Siga o diagrama do circuito e conecte os componentes na tábua de pão, como mostra a
imagem abaixo.
Potenciômetro
Um potenciômetro (ou pot) é um transdutor eletromecânico simples. Ele converte o
movimento rotativo ou linear do operador de entrada em uma mudança de
resistência. Essa alteração é (ou pode ser) usada para controlar qualquer coisa, desde o
volume de um sistema de alta fidelidade até a direção de um enorme navio porta-
contêineres.
O pote como o conhecemos era originalmente conhecido como reostato
(essencialmente um resistor variável de fio enrolado). A variedade de potes disponíveis
agora é bastante surpreendente, e pode ser muito difícil para o iniciante (em particular)
88
descobrir qual tipo é adequado para uma determinada tarefa. Alguns tipos diferentes de
potes, que podem ser usados para a mesma tarefa, dificultam o trabalho.
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
Código Arduino
/*
ReadAnalogVoltage
Reads an analog input on pin 0, converts it to voltage,
89
and prints the result to the serial monitor.
Graphical representation is available using serial plotter (Tools > Serial Plotter menu)
Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and
ground.
*/
void setup() {
// initialize serial communication at 9600 bits per second:
[Link](9600);
}
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
float voltage = sensorValue * (5.0 / 1023.0);
// print out the value you read:
[Link](voltage);
}
Código a Nota
No programa ou esboço fornecido abaixo, a primeira coisa que você faz na função de
configuração é iniciar as comunicações seriais, a 9600 bits por segundo, entre a placa e
o computador com a linha -
[Link](9600);
No loop principal do seu código, você precisa estabelecer uma variável para armazenar
o valor da resistência (que será entre 0 e 1023, perfeito para um tipo de dados int)
proveniente do seu potenciômetro -
int sensorValue = analogRead(A0);
Para alterar os valores de 0 a 1023 para uma faixa que corresponde à tensão, o pino
está lendo, você precisa criar outra variável, um flutuador e fazer um pequeno
cálculo. Para dimensionar os números entre 0,0 e 5,0, divida 5,0 por 1023,0 e
multiplique por sensorValue -
float voltage= sensorValue * (5.0 / 1023.0);
Finalmente, você precisa imprimir essas informações na sua janela serial. Você pode
fazer isso com o comando [Link] () na sua última linha de código -
[Link](voltage)
Agora, abra o Serial Monitor no Arduino IDE clicando no ícone no lado direito da
barra verde superior ou pressionando Ctrl + Shift + M.
90
Resultado
Você verá um fluxo constante de números variando de 0,0 a 5,0. À medida que você
gira o pote, os valores mudam, correspondendo à tensão no pino A0.
Este exemplo mostra como ler uma entrada analógica no pino analógico 0, converter os
valores de analogRead () em tensão e imprimi-la no monitor serial do Arduino
Software (IDE).
Componentes Necessários
Você precisará dos seguintes componentes -
1 × Breadboard
1 × Arduino Uno R3
Resistor variável de 1 × 5k ohm (potenciômetro)
2 × Jumper
91
8 × LED ou você pode usar (exibição do gráfico de barras em LED, como
mostrado na imagem abaixo)
Procedimento
Siga o diagrama do circuito e conecte os componentes na tábua de pão, como mostra a
imagem abaixo.
92
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
93
Gráfico de barras do LED de 10 segmentos
Esses LEDs de gráfico de barras de 10 segmentos têm muitos usos. Com um tamanho
compacto, conexão simples, eles são fáceis para protótipos ou produtos
acabados. Essencialmente, são 10 LEDs azuis individuais alojados juntos, cada um
com uma conexão individual de ânodo e cátodo.
Eles também estão disponíveis nas cores amarelo, vermelho e verde.
Nota - Os pinos desses gráficos de barra podem variar do que está listado na folha de
dados. Girar o dispositivo 180 graus corrigirá a alteração, tornando o pino 11 o
primeiro pino da linha.
Código Arduino
/*
LED bar graph
Turns on a series of LEDs based on the value of an analog sensor.
This is a simple way to make a bar graph display.
Though this graph uses 8LEDs, you can use any number by
changing the LED count and the pins in the array.
This method can be used to control any series of digital
outputs that depends on an analog input.
*/
void setup() {
// loop over the pin array and set them all to output:
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
}
}
94
void loop() {
// read the potentiometer:
int sensorReading = analogRead(analogPin);
// map the result to a range from 0 to the number of LEDs:
int ledLevel = map(sensorReading, 0, 1023, 0, ledCount);
// loop over the LED array:
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
// if the array element's index is less than ledLevel,
// turn the pin for this element on:
if (thisLed < ledLevel) {
digitalWrite(ledPins[thisLed], HIGH);
}else { // turn off all pins higher than the ledLevel:
digitalWrite(ledPins[thisLed], LOW);
}
}
}
Código a Nota
O esboço funciona da seguinte maneira: primeiro, você lê a entrada. Você mapeia o
valor de entrada para o intervalo de saída, neste caso, dez LEDs. Em seguida, você
configura um loop for para iterar sobre as saídas. Se o número da saída na série for
menor que o intervalo de entrada mapeado, você o ativará. Caso contrário, desligue-o.
Resultado
Você verá o LED acender um a um quando o valor da leitura analógica aumentar e
desligar um a um enquanto a leitura estiver diminuindo.
Este exemplo usa a biblioteca do teclado para fazer o logout da sua sessão do usuário
no computador quando o pino 2 no ARDUINO UNO é puxado para o chão. O esboço
simula o pressionamento de teclas em sequência de duas ou três teclas ao mesmo
tempo e, após um pequeno atraso, as libera.
Aviso - Quando você usa o comando [Link] () , o Arduino assume o teclado
do seu computador. Para garantir que você não perca o controle do seu computador
enquanto executa um esboço com esta função, configure um sistema de controle
confiável antes de ligar para [Link] (). Este esboço foi desenvolvido para
enviar apenas um comando do teclado depois que um pino foi puxado para o chão.
Componentes Necessários
Você precisará dos seguintes componentes -
95
1 × Breadboard
1 × placa Leonardo, Micro ou Due Arduino
1 × botão
1 × jumper
Procedimento
Siga o diagrama do circuito e conecte os componentes na tábua de pão, como mostra a
imagem abaixo.
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
Neste exemplo, você precisa usar o Arduino IDE 1.6.7
96
Nota - Você deve incluir a biblioteca do teclado no seu arquivo de biblioteca do
Arduino. Copie e cole o arquivo da biblioteca do teclado dentro do arquivo com as
bibliotecas de nomes (destacadas), conforme mostrado na captura de tela a seguir.
Código Arduino
/*
Keyboard logout
This sketch demonstrates the Keyboard library.
When you connect pin 2 to ground, it performs a logout.
It uses keyboard combinations to do this, as follows:
On Windows, CTRL-ALT-DEL followed by ALT-l
On Ubuntu, CTRL-ALT-DEL, and ENTER
On OSX, CMD-SHIFT-q
To wake: Spacebar.
Circuit:
* Arduino Leonardo or Micro
* wire to connect D2 to ground.
*/
#define OSX 0
#define WINDOWS 1
#define UBUNTU 2
#include "Keyboard.h"
97
int platform = WINDOWS;
void setup() {
// make pin 2 an input and turn on the
// pullup resistor so it goes high unless
// connected to ground:
pinMode(2, INPUT_PULLUP);
[Link]();
}
void loop() {
while (digitalRead(2) == HIGH) {
// do nothing until pin 2 goes low
delay(500);
}
delay(1000);
switch (platform) {
case OSX:
[Link](KEY_LEFT_GUI);
// enter:
[Link](KEY_RETURN);
break;
case WINDOWS:
// CTRL-ALT-DEL:
[Link](KEY_LEFT_CTRL);
[Link](KEY_LEFT_ALT);
[Link](KEY_DELETE);
delay(100);
[Link]();
//ALT-l:
delay(2000);
[Link](KEY_LEFT_ALT);
[Link]('l');
[Link]();
break;
case UBUNTU:
// CTRL-ALT-DEL:
[Link](KEY_LEFT_CTRL);
98
[Link](KEY_LEFT_ALT);
[Link](KEY_DELETE);
delay(1000);
[Link]();
// do nothing:
while (true);
}
[Link]();
// enter:
[Link](KEY_RETURN);
break;
case WINDOWS:
// CTRL-ALT-DEL:
[Link](KEY_LEFT_CTRL);
[Link](KEY_LEFT_ALT);
[Link](KEY_DELETE);
delay(100);
[Link]();
//ALT-l:
delay(2000);
[Link](KEY_LEFT_ALT);
[Link]('l');
[Link]();
break;
case UBUNTU:
// CTRL-ALT-DEL:
[Link](KEY_LEFT_CTRL);
[Link](KEY_LEFT_ALT);
[Link](KEY_DELETE);
delay(1000);
[Link]();
// do nothing:
99
while (true);
}
Código a Nota
Antes de carregar o programa em sua placa, certifique-se de atribuir o sistema
operacional correto que você está usando atualmente à variável de plataforma.
Enquanto o esboço estiver em execução, pressionar o botão conectará o pino 2 ao chão
e a placa enviará a sequência de logout ao PC conectado via USB.
Resultado
Quando você conecta o pino 2 ao terra, ele executa uma operação de logout.
Ele usa as seguintes combinações de teclado para fazer logout -
No Windows , CTRL-ALT-DEL seguido por ALT-l
No Ubuntu , CTRL-ALT-DEL e ENTER
No OSX , CMD-SHIFT-q
Componentes Necessários
Você precisará dos seguintes componentes -
1 × Breadboard
1 × placa Leonardo, Micro ou Due Arduino
1 × botão momentâneo
Resistor de 1 × 10k ohm
100
Procedimento
Siga o diagrama do circuito e conecte os componentes na tábua de pão, como mostra a
imagem abaixo.
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
Código Arduino
/*
101
Keyboard Message test For the Arduino Leonardo and Micro,
Sends a text string when a button is pressed.
The circuit:
* pushbutton attached from pin 4 to +5V
* 10-kilohm resistor attached from pin 4 to ground
*/
#include "Keyboard.h"
const int buttonPin = 4; // input pin for pushbutton
int previousButtonState = HIGH; // for checking the state of a pushButton
int counter = 0; // button push counter
void setup() {
pinMode(buttonPin, INPUT); // make the pushButton pin an input:
[Link](); // initialize control over the keyboard:
}
void loop() {
int buttonState = digitalRead(buttonPin); // read the pushbutton:
if ((buttonState != previousButtonState)&& (buttonState == HIGH)) // and it's
currently pressed: {
// increment the button counter
counter++;
// type out a message
[Link]("You pressed the button ");
[Link](counter);
[Link](" times.");
}
// save the current button state for comparison next time:
previousButtonState = buttonState;
}
Código a Nota
Conecte um terminal do botão ao pino 4 no Arduino. Conecte o outro pino a 5V. Use o
resistor como um pull-down, fornecendo uma referência ao terra, conectando-o do pino
4 ao solo.
Depois de programar sua placa, desconecte o cabo USB, abra um editor de texto e
coloque o cursor na área de digitação. Conecte a placa ao seu computador via USB
novamente e pressione o botão para escrever no documento.
Resultado
Usando qualquer editor de texto, ele exibirá o texto enviado via Arduino.
102
Arduino - Controle de botão do mouse
Componentes Necessários
Você precisará dos seguintes componentes -
1 × Breadboard
1 × Arduino Leonardo, placa Micro ou Due
Resistor de 5 × 10k ohm
5 × botões momentâneos
Procedimento
Siga o diagrama do circuito e conecte os componentes na tábua de pão, como mostra a
imagem abaixo.
103
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
Neste exemplo, você precisa usar o Arduino IDE 1.6.7
Código Arduino
/*
Button Mouse Control
For Leonardo and Due boards only .Controls the mouse from
five pushbuttons on an Arduino Leonardo, Micro or Due.
Hardware:
* 5 pushbuttons attached to D2, D3, D4, D5, D6
The mouse movement is always relative. This sketch reads
four pushbuttons, and uses them to set the movement of the mouse.
WARNING: When you use the [Link]() command, the Arduino takes
over your mouse! Make sure you have control before you use the mouse commands.
*/
#include "Mouse.h"
// set pin numbers for the five buttons:
const int upButton = 2;
const int downButton = 3;
const int leftButton = 4;
const int rightButton = 5;
const int mouseButton = 6;
int range = 5; // output range of X or Y movement; affects movement speed
int responseDelay = 10; // response delay of the mouse, in ms
104
void setup() {
// initialize the buttons' inputs:
pinMode(upButton, INPUT);
pinMode(downButton, INPUT);
pinMode(leftButton, INPUT);
pinMode(rightButton, INPUT);
pinMode(mouseButton, INPUT);
// initialize mouse control:
[Link]();
}
void loop() {
// read the buttons:
int upState = digitalRead(upButton);
int downState = digitalRead(downButton);
int rightState = digitalRead(rightButton);
int leftState = digitalRead(leftButton);
int clickState = digitalRead(mouseButton);
// calculate the movement distance based on the button states:
int xDistance = (leftState - rightState) * range;
int yDistance = (upState - downState) * range;
// if X or Y is non-zero, move:
if ((xDistance != 0) || (yDistance != 0)) {
[Link](xDistance, yDistance, 0);
}
Código a Nota
Conecte sua placa ao seu computador com um cabo micro-USB. Os botões estão
conectados às entradas digitais dos pinos 2 a 6. Certifique-se de usar resistores pull-
down de 10k.
105
Arduino - Teclado Serial
Este exemplo escuta um byte vindo da porta serial. Quando recebida, a placa envia um
pressionamento de tecla de volta ao computador. O pressionamento de tecla enviado é
um maior do que o recebido; portanto, se você enviar um "a" do monitor serial,
receberá um "b" da placa conectada ao computador. Um "1" retornará um "2" e assim
por diante.
Aviso - Quando você usa o comando [Link] () , a placa Leonardo, Micro ou
Due assume o teclado do seu computador. Para garantir que você não perca o controle
do seu computador enquanto executa um esboço com esta função, configure um
sistema de controle confiável antes de ligar para [Link] (). Este esboço foi
desenvolvido para enviar apenas um comando do teclado depois que a placa recebeu
um byte pela porta serial.
Componentes Necessários
Você precisará dos seguintes componentes -
Procedimento
Basta conectar sua placa ao computador usando o cabo USB.
106
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
107
Código Arduino
/*
Keyboard test
For the Arduino Leonardo, Micro or Due Reads
a byte from the serial port, sends a keystroke back.
The sent keystroke is one higher than what's received, e.g. if you send a, you get b,
send
A you get B, and so forth.
The circuit:
* none
*/
#include "Keyboard.h"
void setup() {
// open the serial port:
[Link](9600);
// initialize control over the keyboard:
[Link]();
}
void loop() {
// check for incoming serial data:
if ([Link]() > 0) {
// read incoming serial data:
char inChar = [Link]();
// Type the next ASCII value from what you received:
[Link](inChar + 1);
}
}
Código a Nota
Uma vez programado, abra seu monitor serial e envie um byte. O quadro responderá
com um pressionamento de tecla, que é um número maior.
Resultado
A placa responderá com um pressionamento de tecla um número mais alto no monitor
serial do Arduino IDE quando você enviar um byte.
Nesta seção, aprenderemos como conectar nossa placa Arduino com diferentes
sensores. Vamos discutir os seguintes sensores -
108
Sensor de temperatura (LM35)
Sensor detector de água (Simple Water Trigger)
SENSOR PIR
SENSOR ULTRASÔNICO
GPS
O sensor DHT-22
Detalhes técnicos
Potência - 3-5V
Corrente máxima - 2.5mA
Umidade - 0-100%, precisão de 2-5%
Temperatura - 40 a 80 ° C, precisão de ± 0,5 ° C
109
Componentes Necessários
Você precisará dos seguintes componentes -
1 × Breadboard
1 × Arduino Uno R3
1 × DHT22
Resistor de 1 × 10K ohm
Procedimento
Siga o diagrama do circuito e conecte os componentes na tábua de pão, como mostra a
imagem abaixo.
110
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
111
Código Arduino
// Example testing sketch for various DHT humidity/temperature sensors
#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors. This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);
void setup() {
[Link](9600);
[Link]("DHTxx test!");
[Link]();
}
void loop() {
delay(2000); // Wait a few seconds between measurements
float h = [Link]();
// Reading temperature or humidity takes about 250 milliseconds!
float t = [Link]();
// Read temperature as Celsius (the default)
float f = [Link](true);
// Read temperature as Fahrenheit (isFahrenheit = true)
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
[Link]("Failed to read from DHT sensor!");
return;
}
112
[Link] (t);
[Link] (" *C ");
[Link] (f);
[Link] (" *F\t");
[Link] ("Heat index: ");
[Link] (hic);
[Link] (" *C ");
[Link] (hif);
[Link] (" *F");
}
Código a Nota
O sensor DHT22 possui quatro terminais (V cc , DATA, NC, GND), que são
conectados à placa da seguinte maneira -
Resultado
Você verá a temperatura e a umidade no monitor da porta serial, que são atualizadas a
cada 2 segundos.
113
Especificações técnicas
Componentes Necessários
Você precisará dos seguintes componentes -
1 × Breadboard
1 × Arduino Uno R3
1 × sensor LM35
Procedimento
Siga o diagrama do circuito e conecte os componentes na tábua de pão, como mostra a
imagem abaixo.
114
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
Código Arduino
float temp;
int tempPin = 0;
void setup() {
[Link](9600);
}
115
void loop() {
temp = analogRead(tempPin);
// read analog volt from sensor and save to variable temp
temp = temp * 0.48828125;
// convert the analog volt to its temperature equivalent
[Link]("TEMPERATURE = ");
[Link](temp); // display temperature value
[Link]("*C");
[Link]();
delay(1000); // update sensor reading each one second
}
Código a Nota
O sensor LM35 possui três terminais - V s , V out e GND. Vamos conectar o sensor da
seguinte maneira -
Resultado
Você verá a temperatura exibida no monitor da porta serial, que é atualizada a cada
segundo.
O tijolo do sensor de água foi projetado para a detecção de água, que pode ser
amplamente utilizada na detecção de chuvas, nível de água e até vazamentos de
líquidos.
116
Conectar um sensor de água a um Arduino é uma ótima maneira de detectar
vazamentos, derramamentos, inundações, chuvas, etc. Ele pode ser usado para detectar
a presença, o nível, o volume e / ou a ausência de água. Embora isso possa ser usado
para lembrá-lo de regar suas plantas, existe um sensor Grove melhor para isso. O
sensor possui uma variedade de traços expostos, que indicam BAIXO quando a água é
detectada.
Neste capítulo, conectaremos o sensor de água ao Digital Pin 8 no Arduino e
incluiremos o LED muito útil para ajudar a identificar quando o sensor de água entra
em contato com uma fonte de água.
Componentes Necessários
Você precisará dos seguintes componentes -
1 × Breadboard
1 × Arduino Uno R3
1 × sensor de água
1 × led
Resistor de 1 × 330 ohm
Procedimento
Siga o diagrama do circuito e conecte os componentes na tábua de pão, como mostra a
imagem abaixo.
117
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
Código Arduino
#define Grove_Water_Sensor 8 // Attach Water sensor to Arduino Digital Pin 8
#define LED 9 // Attach an LED to Digital Pin 9 (or use onboard LED)
void setup() {
pinMode(Grove_Water_Sensor, INPUT); // The Water Sensor is an Input
pinMode(LED, OUTPUT); // The LED is an Output
}
void loop() {
/* The water sensor will switch LOW when water is detected.
Get the Arduino to illuminate the LED and activate the buzzer
when water is detected, and switch both off when no water is present */
if( digitalRead(Grove_Water_Sensor) == LOW) {
digitalWrite(LED,HIGH);
}else {
digitalWrite(LED,LOW);
}
}
Código a Nota
O sensor de água possui três terminais - S, V out (+) e GND (-). Conecte o sensor da
seguinte maneira -
118
Conecte o + V s de + 5V em sua placa Arduino.
Conecte S ao pino digital número 8 na placa Arduino.
Conecte o GND ao GND no Arduino.
Conecte o LED ao pino digital número 9 na placa Arduino.
Quando o sensor detecta água, o pino 8 no Arduino fica BAIXO e o LED no Arduino
acende.
Resultado
Você verá o LED de indicação acender quando o sensor detectar água.
Os sensores PIR permitem sentir o movimento. Eles são usados para detectar se um
humano se moveu dentro ou fora do alcance do sensor. Eles são comumente
encontrados em aparelhos e gadgets usados em casa ou para empresas. Eles são
freqüentemente chamados de sensores PIR, "Infravermelho Passivo", "Piroelétrico" ou
"Movimento de IR".
A seguir estão as vantagens dos sensores PIR -
Tamanho pequeno
Ampla gama de lentes
Fácil interface
Barato
De baixa potência
Fácil de usar
Não se desgasta
Os PIRs são feitos de sensores piroelétricos, uma lata redonda de metal com um cristal
retangular no centro, que pode detectar níveis de radiação infravermelha. Tudo emite
radiação de baixo nível e, quanto mais quente é, mais radiação é emitida. O sensor em
um detector de movimento é dividido em duas metades. Isso é para detectar
119
movimento (alteração) e não os níveis médios de IR. As duas metades estão conectadas
para que se cancelem. Se metade vê mais ou menos radiação infravermelha que a
outra, a saída oscila alta ou baixa.
Para muitos projetos ou produtos básicos que precisam detectar quando uma pessoa sai
ou entra na área, os sensores PIR são ótimos. Observe que os PIRs não informam o
número de pessoas ao redor ou a proximidade com o sensor. As lentes costumam ser
fixadas a uma certa distância e, às vezes, são acionadas pelos animais domésticos.
Componentes Necessários
Você precisará dos seguintes componentes -
1 × Breadboard
1 × Arduino Uno R3
1 × sensor PIR (MQ3)
120
Procedimento
Siga o diagrama do circuito e faça as conexões conforme mostrado na imagem abaixo.
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
121
Código Arduino
#define pirPin 2
int calibrationTime = 30;
long unsigned int lowIn;
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int PIRValue = 0;
void setup() {
[Link](9600);
pinMode(pirPin, INPUT);
}
void loop() {
PIRSensor();
}
void PIRSensor() {
if(digitalRead(pirPin) == HIGH) {
if(lockLow) {
PIRValue = 1;
lockLow = false;
[Link]("Motion detected.");
delay(50);
}
takeLowTime = true;
}
if(digitalRead(pirPin) == LOW) {
if(takeLowTime){
lowIn = millis();takeLowTime = false;
}
if(!lockLow && millis() - lowIn > pause) {
PIRValue = 0;
lockLow = true;
[Link]("Motion ended.");
delay(50);
}
}
}
Código a Nota
O sensor PIR possui três terminais - V cc , OUT e GND. Conecte o sensor da seguinte
maneira -
122
Conecte o GND ao GND no Arduino.
Você pode ajustar a sensibilidade do sensor e o tempo de atraso por meio de dois
resistores variáveis localizados na parte inferior da placa do sensor.
Depois que o sensor detecta qualquer movimento, o Arduino envia uma mensagem
pela porta serial dizendo que um movimento é detectado. O movimento do sensor PIR
atrasará um certo tempo para verificar se há um novo movimento. Se não houver
movimento detectado, o Arduino enviará uma nova mensagem informando que o
movimento foi encerrado.
Resultado
Você verá uma mensagem na sua porta serial se um movimento for detectado e outra
mensagem quando o movimento for interrompido.
123
Especificações técnicas
Fonte de alimentação - + 5V DC
Corrente quieta - <2mA
Corrente de trabalho - 15mA
Ângulo efetivo - <15 °
Distância - 2cm - 400 cm / 1 ″ - 13 pés
Resolução - 0,3 cm
Ângulo de medição - 30 graus
Componentes Necessários
Você precisará dos seguintes componentes -
1 × Breadboard
124
1 × Arduino Uno R3
1 × sensor ultrassônico (HC-SR04)
Procedimento
Siga o diagrama do circuito e faça as conexões conforme mostrado na imagem abaixo.
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
125
Código Arduino
const int pingPin = 7; // Trigger Pin of Ultrasonic Sensor
const int echoPin = 6; // Echo Pin of Ultrasonic Sensor
void setup() {
[Link](9600); // Starting Serial Terminal
}
void loop() {
long duration, inches, cm;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
[Link](inches);
[Link]("in, ");
[Link](cm);
[Link]("cm");
[Link]();
delay(100);
}
Código a Nota
O sensor ultrassônico possui quatro terminais - + 5V, Trigger, Echo e GND conectados
da seguinte maneira -
126
Resultado
Você verá a distância medida pelo sensor em polegadas e cm no monitor serial do
Arduino.
Resistor pull-down
Os resistores pull-down são usados em circuitos lógicos eletrônicos para garantir que
as entradas do Arduino se estabeleçam nos níveis lógicos esperados se os dispositivos
externos estiverem desconectados ou estiverem com alta impedância. Como nada está
conectado a um pino de entrada, isso não significa que seja um zero lógico. Os
resistores de tração estão conectados entre o terra e o pino apropriado no dispositivo.
Um exemplo de um resistor pull-down em um circuito digital é mostrado na figura a
seguir. Um interruptor de botão está conectado entre a tensão de alimentação e um pino
do microcontrolador. Nesse circuito, quando o interruptor está fechado, a entrada do
microcontrolador tem um valor alto lógico, mas quando o interruptor está aberto, o
resistor de tração puxa a tensão de entrada para o chão (valor zero lógico), impedindo
um estado indefinido na entrada.
O resistor de pull-down deve ter uma resistência maior do que a impedância do circuito
lógico, caso contrário, pode diminuir demais a tensão e a tensão de entrada no pino
permanecerá em um valor baixo lógico constante, independentemente da posição do
interruptor.
127
Componentes Necessários
Você precisará dos seguintes componentes -
Procedimento
Siga o diagrama do circuito e faça as conexões conforme mostrado na imagem abaixo.
128
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
Código Arduino
// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 8; // the number of the pushbutton pin
129
const int ledPin = 2; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
} else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
Código a Nota
Quando o interruptor está aberto (o botão não está pressionado), não há conexão entre
os dois terminais do botão; portanto, o pino é conectado ao terra (através do resistor de
pull-down) e lemos LOW. Quando o interruptor é fechado (o botão é pressionado), ele
faz uma conexão entre seus dois terminais, conectando o pino a 5 volts, para que
possamos ler um ALTO.
Resultado
O LED acende quando o botão é pressionado e apaga quando é liberado.
Um motor de passo ou motor de passo é um motor síncrono e sem escova, que divide
uma rotação completa em várias etapas. Ao contrário de um motor CC sem escova, que
gira continuamente quando uma tensão CC fixa é aplicada a ele, um motor de passo
gira em ângulos de passo discretos.
Portanto, os motores de passo são fabricados com etapas por rotação de 12, 24, 72,
144, 180 e 200, resultando em ângulos de inclinação de 30, 15, 5, 2,5, 2 e 1,8 graus por
etapa. O motor de passo pode ser controlado com ou sem feedback.
130
Imagine um motor em um avião RC. O motor gira muito rápido em uma direção ou
outra. Você pode variar a velocidade com a quantidade de energia fornecida ao motor,
mas não pode pedir à hélice que pare em uma posição específica.
Agora imagine uma impressora. Existem muitas partes móveis dentro de uma
impressora, incluindo motores. Um desses motores atua como alimentação de papel,
girando os rolos que movem o pedaço de papel à medida que a tinta está sendo
impressa. Esse motor precisa poder mover o papel a uma distância exata para poder
imprimir a próxima linha de texto ou a próxima linha de uma imagem.
Há outro motor conectado a uma haste rosqueada que move a cabeça de impressão
para frente e para trás. Novamente, essa haste rosqueada precisa ser movida uma
quantidade exata para imprimir uma letra após a outra. É aqui que os motores de passo
são úteis.
131
Componentes Necessários
Você precisará dos seguintes componentes -
Procedimento
Siga o diagrama do circuito e faça as conexões conforme mostrado na imagem abaixo.
132
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
Código Arduino
/* Stepper Motor Control */
133
#include <Stepper.h>
const int stepsPerRevolution = 90;
// change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
void setup() {
// set the speed at 60 rpm:
[Link](5);
// initialize the serial port:
[Link](9600);
}
void loop() {
// step one revolution in one direction:
[Link]("clockwise");
[Link](stepsPerRevolution);
delay(500);
// step one revolution in the other direction:
[Link]("counterclockwise");
[Link](-stepsPerRevolution);
delay(500);
}
Código a Nota
Este programa aciona um motor de passo unipolar ou bipolar. O motor está conectado
aos pinos digitais 8 a 11 do Arduino.
Resultado
O motor levará uma rotação em uma direção, depois uma rotação na outra direção.
Um servomotor é um pequeno dispositivo que possui um eixo de saída. Este eixo pode
ser posicionado em posições angulares específicas enviando ao servo um sinal
codificado. Enquanto o sinal codificado existir na linha de entrada, o servo manterá a
posição angular do eixo. Se o sinal codificado mudar, a posição angular do eixo
mudará. Na prática, os servos são usados em aviões controlados por rádio para
posicionar superfícies de controle como elevadores e lemes. Eles também são usados
em carros controlados por rádio, fantoches e, claro, robôs.
134
Servos são extremamente úteis em robótica. Os motores são pequenos, possuem
circuitos de controle integrados e são extremamente poderosos para seu tamanho. Um
servo padrão como o Futaba S-148 possui torque de 42 onças / polegadas, o que é forte
para seu tamanho. Também consome energia proporcional à carga mecânica. Um servo
com carga leve, portanto, não consome muita energia.
As entranhas de um servomotor são mostradas na figura a seguir. Você pode ver o
circuito de controle, o motor, um conjunto de engrenagens e o estojo. Você também
pode ver os três fios que se conectam ao mundo exterior. Um é para energia (+ 5 volts),
terra, e o fio branco é o fio de controle.
135
fabricante. Um servo normal é usado para controlar um movimento angular de 0 a 180
graus. Ele não é mecanicamente capaz de girar mais longe devido a uma parada
mecânica construída na engrenagem de saída principal.
A potência aplicada ao motor é proporcional à distância que ele precisa
percorrer. Portanto, se o eixo precisar girar uma grande distância, o motor funcionará a
toda velocidade. Se precisar girar apenas uma pequena quantidade, o motor funcionará
a uma velocidade mais lenta. Isso é chamado de controle proporcional .
Componentes Necessários
Você precisará dos seguintes componentes -
136
Procedimento
Siga o diagrama do circuito e faça as conexões conforme mostrado na imagem abaixo.
Esboço
Abra o software Arduino IDE no seu computador. A codificação na linguagem
Arduino controlará seu circuito. Abra um novo arquivo de esboço clicando em Novo.
137
Código Arduino
/* Controlling a servo position using a potentiometer (variable resistor) */
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
[Link](9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potpin);
// reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180);
// scale it to use it with the servo (value between 0 and 180)
[Link](val); // sets the servo position according to the scaled value
delay(15);
}
Código a Nota
Os servomotores têm três terminais - potência, terra e sinal. O fio de energia
normalmente é vermelho e deve ser conectado ao pino de 5V no Arduino. O fio terra
geralmente é preto ou marrom e deve ser conectado a um terminal do ULN2003 IC (10
-16). Para proteger sua placa Arduino contra danos, você precisará de um driver IC
para fazer isso. Aqui usamos o ULN2003 IC para acionar o servo motor. O pino de
sinal é normalmente amarelo ou laranja e deve ser conectado ao pino número 9 do
Arduino.
Conectando o potenciômetro
Um divisor de tensão / divisor de potencial são resistores em um circuito em série que
escalam a tensão de saída para uma proporção específica da tensão de entrada
aplicada. A seguir está o diagrama do circuito -
138
$$ V_ {out} = (V_ {in} \ vezes R_ {2}) / (R_ {1} + R_ {2}) $$
V out é o potencial de saída, que depende da tensão de entrada aplicada (V in ) e dos
resistores (R 1 e R 2 ) da série. Isso significa que a corrente que flui através de
R 1 também irá fluir através R 2 sem ser dividida. Na equação acima, como o valor de
R 2 mudanças, o V fora escalas em conformidade com respeito à tensão de entrada,
V em .
Normalmente, um potenciômetro é um divisor de potencial, que pode dimensionar a
tensão de saída do circuito com base no valor do resistor variável, que é dimensionado
usando o botão. Possui três pinos: GND, Sinal e + 5V, conforme mostrado no diagrama
abaixo -
Resultado
Ao alterar a posição NOP da panela, o servo motor altera seu ângulo.
139
Considerações Finais
Espero ter lhe ajudado com esses pequenos tutoriais de projetos com arduino e
introdução a robótica . Isso vai lhe ser útil em futuros projetos seja acadêmico ou
profissional .
Seja você mesmo. “Nunca se compare com ninguém neste mundo. ...
Bill Gates
140