ARDUINO – RoboHelp Guia

Propaganda
2015
ARDUINO – RoboHelp Guia
Akasaka
Sênior Consultoria
19/4/2015
Luiz Henrique Akasaka Ferreira
Sênior Consultoria
2015
1
ARDUINO – RoboHelp Guia
por Luiz Henrique Akasaka Ferreira
© 2014 por Sênior Consultoria
http://www.seniorcti.com.br
SKU190412
Este e-Book é indicado para quem quer iniciar experiências
utilizando o ARDUINO como plataforma de desenvolvimento, o seu
estudo e prática será de grande ajuda para que o leitor
compreenda como funciona esta ferramenta incrível de
aprendizado e possa replicar seu conhecimento.
Abre as portas para seu envolvimento em projetos maiores e no
desenvolvimento de produtos de sua autoria. Mais informações
sobre o Arduino, Raspberry Pi, e produtos para automação,
eletrônica e robótica visite o website:
http://www.robohelp.com.br
2
ARDUINO – RoboHelp Guia
ARDUINO – RoboHelp Guia
1ª Edição
São Paulo
2015
3
Akasaka
4
Este estudo visa estabelecer as bases que o
leigo possa iniciar seus estudos na plataforma
de
desenvovlvimento
ARDUINO,
ou
simplesmente saiba usar e obter o máximo de
seu potencial. Os experimentos são oriundos
dos laboratórios da Senior Consultoria. São
Paulo, 2015
1
O Arduino .............................................................................................................................. 7
2
Circuitos Eletrônicos o Início ................................................................................................. 9
2.1
O que é um circuito? ..................................................................................................... 9
2.2
Circuitos em Serie versos Paralelo .............................................................................. 10
2.3
Circuitos analógicos e Circuitos Binários ..................................................................... 10
2.4
Os conceitos centrais .................................................................................................. 11
2.5
A analogia com a HIDRÁULICA .................................................................................... 11
2.6
Corrente ...................................................................................................................... 12
2.7
Tensão Elétrica ............................................................................................................ 12
3
Resistencia........................................................................................................................... 13
3.1
Resistor de fio.............................................................................................................. 14
3.2
Resistor de filme de carbono ...................................................................................... 14
3.3
Resistor de filme metálico ........................................................................................... 15
3.4
Código de Cores .......................................................................................................... 15
3.5
Potência nos resistores ............................................................................................... 17
4
Capacitores .......................................................................................................................... 18
5
Leitura de diagramas esquemáticos.................................................................................... 21
6
Referência rápida de Instruções Arduino............................................................................ 23
7
Juntando tudo – A Prática ................................................................................................... 36
8
Benefícios de utilização em ambiente Industrial ................................................................ 38
9
led com botão liga e desliga ................................................................................................ 40
10
controlar um led com um potenciômetro ...................................................................... 44
11
botão que acende leds com efeito .................................................................................. 48
12
led RGB controlar as cores com botões .......................................................................... 52
13
Controle 8 leds com o Arduino usando o CI 74HC595, fazendo uma contagem binária. 57
14
Iluminação Automatizada ............................................................................................... 64
15
Alarme com Arduino e sensor de movimentos PIR......................................................... 67
16
Display LCD ...................................................................................................................... 71
17
Relógio LCD com Arduino ................................................................................................ 72
18
Sensor de detecção de Luz com fotocélula, som e Arduino ........................................... 76
19
Termômetro LCD com LM335 e Arduino ........................................................................ 79
5
SUMÁRIO
Como adicionar um LED RGB ao Arduino........................................................................ 82
21
adicionar um Buzzer ao Arduino ..................................................................................... 84
22
sensor Ultrassônico HC-SR04 ao arduino ........................................................................ 86
23
motor de passo ao Arduino ............................................................................................. 89
24
CI 74HC595 para aumentar número de portas do Arduino ............................................ 91
25
LDR três níveis de luz a Led com Arduino ..................................................................... 101
26
LED com efeito Fade com Arduino ................................................................................ 105
27
matriz de led 5×7 ao Arduino ........................................................................................ 107
28
Temômetro LCD com sensor LM35 e Arduino Indicador de temperatura Média, Mínima
e Máxima ................................................................................................................................... 111
29
LCD Shield com teclado para Arduino e exemplo de aplicação .................................... 114
30
Ligando relé com botão ao Arduino Uno ...................................................................... 117
31
Sensor de proximidade infravermelho com Arduino .................................................... 121
32
Relógio LCD com RTC DS1307 e Arduino ...................................................................... 126
33
Ligando um display lcd 16X2 ao Arduino ...................................................................... 134
34
temperatura e luminosidade com display LCD ............................................................. 143
35
Controlando a velocidade de um motor CC no Arduino com potenciômetro. ............. 149
36
Motor CC/DC no Arduino e ponte H dupla. Controle de velocidade e sentido da rotação
153
37
Motor CC no Arduino com controle de velocidade e leds medidores de potência. ..... 160
38
Controlando um servomotor com potenciômetro no arduino ..................................... 165
39
servomotor robótico e display LC ................................................................................. 168
40
joystick no Arduino e ler as posições X, Y e Z ................................................................ 174
41
CONSTRUINDO UM RELÉ SHIELD .................................................................................. 178
42
CLP Shield para ARDUINO ............................................................................................. 186
43
Arduino ISP Shield ......................................................................................................... 198
44
Protoboard - How To Use .............................................................................................. 202
45
Montagem utilizando placa universal ........................................................................... 220
46
Referências bibliográficas ............................................................................................. 225
6
20
Os apaixonados por tecnologia certamente já pensaram em prover soluções eletrônicas que
resolvessem probleminhas do dia a dia. Com o Arduino, uma placa fabricada na Itália utilizada
como plataforma de prototipagem eletrônica que torna a robótica mais acessível a todos.
Projeto italiano iniciado em 2005 tinha primeiramente cunho educacional e interagia com
aplicações escolares.
O sucesso nessa fase foi tão grande que mais de 50 mil placas open source foram vendidas e
rendeu um documentário de 2010 sobre a trajetória de desenvolvimento da plaquinha. As
unidades são constituídas por um microcontrolador Atmel AVR de 8 bits, pinos digitais e
analógicos de entrada e saída, uma entrada USB que permite conexão com computadores e
possui código aberto, que quando modificado, dá origem a outros derivados “ino”, que por
questões comerciais, levam nomes como Netduino, Produino e Garagino. A placa Arduino não
possui recursos de rede, mas pode ser combinada com outros Arduinos criando extensões
chamadas de shields.
É aí que entram ideias como a automação de casas, acender luzes por meio da controladora ou
projetos mais ousados como o Biometric Security Toy Box, que une a biometria, mais
especificamente a ideia do novo sensor de identidade digital da Apple, o Touch ID do iPhone 5S,
ao Arduino.
O projeto do designer inglês Grant Gibson consiste em trocar a fechadura convencional da caixa
de brinquedos (que abriga a coleção de carrinhos do seu filho) por um acesso por impressão
digital. O sistema é baseado em placa Arduino Uno e um sensor de impressão digital óptico.
Uma vez cadastrada a digital da criança, só ela consegue ter acesso a sua caixa de brinquedos.
7
1 O ARDUINO
O Arduino pode perceber o ambiente por receber a entrada de uma variedade de sensores e
pode afetar seus arredores por luzes controladoras como leds e lâmpadas, motores e outros
atuadores. Projetos do Arduino podem ser stand-alone ou podem se comunicar com software
rodando em um computador (por exemplo, Flash, Processing, MaxMSP ).
Arduino pode perceber o ambiente ao receber a entrada de uma variedade de sensores e pode
afetar seus arredores por luzes de controle, motores e outros atuadores. Projetada com
um microcontrolador Atmel AVR de placa única, com suporte de entrada/saída embutido, usa
uma linguagem de programação padrão, a qual tem origem em Wiring, o ambiente de
desenvolvimento Arduino (baseada em processamento ) que é essencialmente em C/C++. O
objetivo do projeto é criar ferramentas que são acessíveis, com baixo custo, flexíveis e fáceis de
se usar por profissionais e amadores, principalmente para aqueles que não teriam alcance aos
controladores mais sofisticados e de ferramentas mais complicadas.
As placas podem ser construídas a mão ou compradas pré-montadas e o software pode
ser baixado gratuitamente. Os designs de referência do hardware (arquivos de CAD)
estão disponíveis sob uma licença open-source, ou seja, você é livre para adaptá-los às suas
necessidades.
Pode ser usado para o desenvolvimento de objetos interativos independentes, ou ainda para
ser conectado a um computador hospedeiro. Uma típica placa Arduino é composta por um
controlador, algumas linhas de E/S digital e analógica, além de uma interface serial ou USB, para
interligar-se ao hospedeiro, que é usado para programá-la e interagi-la em tempo real.
Os fundadores do Arduino são: Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino
e David Mellis.
8
O Arduino é baseado em uma plataforma de prototipagem eletrônica flexível e baseada em
código-aberto (open-source), com hardware e software fáceis de usar. É destinado a artistas,
profissionais, designers, hobbistas e qualquer pessoa interessada em criar objetos ou
ambientes interativos.
Se você já encontrou discussões online sobre circuitos, a perspectiva de ingressar neste mundo
pode parecer bastante assustadora, há um monte de jargões, vários símbolos misteriosos, e um
monte de matemática. Vamos tentar acabar com isso.
Você pode começar a desenvolver projetos com componentes eletrônicos associados ao
Arduino, você pode fazer algum progresso sem saber muito sobre eletricidade e circuitos. Ao
seguir guias on-line você pode anexar sensores, displays e motores a um Arduino ou outro
microcontrolador, sem entender o que é que você está realmente fazendo. No entanto, se você
quiser passar a fase de novato, e começar a fazer emocionantes, projetos personalizados, você
vai ter que começar a aprender os conceitos básicos de engenharia elétrica.
E, na verdade, é um tema complexo, com muita coisa para aprender. Mas felizmente, você não
tem que saltar para o fundo do poço de uma vez. Neste guia de iniciação, cobre os princípios
mais básicos de construção de circuito, com detalhe suficiente para prepará-lo para construir e
compreender alguns circuitos simples.
É necessário aprender os primeiros tópicos para que você tenha uma base e possa entender
como funciona a eletrônica, em seguida vou descrever como usar esses conceitos para construir
um circuito simples com Arduino. Nos capítulos subsequentes você poderá utilizar estes
conhecimentos para elaborar uma série de exemplos com Arduino que selecionamos para você,
você pode usá-los para aprender, para ensinar outras pessoas a gostar de eletrônica e usar como
base para aprimorar seus conhecimentos, e quem sabe obter as bases para executar um grande
projeto baseado em alguma invenção para melhorar o seu ambiente.
2.1 O QUE É UM CIRCUITO?
Há um monte de ciência muito interessante sobre como, exatamente, a eletricidade funciona,
mas para uma compreensão prática de circuitos elétricos simples, você não precisa entrar no
material realmente de baixo nível. A única coisa que você precisa entender é simplesmente que
a carga elétrica flui através de condutores, como fios, e através de todos os tipos de
componentes elétricos, com vários efeitos sobre os componentes à medida que fluem através
deles. Um componente elétrico simples é uma lâmpada, o efeito de uma carga elétrica que flui
através do bulbo em seu interior é que produz a luminosidade que você pode ver. Se um fio e
componentes diferentes estão ligados uns aos outros de modo que eles formem um elo, a
corrente elétrica fluindo de um ponto ao outro produz um efeito qualquer, acender as luzes,
desligar um motor, etc.
9
2 CIRCUITOS ELETRÔNICOS O INÍCIO
Um circuito pode ser tão simples como um fio, que a partir de um lado (polo positivo) de uma
bateria, segue para uma lâmpada, e depois de volta para o outro lado (polo negativo) de uma
bateria. É possível, é claro, adicionar várias lâmpadas ou outros componentes no circuito. Se
você adicionar as lâmpadas para que eles fiquem assim:
Você criou um circuito em serie. Em um circuito em série, a corrente passa através de cada
componente na seqüência. Se você construir o circuito de modo que a corrente pode tomar
vários caminhos através do circuito, como abaixo, você construiu um circuito em paralelo. Ele
não vai ficar claro logo de cara, mas a diferença entre construção paralela e em série vem à tona
constantemente na construção de circuitos eletrônicos, por isso é importante lembrar as duas
formas diferentes. Componentes em série são todos em uma linha, componentes paralelos são
lado a lado.
2.3 CIRCUITOS ANALÓGICOS E CIRCUITOS BINÁRIOS
Se você está trabalhando com um microcontrolador Arduino, vai ter que lidar bastante com
circuitos digitais e analógicos. Estes são circuitos que utilizam fios para transmitir dados, em vez
de apenas para componentes de potência. Circuitos binários ou digitais, fazem a transferência
de dados binários (1s e 0s, como em um computador), enquanto os dados de transferência de
circuitos analógicos (como um toca-discos) produzem seus efeitos através da variação e
interrupção da carga elétrica que flui através dos componentes. A placa Arduino Uno, por
exemplo, inclui 14 pinos digitais que você vai se conectar a sensores, atuadores e outros
10
2.2 CIRCUITOS EM SERIE VERSOS
ERSOS PARALELO
ARALELO
A principal informação que você precisa lembrar sobre circuitos digitais e circuitos analógicos é
simplesmente que há uma diferença, e que quando você for recuperar informações externas de
seus componentes (como sensores), para seus projetos, você deve verificar se eles se
comunicam com o Arduino usando pinos digitais ou pinos analógicos.
2.4 OS CONCEITOS CENTRAIS
Agora que eu já falei sobre o que um é circuito, vamos ver como funcionam. Vale reiterar que
isto é um compendio básico, não substituirá o aprendizado formal que você deverá obter na
medida em que progredir em seu aprendizado. Os conceitos aqui propostos são apenas a base
do conhecimento para você iniciar neste mundo estranho. Se você entende isso, você vai ter
uma grande plataforma para abordar os tópicos mais avançados em engenharia elétrica.
2.5 A ANALOGIA COM A HIDRÁULICA
Um maneira realmente útil de abordar os conceitos básicos de eletricidade é com o que é
chamado de analogia hidráulica. Em um nível baixo, a eletricidade em um circuito se comporta
muito como um fluido, o que significa que podemos discutir os conceitos, comparando-os a um
sistema de água que flui através de tubos, um conceito que a maioria das pessoas têm uma
compreensão mais intuitiva do que a eletricidade.
A premissa básica da analogia hidráulica é um circuito que é como uma rede de tubos totalmente
cheios de água. Cada um dos tubos é conectado em qualquer fim, de modo que um está
conctado ao outro, de modo que a água pode fluir através dele como um circuito, mas nunca
pode sair fora dele. Adicionando diferentes componentes elétricos a um circuito são
equivalentes a adição de conexões, controladores de vazão e torneiras diferentes para o sistema
de tubos.
11
componentes que enviam ou recebem dados binários através de um fio. Ele também inclui 6
pinos analógicos, que são usados quando existe a adição de sensores analógicos ao seu projeto.
Na analogia hidráulica, a corrente é equivalente vazão que a água flui através do tubo. A unidade
de medida da intensidade da corrente elétrica é o ampère e é representada pelo símbolo A.
2.7 TENSÃO ELÉTRICA
Tensão, é a diferença de potencial elétrico entre dois pontos em um circuito. Para explicar o que
quero dizer com potencial elétrico, é útil para voltar à analogia hidráulica, e falar sobre um
fenômeno familiar para mais pessoas: pressão da água.
Se você imaginar um circuito feito de tubos cheios de água, tensão é a diferença de pressão de
água entre dois pontos quaisquer. Intuitivamente nós entendemos que, em um sistema de
tubos, se a pressão da água é maior em um ponto do que em outro, e não há uma via disponível
entre esses dois pontos, a água vai fluir a partir do ponto de pressão alta ao ponto de pressão
baixa.
Para reforçar ainda mais a analogia, o equivalente hidráulico de uma bateria AA é uma bomba
que mantém uma diferença especificado na pressão da água. Assim como uma bomba que faria
a água fluir através de tubos ligados às suas duas extremidades, uma bateria ocasiona uma
corrente eléctrica que flui através de um circuito em um laço, que é formado ligando os seus
dois terminais, positivo e negativo através de um circuito lementar qualquer, uma lâmpada que
se acende aou ligarem-se os dois terminais a ela através de fios.
A tensão é medida em Volts. É a diferença de potencial entre dois pontos, mas as pessoas vão
frequentemente obter a tensão em um único ponto do circuito. O segundo ponto é
implicitamente o terra, ou a parte de um circuito com o menor potencial elétrico.
12
2.6 CORRENTE
A definição de um circuito é importante para compreender como um conceito básico funciona.
A carga elétrica flui através de um fio, a maioria dos componentes elétricos requerem corrente
que flui através deles para realmente fazer alguma coisa. Uma corrente elevada pode destruir
um componente ou torná-lo inerte, o esforço de construção de um componente é garantir que
a quantidade certa de corrente vá fluir através de cada ponto de um circuito.
13
3 RESISTENCIA
O conceito final necessário à compreensão de circuitos simples é a resistência, que pode ser
explicada como a quantidade que qualquer componente eléctrico impõe resistência ao fluxo da
corrente eléctrica. Cada componente elétrico tem uma determinada resistência, inclusive o fio
condutor. Um resistor é um componente projetado para adicionar uma quantidade específica
de resistência ao sistema, e é um dos componentes mais comuns que você vai ter lidar na
construção de circuitos eletrônicos.
Na analogia hidráulica, a resistência é a maneira como as tubagens e outros objectos de um
circuito de água tem capacidade de resistir ao fluxo de água por meio do atrito. A versão de
analogia de um resistor é um lugar em que o tubo é comprimido para um diâmetro mais estreito,
aumentando o atrito com a água que flui causando logicamente a resistência a sua vazão pelo
circuito.
Como você pode imaginar a partir da analogia, maior o atrito faz com que menos corrente flua
através do tubo.
Resistores são componentes que têm por finalidade oferecer uma oposição à passagem de
corrente elétrica por meio de seu material. A essa oposição damos o nome de resistência
elétrica, que possui como unidade o ohm [Ω], onde encontramos como múltiplos mais usuais:
Quilo-ohm (KΩ) : 1KΩ = 10³ Ω
Mega-ohm(MΩ) : 1MΩ = 106 Ω
Classificamos os resistores em dois tipos, sendo fixos e variáveis. Os resistores fixos são aqueles
cujo valor da resistência não pode ser alterado, enquanto as variáveis têm a sua resistência
modificada dentro de uma faixa de valores por meio de um cursor móvel.
Os resistores fixos são comumente especificados por três parâmetros: o valor nominal da
resistência elétrica, a tolerância, ou seja, a máxima variação em porcentagem do valor nominal,
e a máxima potencia elétrica dissipada.
Exemplo: Tomemos um resistor de 100Ω ± 5% - 0,33W. Isso significa que possui um valor
nominal de 100Ω, uma tolerância sobre esse valor de mais ou menos 5% e pode dissipar uma
potência de no máximo 0,33 watts.
Dentre os tipos de resistores fixos destacamos os de fio, de filme de carbono e de filme metálico.
Resistores de fio.
Os resistores de fio são encontrados com valores de resistência de alguns ohms até alguns quiloohms, e são aplicados onde se exigem altos valores de potência, acima de 5W, sendo suas
especificações impressas no próprio corpo.
3.2 RESISTOR DE FILME DE CARBONO
Consiste em um cilindro de porcelana recoberto por um filme (película) de carbono. O valor da
resistência é obtido mediante a formação de um sulco, transformando a película em uma fita
helicoidal. Esse valor pode variar conforme a espessura do filme ou a largura da fita. Como
revestimento, encontramos uma resina protetora sobre a qual é impresso um código de cores,
identificando seu valor nominal e tolerância.
Resistor de filme de carbono.
Os resistores de filme de carbono são destinados ao uso geral e suas dimensões físicas
determinam a máxima potencia que eles podem dissipar.
14
3.1 RESISTOR DE FIO
Consiste basicamente em um tubo cerâmico que serve de suporte para enrolarmos um
determinado comprimento de fio, de liga especial para obter o valor de resistência desejado. Os
terminais desse fio são conectados às braçadeiras presas ao tubo. Além deste, existem outros
tipos construtivos esquematizados, conforme é mostrado na figura.
Resistor de filme metálico.
3.4 CÓDIGO DE CORES
Os valores ôhmicos dos resistores podem ser reconhecidos pelas cores das faixas em suas
superfícies, cada cor e sua posição no corpo do resistor representam um número, de acordo
com o seguinte esquema:
Código de Cores
15
3.3 RESISTOR DE FILME METÁLICO
METÁLICO
Sua estrutura é idêntica à de filme de carbono, somente que se utiliza uma liga metálica (níquelcromo) para formar a película, obtendo valores mais precisos de resistência, com tolerância de
1% e 2%.
A SEGUNDA FAIXA dá o SEGUNDO DÍGITO. Essa é uma faixa violeta, então o segundo dígito é 7.
A TERCEIRA FAIXA é chamada de MULTIPLICADOR e não é interpretada do mesmo modo. O
número associado à cor do multiplicador nos informa quantos "zeros" devem ser colocados após
os dígitos que já temos. Aqui, uma faixa vermelha nos diz que devemos acrescentar 2 zeros. O
valor ôhmico desse resistor é então 4700 ohms, quer dizer, 4 700Ωou 4,7 kΩ.
Ilustração de código de cores no resistor.
Verifique novamente, nosso exemplo, para confirmar que você entendeu realmente o código
de cores dados pelas três primeiras faixas coloridas no corpo do resistor.
A QUARTA FAIXA (se existir), um pouco mais afastada das outras três, é a faixa de tolerância. Ela
nos informa a precisão do valor real da resistência em relação ao valor lido pelo código de cores.
Isso é expresso em termos de porcentagem.
Nosso resistor apresenta uma quarta faixa de cor OURO. Isso significa que o valor nominal que
encontramos 4700Ωtem uma tolerância de 5% para mais ou para menos. Ora, 5% de 4 700Ω são
235Ω então, o valor real de nosso resistor pode ser qualquer um dentro da seguinte faixa de
valores: 4 700Ω-235Ω= 4 465Ωe 4700Ω+ 235Ω= 4 935Ω.
Observação: - A ausência da faixa de tolerância indica que esta é de ±20%.
Para os resistores de precisão encontramos cinco faixas. As três primeiras representam o
primeiro, segundo e o terceiro algarismos significativos e as demais, respectivamente, fator
multiplicador e tolerância.
16
A PRIMEIRA FAIXA em um resistor é interpretada como o PRIMEIRO DÍGITO do valor ôhmico da
resistência do resistor. Para o resistor mostrado abaixo, a primeira faixa é amarela, assim o
primeiro dígito é 4.
A rapidez de conversão de energia, em qualquer campo ligado à Ciência, é conhecida pela
denominação de potência. A potência de um dispositivo qualquer nos informa "quanto de
energia" foi convertido de uma modalidade para outra a cada "unidade de tempo" de
funcionamento.
Potência = Energia convertida / Tempo para a conversão
As unidades oficiais para as grandezas da expressão acima são: Potência em watt (W), Energia
em joule (J) e Tempo em segundo (s).
Em particular, na Eletrônica, a potência elétrica nos informa quanto de energia elétrica, a cada
segundo, foi convertida em outra modalidade de energia. Em termos de grandezas elétricas a
expressão da potência pode ser posta sob a forma:
Potência elétrica = tensão x intensidade de corrente = v.i
Dentro da Eletrônica, para os resistores, onde a energia elétrica é convertida exclusivamente em
energia térmica, essa potência passa a ser denominada potência dissipada no resistor. Desse
modo, podemos escrever:
P = v . i = (R.i). i = R .i2
A cada finalidade, prevendo-se as possíveis intensidades de corrente que o atravessarão, devese adotar um resistor de tamanho adequado (potência adequada) para seu correto
funcionamento. Quanto maior o tamanho físico de um resistor maior será a potência que pode
dissipar (sem usar outros artifícios).
A ilustração a seguir mostra resistores de tamanhos diferentes:
Potência nos resistores com diferentes dimensões.
Simbologia
17
3.5 POTÊNCIA NOS RESISTORES
RESISTORES
Quando a corrente elétrica circula através de resistores, especificamente, e nos condutores, em
geral, esses sempre se aquecem. Neles ocorre conversão de energia elétrica em energia térmica.
Essa energia térmica produzida é transferida para fora do corpo do resistor sob a forma de calor.
Os capacitores são elementos de um circuito que reagem a sinais que se alternam rapidamente
em comparação a sinais que mudam lentamente ou que são estáticos. Esses componentes
podem armazenar energia e devolvê-la ao circuito conforme necessário. O uso mais comum dos
capacitores é para absorver ruídos, o que, por definição, são sinais que se alternam
rapidamente, e separá-los do sinal que realmente interessa. Para capturar tipos diferentes de
ruídos, são necessários valores diferentes de capacitores. Use as dicas abaixo para aprender a
ler as características de um capacitor e determinar o seu valor.
Compreenda as unidades de medida dos capacitores. A unidade de capacitância é o Farad (F).
Esse valor é muito grande para ser usado em um circuito. Em circuitos eletrônicos, são utilizadas
denominações menores de capacitância.
Leia uF como microFarad. O valor de 1 microFarad é 1 x 10-6 Farad.
Leia pF como picoFarad. O valor de 1 picoFarad é 1 x 10-12 Farad.
18
4 CAPACITORES
19
Nos capacitores maiores, leia o valor diretamente no corpo do componente. Se a superfície do
capacitor for suficientemente grande, o valor estará impresso nela. Por exemplo, 47uF indica
que o valor dele é 47 microFarads.
A capacitância de capacitores menores estará disposta em dois ou três números. Além disso,
os designadores uF ou pF não estarão impressos devido ao tamanho reduzido do componente.
Considere um número de dois dígitos como o valor em picoFarads (pF). Por exemplo, 47 deve
ser lido como 47pF.
Considere um número de três dígitos como o valor de base da capacitância em pF e um
multiplicador. Os primeiros dois dígitos indicarão o valor do componente em picoFarads. O
terceiro será um multiplicador do valor anterior, usado para encontrar o valor real da
capacitância.
Utilize o terceiro dígito (varia de 0 a 5) para colocar o número correspondente de zeros ao lado
do número que representa o valor. Se o terceiro dígito for 8, você deve multiplicar o valor do
componente por 0,01; se for 9, multiplique o valor por 0,1. Por exemplo, 472 indicaria um
capacitor de 4700 pF, e 479 um capacitor de 4,7 pF.
Procure por um código com letras. O valor de alguns capacitores é definido por um código de
três números seguido por uma letra. Essa letra representa a tolerância do componente, o que
significa o quão perto o valor real pode estar do valor nominal. As tolerâncias são indicadas
como a seguir:
•
•
•
•
•
•
•
•
•
•
•
•
•
Leia B como 0.10%
Leia C como 0.25%
Leia D como 0.5%
Leia E como 0.5%. Essa é uma duplicação do código D.
Leia F como 1%
Leia G como 2%
Leia H como 3%
Leia J como 5%
Leia K como 10%
Leia M como 20%
Leia N como 0.05%
Leia P como mais 100% a menos 0%.
Leia Z como mais 80% a menos 20%.
O capacitor também pode listar informações sobre tensões de operação. O componente deve
suportar uma tensão maior do que a do circuito em que ele está inserido; caso contrário, pode
romper (possivelmente explodir) durante a operação.
1.000.000 picoFarads é igual a 1 microFarad. Muitos valores comuns de capacitores estão perto
dessa área de transição e podem ser comumente identificados com uma das duas unidades
citadas. Por exemplo, 10.000 pF é mais facilmente encontrado como 0,01 uF.
Códigos com três dígitos alfanuméricos, normalmente Z5U ou X7R, podem aparecer no corpo
do capacitor. Eles indicam como o componente se comportará sob certos aspectos, como
grandes mudanças de temperatura. Mas, para a leitura de seus valores, esses códigos são
irrelevantes.
20
Dígito-Caractere-Dígito. Alguns capacitores pequenos são marcados com códigos do tipo 1n0.
Os dígitos representam os valores antes e após o ponto decimal, e o caractere informa a
dimensão. Sendo assim, nesse exemplo, o valor seria 1,0 nF (nanoFarad).
Até aqui, sempre utilizamos ilustrações detalhadas para descrever a montagem de nossos
circuitos. Porém, como você pode imaginar, não será muito prático desenhar um diagrama
desses quando você quiser simplesmente documentar um experimento.
Problemas semelhantes surgem, mais cedo ou mais tarde, em todas as áreas de atuação. Na
música, por exemplo, depois de compor uma bela canção, você terá de anotá-la utilizando cifras
musicais.
Engenheiros, pessoas práticas que são, desenvolveram uma forma rápida de capturarmos a
essência de um circuito, para que possamos documentá-lo e reconstruí-lo posteriormente, ou
mesmo passáio a outra pessoa.
Em eletrônica, diagramas esquemáticos permitem que você descreva seu circuito de uma forma
que possa ser compreendida pelo restante da comunidade. Componentes individuais são
representados por símbolos que representam abstrações de seu próprio formato, ou de sua
essência. Por exemplo, o capacitor é formado por duas placas de metal separadas por ar ou
plástico; assim, seu símbolo é:
Outro exemplo evidente é o indutor, formado por um fio de cobre espiralado em formato
cilíndrico; seu símbolo pode ser visto à esquerda. Conexões entre componentes são geralmente
feitas utilizando-se fios ou as próprias conexões da placa de circuito impresso e representadas
no diagrama como linhas simples. Quando dois fios estão conectados, utilizamos um ponto para
representar o local em que as duas linhas se cruzam, como na ilustração à esquerda.
Isso é tudo que você deve saber para compreender o básico dos diagramas esquemáticos. Veja
a seguir uma lista mais completa de símbolos e seus significados.
21
5 LEITURA DE DIAGRAMAS ESQUEMÁTICOS
22
Talvez você encontre variações desses simbolos (mostramos, por exemplo, os dois tipos de
simbolos para resistores). Consulte en.wikipedia.org/wiki/Electroni_symbol para uma lista mais
completa de simbolos eletrônicos. Por convenção, diagramas são desenhados da esquerda para
a direita. O circuito de um rádio, por exemplo, seria desenhado com sua antena à esquerda,
seguido pelo caminho que o sinal de rádio percorre até o alto-falante (desenhado à direita).
O diagrama esquemático a seguir descreve o circuito com botão de pressão que vimos neste
livro.
Nesta seção forneceremos uma rápida explicação de todas as instruções básicas aceitas pela
linguagem do Arduino.
Para um a referência mais detalhada, consulte: arduino.cc/en/reference/HomePage.
Estrutura
Um sketch do Arduino é executado em duas partes:
void setup()
Local em que você coloca seu código de inicialização - instruções que preparam a placa antes do
inicio do loop principal do sketch.
void IoopO
Seção que contém o código principal de seu sketch e que deve apresentar um conjunto de
instruções a serem repetidas seguidas vezes até que a placa seja desligada.
Simbolos especiais
O Arduino inclui alguns simbolos que devem ser empregados em linhas de código, comentários
e blocos de código:
; (ponto e vírgula)
Toda instrução (linha de código) é encerrada por um ponto e vírgula. Essa sintaxe permite que
você formate seu código livremente. Você pode até colocar duas instruções na mesma linha,
desde que as separe por um ponto e virgula. (Esteja atento, pois isso dificultará a leitura de seu
código»
Exemplo:
delay(100);
( ) (chaves)
Essa notação é utilizada para marcar blocos de código. Por exemplo, quando você escreve código
para a função loop(), tem de utilizar chaves antes e depois do código.
Exemplo:
void loop() {
Serial.println(“ciao”);
}
23
6 REFERÊNCIA RÁPIDA DE INSTRUÇÕES ARDUINO
Porções do texto ignoradas pelo processador do Arduino, mas extremamente úteis para que
você se recorde do que fez nesse trecho do código, ou para explicar essa funcionalidade a outras
pessoas.
Há dois tipos de comentários no Arduino:
// de linha única: o texto até o flm da linha será ignorado
/* de várias linhas:
você pode escrever
um poema inteiro aqui
*/
Constantes
O Arduino inclui um conjunto de palavras-chave predefinidas com valores especiais. HIGH e LOW
são utilizadas, por exemplo, quando você deseja ligar ou desligar um pino do Arduino. INPUT e
OUTPUT são utilizadas para definir um pino específico como entrada ou saida.
true e false indicam se uma condição ou expressão é verdadeira ou falsa, respectivamente.
Variáveis
Variáveis são áreas nomeadas da memória do Arduino nas quais você pode armazenar dados a
serem utilizados e manipulados em seu sketch. Como sugere o nome, variáveis podem ser
modificadas quantas vezes você quiser
Como o Arduino é um processador muito simples, quando você declara uma variável, deve
também especificar seu tipo, ou seja: dizer ao processador o tamanho do valor que você deseja
armazenar
Veja os tipos de dados disponivets:
boolean
Pode ter um de dois valores: verdadeiro ou falsa
char
Armazena um único caractere, como A. Da mesma forma que qualquer computador, o Arduino
armazena esse valor como um número, ainda que você veja um texto. Quando caracteres são
utilizados para armazenar números, eles podem armazenar valores de -128 a 127.
NOTA: Há dois grandes grupos de caracteres disponíveis a sistemas de computadores: ASCII e Unicode. ASCII éum
conjunto de 127 caracteres, utilizado, dentre outras coisas, para transmitir textos entre terminais seriais e sistemas
de computadores de tempo compartilhado como mainframes e minicomputadores. Unicode, por sua vez, é um
conjunto muito maior de valores utilizados por sistemas operacionais modernos para representar caracteres em
muitos idiomas diferentes. ASCII ainda éútil, por exemplo, para transferência de pequenas quantidades de
informações, em idiomas como italiano e inglês, que utilizam caracteres latinos, numerais arábicos e simbolos
datilográficos comuns para pontuação.
24
Comentários
Armazena um valor entre O e 255. Assim como no caso de char, bytes utilizam apenas um byte
de memória.
int
Utiliza dois bytes da memória para representar um número entre -32.768 e 32767; trata-se do
tipo de dado mais comum utilizado no Arduino.
unsigned irit
Assim como int, utiliza 2 bytes, mas o prefixo unsigned significa que não pode armazenar
números negativos. Seu alcance, portanto, e de O a 65.535.
Iong
Duas vezes o tamanho de um int e armazena números de -2.147.483.648
2.147.483.647.
a
unsigned Iong
Versão não assinalada de long; vai de O a 4.294.967.295.
float
Tipo de dado de tamanho considerável, capaz de armazenar valores de ponto flutuante, ou seja:
números com ponto decimal. Um float consumirá 4 bytes de seus preciosos recursos de RAM.
As funções que podem utilizá-Lo também consomem muita memória, por isso utilize floats
apenas quando estritamente necessário.
double
Número ponto flutuante de precisão dupla, com valor máximo de 17976931348623157 x 10308.
Nossa, que número enorme!
string
Conjunto de caracteres ASCII utilizados para armazenar informações textuais (você pode utilizar
uma string quando quiser enviar uma mensagem por meio de uma porta serial, ou para mostrála em um monitor LCD). Quanto ao armazenamento, uma string utiliza um byte para cada
caractere, mais um caractere nulo para avisar ao Arduino que o fim da linha foi atingido. As duas
linhas seguintes são equivalentes:
char string1[] = “Arduino”; II 7 caracteres + 1 caractere nulo
char string2[8] =”Arduino”; //igual à linha anterior
array
Lista de variáveis que podem ser acessadas por meio de um índice. Um array é utilizado para
criar tabelas de valores que podem ser acessados com facilidade. Por exemplo, caso você queira
25
byte
int light[6] = {0, 20, 50, 75, 100};
A palavra “array” não chega a ser utilizada na declaração da variável: os símbolos [] e {} são
suficientes.
Estruturas de controle
O Arduino inclui palavras-chave para controlar o fluxo lógico de seu sketch.
if... else
Essa estrutura é responsável pela tomada de decisões em seu programa. if deve ser seguido por
uma questão, especificada como uma expressão entre parênteses. Se a expressão for
verdadeira, o que vier depois dela será executado. Se falsa, o bloco de código que segue else
será executado. É possível utilizar apenas íf, sem especificar uma cláusula else.
Exemplo:
if (val == 1) {
digitalwrite(LED, HIGH);
}
for
Permite que você repita um bloco de código por um número especificado de vezes.
Exemplo:
for (int i =0; i < 10; i++) {
Serial.print(“ciao”);
}
switch case
Enquanto a instrução if funciona como uma bifurcação que oferece duas opções ao seu
programa, switch case se parece mais com uma enorme rotatória. Ela permite que seu programa
receba várias orientações, dependendo do valor de uma variável, sendo ótima para manter seu
código organizado, uma vez que substitui listas de instruções if.
Exemplo:
switch (sensorValue) {
case 23:
digitaliWrite(13, HIGH);
break;
case 46:
26
armazenar níveis diferentes de brilho a serem utilizados por um LED, pode criar seis variáveis,
nomeadas lightel, l±ght62 e assim por diante. Melhor ainda, você poderia utilizar um array bem
simples, como:
break;
default: II se nenhum case é executado, executa-se esta linha
digitalWrite(12, [0W);
digitallWrite(13, [0W);
}
while
Semelhantemente a if, while executará um bloco de código enquanto determinada condição for
verdadeira.
Exemplo:
II pisca o LED enquanto o valor do sensor estiver abaixo de 512
sensorvalue = analogRead(1);
while (sensorValue ( 512) {
digitalWrite(13, HIGH);
delay(100);
digitalwrite(13, HIGH);
delay(100);
sensorvalue = analogRead(1);
}
do... while
Idêntica à while. A única diferença é que, aqui, o código será executado antes de a condição ser
avaliada. Essa estrutura é utilizada quando você deseja que seu bloco de código seja executado
ao menos uma vez antes de conferir a condição.
Exemplo:
do {
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, HIGH);
delay(100);
sensorvalue = analogRead(1);
}
while (sensorValue < 512);
27
digitaliWrite(13, HIGH);
Esse termo permite que você saia de um loop e continue a execução do código que aparece
depois dele. break também é utilizado para separar seções distintas de uma instrução switch
case.
Exemplo:
//
pisca o [E0 enquanto o valor do sensor estiver abaixo de 512
do {
II sai do loop se um botão é pressionado
if (digitalRead(7) HIGH)
break;
digitalWrite(13, HIGH);
delay(100);
digitalwrite(13, LOW);
delay(100);
sensorValue analogRead(1);
} while (sensorvalue 512);
continue
Quando utilizado dentro de um loop, continue permite que você pule o resto do código e faça
com que a condição seja testada novamente.
Exemplo:
for (light = 0; light < 255; light++)
{
//pula as intensidades entre 140 e 200
if ((x > 140) && (x
200))
continue;
analogWrite(PWMpin, light);
delay(10);
}
return
Interrompe a execução de uma função, retornando-a. Você também pode utilizar esse comando
para retornar um valor de dentro da função.
28
break
int computeTemperature() {
int ternperature = 0;
temperature = (analogRead(0) + 45) / 100;
returr ternperature;
}
Aritmética e fórmulas
Você pode utilizar o Arduino para realizar cálculos complexos utilizando uma sintaxe especial. +
e – funcionam como você aprendeu na escola. A multiplicação é representada com por * e a
divisão, por /.
Há um operador adicional, chamado “módulo” (%), que retorna o resto da divisão de um inteiro.
Você pode utilizar quantos níveis de parênteses forem necessários para agrupar as expressoes.
Ao contrário do que você aprendeu na escola, colchetes e chaves estão reservados a outros
propósitos (índices e blocos de arrays, respectivamente).
Exemplos:
a = 2 = 2;
light = ((12 * sensorValue) - 5) / 2;
remainder = 3 % 2; II retorna 1
Operadores de comparação
Quando você especifica condições ou testes para instruções if, while e for, estes são os
operadores que podem ser utilizados:
== igual a
!= não igual a
< menor que
> maior que
<= menor que ou igual a
> = maior que ou igual a
Operadores booleanos
Operadores booleanos serão utilizados quando você quiser combinar várias condições. Por
exemplo, caso você queira verificar se o valor vindo do sensor está entre 5 e 10, deve escrever:
if ((sensor => 5) && (sensor (<=10))
Há três operadores: e, representado por &&; ou, representado por II; por fim, não, representado
por !.
29
Por etemplo, se você tiver uma função de nome computeTemperature() e quiser retornar seu
resultado para a seção do código que a invocou, poderia escrever algo como:
Operadores compostos são operadores especiais utilizados para tornar o código mais conciso
quando temos de realizar operações comuns, como incrementar o valor de uma variável.
Por exemplo, para incrementar a variável vaLe em uma unidade, você poderia escrever:
value = value +1;
Utilizando um operador composto, essa linha se tornará:
value++;
Incremento e decremento (-- e ++)
Incrementam e decrementam determinado valor em uma unidade.
Tenha cuidado: ao escrever i++, você incrementa o valor de 1 em uma unidade e avalia um
resultado equivalente a i+1; ++i, por sua vez, avalia o valor de i e só então faz o incremento. O
mesmo se aplica a --.
Esses operadores facilitam o uso de certas expressões. As duas expressões a seguir são
equivalentes:
a = a + 5;
a += 5;
Funções de entrada e saída
O Arduino inclui funções para a manipulação de entradas e saídas. Você já viu algumas delas nos
programas deste livro.
pinMode(pino, modo)
Reconfigura um pino digital para que ele se comporte como entrada ou saída.
Exemplo:
pinMode(7,INPUT);
II transforma o pino 7 em entrada
diqitalWrite(pino, valor)
Liga ou desliga um pino digital. Pinos devem ser marcados explicitamente como saída, utilizando
pinMode, antes que digitalwrite possa ter qualquer efeito.
Exemplo:
digitalwrite(8, HIGH); //liga o pino digital 8
int digitalRead(pino)
Lê o estado de um pino de entrada, retornando HIGH se o pino recebe voltagem, ou LOW se não
há voltagem aplicada.
Exemplo:
30
Operadora compostos
int analogRead(pino)
Lê a tensão aplicada a um pino de entrada analógica e retorna um número entre O e 1023,
representando voltagens entre 0 e 5V
Exemplo:
val = analogRead(0); // lê o valor da entrada analógica 0,
// atribuindo a val
analogWrite(pino, valor)
Altera a taxa PWM em um dos pinos marcados PWM. pin pode ser 11,10,9, 6,5 e 3. value pode
ser um número entre 0 e 255, representando a escala entre 0 e 5V da tensão de saída.
Exemplo:
analoglarite(9,128); // Diminui a limiinosidade de um LED no pino 9 em 50%
shiftOut(dataPin, clockPin, bitOrder, valor)
Envia dados para um registrador de deslocamento, dispositivo utilizado para expandir o número
de saídas digitais. Esse protocolo utiliza um pino para dados e um para o clock. bitorder indica a
ordem dos bytes (do menos significativo para o mais significativo) e valor é o byte em si que será
enviado.
Exemplo:
shiftout(dataPin, clockPin, LSBFIRST, 255);
unsigned Iong pulseln(pino, valor)
Mede a duração de um pulso vindo de uma das entradas digitais. Isso é útil quando queremos,
por exemplo, ler sensores infravermelhos ou acelerômetros que emitem seus valores como
pulsos de duração diferente.
Exemplo:
time = pulsein(7, HIGH); // mede o tempo que o próximo
// pulso permanece high
Funções de tempo
O Arduino inclui funções capazes de medir o tempo transcorrido e também pausar o sketch.
unsigned Iong millis()
Retorna o número de milissegundos transcorridos desde que o sketch teve início.
Exemplo:
duration = millis()-lastTime;
II computa tempo transcorrido desde
31
val digitalRead(7); // lê o valor do pino 7, atribuindo-o a val
32
// “lastTime”
delay(ms)
Pausa o programa pelo tempo especificado em milissegundos.
Exemplo:
delay(500);
II interrompe o programa por meio segundo
delayMicroseconds(us)
Pausa o programa pelo tempo especificado em microssegundos.
Exemplo:
delayMicroseconds(1000); //
espera 1 milissegundo
Funções matemáticas
O Arduino inclui muitas funções matemáticas e trigonométricas comuns:
min(x,y)
Retorna o menor x e y.
Exemplo:
val = min(10,20); II agora, val é 10
max(x, y)
Retorna o maior x e y.
Exemplo:
val = max(10,20); II agora, vai é 20
abs(x)
Retorna o valor absoluto de x, o que transforma números negativos em positivos. Se x for 5, ela
retornará 5; se x for -5, ela ainda retornará 5.
Exemplo:
Val = abs(-5); II agora, val é 5
constrain(x, a, b)
Retorna o valor de x, entre a e b. Se x for menor que a, ela retorna a. Se x for maior que b, ela
retorna b.
Exemplo:
Val = constrain(analogRead(0), 0, 255); II
rejeita
//que 255
valores
maiores
Mapeia um valor no intervalo defromLow a maxLow, a um intervalo entre toLow e toHigh. Esse
recurso é muito útil para processar valores de sensores analógicos.
Exemplo:
val = map(analogRead(0),0,1023,100, 200); II mapeia o valor do pino
// analógico 6 a um valor
II entre 100 e 260
double pow(base expoente)
Retorna o resultado da potenciação de um número (base) por um valor especifico (expoente).
Exemplo:
double x pow(y, 32);
//define x como y elevado à 32ª potência
double sqrt(x)
Retorna a raiz quadrada de um numero.
Exemplo:
double a = sqrt(1138); II aproximadamente 33,73425674438
double sin(rad)
Retorna o seno de um ângulo especificado em radianos.
Exemplo:
double sine = sin(2); II aproximadamente 0,90929737091
double cos(rad)
Retorna o cosseno de um ângulo especificado em radianos.
Exemplo:
double cosine = cos(2); II aproximadamente -0,41614685058
double tan(rad)
Retorna a tangente de um ângulo especificado em radianos.
Exemplo:
double tangent = tan(2); 1/ aproximadamente -2,10503975868
Funções de números aleatórios
Caso você tenha de gerar números aleatórios, pode utilizar o gerador de números
pseudoaleatórios rduino.
33
map(valor, from~ow, fromHigh, totow, toHigh)
Essa função redefine o gerador de números pseudoaleatórios do Arduino. Ainda que a
distribuição dos números retornados por random() seja essencialmente aleatória, a sequência
que ela oferece é previsível. Por isso, você deve redefinir o gerador utilizando um valor aleatório.
Caso você tenha um pino analógico conectado, ele deve captar ruídos variados do ambiente
(como ondas de rádio, raios cósmicos, interferência eletromagnética de celulares e luzes fluorescentes e assim por diante) que podem ser utilizados nesse caso.
Exemplo:
randomSeed(analogRead(5)); // randomiza utilizando o ruído do pino
Iong random(max)
Iong random(min, max)
Retorna um valor de inteiro long pseudoaleatório, entre mim e max -1. Se o valor mínimo não
for especificado, seu limite será 0.
Exemplo:
long randnum = random(0, 100);
long randnum = random(11);
II um número entre 0 e 99
// um número entre 0 e 10
Comunicação serial
Como vimos, você pode efetuar a comunicação com dispositivos por meio da porta USB
utilizando um protocolo de comunicação serial. Veja, a seguir, as funções seriais.
Serial.begin(taxa)
Prepara o Arduino para iniciar a transferência de dados seriais. No caso do monitor serial do IDE
do Arduino, você geralmente utilizará uma taxa de 9.600 bits por segundos (bps), mas há outras
taxas de transferência disponíveis, normalmente inferiores a 115.200 bps.
Exemplo:
Serial. begin(9600);
Serial.print(dados)
Serial.print(dados, codificação)
Envia dados para a porta serial. A codificação é opcional; se não especificada, os dados serão
tratados como texto simples.
Exemplos:
Serial.print(75); // imprime “75”
Serial.print(75, DEC); // igual ao comando anterior
Serial.print(75, HEX); // “4B” (75 em notação hexadecimal)
34
randomseed(semente)
Serial.print(75, BIN); // ‘1001011” (75 em notação binária)
Serial.print(75, BYTE); // “K’ (o byte que representa
// 75 no conjunto ASCII)
Serial.println(dados)
Serial.println(dados, codificação)
Funciona como Serial.print(), exceto adiciona um retorno de carro e um avanço de linha (\r\n),
como se você tivesse digitado os dados e pressionado Return ou Enter.
Exemplos:
Serial.println(75); // imprime “75\r\n”
Serial.println(75, DEc); // igual ao comando anterior
Serial.println(75, HEX); // “4B\r\n”
Serial.println(75, 0CT); // “113\r\n”
Serial.println(75, BIN); // “1001011\r\n”
Serial.println(75, BYTE); // “K\r\n”
int SeriaI.available()
Retorna o número de dados não lidos, disponíveis na porta serial para leitura por meio da função
readfl. Depois que você tiver lido todos os dados disponíveis, serial.available retornará O até
que novos dados cheguem à porta serial.
Exemplo:
int count = Serial.available();
int SeriaI.read()
Busca um byte dos dados seriais entrantes.
Exemplo:
int data = Serial.read();
Seriaiflush()
Como os dados podem chegar à porta serial mais rápido do que seu programa é capaz de
processá-los, o Arduino armazenará todos os dados entrantes em um buffer. Caso você tenha
de limpar o buffer para preenchê-lo com novos dados, utilize a função fIush().
Exemplo:
Serial.flush();
35
Serial.print(75, 0CT); // “113’ (75 em notação octal)
Agora que os conceitos básicos que você precisa saber (circuitos em série e paralelo, tensão e
resistência), é hora de colocar tudo junto, falando sobre um circuito exemplo simples. Digamos,
por exemplo, que você deseja anexar uma luz indicadora de LED para seu projeto Arduino.
Tensão de funcionamento do Arduino Uno é de 5 Volts, o que significa (entre outras coisas), que
qualquer fio ligado ao pino de saída terá uma tensão de 5 volts. Qualquer circuito que começa
em um pino de saída e termina conectado ao terra terá uma queda total de tensão de 5 volts.
Então como é que você sabe o quanto da corrente fluirá através do nosso LED se anexá-lo ao
pino fonte de 5 volts?
Como discutimos antes, há uma relação entre tensão, corrente e resistência. Esta relação é
chamada Lei de Ohm, e é a única matemática que eu estou incluindo neste artigo. Felizmente,
é bastante simples:
V=I/R
Onde V é a voltagem, I é a corrente, e R é a resistência. Em outras palavras, se você mantiver a
tensão constante (é a situação mais provável encontrada em qualquer circuito básico), e em
seguida, efetuar um aumento da resistência, você diminuirá a voltagem atual, e vice-versa.
A equação acima indica que quando a resistência se aproxima de zero, a tensão e permanece
constante, e a corrente se aproxima do infinito. Esta situação é chamada de um curto-circuito,
e tende a fazer com que as coisas derretão, pegem fogo ou explodão. Se você já conectou duas
extremidades de uma bateria com um fio, por exemplo, você já deve ter notado que todo o
circuito quase que imediatamente fica, provoca uma faísca, e a conseuqnetemente a bateria vai
se esgotar rapidamente e com certeza vai estourar.
Você não vai querer um curto-circuito! O circuito precisa de uma carga, ou um componente que
realmente consuma a energia. O LED do nosso projeto representa a carga, a tensão para a
corrente LED, na maioria dos casos, é de 20 mA (miliamperes 1mA ou é correspondente a 1/1000
amps), mas você pode com segurança aumentar a corrente até aproximadamente 30 mA a fim
de obter um brilho mais intenso.
36
7 JUNTANDO TUDO – A PRÁTICA
37
Diagrama de estudo de um relógio com o arduino
Para limitar a resistência atual, você tem que aumenta-la, por isso vamos adicionar um resistor
em série com o LED. Estes dois elementos em série, terão que dividir entre si a quantidade de
corrente que irá fluir através de ambos. Isso significa que podemos descobrir uma linha de base
segura, ligando as duas figuras que já conhecemos (a corrente de 20 mA para o LED e a tensão
de 5V do circuito), aplicando a lei de Ohm, temos:
V=I/R
R=V/I
R = 5V / 0.02A
R = 250 Ohms
Então, se colocarmos uma resistência de 250 ohms no circuito, a corrente não pode ser superior
a 20 mA, e o LED estará seguro. No entanto, esta não é a resistência ideal para o nosso circuito.
Com esse cálculo, estamos assumindo que a queda de tensão ocorre através do resistor, mas na
verdade, parte da queda de tensão ocorre através do LED. No nosso exemplo, o LED absorve
1.8V, assim, teremos:
Resistência = Tensão Total da Fonte - Queda de Tensão do LED / Corrente
R = 5V – 1.8 V / 0,02A
R = 160 Ohms
E é assim que sabemos que o resistor ideal para este circuito é de 160 Ohms. Usando um resistor
menor obtemos um LED mais brilhante, mas este circuito também irá drenar a bateria mais
rapidamente.
Se você foi capaz de seguir este exemplo, significa que você tem uma idéia sobre corrente,
tensão, resistência e lei de Ohm. Já é um grande começo. Com um pouco de educação, e os
grandes recursos on-line para aprender sobre os tópicos mais avançados, você vai ser capaz de
construir qualquer coisa que colocar em sua mente.
Cada dia mais cresce o número de engenheiros, técnicos e gerentes de plantas industriais de
grande porte que começam a perceber os benefícios de usar a placa Arduino também em
ambientes industriais de grande impacto. Um exemplo disso está no projeto mostrado por Paul
M Furley em seu blog que descreve como em 2009, trabalhando em uma indústria familiar,
produziu o software de operação do usuário para sua nova máquina de impressão digital e
decidiu usar Arduino em sua fabricação.
“Eu vinha estudando a placa Arduino e chip controlador Atmega 328P - PU desde o meu projeto
de mestrado e ele veio em um momento perfeito para JF Máquinas. Eles haviam acabado de
desenvolver o seu novo sistema de circulação de tinta: um assunto sério com 5 frascos de tinta
separados subindo e descendo para alterar a pressão junto com o controle preciso da
temperatura. Eles precisavam de uma maneira de conduzir os motores de elevação de garrafa,
lidos em sinais de alarme e as entradas de comutação, bem como de saída de várias sequências
piscando para o benefício do operador. Embora uma PLC (Programmable logic controller, em
portugues controlador lógico programável) pudesse ser mais adequado, o Arduino parecia ser
uma ótima opção.”
As vantagens mais interessantes Citadas por ele são:
Fornecer segurança - mesmo que a Arduino parasse de fornecer placas amanhã, outros
fabricantes estariam oferecendo clones funcionais, e o hardware é de design livre. Mesmo se
mudarem sua concepção física, não seria muito difícil fazer um conversor para adaptar novo
shields. Na pior das hipóteses, JF Máquinas poderia fabricar toda a placa Arduino dos projetos,
enquanto o microcontrolador Atmega 328 ou um compatível permanecer disponível.
38
8 BENEFÍCIOS DE UTILIZAÇÃO
UTILIZAÇÃO EM AMBIENTE INDU
NDUSTRIAL
STRIAL
39
Baixo custo - Muitas vezes argumentaram a mítica cena do hobby e do hacker, culturalmente
associado ao Arduino e ao Raspberry Pi.
ReleShield para controlar cargas externas.
Concordo que para integrar a placa Arduino em um produto de consumo, o preço off-the-shelf
do Arduino é inviável do ponto de vista econômico, utilizando para este fim o Arduino em stand
alone, projetando e fabricando o lote necessário por um valor irrisório e que facilmente poderá
ser agregado ao produto final, comercialmente viável. Entretanto, quando integrado em uma
máquina de impressão industrial de cinco dígitos, o custo chega perto de zero, especialmente
quando se considera a alternativa PLC (Programmable logic controller) e os benefícios do
suporte técnico.
A seguir iremos utilizar o Arduino como plataforma de testes e aprendizado. Selecionei diversas
experiências interessantes para o aprimoramento técnico que você se dispôs a aprender.
Constantemnte irei atualizar e melhorar seu conteúdo. Ele estará sempre disponível on-line no
site: Robohelp e Sênior Consultoria.
Este projeto consiste em controlar o funcionamento de um led, ligando e desligando o mesmo
através de um push button. Este projeto básico introduz a utilização de botões, ou push
buttons, em projetos arduino, permitindo a você dar um passo a mais no seu aprendizado.
Lista de Componentes utilizados:
•
•
•
•
•
1 protoboard;
7 fios jumper, sendo 3 pequenos e 4 médios;
1 led;
1 resistor de 150 ohms e um resistor de 100 ohms;
1 push button;
Vamos iniciar o nosso projeto arduino conectando o botão na protoboard, atentando para a sua
posicação, que pode ser vista na imagem abaixo.
Agora você vai conectar uma perna do resistor de 150 ohms na coluna 48, a mesma do botão, e
a outra perna do resistor você vai conectar na coluna 45. Conecte um fio jumper ligando a perna
do resistor na coluna 45 (fio preto neste caso) a linha horizontal negativa (linha azul no caso
desta protoboard). Conecte outro fio jumper ligando a perna do botão da coluna 50 (fio
vermelho neste caso) a linha horizontal positiva (linha vermelha no caso desta protoboard).
Conecte um fio jumper, amarelo neste caso, entre a perna do botão e a do resistor na coluna
48.
40
9 LED COM BOTÃO LIGA E DESLIGA
41
Agora chegou a hora de ligar o led na protoboard. O led usado pode ser de qualquer cor.
Conecte a perna grande do led na coluna 55 e a perna pequena do led na coluna 56. Conecte
um resistor de 100 ohms entre o led e o fio jumper, conforme mostra a imagem abaixo.
Esquemático de Ligações
Conecte um fio jumper na coluna 56 e na linha negativa da protoboard, ligando a perna
pequena do led com a linha negativa. Conecte um fio jumper no inicio da linha negativa, o
preto neste caso, e outro no inicio da linha positiva, o vermelho neste caso.
Para facilitar o entendimento e a explicação usarei como referência as cores dos fios jumper
usados neste projeto. Abaixo os passos para realizar as ligações dos fios jumper da protoboard
ao arduino.
•
•
•
fio amarelo ao pino digital 2 do arduino;
fio azul ao pino digital 8 do arduino;
fio vermelho ao pino de alimentação 5V;
fio preto ao pino GND.
Chegou a hora mais interessante, que é a programação do seu arduino. Agora você vai definir
o que o arduino vai fazer, neste caso acender ou apagar um led de acordo com o
pressionamento do botão que está na protoboard. Abra a IDE do arduino no seu computador e
também conecte o arduino ao seu computador com o cabo USB.
Segue abaixo o código fonte do programa que vai controlar o arduino, conforme o
presionamento do botão, que se estiver apertado acende o led, se não apaga o led. Neste
projeto introduzimos o uso de constantes em programas arduino. A diferença de uma
constante para uma variável é que uma variável pode ter seu valor alterado quantas vezes for
necessário dentro do programa. Já a constante, uma vez que se define o valor inicial não se
pode mais alterar este valor. Mostramos também o comando digitalRead que, neste caso, faz a
leitura do pino digital 2, detectando se o mesmo está ou não recebendo energia.
Em síntese este programa captura o estado do botão, pressionado ou não pressionado, e de
acordo com este estado envia ou não energia para acender o led. O programa abaixo foi
compilado e testado, caso você queira é só copiar e colar na ide do arduino.
Código Fonte do Projeto
/*
Projeto Arduino acendendo e apagando o led com botão.
Por João Paulo - Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
//Declaração das constantes
const int led = 8; //constante led refere-se ao pino digital 8.
const int botao = 2; //constante botão refere-se ao pino digital 2.
//Variável que conterá os estados do botão (0 LOW, 1 HIGH).
int estadoBotao = 0;
//Método setup, executado uma vez ao ligar o Arduino.
void setup() {
pinMode(led,OUTPUT); //Definindo pino digital 8 como de saída.
pinMode(botao,INPUT); //Definindo pino digital 2 como de entrada.
}
42
•
//Verificando o estado do botão para definir se acenderá ou
//apagará o led.
if (estadoBotao == HIGH) {
digitalWrite(led,HIGH); //Botão pressionado, acende o led.
} else {
digitalWrite(led,LOW); //Botão não pressionado, apaga o led.
}
}
43
//Método loop, executado enquanto o Arduino estiver ligado.
void loop() {
//Lendo o estado do pino 2, constante botao, e atribuindo
//o resultado a variável estadoBotao.
estadoBotao = digitalRead(botao);
Como controlar o intervalo de piscagem de um led usando um potenciômetro. Este projeto
Arduino introduz o uso do potenciômetro, que é um componente eletrônico que possui a
resistência elétrica ajustável, e aproveitando este recurso, deste componente, alteraremos em
tempo real o intervalo de piscagem de um led que será controlado pelo arduino. Este projeto
pode ser desenvolvido em um Arduino Leonardo, Uno, ou em um Duemilanove sem
problemas, neste caso foi usado um Arduino Leonardo e a programação feita na IDE oficial do
Arduino.
Lista de Componentes utilizados:
•
•
•
•
•
1 protoboard;
1 led;
7 fios jumper, 3 pequenos e quatro médios;
1 potenciômetro de 10k;
1 resistor de 100 ohms.
O primeiro passo é conectar o led, o potenciômetro e o resistor na protoboard. Neste caso o
led teve a sua perna maior conectada na coluna 55 e a menor conectada na coluna 56. O
resistor de 100 ohms apenas uma de suas pernas conectada na coluna 55 e o potenciômetro
teve uma perna conectada na coluna 40, outra na 42 e outra na 44. Veja a disposição dos
componentes na imagem abaixo.
44
10 CONTROLAR UM LED COM UM POTENCIÔMETRO
Conecte os fios jumper médios na protoboard, um na coluna 42 que é a perna do meio do
potenciômetro, no caso do fio azul conecte-o direto na perna do resistor, não é necessário
conectar nem esta perna do resistor nem o fio azul na protoboard, a ligação é direta entre o fio
azul e uma das perna do resistor. um fio na linha horizontal vermelha (5V) e um na linha
horizontal azul (terra).
Agora chegou a hora de conectar os fios da protoboard no arduino, usarei as cores dos fios
usadas neste projeto como referência para explanar esta ligação.
Esquemático de Ligações
•
•
•
•
•
A conexão será feita da seguinte forma:
fio azul (resistor e led) no pino digital 8;
fio verde (perna central do potenciômetro) no pino analógico A2;
fio preto no pino GND;
fio vermelho no pino 5V.
O potenciômetro foi ligado ao pino analógico pelo fato deste pino poder assumir valores
diversos e não apenas 0 e 1 que é o caso do pino digital.
Após fazer as ligações entre o arduino e a protoboard o seu projeto físico está pronto, faltando
agora a programação que irá controlar o arduino nesta tarefa de piscar o led em intervalos
45
Usando os fios jumper pequenos conecte uma perna do led, a da coluna 56, na linha horizontal
azul, que será o terra do projeto. Conecte a perna da coluna 40 do potenciômetro também na
linha horizontal azul e a perna da coluna 44 na linha horizontal vermelha, que fornecerá os 5V
do projeto.
Segue abaixo o código fonte deste projeto, que é bem simples e fácil de entender. Copie e cole
na IDE do arduino.
Código Fonte do Projeto
/*
Pisca um led, onde a velocidade das piscadas é
controlada por um potenciômetro.
Por Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
int ledAzul = 8;
int potenciometro = 2;
int tempoDeEspera = 0;
void setup() {
pinMode(ledAzul,OUTPUT);
}
void loop() {
//Leitura do valor do potenciômetro que é usada como delay
46
definidos via potenciômetro. Para programar o arduino conecte-o no seu computador usando
um cabo USB e execute a IDE.
digitalWrite(ledAzul, HIGH);
delay(tempoDeEspera);
digitalWrite(ledAzul, LOW);
delay(tempoDeEspera);
}
Em resumo este código fonte define que o tempo de espera entre as piscadas do led será lido
do protenciômetro através do pino analógico A2 e será aplicado utilizando o comando delay.
Pronto! seu projeto está concluído e a medida que você girar o potênciômetro o intervalo de
piscagem do led irá diminuir ou aumentar dependendo do sentido em que você girar o
potenciômetro.
47
tempoDeEspera = analogRead(potenciometro);
Este projeto acende vários leds ao se pressionar um botão. Neste projeto arduino um pequeno
efeito é gerado, pois foi definido um intervalo de tempo entre o acendimento de cada led. Este
projeto reforça o projeto arduino led com botão liga desliga que também usa um botão para
acender um led e que tem uma programação mais simples. Neste projeto usei um Arduino
Uno R3, mas você também pode usar outras versões do arduino, como a versão Arduino
Leonardo.
Lista de Componentes utilizados:
•
•
•
•
•
•
•
•
•
•
uma protoboard;
quatro leds de cores diferentes;
quatro resistores de 100 ohms;
um resistor de 150 ohms;
um botão do tipo push button;
sete fios jumper grandes;
cinco fios jumper pequenos;
a IDE do arduino instalada no seu computador;
um cabo USB para conectar o arduino ao computador;
um alicate de bico (opcional).
A primeira coisa que vamos fazer é colocar os leds e o botão na protoboard. Neste caso as
pernas grandes dos leds foram conectadas nas colunas 40, 45, 50, 55. As pernas pequenas dos
leds foram conectadas nas colunas 41, 46, 51, 56. O botão teve suas perninhas conectadas as
colunas 33 e 35.
Agora chegou a vez dos resistores. Conecte os quatros resistores de 100 ohms nas colunas que
estão conectadas as pernas grandes dos leds (colunas 40, 45, 50 e 55) conforme mostra a
imagem abaixo. Os resistores dos leds devem ter apenas uma de suas pernas conectadas a
protoboard, pois a outra perna do resistor será ligada aos fios jumper que serão conectados ao
Arduino. Conecte o resistor de 150 ohms na coluna 33 e na linha horizontal negativa da
protoboard (linha azul neste caso) como na imagem abaixo.
Conecte os fios jumper pequenos na linha horizontal negativa da protoboard e nas colunas das
pernas pequenas dos leds, no caso as colunas 41, 46, 51, 56. Conecte a coluna 35, que esta a
perninha do botão um fio jumper ligado a linha horizontal positiva da protoboard, linha
vermelha neste caso.
48
11 BOTÃO QUE ACENDE LEDS
LEDS COM EFEITO
Chegou a hora de conectar os fios jumper maiores na protoboard. Para cada perna grande de
um led você vai ligar um fio jumper, neste caso o fio azul esta ligado no resistor da coluna 55, o
fio vermelho no resistor da coluna 50, o fio verde no resistor da coluna 45 e o fio amarelo no
resistor da coluna 40. Na coluna 33 entre o botão e o resistor você vai ligar outro fio jumper,
neste caso é o fio jumper roxo. Para finalizar conecte um fio jumper na linha horizontal
negativa azul, neste caso foi o fio preto, e outro fio na linha horizontal positiva vermelha, neste
caso foi o fio cinza.
Exemplificado como deve ser feita a ligação entre cada um dos leds, resistores e fios jumper.
49
Esquemático de Ligações
•
•
•
•
•
•
•
fio azul no pino digital 11;
fio vermelho no pino digital 10;
fio verde no pino digital 9;
fio amarelo no pino digital 8;
fio roxo no pino digital 2;
fio preto no pino GND;
fio cinza no pino 5V.
Os pinos digitais 8, 9, 10, e 11 do arduino serão responsáveis por enviar a energia para acender
os leds conectados na protoboard. O pino digital 2 será um pino de entrada, que receberá ou
não energia, conforme o presionamento do botão, possibilitando a leitura do estado do botão
(pressionado ou não pressionado). O pino GND é o terra do arduino, onde estão conectadas
todas as perninhas menores dos leds. E o pino 5V é o responsável por mandar energia para o
botão possibilitando o controle do seu estado, juntamente com o pino digital 2 do arduino.
Pronto! o seu projeto físico está totalmente pronto, mas ainda falta a parte mais legal, que é
programar o arduino para que ele faça o que desejamos. Então vamos conectar o arduino ao
computador abrir a IDE do arduino e mãos a obra.
Agora chegou a hora da programação do arduino. Segue abaixo, após a imagem da IDE, o
código fonte completo e testado deste projeto. Copie e cole ou faça você mesmo a sua versão
do programa de controle do arduino, compile, e posteriormente faça o upload do programa
para o arduino.
Código Fonte do Projeto
/*
Projeto Arduino acendendo com efeito e apagando os leds com botão.
Por Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
50
Os fios jumpers grandes serão conectados da seguinte forma:
//Declaração da variável que possuirá os estados do botão.
int estadoBotao = 0;
//Método setup, executado uma vez assim que o Arduino é ligado.
void setup() {
pinMode(ledAmarelo,OUTPUT); //Definindo pino 8 como saída.
pinMode(ledVerde,OUTPUT); //Definindo pino 9 como saída.
pinMode(ledVermelho,OUTPUT); //Definindo pino 10 como saída.
pinMode(ledAzul,OUTPUT); //Definindo pino 11 como saída.
pinMode(botao,INPUT);
//Definindo pino 2 como entrada.
}
//Método loop, executado enquanto o Arduino estiver ligado.
void loop() {
estadoBotao = digitalRead(botao);
if (estadoBotao == HIGH) {
//Acendendo os leds caso o botão esteja pressionado, com
//um intervalo de tempo (delay) entre os acendimentos para
//criar um pequeno efeito.
digitalWrite(ledAmarelo,HIGH);
delay(200);
digitalWrite(ledVerde,HIGH);
delay(200);
digitalWrite(ledVermelho,HIGH);
delay(200);
digitalWrite(ledAzul,HIGH);
delay(200);
} else {
//Apagando os leds caso o botão não esteja pressionado.
digitalWrite(ledAmarelo,LOW);
digitalWrite(ledVerde,LOW);
digitalWrite(ledVermelho,LOW);
digitalWrite(ledAzul,LOW);
}
}
51
//Declaração das constantes referentes aos pinos digitais.
const int ledAmarelo = 8;
const int ledVerde = 9;
const int ledVermelho = 10;
const int ledAzul = 11;
const int botao = 2;
Comtrolar cada uma das cores de um led RGB usando botões. Neste projeto arduino você terá
a possibilidade de acender separadamente cada cor do led e também acender várias cores
simultaneamente fazendo uma mistura que cria novas cores tudo isso através dos botões. Este
projeto pode ser desenvolvido em um Arduino Leonardo, Uno, Duemilanove ou qualquer outra
versão do arduino. Então prepare sua placa e vamos começar o projeto.
Lista de Componentes utilizados:
•
•
•
•
•
1 protoboard;
12 fios jumper, sendo 8 médios e 4 pequenos;
3 botões;
1 led RGB;
resistores, sendo 3 de 150 ohms e 3 de 330 ohms.
Esquema das pernas de leds RGB.
Primeiramente conecte o led RGB na protoboard, que de acordo com o esquema acima, terá a
sua perna azul conectada na coluna 53 da protoboard, a verde na coluna 54, o terra na 55, e a
vermelha na 56. Conecte também os três botões, onde o primeiro será conectado nas colunas
50 e 48, o segundo nas colunas 45 e 43 e o terceiro nas colunas 40 e 38. Veja na imagem
abaixo.
O próximo passo é conectar os resistores na protoboard. No caso do led você irá conectar em
cada perna que representa uma cor um resistor de 330 ohms. E nos botões você irá conectar
três resistores de 150 ohms, um na coluna 48, um na coluna 43 e outro na coluna 38 e os
resistores de 150 ohms também deverão ser conectados na linha horizontal azul (negativa).
52
12 LED RGB CONTROLAR AS CORES COM
COM BOTÕES
Agora conecte os demais fios jumper na protoboard da seguinte forma:
•
•
•
•
•
•
•
•
coluna 38 um fio azul entre o resistor e o botão;
coluna 43 um fio verde entre o resistor e o botão;
coluna 48 um fio vermelho entre o resistor e o botão;
coluna 53 um fio azul após o resistor;
coluna 54 um fio verde após o resistor;
coluna 56 um fio vermelho após o resistor;
um fio vermelho na linha vermelha (positivo)
um fio preto na linha azul (negativo).
Esquemático de Ligações
A ligação entre o led, os 3 resistores e os fios jumpers vermelho, verde e azul seria como
mostrado na imagem abaixo.
53
Usando os fios jumper pequenos conecte os botões a linha horizontal vermelha (positivo) nas
colunas 50, 45 e 40. Conecte a perna terra do led, coluna 55, a linha horizontal azul (negativo).
54
Conecte os fios da protoboard no arduino da seguinte forma:
•
•
•
•
•
•
•
•
pino digital 2 fio azul do botão;
pino digital 3 fio verde do botão;
pino digital 4 fio vermelho do botão;
pino digital 8 fio azul do led, fio ligado direto no resistor;
pino digital 9 fio verde do led, fio ligado direto no resistor;
pino digital 10 fio vermelho do led, fio ligado direto no resistor;
pino 5V fio vermelho (positivo);
pino GND fio preto (negativo).
A perna do resistor do led que vai ligada ao fio dos pinos digitais não é conectada na coluna da
protoboard e sim conectada direto no fio.
55
Após conectar todos os fios, seu projeto físico para controlar as cores de um led RGB através
de botões está pronto. Agora o próximo passo é conectar o arduino ao seu computador
através do cabo USB para iniciar a programação das funcionalidades desejadas.
Código Fonte do Projeto
/*
Projeto Arduino controla led RGB com botões.
Por Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
//Declaração das constantes
const int ledAzul = 8; //ledAzul refere-se ao pino digital 8.
const int ledVerde = 9; //ledVerde refere-se ao pino digital 9.
const int ledVermelho = 10; //ledVermelho refere-se ao pino digital 10.
const int botaoAzul = 2; //botaoAzul refere-se ao pino digital 2.
const int botaoVerde = 3; //botaoVerde refere-se ao pino digital 3.
const int botaoVermelho = 4; //botaoVermelho refere-se ao pino digital 4.
//Método setup, executado uma vez ao ligar o Arduino.
void setup() {
//Definindo os pinos digitais (8, 9, 10) como de saída.
pinMode(ledAzul,OUTPUT);
pinMode(ledVerde,OUTPUT);
pinMode(ledVermelho,OUTPUT);
//Definindo os pinos digitais (2, 3, 4) como de entrada.
pinMode(botaoAzul,INPUT);
pinMode(botaoVerde,INPUT);
pinMode(botaoVermelho,INPUT);
}
//Método loop, executado enquanto o Arduino estiver ligado.
void loop() {
//Lendo o estado dos botões através dos pinos digitais.
estadoBotaoAzul = digitalRead(botaoAzul);
estadoBotaoVerde = digitalRead(botaoVerde);
estadoBotaoVermelho = digitalRead(botaoVermelho);
//Acendendo o led RGB conforme os botões pressionados.
//Tratando a cor azul
if (estadoBotaoAzul == HIGH) {
digitalWrite(ledAzul,HIGH);
} else {
digitalWrite(ledAzul,LOW);
}
//Tratando a cor verde
if (estadoBotaoVerde == HIGH) {
digitalWrite(ledVerde,HIGH);
} else {
digitalWrite(ledVerde,LOW);
}
//Tratando a cor vermelha
if (estadoBotaoVermelho == HIGH) {
digitalWrite(ledVermelho,HIGH);
} else {
digitalWrite(ledVermelho,LOW);
}
}
56
//Variáveis que conterão os estados dos botões (pressionados ou não).
int estadoBotaoAzul;
int estadoBotaoVerde;
int estadoBotaoVermelho;
57
13 CONTROLE 8 LEDS COM O ARDUINO USANDO O CI 74HC595,
FAZENDO UMA CONTAGEM BINÁRIA.
Contador binário com o arduino, que usa 8 leds para formar um byte, onde um led aceso
representa 1 e o led apagado representa 0, e esse conjunto de 8 leds que forma o byte irá
representar um número entre 0 e 255, ou melhor, irá contar de 0 até 255 só que em base
binária. O componente principal desse projeto, além do arduino e dos leds e o circuito
integrado 74HC595, que vai ser responsável pelo controle dos 8 leds do projeto. O circuito
integrado 74HC595 tem a capacidade de transformar uma entrada serial em uma saída
paralela de 8 vias, e cada uma dessas 8 vias da saída paralela irá controlar um led. E o melhor é
que para controlar esses 8 leds vamos usar apenas 3 pinos do arduino.
Neste projeto os número decimais entre 0 e 255 vão ser representados de forma binária. Para
você entender melhor segue abaixo uma tabela de equivalência entre binários e decimais.
•
•
•
•
00000001 (binário) é igual a 1 (decimal);
00000010 (binário) é igual a 2 (decimal);
00100001 (binário) é igual a 33 (decimal);
11111111 (binário) é igual a 255 (decimal).
Lembro que um led aceso é igual a 1 e um led apagado é igual a 0.
Numa visão geral este projeto funcionará da seguinte forma, o arduino avisa ao CI 74HC595
que vai enviar dados, o CI se prepara para receber os bits, então o arduino envia 8 bits, um de
O CI 74HC595 é muito bom para controlar muitos leds usando poucos pinos do arduino. O
projeto do contador binário apresentado neste post é apenas um exemplo entre milhares de
projetos de controle de leds que podem ser desenvolvidos com o 74HC595. Então chega de
teoria e vamos ao projeto.
Segue abaixo o datasheet do 74HC595, para que você conheça cada um dos pinos do mesmo.
Lista de Componentes utilizados:
Bem, para começar vamos conectar na protoboard os componentes do projeto, que são os
oito leds, de 5mm neste caso, o CI 74HC595, e os oito resistores de 330 ohms, um em cada
perna positiva dos leds.
58
cada vez, ou seja sequencialmente, o CI apenas armazena cada um dos 8 bits enviados, o
arduino envia um sinal ao CI para que ele libere os 8 bits armazenados, e o CI libera os 8 bits de
uma vez, ou seja paralelamente. E esses passos se repetem para a formação de cada um dos
número entre 0 e 255.
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
pino 1 do 74HC595 ligado ao positivo do 2º led;
pino 2 do 74HC595 ligado ao positivo do 3º led;
pino 3 do 74HC595 ligado ao positivo do 4º led;
pino 4 do 74HC595 ligado ao positivo do 5º led;
pino 5 do 74HC595 ligado ao positivo do 6º led;
pino 6 do 74HC595 ligado ao positivo do 7º led;
pino 7 do 74HC595 ligado ao positivo do 8º led;
pino 8 do 74HC595 ligado ao GND do arduino;
pino 9 do 74HC595 sem ligação;
pino 10 do 74HC595 ligado ao 5V do arduino;
pino 11 do 74HC595 ligado ao pino digital 2 do arduino;
pino 12 do 74HC595 ligado ao pino digital 3 do arduino;
pino 13 do 74HC595 ligado ao GND do arduino;
pino 14 do 74HC595 ligado ao pino digital 4 do arduino;
pino 15 do 74HC595 ligado ao positivo do 1º led;
pino 16 do 74HC595 ligado ao 5V do arduino;
E para completar segue abaixo o esquema da ligação do projeto controlando 8 leds com o
arduino usando o CI 74HC595.
Esquemático de Ligações - Fritzzing
Depois de concluir o projeto físico, ou seja, a montagem e as conexões entre arduino e
componentes, chegou a hora de programar o arduino para que ele faça o que queremos.
Então usando o cabo USB conecte o arduino ao seu computador e execute a IDE do arduino.
Segue abaixo o código fonte todo comentado deste projeto.
59
Agora conecte os fios jumper entre os componentes da protoboard e entre a protoboard e o
arduino. O esquema detalhado da ligação dos fios jumpers entre os componentes e o arduino
está detalhado logo abaixo.
/*
Projeto Arduino contador binário
com saída em 8 leds que formam 1 byte.
Por Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
//Constantes associadas aos pinos do arduino
int const clock = 2; //ligado ao clock do 74HC595
int const latch = 3; //ligado ao latch do 74HC595
int const data = 4; //ligado ao data do 74HC595
void setup() {
//definindo os pinos como de saída
pinMode(clock,OUTPUT);
pinMode(latch,OUTPUT);
pinMode(data,OUTPUT);
}
void loop() {
//Contando de 0 até 255
for (int i = 0; i <= 255; i++) {
//permite o fluxo dos dados.
digitalWrite(latch,LOW);
for (int x = 0; x <= 7; x++) {
//pronto para receber o bit.
digitalWrite(clock,LOW);
if (i & (1 << x)) {
digitalWrite(data,HIGH);
} else {
digitalWrite(data,LOW);
}
//grava o bit recebido.
digitalWrite(clock,HIGH);
}
//finaliza o fluxo dos dados e envia os 8 bits.
digitalWrite(latch,HIGH);
//tempo de espera entre a exibição de um
//número e o outro.
delay(100);
}
}
Após introduzir o código fonte deste projeto na IDE do arduino, compile-o e posteriormente
faça o upload. Aguarde alguns segundos e logo o seu projeto estará em funcionamento,
60
Código Fonte do Projeto
Bargraph de LDR
Com este exemplo você aprenderá como criar um bargraph com LED e fazê-lo acender de
maneira proporcional a intensidade da luminosidade em cima do LDR.
Lista de Componentes utilizados:
•
•
•
•
•
•
•
•
•
Cabo USB A para B
Protoboard 400
Resistor 330Ω
Resistor 10KΩ
LDR
LED Vermelho
LED Amarelo
LED Verde
Alguns Jumpers
Esquemático de Ligações - Fritzzing
61
contando de 0 até 255 em base binária, e além disso o efeito dos leds apagando e acendendo
durante a contagem é muito legal.
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
LDR A0 //Define LDR como A0
L_1 2 //Define L_1 como 2
L_2 3 //Define L_2 como 3
L_3 4 //Define L_3 como 4
L_4 5 //Define L_4 como 5
L_5 6 //Define L_5 como 6
L_6 7 //Define L_6 como 7
L_7 8 //Define L_7 como 8
L_8 9 //Define L_8 como 9
L_9 10 //Define L_9 como 10
L_10 11 //Define L_10 como 11
float luminosidade; //Variável para armazenar o valor da luminosidade
float amostra; //Variável para armazenar o amostratória
void setup()
{
//Configura todos os pinos do Bargraph (2 a 10) e desligao s LEDs
for(int i=2 ; i<= 10 ; i++)
{
pinMode(i, OUTPUT); //Configura os pinos de acionamento dos LED como
saída
digitalWrite(i, LOW); //Desliga todos os LEDs
}
//===============================================================
}
void loop()
{
amostra = 0; //Zera a variável amostra
//Pega 1000 amostras
for(int i=0; i < 100 ; i++)
{
luminosidade = analogRead(LDR);//Armazena o valor lido pelo
LDRluminosidade = (luminosidade / 1024) * 100; //Transforma o valor
lido em porcentagem
amostra = amostra + luminosidade; //Armazena na variável amostra
}
//=================
amostra = amostra/100; //Tira a média das amostras
delay(250); //Delay de 250 milissegundos
bargraph(); //Vai para a função do Bargraph e depois volta
}
void bargraph()
{
if(amostra >= 10) digitalWrite(L_1, HIGH); //Aciona o L_1 se
luminosidade for maior ou igual que 10%
else digitalWrite(L_1, LOW); //Senão desliga o L_1
62
Código Fonte do Projeto
if(amostra >= 30) digitalWrite(L_3, HIGH); //Aciona o L_3 se
luminosidade for maior ou igual que 30%
else digitalWrite(L_3, LOW); //Senão desliga o L_3
if(amostra >= 40) digitalWrite(L_4, HIGH); //Aciona o L_4 se
luminosidade for maior ou igual que 40%
else digitalWrite(L_4, LOW); //Senão desliga o L_4
if(amostra >= 50) digitalWrite(L_5, HIGH); //Aciona o L_5 se
luminosidade for maior ou igual que 50%
else digitalWrite(L_5, LOW); //Senão desliga o L_5
if(amostra >= 60) digitalWrite(L_6, HIGH); //Aciona o L_6 se
luminosidade for maior ou igual que 60%
else digitalWrite(L_6, LOW); //Senão desliga o L_6
if(amostra >= 70) digitalWrite(L_7, HIGH); //Aciona o L_7 se
luminosidade for maior ou igual que 70%
else digitalWrite(L_7, LOW); //Senão desliga o L_7
if(amostra >= 80) digitalWrite(L_8, HIGH); //Aciona o L_8 se
luminosidade for maior ou igual que 80%
else digitalWrite(L_8, LOW); //Senão desliga o L_8
if(amostra >= 85) digitalWrite(L_9, HIGH); //Aciona o L_9 se
luminosidade for maior ou igual que 85%
else digitalWrite(L_9, LOW); //Senão desliga o L_9
if(amostra >= 95) digitalWrite(L_10, HIGH); //Aciona o L_10 se
luminosidade for maior ou igual que 90%
else digitalWrite(L_10, LOW); //Senão desliga o L_10
}
63
if(amostra >= 20) digitalWrite(L_2, HIGH); //Aciona o L_2 se
luminosidade for maior ou igual que 20%
else digitalWrite(L_2, LOW); //Senão desliga o L_2
Lista de Componentes utilizados:
01x LDR (sensor de luinosidade) / 01x Reistor de 10k / 01x Led de Alto
Brilho / 01x Resistor de 300 / cabos diversos.
Esquemático de Ligações - Fritzzing
Código Fonte do Projeto
const int LDR = 0;
int ValorLido = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
ValorLido = analogRead(LDR);
Serial.print("Valor lido pelo LDR = ");
Serial.println(ValorLido);
delay(500);
}
64
14 ILUMINAÇÃO AUTOMATIZADA
Lista de Componentes utilizados:
•
•
•
•
•
•
•
•
•
02x Led Verde
02x Led Amarelo
02x Led Vermelho
01x Led de Alto Brilho
01x Buzzer 5V
07x Resistor 300
02x Resistor 10k
01x NTC
01x LDR / cabos diversos.
Esquemático de Ligações - Fritzzing
65
Projeto Alarme Multipropósito
const int LDR = 0;
const int NTC = 1;
const int Buzzer = 2;
const int led1 = 5;
const int led2 = 6;
const int led3 = 7;
const int led4 = 8;
const int led5 = 9;
const int led6 = 10;
const int ledAB = 11;
int ValorLDR = 0;
int ValorNTC = 0;
int pwm = 0;
void setup(){
pinMode(Buzzer, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(ledAB, OUTPUT);
}
void loop(){
ValorLDR = analogRead(LDR);
ValorNTC = analogRead(NTC);
if (ValorNTC > 0){
digitalWrite(led1, HIGH);
}
else{
digitalWrite(led1, LOW);
}
if (ValorNTC > 935){
digitalWrite(led2, HIGH);
}
else{
digitalWrite(led2, LOW);
}
if (ValorNTC > 945){
digitalWrite(led3, HIGH);
digitalWrite(Buzzer, HIGH);
}
else{
digitalWrite(led3, LOW);
digitalWrite(Buzzer, LOW);
}
if (ValorLDR > 600){
digitalWrite(led6, HIGH);
}
else{
digitalWrite(led6, LOW);
}
if (ValorLDR > 500){
digitalWrite(led5, HIGH);
66
Código Fonte do Projeto
15 ALARME COM ARDUINO E SENSOR DE MOVIMENTOS
MOVIMENTOS PIR
Como montar um alarme usando o Arduino e um sensor de movimento PIR. O sensor PIR
(Passive InfraRed sensor) é um sensor eletrônico que mede a luz infravermelha irradiada de
objetos. O sensor PIR também é conhecido como sensor de presença ou sensor de
movimentos, e ao conectá-lo ao Arduino você terá como controlar este sensor e disparar
diversas ações ao detectar movimentos.
Este projeto de alarme é capaz de detectar movimentos em um ambiente disparando um sinal
sonoro e acendendo um led. Pode ser usado por exemplo na porta de entrada da sua casa ou
em algum cômodo e quando alguém passar por lá o alarme será disparado. Então se você
necessita ser avisado da presença de alguém em um determinado lugar este projeto é uma
opção interessante e fácil de fazer.
O sensor PIR é fácil de se encontrar, a maioria das lojas virtuais e físicas que vendem Arduinos
e/ou componentes eletrônicos normalmente possuem este sensor. Só verifique se o sensor PIR
que você pretende adquirir possui controle de sensibilidade da detecção de movimentos. Este
que usei no projeto do alarme possui três pinos, controle de sensibilidade e controle de tempo
que o sensor fica "ligado" quando detecta algum movimento.
Lista de Componentes utilizados:
•
•
•
•
•
•
•
•
sensor de movimentos/presença PIR;
led;
buzzer de 5 volts;
2 resistores de 220 ohms;
protoboard;
bateria de 9 volts;
suporte para bateria com plug para ligar no Arduino;
fios para interligar os componentes.
67
}
else{
digitalWrite(led5, LOW);
}
if (ValorLDR > 450){
digitalWrite(led4, HIGH);
digitalWrite(ledAB, LOW);
}
else{
digitalWrite(led4, LOW);
digitalWrite(ledAB, HIGH);
}
}
68
Segue abaixo o esquema detalhado do projeto do Alarme com Arduino e sensor de movimento
PIR. Através deste esquema fica mais fácil de se ter uma visão geral, e de como montar
corretamente o projeto. Este esquema foi montado no software Fritzing.
Abaixo segue o código fonte do projeto, prontinho e testado, é só copiar, colar, compilar e
fazer o upload para o Arduino.
Código Fonte do Projeto
/*
Projeto Arduino - Alarme com Arduino e sensor de movimento
PIR
Por Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
//Declaração das variáveis referentes aos pinos digitais.
int pinBuzzer = 7;
int pinSensorPIR = 8;
int pinLed = 9;
69
Esquemático de Ligações - Fritzzing
void setup() {
Serial.begin(9600); //Inicializando o serial monitor
//Definido pinos como de entrada ou de saída
pinMode(pinBuzzer,OUTPUT);
pinMode(pinSensorPIR,INPUT);
pinMode(pinLed,OUTPUT);
}
void loop() {
//Lendo o valor do sensor PIR. Este sensor pode assumir 2
valores
//1 quando detecta algum movimento e 0 quando não detecta.
valorSensorPIR = digitalRead(pinSensorPIR);
Serial.print("Valor do Sensor PIR: ");
Serial.println(valorSensorPIR);
//Verificando se ocorreu detecção de movimentos
if (valorSensorPIR == 1) {
ligarAlarme();
} else {
desligarAlarme();
}
}
void ligarAlarme() {
//Ligando o led
digitalWrite(pinLed, HIGH);
//Ligando o buzzer com uma frequencia de 1500 hz.
tone(pinBuzzer,1500);
delay(4000); //tempo que o led fica acesso e o buzzer toca
desligarAlarme();
}
void desligarAlarme() {
//Desligando o led
digitalWrite(pinLed, LOW);
//Desligando o buzzer
noTone(pinBuzzer);
}
70
int valorSensorPIR = 0;
Componentes utilizados: 01x LCD 16x2 / 01x Potenciômetro 10k / cabos diversos
Esquemático de Ligações - Fritzzing
Código Fonte do Projeto
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("Ola, meu nome e:");
lcd.setCursor(0,1);
lcd.print("XXX"); //Coloque seu nome no lugar dos XXX
}
void loop() {
}
71
16 DISPLAY LCD
Olá pessoal, este é o projeto de um relógio simples com LCD e Arduino que utiliza a biblioteca
Time, LCD por I2C e botões para alterar data e hora.
Esquemático de Ligações - Fritzzing
72
17 RELÓGIO LCD COM ARDUINO
Código Fonte do Projeto
#include <Time.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by
unix time_t as ten ascii digits
#define TIME_REQUEST 7 // ASCII bell character requests a time sync
message
LiquidCrystal_I2C lcd(56,16,2);
//If
long previousmillis=0;
int hr=0;
int minut=0;
int dia=0;
int mes=0;
int ano=0;
int count=0;
void setup() {
lcd.init();
lcd.backlight();
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
Serial.begin(9600);
Serial.println(“Waiting for sync message”);
lcd.print(“Waiting”);
lcd.setCursor(0,1);
lcd.print(“for sync message”);
setTime(0,0,0,1,1,0);
}
void loop(){
if(Serial.available() )
{
processSyncMessage();
}
if((digitalRead(7)==HIGH))
//Change button
{
count=count+1;
Serial.println(“OK”);
if(count>1)
{
count=0;
}
}
if((digitalRead(3)==HIGH) && count==1) //Hour button
{
hr=3600;
adjustTime(hr);
}
if((digitalRead(2)==HIGH) && count==1)
//Minute button
{
minut=60;
adjustTime(minut);
73
Os botões servem para incrementar a hora, minuto, dia, mês e o ano do relógio. O
potenciômetro controla o contraste do LCD 16×2. A programação do TimeSerial foi modificada
e implementada no código do relógio.
74
}
if((digitalRead(6)==HIGH) && count==1)
//Day Button
{
dia++;
if(dia+day()>31)
{
dia=1-day();
}
}
if((digitalRead(5)==HIGH) && count==1)
//Month button
{
mes++;
if(mes+month()>12)
{
mes=1-month();
}
}
if((digitalRead(4)==HIGH) && count==1)
//Year Button
{
ano++;
}
if(timeStatus()!= timeNotSet)
{
digitalWrite(13,timeStatus() == timeSet); // on if synced, off if
needs refresh
digitalClockDisplay();
}
delay(1000);
}
void digitalClockDisplay(){
// digital clock display of the time
lcd.clear();
lcd.print(“Hora: “);
lcd.print(hour());
Serial.print(hour());
printDigits(minute());
printDigits(second());
lcd.setCursor(0,1);
Serial.print(” “);
Serial.print(dia+day());
lcd.print(“Data: “);
lcd.print(dia+day());
lcd.print(“.”);
Serial.print(” “);
Serial.print(mes+month());
lcd.print(mes+month());
lcd.print(“.”);
Serial.print(” “);
Serial.print(ano+year());
lcd.print(ano+year());
Serial.println();
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding
colon and leading 0
Serial.print(“:”);
lcd.print(“:”);
if(digits < 10){
Serial.print(‘0′);
lcd.print(“0″);
}
Serial.print(digits);
lcd.print(digits);
}
void processSyncMessage() {
// if time sync available from serial port, update time and return
true
while(Serial.available() >= TIME_MSG_LEN ){ // time message
Foi adicionados os botões e a biblioteca LCD 16×2 por I2C. Para alterar a hora, por exemplo, é
necessário apertar o botão de mudança (localizado no pino digital 7). E depois apertar o botão
da hora (localizado no pino digital 3). Ao apertar o botão, incrementará a hora. Cuidado! Neste
projeto não estamos utilizando o RTC (Real Time Clock)! Se o Arduino desligar, a configuração
será perdida!
75
consists of a header and ten ascii digits
char c = Serial.read() ;
Serial.print(c);
if( c == TIME_HEADER ) {
time_t pctime = 0;
for(int i=0; i < TIME_MSG_LEN -1; i++){
c = Serial.read();
if( c >= ‘0’ && c <= ‘9’){
pctime = (10 * pctime) + (c – ‘0’) ; // convert digits to a number
}
}
setTime(pctime); // Sync Arduino clock to the time received on the
serial port
}
}
}
time_t requestSync()
{
Serial.write(TIME_REQUEST);
return 0; // the time will be sent later in response to serial mesg
}
Este é um projeto que mostra a variação da intensidade da luz utilizando uma fotocélula com
Arduino. De acordo com a variação da intensidade da luz, os leds acendem ou apagam e se não
houver luz nenhuma, um buzzer apita.
Lista de Componentes utilizados:
•
•
•
•
•
1 fotocélula
1 resistor de 10kOhm
8 leds
8 resistores de 220 Ohm
1 buzzer
Esquemático de Ligações - Fritzzing
A fotocélula é um resistor que varia de acordo com a intensidade da luz. Quanto maior a
luminosidade, maior a resistência da fotocélula. Na figura acima, mostra um divisor de tensão
com a fotocélula e um resistor de 10kOhm. Essa divisão é necessária para que a porta
analógica A0 do Arduino possa detectar a sua variação. Assim se caso haja muita luminosidade,
apenas 1 Led acenderá, se houver pouca luminosidade, alguns Leds acenderão e se houver
nenhuma luminosidade, todos os leds acenderão e o buzzer tocará.
76
18 SENSOR DE DETECÇÃO DE LUZ COM FOTOCÉLULA, SOM E ARDUINO
#include <Tone.h>
int LDRpin=A0;
int LDRval=0;
Tone player;
int note[]={NOTE_A3,NOTE_G4};
void setup()
//Setup the output pins and play the buzzer
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
player.begin(10);
Serial.begin(9600);
}
void loop()
{
LDRval=analogRead(LDRpin);
if(Serial.available()>0)
{
Serial.println(LDRval);
}
delay(100);
if(LDRval>850)
{
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval>800 && LDRval<850)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval>750 && LDRval<800)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
77
Código Fonte do Projeto
}
78
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval>700 && LDRval<750)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval>650 && LDRval<700)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval>600 && LDRval<650)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval<600)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
player.play(note[1]);
}
Termômetro LCD com LM335 e Arduino que tem como finalidade mostrar como ligamos um
sensor de temperatura LM335, mostrar os dados de temperatura no LCD, acender Leds e tocar
um buzzer caso a temperatura do termômetro esteja muito alta.
Lista de Componentes utilizados:
•
•
•
•
•
•
•
•
3 leds verdes ou outra cor de preferência,
3 resistores de 200 ohm,
1 buzzer,
1 sensor de temperatura LM335,
1 resistor de 1K ohm,
1 display LCD 16×2,
1 potenciômetro e
jumpers diversos.
Esquemático de Ligações - Fritzzing
No projeto, o Arduino recebe dados analógicos do sensor de temperatura LM335 e converte
em graus Celsius ou Fahrenheight. Se a temperatura estiver entre 20ºC e 25ºC, um Led
acenderá. Se estiver entre 25 e 30, dois leds acenderão e se estiver mais que 30ºC, os três leds
acenderão e o buzzer apitará.
79
19 TERMÔMETRO LCD COM LM335 E ARDUINO
// include the library code:
#include <LiquidCrystal.h>
#include <Tone.h>
int sensorPin = 0;
int led1=9;
int led2=8;
int led3=7;
int led4=6;
int buzzer=10;
Tone player;
int note[]={NOTE_A3,NOTE_G4};
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// set up the LCD’s number of columns and rows:
Serial.begin(9600);
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print(“Lab de Garagem”);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(buzzer,OUTPUT);
player.begin(10);
}
void loop() {
int reading = analogRead(sensorPin);
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
float voltage = (reading) * 5.0;
voltage /= 1024.0;
// print out the voltage
Serial.print(voltage); Serial.println(” volts”);
// now print out the temperature
float temperatureC = (voltage – 0.5) * 10 ; //converting from 10 mv
per degree wit 500 mV offset
//to degrees ((volatge – 500mV) times 100)
Serial.print(temperatureC);
Serial.println(” degrees C”);
lcd.print(temperatureC);
lcd.print(” Celsius”);
// now convert to Fahrenheight
float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
Serial.print(temperatureF); Serial.println(” degrees F”);
if(temperatureC<25)
{
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
80
Código Fonte do Projeto
81
}
if((temperatureC>=25) && (temperatureC<30))
{
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
}
if((temperatureC>=30) )
{
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
digitalWrite(led3,HIGH);
player.play(note[0]);
delay(200);
player.play(note[1]);
delay(200);
player.stop();
}
delay(500);
}
O LED RGB é o LED (Light Emitting Diode – DiodoEmissor de Luz) de nova geração que contêm
num único encapsulamento três LED’s e da composição das três cores básicas, que são R-Red
para vermelho, G-Green para verde e B-Blue para azul, que são controlados
independentemente e pelo controle da sua intensidade, podem ser geradas aditivamente
quase todas as cores.
Lista de Componentes utilizados:
•
•
•
Mini protoboard
Led RGB
3 Resistores 220 ohms
Esquemático de Ligações - Fritzzing
82
20 COMO ADICIONAR UM LED RGB AO ARDUINO
int pino1 = 11;
// Definimos o pino 11 como sendo o primeiro pino
do LED
int pino2= 10;
// Definimos o pino 10 como sendo o terceiro pino
do LED
int pino3= 9;
// Definimos o pino 9 como sendo o quarto pino do
LED
void setup() {
// Definimos os pinos como sendo de saída
pinMode(pino1, OUTPUT);
pinMode(pino2, OUTPUT);
pinMode(pino3, OUTPUT);
}
void loop() {
// Vermelho
digitalWrite(pino1, HIGH);
digitalWrite(pino2, LOW);
digitalWrite(pino3, LOW);
delay(1000);
// Verde
digitalWrite(pino1, LOW);
digitalWrite(pino2, HIGH);
digitalWrite(pino3, LOW);
delay(1000);
// Azul
digitalWrite(pino1, LOW);
digitalWrite(pino2, LOW);
digitalWrite(pino3, HIGH);
delay(1000);
// Amarelo – Vermelho + Verde
digitalWrite(pino1, HIGH);
digitalWrite(pino2, HIGH);
digitalWrite(pino3, LOW);
delay(1000);
// Azul claro – Verde + Azul
digitalWrite(pino1, LOW);
digitalWrite(pino2, HIGH);
digitalWrite(pino3, HIGH);
delay(1000);
// Roxo – Vermelho + Azul
digitalWrite(pino1, HIGH);
digitalWrite(pino2, LOW);
digitalWrite(pino3, HIGH);
delay(1000);
// Branco – Vermelho + Verde + Azul
digitalWrite(pino1, HIGH);
digitalWrite(pino2, HIGH);
digitalWrite(pino3, HIGH);
delay(1000);
// Preto Nenhum ligado
digitalWrite(pino1, LOW);
digitalWrite(pino2, LOW);
digitalWrite(pino3, LOW);
delay(1000);
}
83
Código Fonte do Projeto
O buzzer é um transdutor ou espécie de alto-falante que já possui um oscilador interno para
produzir sons (semelhantes ao de uma sirene). Os transdutores são dispositivos de alta
impedância, fabricados com um material à base de uma cerâmica, denominada titanato de
bário. Eles são muito sensíveis podendo ser usados como fones ou pequenos alto-falantes em
sistemas de aviso ou alarmes.
Lista de Componentes utilizados:
•
•
•
Protoboard
Arduino Uno
Buzzer
Esquemático de Ligações - Fritzzing
84
21 ADICIONAR UM BUZZER AO ARDUINO
int buz = 8;
//define variavel buz como pino 8
void setup(){
pinMode(buz,OUTPUT);//define buz como saida digital
}
void loop(){
//play tone
tone(buz,2999,800);// esta linha de código é usada especialmente
para o buzzer
//O seu funcionamento é : o pino(buz = 8), a frequência e o tempo
de duração em milissegundos
//delay (ms)
delay(1000);
}
85
Código Fonte do Projeto
Neste tutorial vamos ver como adicionar o sensor ultrassônico HC-SR04 ao Arduino. O sensor
HC-SR04 envia um ping como nm submarino faz e mede o tempo entre o envio e o
recebimento de qualquer coisa quando um objeto está na frente do sensor. Como o uso de
som para suas medições que podem atingir até 4 metros. O módulo é de cerca de 45x20x15
mm de tamanho e tem uma ligação de quatro pinos.
Esquemático de Ligações - Fritzzing
Dois pinos são necessários para alimentar o módulo com 5 Volts. O trabalho atual é de cerca
de 15 mA. Um dos pinos é de ping gatilho e o último é utilizado para ler o resultado das
medições, o pino de eco. O ângulo de medida do sensor HC-SR04 é de 15 graus. A 4 metros de
distância dele deve ser um raio de cerca de 1 metro. A 1 metro é 26 centímetros por isso
temos que manter isso em mente quando se utiliza esta informação.
86
22 SENSOR ULTRASSÔNICO HCHC-SR04 AO ARDUINO
Código Fonte do Projeto
/*
HC-SR04 for Arduino
Original project from http://www.swanrobotics.com
This project demonstrates the HC-SR
The distance presented in the code is in mm, but you can uncomment
the line for distance in inches.
The schematics for this project can be found on
http://www.swanrobotics.com
This example code is in the public domain.
*/
const int TriggerPin = 8; //Trig pin
const int EchoPin = 9; //Echo pin
long Duration = 0;
void setup(){
pinMode(TriggerPin,OUTPUT); // Trigger is an output pin
pinMode(EchoPin,INPUT); // Echo is an input pin
Serial.begin(9600); // Serial Output
}
void loop(){
digitalWrite(TriggerPin, LOW);
delayMicroseconds(2);
digitalWrite(TriggerPin, HIGH); // Trigger pin to HIGH
delayMicroseconds(10); // 10us high
digitalWrite(TriggerPin, LOW); // Trigger pin to HIGH
Duration = pulseIn(EchoPin,HIGH); // Waits for the echo pin to get
high
// returns the Duration in microseconds
long Distance_mm = Distance(Duration); // Use function to calculate
the distance
87
MONITOR SERIAL
88
Serial.print(“Distance = “); // Output to serial
Serial.print(Distance_mm);
Serial.println(” mm”);
delay(1000); // Wait to do next measurement
}
long Distance(long time)
{
// Calculates the Distance in mm
// ((time)*(Speed of sound))/ toward and backward of object) * 10
long DistanceCalc; // Calculation variable
DistanceCalc = ((time /2.9) / 2); // Actual calculation in mm
//DistanceCalc = time / 74 / 2; // Actual calculation in inches
return DistanceCalc; // return calculated value
}
Motor de passo, é um motor feito para girar o eixo, ou rotor, em um ângulo controlado, ou
passos (daí seu nome), definidos pela estrutura do motor.
Os motores de passo são as melhores opções para montagens de precisão, com ângulo de
liberdade de 360°. Sua desvantagem está no consumo de corrente muito mais elevado do que
os motores comuns tipo servo e também de seu tamanho, elevando consequentemente o seu
peso. Para construções de robôs são necessárias uso de baterias de maior capacitades
justamente pelo alto consumo que o motor de passo tem .
Lista de Componentes utilizados:
•
•
•
•
Protoboard
CI L293B (CI driver, é uma ponte H que nos permite ligar motores de correntes
continua e motores de passo).
Motor de passo
Fonte ou bateria de 9V pois o motor consome muita corrente e não é aconselhado
deixar apenas na USB de seu computador.
89
23 MOTOR DE PASSO AO ARDUINO
Código Fonte do Projeto
#include <Stepper.h>
const int stepsPerRevolution = 300; // define os passos por volta
// Definindo os pinos de comunicação
// (8 e 9 de um lado, 10 e 11 do outro)
Stepper myStepper(stepsPerRevolution, 8,9,10,11);
void setup() {
//definindo velocidade (80 RPM):
myStepper.setSpeed(80);
// Inicializa a serial port
Serial.begin(9600);
}
//inicia o loop de repetição girando vamos definir para girar em
sentido horário e anti horário
void loop() {
// rotação em sentido horario clockwise
Serial.println(“clockwise”);
myStepper.step(stepsPerRevolution);
delay(500);
// anti horário counterclockwise
Serial.println(“counterclockwise”);
myStepper.step(-stepsPerRevolution);
delay(500);
}
90
Esquemático de Ligações - Fritzzing
O CI 74HC595 si refere a um “registrador de deslocamento de 8 bits serial-in, de série ou em
paralelo com a saída latches; 3-state”. Em outras palavras, você pode usá-lo para controlar 8
saídas de uma só vez, enquanto apenas tomando alguns pinos no microcontrolador. Você
pode ligar vários registros em conjunto para ampliar a sua produção ainda mais. (Os usuários
também podem querer procurar outros chips de driver com “595” ou “596” em seus números
de peças, existem muitos.
Como tudo isso funciona é através de uma coisa chamada “comunicação serial síncrona”, ou
seja, você pode pulsar uma pin up e para baixo comunicando assim um byte de dados para o
registo bit por bit. É pulsando segundo pino, o pino do relógio, que delineiam entre bits. Isto
está em contraste com a utilização da função que depende do remetente e do receptor deve
ser definido de forma independente mediante a uma taxa de dados determinada de acordo
“comunicação série assíncrona” do Serial.begin (). Uma vez que todo o byte é transmitido para
o registo das mensagens de alta ou baixa, realizada em cada bit são divididas entre cada um
dos pinos de saída individuais. Esta é a “saída paralela” parte, com todos os pinos fazer o que
você quer fazer tudo de uma vez.
A “produção em série” parte deste componente vem de seu pino extra que pode passar a
informação serial recebido do microcontrolador novamente inalterado. Isso significa que você
pode transmitir 16 bits em uma linha (2 bytes) e os primeiros 8 fluirá através do primeiro
registro para o segundo registo e ser expresso lá.
“Três estados” refere-se ao fato de que você pode definir os pinos de saída ou como alto,
baixo ou ” alta impedância “. Ao contrário os altos e baixos estados, você pode até definir
pinos para seu estado de alta impedância individualmente Você só pode definir todo o chip
juntos.
Isso é uma coisa muito especializada para fazer -.. Pense em uma matriz de LEDs que talvez
precise ser controlada por completamente diferentes microcontroladores, dependendo de
uma definição de modo específico construído em seu projeto. Nem exemplo, aproveita este
recurso e que você ganhou “t geralmente precisam de se preocupar com um chip que tem.
Aqui está uma tabela explicando os pinos outs adaptados a partir do datasheet da Phillip .
91
24 CI 74HC595 PARA AUMENTAR NÚMERO DE PORTAS DO ARDUINO
92
Exemplo utilizando um registrador shift
O primeiro passo é estender o Arduino com um registrador de deslocamento.
O Circuito
Para ligá-lo
Faça as seguintes conexões:
•
•
•
•
GND (pino 8) para o solo,
Vcc (pino 16) para 5V
OE (pino 13) ao terra
MR (pino 10) para 5V
Esta configuração faz com que todos os pinos de saída de ativos e endereçável o tempo
todo. A única falha desta configuração é que você acaba com as luzes de ligar para seu último
estado ou algo arbitrário cada vez que você primeiro ligar o circuito antes que o programa
começa a ser executado. Você pode contornar isso controlando os pinos MR e OE de sua placa
Arduino também, mas desta forma, trabalhar e deixá-lo com pinos mais abertas.
93
Ligação ao Arduino
•
•
•
DS (pino 14) para Ardunio DigitalPin 11 (fio azul)
SH_CP (pino 11) para a Ardunio DigitalPin 12 (fio amarelo)
ST_CP (pino 12) para Ardunio DigitalPin 8 (fio verde)
De agora em diante os será referido como o dataPin, o clockPin eo latchPin
respectivamente. Observe o capacitor de 0,1 f no latchPin, se você tiver algum piscar quando
os pulsos de pino de bloqueio você pode usar um capacitor para nivelá-la para fora.
Neste caso, você deve ligar o cátodo (short pin) de cada LED para um terreno comum, eo
ânodo (pino longo) de cada diodo emissor de luz ao seu respectivo registo de deslocamento
pino de saída. Usando o registrador de deslocamento para fornecer energia como isso é
chamado de terceirização atual. Alguns registradores de deslocamento podem não fonte de
corrente, eles só podem fazer o que é chamado de afundar atual. Se você tem um desses
significa que você terá que inverter a direção do LEDs , colocando os ânodos diretamente ao
poder e os cátodos (pinos de terra) para as saídas do registo de deslocamento. Você deve
verificar a sua folha de dados específico, se você aren “t usando um chip de série 595. Don” t
se esqueça de adicionar um resistor de 220 ohm em série para proteger os LEDs que está
sendo sobrecarregado.
Diagrama de Circuito
94
Adicionar 8 LEDs .
95
595 Tabela Logic
595 Diagrama de Tempo
Aqui estão três exemplos de código. O primeiro é apenas um código “Olá mundo” que
simplesmente gera um valor de byte de 0 a 255. O segundo programa de luzes de um LED de
cada vez. O terceiro ciclos, através de uma matriz.
O código é baseado em duas peças de informação na folha de dados: o diagrama de tempo ea
tabela lógica. A tabela lógica é o que diz que, basicamente, tudo de importante acontece em
uma batida para cima. Quando o clockPin passa de baixo para cima, o registo de deslocamento
lê o estado do pino de dados. Como os dados são deslocados em que é salvo em um registro
de memória interna. Quando o latchPin vai de alto a baixo os dados enviados é movido a partir
da mudança registra registo de memória já nos pinos de saída, iluminando a LEDs .
Exemplo de código 1 Olá Mundo
//**************************************************************//
// Name
: shiftOutCode, Hello World
// Author : Carlyn Maw,Tom Igoe, David A. Mellis
// Date
: 25 Oct, 2006
// Modified: 23 Mar 2010
// Version : 2.0
// Notes
: Code for using a 74HC595 Shift Register
//
//
: to count from 0 to 255
//****************************************************************
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
void setup() {
//set pins to output so you can control the shift register
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
// count from 0 to 255 and display the number
// on the LEDs
for (int numberToDisplay = 0; numberToDisplay < 256;
numberToDisplay++) {
// take the latchPin low so
// the LEDs don't change while you're sending in bits:
digitalWrite(latchPin, LOW);
// shift out the bits:
shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);
//take the latch pin high so the LEDs will light up:
digitalWrite(latchPin, HIGH);
// pause before next value:
delay(500);
}
96
Código Fonte do Projeto
97
}
Amostra de código 2 One by One
/*
Shift Register Example
for 74HC595 shift register
This sketch turns reads serial input and uses it to set the pins
of a 74HC595 shift register.
Hardware:
* 74HC595 shift register attached to pins 2, 3, and 4 of the
Arduino,
as detailed below.
* LEDs attached to each of the outputs of the shift register
Created 22 May 2009
Created 23 Mar 2010
by Tom Igoe
*/
//Pin connected to latch pin (ST_CP) of 74HC595
const int latchPin = 8;
//Pin connected to clock pin (SH_CP) of 74HC595
const int clockPin = 12;
////Pin connected to Data in (DS) of 74HC595
const int dataPin = 11;
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(9600);
Serial.println("reset");
}
void loop() {
if (Serial.available() > 0) {
// ASCII '0' through '9' characters are
// represented by the values 48 through 57.
// so if the user types a number from 0 through 9 in ASCII,
// you can subtract 48 to get the actual value:
int bitToSet = Serial.read() - 48;
// write to the shift register with the correct bit set high:
registerWrite(bitToSet, HIGH);
}
}
// This method sends bits to the shift register:
void registerWrite(int whichPin, int whichState) {
// turn off the output so the pins don't light up
// while you're shifting bits:
digitalWrite(latchPin, LOW);
// turn on the next highest bit in bitsToSend:
bitWrite(bitsToSend, whichPin, whichState);
// shift the bits out:
shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend);
// turn on the output so the LEDs can light up:
digitalWrite(latchPin, HIGH);
}
Código de exemplo 3 Dois registradores de deslocamento
/*
Shift Register Example
Turning on the outputs of a 74HC595 using an array
Hardware:
* 74HC595 shift register
* LEDs attached to each of the outputs of the shift register
*/
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
//holders for infromation you're going to pass to shifting function
byte data;
byte dataArray[10];
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
Serial.begin(9600);
//Binary notation as
dataArray[0] = 0xFF;
dataArray[1] = 0xFE;
dataArray[2] = 0xFC;
dataArray[3] = 0xF8;
dataArray[4] = 0xF0;
dataArray[5] = 0xE0;
dataArray[6] = 0xC0;
dataArray[7] = 0x80;
dataArray[8] = 0x00;
dataArray[9] = 0xE0;
comment
//0b11111111
//0b11111110
//0b11111100
//0b11111000
//0b11110000
//0b11100000
//0b11000000
//0b10000000
//0b00000000
//0b11100000
98
// the bits you want to send
byte bitsToSend = 0;
}
void loop() {
for (int j = 0; j < 10; j++) {
//load the light sequence you want from array
data = dataArray[j];
//ground latchPin and hold low for as long as you are
transmitting
digitalWrite(latchPin, 0);
//move 'em out
shiftOut(dataPin, clockPin, data);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(latchPin, 1);
delay(300);
}
}
// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// This shifts 8 bits out MSB first,
//on the rising edge of the clock,
//clock idles low
//internal function setup
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);
//clear everything out just in case to
//prepare shift register for bit shifting
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);
//for each bit in the byte myDataOut�
//NOTICE THAT WE ARE COUNTING DOWN in our for loop
//This means that %00000001 or "1" will go through such
//that it will be pin Q0 that lights.
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);
//if the value passed to myDataOut and a bitmask result
// true then... so if we are at i=6 and our value is
// %11010100 it would the code compares it to %01000000
// and proceeds to set pinState to 1.
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
//Sets the pin to HIGH or LOW depending on pinState
digitalWrite(myDataPin, pinState);
//register shifts bits on upstroke of clock pin
digitalWrite(myClockPin, 1);
//zero the data pin after shift to prevent bleed through
digitalWrite(myDataPin, 0);
}
99
//function that blinks all the LEDs
//gets passed the number of blinks and the pause time
blinkAll_2Bytes(2,500);
}
//blinks the whole register based on the number of times you want
to
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll_2Bytes(int n, int d) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(200);
for (int x = 0; x < n; x++) {
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 255);
shiftOut(dataPin, clockPin, 255);
digitalWrite(latchPin, 1);
delay(d);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 0);
shiftOut(dataPin, clockPin, 0);
digitalWrite(latchPin, 1);
delay(d);
}
}
100
//stop shifting
digitalWrite(myClockPin, 0);
Beleza pessoal! Estou aqui com mais um projetinho simples e muito interessante utilizando um
sensor LDR, O Sensor LDR com Três Níveis de Luz a Led com Arduino. Bem, falando um pouco
do sensor LDR (do inglês Light Dependent Resistor), em português Resistor Dependente de
Luz é um componente eletrônico passivo do tipo resistor variável, mais especificamente, é um
resistor cuja resistência varia conforme a intensidade da luz que incide sobre ele. Tipicamente,
à medida que a intensidade da luz aumenta, a sua resistência diminui.
O sensor LDR é construído a partir de material semicondutor com elevada resistência elétrica.
Quando a luz que incide sobre o semicondutor tem uma frequência suficiente, os fótons que
incidem sobre o semicondutor libertam elétrons para a banda condutora que irão melhorar a
sua condutividade e assim diminuir a resistência.
Neste projeto teremos um sensor LDR que ao captar a luz, será mostrado através do
acendimentos dos leds o nível de intensidade da mesma, sendo o led azul alta, vermelho
média e amarelo baixa intensidade. Este sensor LDR pode ser implementado em muitos
projetos, os valores dos níveis de luminozidade podem ser alterados, além de poder ser
aumentado o número de leds ligados a outras portas disponíveis do arduino .
Vocês podem também usar o monitor da porta série da IDE do Arduino para ler os valores do
sensor LDR.
Lista de Componentes utilizados:
•
•
•
•
•
•
•
1 – Prontoboard
1 – LED Amarelo
1 – LED Azul
1 – LED Vermelho
1 – Sensor LDR
1 – Resistor 10KΩ
3 – Resistores 220Ω
101
25 LDR TRÊS NÍVEIS DE LUZ A LED COM ARDUINO
8 – Jumpers
Esquemático de Ligações - Fritzzing
O esquema de ligações é bem simples e o único cuidado é nas ligações das alimentações
positiva de 5v e negativa gnd, além das polaridades dos leds. O sensor LCD e os resistores não
tem polaridade.
Abaixo segue exemplo de 2 códigos que vocês podem estar testando para o projeto do sensor
LDR. O primeiro acende um por um dos leds de acordo com a intensidade da luz,
permanecendo sempre um aceso. O segundo código vai acendendo todos os leds com o
aumento da luz, como num V.U., e quando a iluminação estiver abaixo de 100 eles apagam
totalmente.
102
•
/*
‘*****************************************************************
‘* Projeto : Sensor LDR com três níveis de luz a Led
‘* Autor : Alessandro Gouvea
‘* Version : v1.0
‘* www.oarduino.com
‘*****************************************************************
*/
//Configurações
byte led_az=13; //configura o led azul na porta 13
byte led_vm=12; //configura o led vermelho na porta 12
byte led_am=11; //configura o led amarelo na porta 11
int ldr =A0; //sensro LDR na entrada analogica 0 (A0)
int luz=0; //variavel luz que guarda o valor lido no sensor LDR
void setup()
{
pinMode(led_az,OUTPUT); //led azul como saida
pinMode(led_vm,OUTPUT); //led vermelho como saida
pinMode(led_am,OUTPUT); //led amarelo como saida
digitalWrite(led_az,0); //apaga o led azul
digitalWrite(led_vm,0); //apaga o led vermelho
digitalWrite(led_am,0); //apaga o led amarelo
Serial.begin(9600); //inicializa a serial para ler o valor do
sensor ldr no serial monitor
}
void loop()
{
luz = analogRead(ldr); //armazena o valor lido do sensor ldr na
variavel luz
Serial.println(luz); // envia o valor da variavel luz para o pc
if(luz >700) // se luz for maior que 700…
{
digitalWrite(led_az,1); //acende o led azul
digitalWrite(led_vm,0); //apaga o led vermelho
digitalWrite(led_am,0); //apaga o led amarelo
}
else if(luz < 300) // e se for menor que 300…
{
digitalWrite(led_az,0); //apaga o led azul
digitalWrite(led_vm,0); //apaga o led vermelho
digitalWrite(led_am,1); //acende o led amarelo
}
else // se nao for maior que 700 e menor que 300…
{
digitalWrite(led_az,0); //apaga o led azul
digitalWrite(led_vm,1); //acende o led vermelho
digitalWrite(led_am,0); //apaga o led amarelo
}
delay(100); //aguarda 100 milisegundos
}
103
Código Fonte do Projeto 1
/*
‘*****************************************************************
‘* Projeto : Sensor LDR com três níveis de luz a Led
‘* Autor : Alessandro Gouvea
‘* Version : v2.0
‘* www.oarduino.com
‘*****************************************************************
*/
//Configurações
byte led_az=13; //configura o led azul na porta 13
byte led_vm=12; //configura o led vermelho na porta 12
byte led_am=11; //configura o led amarelo na porta 11
int ldr =A0; //sensor LDR ligado na entrada analogica 0 (A0)
int luz=0; //variavel luz que guarda o valor lido no sensor LDR
void setup()
{
pinMode(led_az,OUTPUT); //led azul como saida
pinMode(led_vm,OUTPUT); //led vermelho como saida
pinMode(led_am,OUTPUT); //led amarelo como saida
digitalWrite(led_az,0); //apaga o led azul
digitalWrite(led_vm,0); //apaga o led vermelho
digitalWrite(led_am,0); //apaga o led amarelo
Serial.begin(9600); //inicializa a serial para ler o valor do
sensor ldr no serial monitor
}
void loop()
{
luz = analogRead(ldr); //armazena o valor lido do sensor ldr na
variavel luz
Serial.println(luz); // envia o valor da variavel luz para o pc
if(luz <100) // se luz for menor que 100…
{
digitalWrite(led_az,0); //apaga o led azul
digitalWrite(led_vm,0); //apaga o led vermelho
digitalWrite(led_am,0); //apaga o led amarelo
}
else
if(luz >700) // se luz for maior que 700…
{
digitalWrite(led_az,1); //acende o led azul
digitalWrite(led_vm,1); //apaga o led vermelho
digitalWrite(led_am,1); //apaga o led amarelo
}
else if(luz < 300) // e se for menor que 300…
{
digitalWrite(led_az,0); //apaga o led azul
digitalWrite(led_vm,0); //apaga o led vermelho
digitalWrite(led_am,1); //acende o led amarelo
}
else // se nao for maior que 700 e menor que 300…
{
digitalWrite(led_az,0); //apaga o led azul
digitalWrite(led_vm,1); //acende o led vermelho
digitalWrite(led_am,1); //apaga o led amarelo
}
delay(100); //aguarda 100 milisegundos
}
104
Código Fonte do Projeto 2
Olá pessoal! Trago a vocês este projeto bem simples. Com ele podemos fazer piscar um LED
com efeito Fade no Arduino. Para quem não sabe o efeito Fade nada mais é do que a mudança
gradual na luminosidade do LED, ou seja, ele vai acendendo gradualmente seu brilho até o
máximo e depois diminui até apagar, e assim sucessivamente. O projeto Fade segue os
mesmos passos e hardware do Blink (pisca), o que diferencia é apenas na forma de piscar o
led, ao invés dele ter dois estados (aceso e apagado) ele terá vários, 255 para ser mais exato.
Lista de Componentes utilizados:
•
•
•
•
1 – LED (Qualquer cor);
1 – Resistor entre 100 e 220 Ohm
2 – Jumpers
1 – Protoboard
Esquemático de Ligações - Fritzzing
105
26 LED COM EFEITO FADE COM ARDUINO
Código Fonte do Projeto
/*
‘*****************************************************************
‘* Projeto : Piscando Led com Efeito Fade
‘* Autor : Alessandro Gouvea
‘* Version : v1.0
‘* www.oarduino.com
‘*****************************************************************
*/
//Constantes
const int led = 9; //Pino onde o LED está ligado
//Variáveis
int brilho = 0;
int fader = 5;
boolean acender = true;
boolean apagar = false;
void setup() {
pinMode(led,OUTPUT); //Pino do led definido como saída
}
//Início de loop do programa
void loop() {
analogWrite(led,brilho);
//No acendimento do led
if (acender == true) {
if (brilho < 255) {
brilho = brilho + fader; //aumentando o brilho do led.
} else {
acender = false;
apagar = true;
}
}
//No apagamento do led
if (apagar == true) {
if (brilho > 0) {
brilho = brilho – fader; // diminuindo o brilho do led.
} else {
acender = true;
apagar = false;
}
}
delay(30);
}
106
Como podem ver, o projeto é muito simples, basta ligar o pino 9 do arduino ao resistor, deste
ao anodo do led e o catodo ao Gnd do arduino. Abaixo segue os códigos do projeto Fade e do
Blink, pra quem quiser aproveitar e testar os dois, pois só vai mudar a programação.
O projeto é do Tiago Henrique que até criou uma biblioteca e que pode ser baixada através do
site dele aqui. A conexão com a Matriz pode ser direta nas portas digitais ou usando o chip
MAX 7219/7221, que já até existe uma biblioteca para a IDE do Arduino.
Lista de Componentes utilizados:
•
•
Matriz de LEDs 5×7
Fios
Esquemático de Ligações - Fritzzing
Foi utilizada uma matriz de LEDs 5×7. Como você vai ver nos exemplos em uma matriz de 5×7
existem pinos duplicados e a sequência dos pinos é chata de entender. Na parte inferior da
esquerda para a direita estão os pinos 1 a 7 e na parte superior da direita para a esquerda
estão os pinos 8 a 14.
Em cada pino de cada linha, observe que foi ligado um resistor, pode ser de 200 Ohms.
107
27 MATRIZ DE LED 5×7 AO ARDUINO
Funções da biblioteca:
LEDMatrix matrix(type); - cria o objeto matriz. type corresponde ao tipo de ligação: L –
positivo nas linhas ou C – positivo nas colunas.
matrix.begin(pin13, pin3, pin11, pin10, pin6, pin2, pin7, pin1, pin5, pin8, pin14, pin9) – pinos
da matriz corresponde ao pino no arduino;
matrix.setDot(coluna, linha, onOff) - acende/apaga um led.
matrix.printChar(caracter, duração, inverter, deslocamento) - escreve um caracter. Você
pode definir o tempo de exibição, inverter o estado dos LEDs, e também deslocar no máximo 5
colunas para a direita.
matrix.printCustomChar(Array, duração, inverter, deslocamento) – escreve um caracter
qualquer definido pelo usuário criando um array de 7 elementos.
Código Fonte do Projeto 1
Acender um led na matriz na posição coluna 1(da esquerda pra direita) e linha 4(de baixo pra
cima)
#include <font.h>
#include <LEDMatrix.h>
LEDMatrix mymatriz(L);
void setup(){
mymatriz.begin(7,6,5,4,3,8,9,10,11,12,13,2);
}
void loop(){
mymatriz.setDot(1, 4, true);
}
}
108
Note que existe duas ligações diferentes. No primeiro liga-se o positivo nas linhas e o terra nas
colunas. No segundo é invertido, liga-se o positivo nas colunas e o terra nas linhas. Foi criada
uma biblioteca especialmente para utilizar essa matriz 5×7 , que pode ser baixada aqui.
#include <font.h>
#include <LEDMatrix.h>
LEDMatrix mymatriz(L);
void setup(){
mymatriz.begin(7,6,5,4,3,8,9,10,11,12,13,2);
}
void loop(){
mymatriz.printChar(‘A’, 10, false, 0);
}
}
109
Código Fonte do Projeto 2
#include <font.h>
#include <LEDMatrix.h>
LEDMatrix mymatriz(L);
unsigned char Coracao[7] = {0B00000,
0B01010,
0B11111,
0B11111,
0B01110,
0B00100,
0B00000,
};
void setup()
{
//inicializa o display, com os seguintes pinos correspondentes
mymatriz.begin(7,6,5,4,3,8,9,10,11,12,13,2);
}
void loop()
{
//Imprime a imagem 'Coracao', durante 10 * 5ms, nao invertido,
deslocamento 0
mymatriz.printCustomChar(Coracao, 10, false, 0);
}
110
Código Fonte do Projeto3
No projeto de hoje vamos montar um Termômetro com display LCD 16X2 com o sensor de
temperatura LM35, e mostrar as informações de temperatura Atual, Média, Mínima e Máxima
no display. O LM35 deverá ser ligado a entrada analogica A0 enquanto o display segue as
ligações básica da maioria de nossos projetos. O potenciômetro ou trimpot deve ser de 10k e
serve para ajustar o contraste do lcd.
Lista de Componentes utilizados:
•
•
•
•
1 – LM35
1 – Potenciômetro ou trimpot de 10k
1 – Protoboard
Jumpers diversos
Esquemático de Ligações - Fritzzing
111
28 TEMÔMETRO LCD COM SENSOR LM35 E ARDUINO INDICADOR DE
TEMPERATURA MÉDIA, MÍNIMA E MÁXIMA
Código Fonte do Projeto
/*
'*****************************************************************
'* Projeto : Projeto - Temômetro LCD com sensor LM35 e Arduino
'* Indicador de temperatura Média, Mínima e Máxima
'* Autor : Alessandro Gouvea
'* Version : v1.0
'* www.oarduino.com
'*****************************************************************
*/
#include <LiquidCrystal.h> // include the LCD driver library
// Variaveis
float tempC = 0; // variavel de ponto flutuante para a temperatura
em Graus Celcius
int tempPin = 0; // Declaração do pino de entrada analógica 0 (A0)
no Arduino
float samples[8]; // matriz para armazenar oito amostras para o
cálculo da temperatura média
float maxi = 0,mini = 100; // variáveis de temperatura
máxima/mínimo com valores iniciais
int i;
// Inicialização do display e pinos correspondentes
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
lcd.begin(16, 2); // configura o número de linhas e colunas do LCD
lcd.setCursor(0, 0); // seta posição do cursor (coluna, linha) do
LCD
lcd.print("OArduino.com "); // imprime texto no LCD
lcd.setCursor(0, 1);
lcd.print("Projeto com LM35"); // imprime texto no LCD
delay(3000); // aguarda 3s
lcd.clear(); // limpa LCD
}
void loop()
{
// Início dos cálculos para o laço FOR
for(i = 0;i<=7;i++){ // colhe 8 amostras de temperatura
samples[i] = ( 4.8 * analogRead(tempPin) * 100.0) / 1024.0; //
conversão matemática para amostra legível de temperatura do LM35 e
armazena resultado de conjunto de amostras. 1024 é a profundidade
de bits (quantização) do Arduino.
// 5 é a voltagem fornecida ao LM35. Alterar apropriadamente para
ter a medida correta. No meu circuito é de 4.8Volts.
// Exibição atual para temperatura em grau Celcius no LCD
simbolotermometro();
lcd.setCursor(0, 0);
lcd.write(2);
lcd.setCursor(1, 0); // set posição do cursor LCD
lcd.print(" Atual: "); // imprime no LCD
112
Depois disso, carregue o seguinte programa, que vai mostrar no display a temperatura atual,
assim como a máxima e a mínima atingidas.
tempC = tempC + samples[i]; // faz a adição de temperatura média
delay(800); // aguarda 800ms
} // FIM de faço FOR
tempC = tempC/8.0; // calculada a média de 8 amostras em grau
Celcius
if(tempC
variavel
if(tempC
variavel
> maxi) {maxi = tempC;} // grava a temperatura maxima na
maxi
< mini) {mini = tempC;} // grava a temperatura minima na
mini
// Envia resultados ao LCD.
lcd.setCursor(0, 0);
lcd.print("Media Max Min");
lcd.setCursor(0, 1); // seta o cursor para a coluna 0, linha 1
lcd.print(tempC); // imprime a temperatura media medida
lcd.setCursor(6, 1);
lcd.print(maxi); // imprime a temperatura maxima
lcd.setCursor(12, 1);
lcd.print(mini); // imprime a temperatura minima
delay(3000); // Aguarde cerca de 3 segundos para exibir os
resultados antes de iniciar o ciclo da sua tela LCD novamente
tempC = 0; // Seta tempC a 0 para que os cálculos possam ser feitos
novamente
} //Fim da rotina principal
void simbolograu()
{
byte grau[8] = { // Cria um array de bytes com o simbolo de grau
B00110,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000,
B00000};
lcd.createChar(1, grau); // Cria o caractere personalizado de grau
} // fim rotina simbolograu
void simbolotermometro()
{
byte termometro[8] = { // Cria um array de bytes com o simbolo de
termometro
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110};
lcd.createChar(2, termometro); // Cria o caractere personalizado 1
(termometro)
} // fim rotina simbolotermometro
113
lcd.setCursor(9, 0);
lcd.print(samples[i]); // imprime amostra da temperatrua atual no
LCD
simbolograu();
lcd.setCursor(14,0);
lcd.write(1);
lcd.print("C");
APLICAÇÃO
O LCD Shield possui um display 16×2 com fundo Azul e letras brancas e um teclado de 5
botões, e seu funcionamento é bem interessante. Os 5 botões são ligados a resistores divisores
de tensão, ou seja, cada botão transmite uma tensão quando pressionado. Sendo assim, os 5
botões são ligados em apenas uma entrada A/D, economizando 5 preciosas I/Os. Vejam a
figura como são ligados:
Dando uma olhada no esquemático você entenderá melhor: Esquemático do SHIELD
114
29 LCD SHIELD COM TECLADO PARA
PARA ARDUINO E EXEMPLO DE
Temos a seguinte disposição de pinos do Arduino e os sinais do display :
Podemos perceber então que não poderemos fazer uso das portas mensionadas para outras
funções enquanto estivermos utilizando o shield com teclado. Observem na imagem abaixo,
que a placa possui furos que permitem a soldagem de uma barra de pinos ou conectores, com
isso podemos usar os pinos que sobraram : 0, 1, 2, 3, 11, 12, 13 (digitais), e A1, A2, A3, A4, A5
(analógicos), além dos pinos de energia (5v, 3.3v, GND). O pino 10 também é utilizado pela
placa para uma função específica, no caso o backlight, e não deve ser utilizado nos programas.
O exemplo abaixo utiliza a biblioteca padrão do Arduino para controlar o shield.
115
O shield utiliza alguns pinos diferentes dos que usamos normalmente nos projetos para ligar
um LCD. Nesse shield teremos que usar a seguinte sequência ao inicializar a biblioteca
LiquidCrystal : LiquidCrystal lcd(8,9,4,5,6,7).
Código Fonte do Projeto
byte pinBotao = 0;
LCD Shield
int valorBotao = 0;
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //RS,E,D4,D5,D6,D7
void setup() {
Serial.begin(9600);
Serial.println("inicio");
lcd.begin(16, 2);
lcd.print("Webtronico.com");
}
void loop() {
valorBotao = analogRead(pinBotao);
//478 esquerda
//129 up
//322 down
//0 right
//720 selecionado
if(valorBotao > 470 && valorBotao < 500){
lcd.setCursor(0, 1);
lcd.print("ESQUERDA");
}else if(valorBotao > 120 && valorBotao < 140){
lcd.setCursor(0, 1);
lcd.print("CIMA ");
}else if(valorBotao > 315 && valorBotao < 400){
lcd.setCursor(0, 1);
lcd.print("BAIXO ");
}else if(valorBotao >=0 && valorBotao < 10){
lcd.setCursor(0, 1);
lcd.print("DIREITA ");
}else if(valorBotao > 700 && valorBotao < 730){
lcd.setCursor(0, 1);
lcd.print("ENTER ");
}
Serial.println(valorBotao);
delay(100);
}
116
Observe que o exemplo envia pela Serial, o valor correspondente a cada valor pressionado.
Para ver os valores basta abrir o Serial Monitor dentro do programa do Arduino
Neste projeto você vai aprender a ligar um relé com botão ao Arduino Uno. Em nosso projeto
o relé acionará um led, mais você poderá acionar qualquer outro dispositivo ao relé, desde que
obedeça a capacidade de corrente máxima do relé. Para acionarmos o relé será acionado uma
chave ou botão tipo push button, onde cada toque na chave será alterado o estado do relé,
permanecendo ligado ou desligando de acordo com um toque no botão. Poderá ser utilizado
qualquer relé com tensão nominal de 5v desde que siga corretamente as ligações das
pinagens.
Lista de Componentes utilizados:
•
•
•
•
•
•
•
•
•
1 – LED 5mm (qualquer cor)
1 – Chave push button
1 – Resistor de 220Ω
2 – Resistor de 10kΩ
1 – Transistor NPN BC337/BC338
1 – Diodo 1N4007
1 – Relé de 5V
1 – Protoboard
Fios e jumpers diversos
117
30 LIGANDO RELÉ COM BOTÃO
BOTÃO AO ARDUINO UNO
118
Esquemático de Ligações - Fritzzing
Esquemático de Ligações - Fritzzing
Código Fonte do Projeto
/*
‘***************************************************
‘* Projeto : Ligando relé com botão ao Arduino Uno
‘* Autor : Alessandro Gouvea
‘* Version : v1.0
‘* www.oarduino.com
‘***************************************************
*/
int
int
int
int
rele = 2; //porta a ser utilizada para o acionamento do rele
botao = 3; //porta utilizada para o botão
lebotao; //armazena informações sobre a leitura do botão
statusrele = 0; //armazena o estado do relé (ligado/desligado)
void setup()
{
pinMode(rele, OUTPUT); //Define o pino do rele como saida
pinMode(botao, INPUT); //Define o pino do botão como entrada
}
119
No projeto utilizei um relé com a disposição dos pinos diferente do utilizado no esquemático
fritzing acima. No lugar do led você poderá utilizar uma lâmpada ligada a alimentação de 220v
bastando ligá-los em série a saída do relé como no esquematico abaixo.
120
void loop() // inicio do programa
{
lebotao = digitalRead(botao); // armazena a leitura do botao armazena a informação na variavel
lebotao
if (lebotao != 1)
{
while(digitalRead(botao) != 1)
{
delay(100);
}
statusrele = !statusrele;
digitalWrite(rele, statusrele);
}
}
Lista de Componentes utilizados:
•
•
•
•
•
•
•
- 1 IR receptor LED (fotodiodo com 2 pinos, não o fototransistor com 3 pinos)
- IR emissores LED (tanto quanto você pode obter, mas, pelo menos, 2)
- 100K resistor (marrom, preto, amarelo)
- fios de ligação em ponte
- Breadboard
- Fita isolante
- Buzzer (opcional)
Tenha cuidado para não misturar o receptor de LED com o emissor de LED, todos eles têm a
mesma aparência.
Preparando o sensor
Antes de montá-lo, devemos preparar o receptor LED IR para não receber luz dos lados, de
modo que o sensor é mais direcional. Eu uso fita isolante para fazer isso ou qualquer coisa que
bloqueia a luz dos lados.
Corte um pequeno pedaço de fita isolante e envolvê-la em torno do receptor IR LED, formando
um tubo. Apare a borda com um par de tesouras até que é cerca de 1 cm de comprimento.
Dê uma olhada nas imagens para ver como eu fiz isso com fita isolante.
121
31 SENSOR DE PROXIMIDADE INFRAVERMELHO COM ARDUINO
122
Esquemático de Ligações - Fritzzing
123
Código Fonte do Projeto
// Sensor de proximidade simples usando Infrared
// Descrição: medir a distância até um obstáculo usando a luz
infravermelha emitida pelo LED IR e
// Ler o valor com um fotodiodo IR. A precisão não é perfeito, mas
funciona muito bem
// Com projetos menores.
// Autor: Ricardo Ouviña
// Data: 01/10/2012
// Versão: 1.0
int Irpin = A0; // IR fotodiodo no pino analógico A0
int IRemitter = 2; // IR emissor LED no pino digital 2
int ambientIR; // Variável para armazenar o IR proveniente do
ambiente
int obstacleIR; // Variável para armazenar o IR proveniente do
objecto
valor int [10]; // Variável para armazenar os valores de IR
int distância; // Variável que vai dizer se há um obstáculo ou não
void setup () {
Serial.begin (9600); // Inicializar monitor de Serial
pinMode (IRemitter, OUTPUT); // IR emissor LED no pino digital 2
digitalWrite (IRemitter, LOW); // configuração IR LED como off
pinMode (11, OUTPUT); // Buzzer no pino digital 11
}
void loop () {
readIR int (int vezes) {
para (int x = 0; X <vezes; x ++) { <times;x++){
digitalWrite (IRemitter, LOW); // Transformando os LEDs IR off para
ler o IR proveniente do ambiente
atraso (1); // Atraso mínimo necessário para ler os valores
ambientIR = analogRead (Irpin); // IR armazenar vindo do ambiente
digitalWrite (IRemitter, HIGH); // Transformando o IR LEDs para ler
o IR proveniente do obstáculo
atraso (1); // Atraso mínimo necessário para ler os valores
obstacleIR = analogRead (Irpin); // IR armazenar vindo do
obstáculo
valor [x] = ambientIR-obstacleIR; // Cálculo da variação de valores
de IR e guardá-la por média futuro
}
for (int x = 0; x <vezes; x ++) {// cálculo da média com base na
"precisão"
distância + = valor [x];
}
retorno (educação a distância / tempo); // Retorna o valor final
}
// - Função a soar uma campainha para medições audíveis - //
buzzer void () {
if (distância> 1) {
if (distância> 100) {// som contínuo, se o obstáculo está muito
próximo
digitalWrite (11, HIGH);
}
else {// emite um sinal sonoro mais rápido quando um obstáculo
abordagens
digitalWrite (11, HIGH);
atraso (150-distância); // Ajustar esse valor para sua
conveniência
digitalWrite (11, LOW);
atraso (150-distância); // Ajustar esse valor para sua
conveniência
}
}
else {// off se não houver nenhum obstáculo
digitalWrite (11, LOW);
}
} </times;x++){
Ligue a resistência do pino de 5V para o pino ânodo do receptor LED IR. Todos os ânodos pinos
dos LEDs IR emissores para o pino digital 2. Um fio vai do pino analógico 0 para o pino ânodo
do receptor LED IR. Não se esqueça de ligar todos os pinos de cátodo dos LEDs para o pino
terra.
A campainha é opcional, mas se você estiver usando-o ligar ao pino digital 11 e no chão.
A luz infravermelha não é visível a olho nu, mas você pode vê-lo através de uma câmera digital,
que ajuda a ver se o LED está funcionando ou não.
124
distance = readIR (5); // Chamando a função que irá ler a distância
e passar a "precisão" para ele
Serial.println (à distância); // Escreve o valor lido no monitor
Serial
// Buzzer (); // Retire o comentário para ativar a função buzzer
}
125
Dê uma olhada nas fotos.
Circuito RTC DS1307 e com botões para o ajuste das horas. O relógio é montado com base no
circuito integrado RTC (Real Time Clock) DS1307. Uma bateria CR2032 de 3V, a mesma utilizada
no PC, mantém o DS1307 funcionando mesmo quando o arduino não estiver alimentado. O
circuito também faz uso de um Arduino Uno, um Display LCD 16×2 e possui ainda três botões,
onde um aciona o que vai ser modificado no relógio (dia, mês, ano, hora, minuto ou segundo) e
os outros dois servem para aumentar ou diminuir o valor selecionado. O sistema indica com um
* no canto superior esquerdo da tela que está em modo de atualização da hora e com uma letra
indicando o que está sendo atualizado no momento, além disso o ítem a ser alterado fica
piscando.
Os resistores que fazem ligações aos botões no arduino são na forma de circuito “pull down”, e
podem ser qualquer um de valores entre 1k e 100k, então utilizei os de 10k.
Lista de Componentes utilizados:
•
•
•
•
•
•
•
•
•
•
6 resistores de 10k;
3 botões tipo push button;
1 trimpot 10k;
1 display lcd 16×2;
1 c.i. DS1307;
1 bateria CR2032 (3V);
1 cristal de 32,786Khz;
1 Arduino Uno;
1 pront-o-board;
fios diversos.
126
32 RELÓGIO LCD COM RTC DS1307 E ARDUINO
127
Esquemático de Ligações - Fritzzing
/*
‘***************************************************
‘* Projeto : Relógio LCD com RTC DS1307 ajustável
‘* Autor : Alessandro Gouvea
‘* Version : v1.0
‘* www.oarduino.com
‘***************************************************
*/
#include
#include
#include
#include
<LiquidCrystal.h>
<DS1307RTC.h>
<Wire.h>
<Time.h>
// Pinos de comando dos botões do relógio
#define clockSet 7
#define clockUp 9
#define clockDown 8
//Estados de Clock
#define stClockRunning 0
#define stSetDay 1
#define stSetMonth 2
#define stSetYear 3
#define stSetHour 4
#define stSetMinute 5
#define stSetSecond 6
int stat = stClockRunning;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //configuração dos pinos do lcd
void Print(int number)
{
lcd.print(number/10);
lcd.print(number%10);
}
// Preenchimento do display LCD
void printTime()
{
lcd.setCursor(4,1); Print(hour());
lcd.print(":"); Print(minute());
lcd.print(":"); Print(second());
lcd.setCursor(3,0); Print(day());
lcd.print("/"); Print(month());
lcd.print("/"); Print(year());
lcd.setCursor(0,0);
lcd.noCursor(); // Cursor invisível
lcd.noBlink(); // Efeito blink desligado
if (stat != stClockRunning)
lcd.print("*");
else
lcd.print(" ");
simbolorelogio();
lcd.setCursor(1,1);
lcd.write(3);
128
Código Fonte do Projeto
}
// Lê pino usando limiar, como um interruptor, isto é,
// interruptor pressionado primeira vez liga, pela segunda vez desliga
int readPinSwitch(int pin, int threshold)
{
if (digitalRead(pin))
{
unsigned long tt = millis();
while (digitalRead(pin));
if ((millis() - tt) > threshold)
return 1;
else
return 0;
}
else
return 0;
}
//Lê pino usando limiar
int readPin(int pin, int threshold)
{
if (digitalRead(pin))
129
switch(stat)
{
case stSetDay:
lcd.setCursor(1,0);
lcd.print("d ");
lcd.setCursor(4,0);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;
case stSetMonth:
lcd.setCursor(1,0);
lcd.print("m ");
lcd.setCursor(7,0);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;
case stSetYear:
lcd.setCursor(1,0);
lcd.print("a ");
lcd.setCursor(12,0);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;
case stSetHour:
lcd.setCursor(1,0);
lcd.print("h ");
lcd.setCursor(5,1);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;
case stSetMinute:
lcd.setCursor(1,0);
lcd.print("M ");
lcd.setCursor(8,1);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;
case stSetSecond:
lcd.setCursor(1,0);
lcd.print("s ");
lcd.setCursor(11,1);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
break;
}
}
// obter novo status, se houver
int getStat()
{
if (readPinSwitch(clockSet,300))
if (stat == stSetSecond)
return stClockRunning;
else
return stat+1;
else
return stat;
}
// definir Arduino e tempo do RTC
void setRTCTime(int hour, int minute, int second, int day, int month, int
year)
{
// define tempo do Arduino
setTime(hour,minute,second,day,month,year);
time_t t = now();
// define tempo do RTC
RTC.set(t);
}
void simbolorelogio()
{
byte relogio[8] = {
B00000,
B01110,
B10101,
B10111,
B10001,
B01110,
B00000,
B00000};
lcd.createChar(3, relogio); // Cria o caractere personalizado de um relogio
}
void setup()
{
pinMode(clockUp,INPUT); // configura os pinos dos botões como entrada
pinMode(clockDown,INPUT);
pinMode(clockSet,INPUT);
lcd.begin(16, 2); // Seta o display para 16 colunas and 2 linhas
setSyncProvider(RTC.get); // função para obter o tempo do RTC
if(timeStatus()!= timeSet) // verifica status do RTC e retorna erro
{
lcd.setCursor(0,0);
lcd.print("Erro do RTC:");
lcd.setCursor(0,1);
lcd.print("Ajuste o Relogio");
delay(3000);
lcd.clear();
}
}
130
{
unsigned long tt = millis();
while ((digitalRead(pin) && (millis() - tt) <= threshold));
if (digitalRead(pin))
return 1;
else
return 0;
}
else
return 0;
void loop()
{
int value = 0;
printTime(); // rotina que imprime o tempo no lcd
delay(100);
stat=getStat();
if (stat != oldStat)
{
t=millis();
oldStat = stat;
}
else
if ((stat != stClockRunning) && ((millis() - t) > 30000)) //tempo em
milisegundos que o ajuste do relógio ficará disponível para ser alterado
stat=stClockRunning;
switch(stat)
{
case stClockRunning:
break;
case stSetDay:
// inicializa value
value=day();
//si botao UP (para cima) for pressionado
while(readPin(clockUp,200))
{
value++;
if (value > 31)
value=1;
setRTCTime(hour(),minute(),second(),value,month(),year());
printTime();
}
//si botao DOWN (para baixo) for pressionado
while(readPin(clockDown,200))
{
value--;
if (value < 1)
value=31;
setRTCTime(hour(),minute(),second(),value,month(),year());
printTime();
}
break;
// ver comentários em stSetDay
case stSetMonth:
value=month();
while(readPin(clockUp,200))
{
value++;
if (value > 12)
value=1;
setRTCTime(hour(),minute(),second(),day(),value,year());
printTime();
}
while(readPin(clockDown,200))
{
value--;
if (value < 1)
value=12;
setRTCTime(hour(),minute(),second(),day(),value,year());
printTime();
}
break;
case stSetYear:
value=year();
while(readPin(clockUp,200))
{
131
int oldStat = stat;
unsigned long t=millis();
132
value++;
if (value > 2050)
value=2000;
setRTCTime(hour(),minute(),second(),day(),month(),value);
printTime();
}
while(readPin(clockDown,200))
{
value--;
if (value < 2000)
value=2050;
setRTCTime(hour(),minute(),second(),day(),month(),value);
printTime();
}
break;
case stSetHour:
value=hour();
while(readPin(clockUp,200))
{
value++;
if (value > 23)
value=0;
setRTCTime(value,minute(),second(),day(),month(),year());
printTime();
}
while(readPin(clockDown,200))
{
value--;
if (value < 1)
value=24;
setRTCTime(value,minute(),second(),day(),month(),year());
printTime();
}
break;
case stSetMinute:
value=minute();
while(readPin(clockUp,200))
{
value++;
if (value > 59)
value=0;
setRTCTime(hour(),value,second(),day(),month(),year());
printTime();
}
while(readPin(clockDown,200))
{
value--;
if (value < 0)
value=59;
setRTCTime(hour(),value,second(),day(),month(),year());
printTime();
}
break;
case stSetSecond:
value=minute();
while(readPin(clockUp,200))
{
value++;
if (value > 59)
value=0;
setRTCTime(hour(),minute(),value,day(),month(),year());
printTime();
}
while(readPin(clockDown,200))
{
value--;
if (value < 0)
value=59;
133
setRTCTime(hour(),minute(),value,day(),month(),year());
printTime();
}
}
}
Para utilizarmos o caracter precisamos enviá-lo ao display. Vamos gravar o caracter especial no
display na posição 1:
lcd.createChar(1, coracao); // Grava o caracter heart na posição 1. lcd.write(1); // Escreve o
caracter da posição 1 no display, e tem que ser write(), e não print(). No código do programa
abaixo criamos 3 caracteres especiais.
Neste projeto vamos controlar um display lcd 16×2 com o arduino, escrevendo caracteres,
frases e também criar desenhos. O display utilizado faz uso do chip HD44780, sendo a maioria
encontrado no mercado.
Lista de Componentes utilizados:
•
•
•
•
1 – Protoboard
1 – Display LCD 16X2
1 – Potenciômetro ou trimpot 10k
– Jumpers diversos
134
33 LIGANDO UM DISPLAY LCD
LCD 16X2 AO ARDUINO
No programa é utilizado a biblioteca LiquidCrystal.h. O pino BL (penúltimo pino) que está
ligado à saída 7 do Arduino é o que controla a luz de fundo do display (BL -> backlight). O pino
V0 (3º pino) é o contraste onde vai ligado um potenciômetro ou um trimpot de 10k, ou você
poderá ligá-lo a uma saída PWM do Arduino para controlar o contraste pelo programa.
Todas as funções da biblioteca si encontram neste link.
Criando caracteres personalizados:
Com os displays baseados no HD44780 podemos criar até 8 caracteres customizados! Primeiro
devemos criar um vetor de 8 bytes que representará o nosso caracter. Segue o código
correspondente ao desenho de um coração:
byte heart[8] =
{ 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
Graficamente:
135
Esquemático de Ligações - Fritzzing
/*
***************************************************
* Projeto : Ligando Display ao Arduino Uno
* Autor : Alessandro Gouvea
* Version : v1.0
* www.oarduino.com
***************************************************
*/
#include
// declara a utilização da biblioteca LiquidCrystal
#define Luz_Fundo 7
//cria uma saida do "lcd" nos pinos citados:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
lcd.begin(16, 2); // Iniciando o objeto "lcd" de 2 linhas e 16 colunas
pinMode(Luz_Fundo,OUTPUT); //define o pino como saidda
digitalWrite(Luz_Fundo,HIGH); // Liga a luz do display.
}
void loop()
{
basicoPrintDemo(); // Rotina de impressão básica
displayOnOffDemo(); // Rotina que liga e desliga display
setCursorDemo(); // Rotina que posiciona o cursor na tela
scrollLeftDemo(); // Rotina que rola o texto para a esquerda
scrollRightDemo(); // Rotina que rola o texto para a direita
cursorDemo(); // Rotina que ativa o cursor na tela
createGlyphDemo(); // Rotina de criação de caracteres especiais
}
void basicoPrintDemo() {
lcd.clear(); // Limpa o display
lcd.setCursor(4,0); // envia cursor para coluna 4 e linha 1
lcd.print("OArduino"); // Imprime o texto
lcd.setCursor(0,1); // envia cursor para coluna 0 e linha 2
lcd.print("www.oarduino.com"); // Imprime o texto
delay(4000); // Aguarda 4 segundos
}
void displayOnOffDemo() {
lcd.clear(); // Limpa o display
lcd.setCursor(5,0); // envia cursor para coluna 5 e linha 1
lcd.print("Display"); // Imprime o texto
lcd.setCursor(0,1); // envia cursor para coluna 0 e linha 2
lcd.print("Ligado/Desligado"); // Imprime o texto
for(int x=0; x < 3; x++) { // pisca a mensagem 3 vezes
lcd.noDisplay(); // Apaga o display
delay(1000); // Aguarda 1s
lcd.display(); // Acende-o novamente
delay(1000); } // Aguarda 1s
}
void setCursorDemo() {
lcd.clear(); // Limpa o display
lcd.print("Posicoes do"); // Imprime o texto na primeira linha
136
Código Fonte do Projeto
void scrollLeftDemo() {
lcd.clear(); // Limpa o display
lcd.print("Scroll para");
lcd.setCursor(0,1);
lcd.print("Esquerda:");
delay(2000);
lcd.clear(); // Limpa o display
lcd.setCursor(3,0);
lcd.print(" Rolando ->");
lcd.setCursor(0,1);
lcd.print("OArduino.com");
delay(1000);
for(int x=0; x<16; x++) { // laço de repetição
lcd.scrollDisplayRight(); // Rola o display 16 vezes para a direita
delay(250); }
}
void cursorDemo() {
lcd.clear(); // Limpa o display
lcd.cursor(); // Cursor visível
lcd.print("Cursor");
lcd.setCursor(0,1);
lcd.print("Ligado");
delay(3000);
lcd.clear(); // Limpa o display
lcd.noCursor(); // Cursor invisível
lcd.print("Cursor");
lcd.setCursor(0,1);
lcd.print("Desligado");
delay(3000);
lcd.clear(); // Limpa o display
lcd.print("Cursor");
lcd.setCursor(0,1);
lcd.print("Piscando");
lcd.setCursor(9,1);
lcd.cursor(); // Cursor visível
lcd.blink(); // Cursor piscando
delay(3000); // Aguarda 3s (3000ms)
lcd.noCursor(); // Cursor invisível
lcd.noBlink(); // Efeito blink desligado
}
void createGlyphDemo() {
lcd.clear(); // limpa lcd
byte happy[8] = { // Cria um array de bytes com uma cara feliz
B00000,
B00000,
B10001,
B00000,
B10001,
B01110,
B00000,
B00000};
137
lcd.setCursor(3,1); // envia cursor para coluna 3 e linha 2
lcd.print("Cursor:"); // imprime o texto
delay(2000); // Aguarda 2s
lcd.clear(); // Limpa o display
lcd.setCursor(5,0); // Cursor na coluna 5, linha 1
lcd.print("5,0"); // imprime as coordenadas do cursor no lcd
delay(2000); // aguarda 2s
lcd.setCursor(10,1); // Cursor na coluna 10, linha 2
lcd.print("10,1"); // imprime as coordenadas do cursor no lcd
delay(2000); // aguarda 2s
lcd.setCursor(3,1); // Cursor na coluna 3, linha 2
lcd.print("3,1"); // imprime as coordenadas do cursor no lcd
delay(2000); // aguarda 2s
}
lcd.createChar(3, coracao); // Cria o caractere personalizado 3
for(int x=0; x<5; x++) { // Executa a animação 5 vezes
lcd.setCursor(7,1);
lcd.write(3); // Escreve o caractere personalizado 3
delay(500);
lcd.setCursor(7,1);
lcd.print(" "); // Após 0.5s apaga o coração, assim ele
delay(500); // ficará piscando
}
}
Como criar menus para seus projetos com display
Bom pessoal, aproveitando o circuito de nosso último projeto encontrado aqui, aprenderemos
a montar um menu personalizado para nossos projetos com display no Arduino. O vídeo é do
Mauricio Rivello que mostra como montar os menus através de um vídeo que ele fez no
youtube.
https://www.youtube.com/watch?feature=player_embedded&v=mcuReWQt_oo
// Tutorial de Menu LCD por diagrama de estados
138
byte sad[8] = { // Cria um array de bytes com uma cara triste
B00000,
B00000,
B10001,
B00000,
B01110,
B10001,
B00000,
B00000};
byte coracao[8] = { // vetor de bytes correspondentes ao desenho do coração
B00000,
B01010,
B11111,
B11111,
B01110,
B00100,
B00000,
B00000};
lcd.createChar(1, happy); // Cria o caractere personalizado 1 (carinha
feliz)
lcd.createChar(2, sad); // Cria o caractere personalizado 2 (carinha triste)
lcd.setCursor(0,0);
lcd.print("Carinha");
for(int x=0; x<5; x++) { // Executa a animação 5 vezes
lcd.setCursor(0,1);
lcd.print("Feliz: ");
lcd.setCursor(8,1);
lcd.write(1); // Escreve o caractere personalizado 1
delay(1000);
lcd.setCursor(0,1);
lcd.print("Triste:"); //Imprime o texto
lcd.setCursor(8,1);
lcd.write(2); // Escreve o caractere personalizado 2
delay(1000); } // Aguarda 1s
lcd.clear();
lcd.print("Coracao batendo");
#include <LiquidCrystal.h>
// Definição dos pinos dos botões, luz do display e buzzer
#define Buzzer 6
#define Display 7
#define bMenu A0 // Os pinos analógicos podem ser
#define bChange A1 // usados como digitais, bastando
#define bUp A2 // referenciá-los por A0, A1..
#define bDown A3
#define bMenu0 90 // Valor de referência que a
#define bChange0 91 // função CheckButton() passa
#define bUp0 92 // indicando que um botão foi
#define bDown0 93 // solto
boolean aMenu, aChange, aUp, aDown; // Grava o ultimo valor lidos nos botões.
// Utilizado pela função Checkbutton p/ identificar quando há uma alteração no estado do pino dos
botões
int variavel; // variavel a ser alterada pelo menu
char state=1; // variável que guarda posição atual do menu
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Declaração do objeto tipo lcd
//============================================== SETUP
void setup()
{
lcd.begin(16, 2); // Iniciando a biblioteca do LCD
pinMode(Display,OUTPUT); // Luz de fundo do display
pinMode(Buzzer, OUTPUT); // Buzzer
pinMode(bMenu, INPUT); // Botões
pinMode(bChange,INPUT);
pinMode(bUp, INPUT);
pinMode(bDown, INPUT);
digitalWrite(bMenu, HIGH); // Aciona o pull-up interno
digitalWrite(bChange,HIGH); // dos botões
digitalWrite(bUp, HIGH);
digitalWrite(bDown, HIGH);
digitalWrite(Display,HIGH); // Liga a luz do display.
}
//==============================================
//============================================== LOOP
void loop()
{
switch (state) { // Define checa qual tela atual
case 1:
// executado quando na TELA 1
switch (CheckButton()) {
case bChange:
Feo();
break;
case bUp:
lcd.clear(); Set_state(4); // antes de mudar de tela, é necessário limpar o
break;
// display com a função lcd.clear()
case bDown:
lcd.clear(); Set_state(2);
break;
default: // Caso nenhum botão tenha sido apertado, ela executa a set_state
Set_state(1); // mesmo assim para atualizar o display.
}
139
// Maurício Féo Rivello
// engenheirando.com
// Assista o vídeo sobre:
// http://www.youtube.com/watch?v=mcuReWQt_oo
case 2:
// executado quando na TELA 2
switch (CheckButton()) {
case bChange: // Apita o buzzer quando o botão bChange é pressinado na tela 2
digitalWrite(Buzzer,HIGH);
delay(200);
digitalWrite(Buzzer,LOW);
break;
case bUp:
lcd.clear(); Set_state(1);
break;
case bDown:
lcd.clear(); Set_state(3);
break;
default:
Set_state(2);
}
break;
case 3:
// executado quando na TELA 3
switch (CheckButton()) {
case bChange:
digitalWrite(Display,LOW);
delay(1000);
digitalWrite(Display,HIGH);
break;
case bUp:
lcd.clear(); Set_state(2);
break;
case bDown:
lcd.clear(); Set_state(4);
break;
default:
Set_state(3);
}
break;
case 4:
// executado quando na TELA 4
switch (CheckButton()) {
case bMenu:
lcd.clear(); variavel++;
break;
case bChange:
lcd.clear(); variavel--;
break;
case bUp:
lcd.clear(); Set_state(3);
break;
case bDown:
lcd.clear(); Set_state(1);
break;
default:
Set_state(4);
}
break;
default: ;
}
}
//============================================== FIM da função LOOP
//==============================================
//============================================== CheckButton
char CheckButton() {
if (aMenu!=digitalRead(bMenu)) {
aMenu=!aMenu;
140
break;
//========================================================
//============================================== Set_state
void Set_state(char index) {
state = index; // Atualiza a variável state para a nova tela
switch (state) { // verifica qual a tela atual e exibe o conteúdo correspondente
case 1: //==================== state 1
lcd.setCursor(0,0);
lcd.print("Segundos:");
lcd.setCursor(0,1);
lcd.print( millis()/1000 , DEC); // mostra os segundos na tela
lcd.print(" s");
break;
case 2: //==================== state 2
lcd.setCursor(0,0);
lcd.print("Beep!");
break;
case 3: //==================== state 3
lcd.setCursor(0,0);
lcd.print(" Aperte para");
lcd.setCursor(0,1);
lcd.print(" apagar");
break;
case 4: //==================== state 4
lcd.setCursor(0,0);
lcd.print("Variavel:");
lcd.setCursor(0,1);
lcd.print(variavel, DEC); // mostra o valor de "variavel"
break;
default: ;
}
}
// Função que mostra o nome "Féo" passando na tela.
// Apenas uma assinatura.
//======================================================= Display Feo
void Feo() {
const byte a[2][15][8] = {
{{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00001,0b00001,0b00001,0b00011,0b00011},
{0b00000,0b11111,0b11111,0b11111,0b10000,0b10000,0b10000,0b11111},
{0b00000,0b11111,0b11110,0b11100,0b00000,0b00000,0b00000,0b11000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00001,0b00011,0b00110},
{0b00000,0b00110,0b01100,0b11000,0b00000,0b11100,0b00110,0b00010},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00001,0b00011,0b00110},
{0b00000,0b00000,0b00000,0b00000,0b11000,0b11100,0b00110,0b00011},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
141
if (aMenu) return bMenu0; else return bMenu;
} else
if (aChange!=digitalRead(bChange)) {
aChange=!aChange;
if (aChange) return bChange0; else return bChange;
} else
if (aUp!=digitalRead(bUp)) {
aUp=!aUp;
if (aUp) return bUp0; else return bUp;
} else
if (aDown!=digitalRead(bDown)) {
aDown=!aDown;
if (aDown) return bDown0; else return bDown;
} else
return 0;
}
142
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000}},
{{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00111,0b00111,0b01110,0b01110,0b01100,0b11100,0b11100,0b11000},
{0b11111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b10000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b01100,0b11111,0b11000,0b11000,0b01100,0b01100,0b00111,0b00001},
{0b00011,0b11100,0b00000,0b00000,0b00010,0b00110,0b11100,0b10000},
{0b01100,0b11000,0b11000,0b11000,0b01100,0b01100,0b00111,0b00011},
{0b00001,0b00001,0b00001,0b00011,0b00110,0b01100,0b11000,0b10000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000},
{0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000}}
};
byte b[2][15][8];
int k,i,j;
while (!digitalRead(bChange)) {
lcd.setCursor(12,0);
lcd.write(1);
lcd.write(2);
lcd.write(3);
lcd.write(4);
lcd.setCursor(12,1);
lcd.write(5);
lcd.write(6);
lcd.write(7);
lcd.write(8);
for (k=0; k<2; k++)
for (i=0; i<15; i++)
for (j=0; j<8; j++)
b[k][i][j]=a[k][i][j];
for (j=0; j<55; j++) {
lcd.createChar(1, b[0][0]);
lcd.createChar(2, b[0][1]);
lcd.createChar(3, b[0][2]);
lcd.createChar(4, b[0][3]);
lcd.createChar(5, b[1][0]);
lcd.createChar(6, b[1][1]);
lcd.createChar(7, b[1][2]);
lcd.createChar(8, b[1][3]);
for (i=0; i<15; i++) {
for (k=0; k<8; k++) {
b[0][i][k]=(b[0][i][k]<<1) + ((b[0][i+1][k]>>4)&(1));
}
}
for (i=0; i<15; i++) {
for (k=0; k<8; k++) {
b[1][i][k]=(b[1][i][k]<<1) + ((b[1][i+1][k]>>4)&(1));
}
}
delay(15);
}
}
lcd.clear();
}
como desenvolver o projeto arduino com display LDC, que mede a temperatura através de um
sensor LM35 e mede a luminosidade através de um sensor LDR (do inglêsLight Dependent
Resistor). Além disso você poderá controlar o brilho e contraste do display LDC através de dois
potenciômetros. Este projeto arduino vai te mostrar como trabalhar com displays LDC do tipo
JHD 162A, de 16 colunas e 2 linhas, que é um tipo comum e fácil de encontrar e com um preço
acessível, e te mostrará também como realizar a leitura dos sensores de temperatura e
luminosidade.
Lista de Componentes utilizados:
•
•
•
•
•
•
•
1 Protoboard
um display LDC do tipo JHD 162A de 16 colunas por duas linhas;
um sensor LDR (do inglês Light Dependent Resistor);
um sensor de temperatura LM35;
dois potenciômetros de 10K omhs;
um resistor de 10k ohms;
fios jumper.
Vamos começar conectando os componentes na protoboard, o display ldc, os potenciômetros,
os sensores de luz e temperatura, resistor e fios jumper. O esquema do projeto, logo abaixo, e
que servirá de base durante todo o desenvolvimento do mesmo, te mostra com detalhes todos
os componentes e as conexões entre eles, que serão tratadas com detalhes mais adiante.
143
34 TEMPERATURA E LUMINOSIDADE
LUMINOSIDADE COM DISPLAY LCD
Além do esquema precisamos saber de mais alguns detalhes técnicos sobre essas ligações.
Vamos começar pelo datasheet do display LCD JHD 162A, que mostra a finalidade de cada um
dos pinos do display lcd. Caso o seu display não seja um JHD 162A você poderá procurar na
internet pelo datasheet do mesmo e assim adaptar para esse projeto.
144
Esquemático de Ligações - Fritzzing
•
•
•
•
•
•
•
•
•
•
•
•
pino 1 do LCD ligado ao GND do arduino;
pino 2 do LCD ligado ao 5V do arduino;
pino 3 do LCD ligado ao pino central do primeiro potênciômetro (controle de
contraste);
pino 4 do LCD ligado ao pino digital 9 do arduino;
pino 5 do LCD ligado ao GND do arduino;
pino 6 do LCD ligado ao pino digital 8 do arduino;
pino 11 do LCD ligado ao pino digital 5 do arduino;
pino 12 do LCD ligado ao pino digital 4 do arduino;
pino 13 do LCD ligado ao pino digital 3 do arduino;
pino 14 do LCD ligado ao pino digital 2 do arduino;
pino 15 do LCD ligado ao pino central do segundo potênciômetro (controle do brilho);
pino 16 do LCD ligado ao GND do arduino.
A imagem abaixo mostra um pouco mais das ligações entre o display e os potenciômetro.
145
Segue abaixo a descrição de como deverão ser feitas as ligações entre o display LDC, o arduino,
e os potenciômetros que controlam o brilho e o contrate do LCD.
A conexão será feita da seguinte forma.
•
•
•
pino 5V do LM35 no 5V do arduino;
pino central do LM35 no pino analógico A1 do arduino;
pino GND do LM35 no GND do arduino.
O sensor de luz será ligado da seguinte forma.
•
•
uma perna do sensor de luz LDR no 5V do arduino;
a outra perna do sensor de luz LDR no pino analógico A0 e também no GND do
arduino, a ligação no GND será feita através do resistor. Para detalhes veja o esquema
do projeto.
Após feitas todas as conexões entre arduino, protoboard e componentes, chegou a hora de
programar o seu arduino para que ele assuma as funções propostas neste projeto. Então
146
Agora trataremos do sensor de temperatura LM35. Segue abaixo uma imagem que detalha a
função de cada pino do sensor.
Código Fonte do Projeto
/*
Projeto Arduino com LCD, sensor de luz e de temperatura.
Por Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
#include "LiquidCrystal.h"
#include "Limits.h"
const int sensorLuz = 0; //Pino analógico que o sensor de luz está
conectado.
const int sensorTemp = 1; //Pino analógico que o sensor de
temperatura está conectado.
//Variáveis
int valorSensorLuz = 0; //usada para ler o valor do sensor de
luz.
int valorSensorTemp = 0; //usada para ler o valor do sensor de
temperatura.
int menorValorTemp = INT_MAX; //usada para armazenar o menor valor
da temperatura.
//Criando um objeto da classe LiquidCrystal e
//inicializando com os pinos da interface.
LiquidCrystal lcd(9, 8, 5, 4, 3, 2);
void setup() {
//Inicializando o LCD e informando o tamanho de 16 colunas e 2
linhas
//que é o tamanho do LCD JHD 162A usado neste projeto.
lcd.begin(16, 2);
}
void loop() {
//Lendo o valor do sensor de luz
valorSensorLuz = analogRead(sensorLuz);
//Para evitar as grandes variações de leitura do componente
//LM35 são feitas 8 leitura é o menor valor lido prevalece.
menorValorTemp = INT_MAX; //Inicializando com o maior valor int
possível
for (int i = 1; i <= 8; i++) {
//Lendo o valor do sensor de temperatura.
valorSensorTemp = analogRead(sensorTemp);
//Transformando valor lido no sensor de temperatura em graus
celsius aproximados.
valorSensorTemp *= 0.54 ;
//Mantendo sempre a menor temperatura lida
if (valorSensorTemp < menorValorTemp) {
menorValorTemp = valorSensorTemp;
}
delay(150);
147
conecte o seu arduino ao computador através do cabo USB, execute a IDE de programação do
arduino e introduza o código fonte abaixo.
//Exibindo valor da leitura do sensor de temperatura no display
LCD.
lcd.clear(); //limpa o display do LCD.
lcd.print("Temp: "); //imprime a string no display do LCD.
lcd.print(menorValorTemp);
lcd.write(B11011111); //Simbolo de graus celsius
lcd.print("C");
//Exibindo valor da leitura do sensor de luz no display LCD.
lcd.setCursor(0,1); //posiciona o cursor na coluna 0 linha 1 do
LCD.
lcd.print("Luz: "); //imprime a string no display do LCD.
lcd.print(valorSensorLuz);
delay(2000); //aguarda 2 segundos
148
}
Lista de Componentes utilizados:
•
•
•
•
•
•
•
•
•
um Arduino uno ou qualquer outra versão;
uma protoboard;
fios jumper;
um motor cc de 6V;
quatro pilhas pequenas do tipo AA;
suporte para quatro pilhas;
um potenciômetro giratório de 10K;
um diodo 1N4001;
um transistor TIP120;
Esquemático de Ligações - Fritzzing
O primeiro passo é conectar os componentes na protoboard. Neste caso o diodo, o TIP120 e o
potenciômetro. Quero dar uma atenção especial para o diodo, que neste projeto tem a função
de proteger nosso arduino contra a corrente e tensão inversa gerada pelo motor cc. Esteja
149
35 CONTROLANDO A VELOCIDADE
VELOCIDADE DE UM MOTOR CC NO ARDUINO
COM POTENCIÔMETRO.
Posteriormente conete os fios jumper na protoboard.
Conecte os fios jumper no arduino obedecendo o esquema do projeto.
150
também atento a posição do diodo observando a barrinha branca em um dos seus polos e seu
posicionamento no projeto, conforme nostrado na imagem do esquema do projeto. Isso
evitará danos ao arduino.
151
Conecte o motor e as pilhas na protoboard. Apesar de o arduino possuir uma saida de 5V o
motor não será ligado diretamente nele pelo fato de o arduino não ter capacidade de fornecer
corrente suficiente para o funcionamento do motor. Por isso vamos usar pilhas comuns do tipo
AA para alimentar o nosso motor cc. Usei um palito de picolé no motor cc para facilitar a
visualização da rotação do motor. Se você quiser também poderá usar.
Agora chegou a hora de programar o seu arduino. Conecte-o no seu computador através do
cabo USB e abra a IDE do arduino. O código fonte comentado deste projeto segue abaixo.
Depois de inserir o código fonte na IDE, agora é só compilar e fazer o upload do mesmo para o
arduino. Aguarde alguns instantes para a conclusão do upload e logo você poderá girar o
potenciômetro para ambos os lados e ver o seus motor cc aumentar e diminuir a velocidade de
rotação.
/*
Projeto Arduino controlando um motor cc.
Por Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
//pino analógico onde o potenciômetro está conectado.
int const potenciometro = 0;
//pino digital onde o TIP120 está conectado.
int const transistor = 9;
//armazenará o valor lido no potenciômetro.
int valPotenciometro = 0;
//função setup é executada uma vez quando o arduino é ligado.
void setup() {
//definindo o pino digital 9 como de saída.
pinMode(transistor, OUTPUT);
}
//Função loop é executada repetidamente enquanto
//o arduino estiver ligado.
void loop() {
//lendo o valor do potenciômetro (0 até 1023) e
//dividindo por 4 para obter um valor entre 0 e 255
//que são valores adequados para a base do TIP120.
valPotenciometro = analogRead(potenciometro) / 4;
//atribuindo o valor lido no potenciômetro
//a base do TIP120.
analogWrite(transistor, valPotenciometro);
}
152
Código Fonte do Projeto
VELOCIDADE E SENTIDO DA ROTAÇÃO
Controle de um motor de corrente contínua CC/DC, que permite que você controle a
velocidade de rotação e também o sentido da rotação, horário ou anti-horário. Esse tipo de
mecanismo é a base para a construção de braços robóticos, mini guinchos, mini elevadores e
mais um monte de coisas. Neste projeto arduino iremos usar um componente importante, o
L293D, que é um circuito integrado de ponte H dupla, que vai permitir que tenhamos total
controle de um motor cc/dc e além disso o L293D permite que você controle até dois motores
cc/dc de forma independente. Então vamos iniciar o nosso projeto arduino com ponte H dupla
para controle de velocidade e sentido da rotação de um motor cc/dc.
Para uma visão geral deste projeto arduino, assista o vídeo abaixo que mostra o projeto pronto
em pleno funcionamento.
Para começar é ideal que se conheça o circuito integrado de ponte H dupla L293D. Na imagem
abaixo segue a descrição dos pinos que fazem parte deste componente. Um ponto importante
sobre este componente eletrônico é que ele já possui diodos internamente, por isso o "D" no
final de seu nome, por isso não usaremos diodos externos na protoboard. E observe o chanfro
no topo do componente L293D, parecido com um meio círculo, pois é a partir dele que deverá
ser iniciada a contagem dos pinos. O pino 1 será o primeiro pino no sentido anti-horário
partindo do chanfro.
153
36 MOTOR CC/DC NO ARDUINO E PONTE H DUPLA. CONTROLE DE
•
•
•
•
•
•
•
•
•
•
•
pino 1 - enable 1, 2 - ligado ao pino digital 9 (PWM) do arduino;
pino 2 - input 1 - ligado ao pino digital 3 do arduino;
pino 3 - output 1 - ligado ao motor cc/dc;
pino 4 - GND - ligado ao terra (ground) do arduino;
pino 5 - GND - ligado ao terra (ground) do arduino;
pino 6 - output 2 - ligado ao motor cc/dc;
pino 7 - input 2 - ligado ao pino digital 4 do arduino;
pino 8 - Vcc 2 - ligado ao positivo vindo das pilhas;
pino 12 - GND - ligado ao terra (ground) do arduino;
pino 13 - GND - ligado ao terra (ground) do arduino;
pino 16 - Vcc 1 - ligado ao pino 5V (volts) do arduino;
Lista de Componentes utilizados:
•
•
•
•
•
•
•
•
uma protoboard;
um circuito integrado L293D;
fios jumper;
quatro pilhas pequenas;
um motor CC de 6 volts;
um potenciômetro de 10 K ohms;
uma chave liga/desliga;
um resistor de 10 K ohms.
Segue abaixo o esquema do nosso projeto, que servirá de base para o desenvolvimento do
mesmo, e que mostra detalhadamente todas as ligações entre os componentes eletrônicos
que fazem parte deste projeto. O potenciômetro vai controlar a velocidade de rotação do
motor, aumentando ou diminuindo. A chave liga/desliga irá controlar o sentido da rotação do
motor, horário ou anti-horário.
154
No nosso projeto usaremos os seguintes pinos do CI (circuito integrado) L293D:
Vamos começar colocando na protoboard os componentes L293D e o potenciômetro, que
controlará a velocidade de rotação do motor cc/dc.
155
Esquemático de Ligações - Fritzzing
156
Agora faça a ligação da chave liga/desliga, juntamente com o resistor e os fios jumper.
Faça as ligações do potenciômetro, do L293D, das pilhas e do motor cc/dc. Para realizar estas
ligações o melhor é seguir o esquema do início deste post que possui uma forma de
visualização mais detalhada do projeto.
Outro ângulo das ligações entre o arduino e os componentes.
157
Ao finalizar a montagem dos componentes eletrônicos do seu projeto você terá algo parecido
com o projeto da imagem abaixo. Usei uma bateria de 9V para alimentar o arduino, mas
também poderia conectá-lo ao computador através do cabo USB para alimentá-lo.
Agora chegou a grande hora, a hora de programar o seu arduino. Conecte o arduino ao seu
computador com o cabo USB, execute a IDE do arduino, e copie e cole o programa abaixo na
IDE, depois compile o programa e faça o upload para o arduino.
Segue abaixo o código fonte comentado do programa de controle do motor cc/dc com ponte H
dupla para o arduino. Apesar de todos os recursos deste projeto o programa é pequeno e
simples.
/*
Projeto Arduino motor cc com ponte H dupla. Gira
nos dois sentidos e possui controle de potência.
Por Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
//Chave que muda o sentido da rotação do motor.
#define chaveMudaSentRot 2
//INPUT 1 do L293D.
#define motorCCEnt1 3
//INPUT 2 do L293D.
#define motorCCEnt2 4
//Pino de ativação e controle do L293D.
#define controleL293D 9
//Pino analógico para controle de
//potência/velocidade do motor.
#define controleVelocPot 0
//Variável para armazenar o valor
//lido no potenciômetro.
int potVelPotencia = 0;
void setup() {
//O pino da chave seletora de rotação
//definido como de entrada.
pinMode(chaveMudaSentRot,INPUT);
//Pinos do motor e de ativação do
//L293D definidos como de saída.
pinMode(motorCCEnt1,OUTPUT);
pinMode(motorCCEnt2,OUTPUT);
pinMode(controleL293D,OUTPUT);
}
void loop() {
//Lendo valor do potenciometro para aplicar a
//potência/velocidade ao motor. O valor lido é
//dividido por 4 para se obter valores entre 0 e 255;
potVelPotencia = analogRead(controleVelocPot) / 4;
//Transfere o valor lido de velocidade/potência
//no potenciômetro para o L293D.
analogWrite(controleL293D,potVelPotencia);
//Controlando o sentido de rotação do motor
//pela chave liga/desliga e pelos INPUTs do L293d.
158
Código Fonte do Projeto
}
Após o upload do programa para o arduino seu projeto estará completamente pronto, se você
chegou até aqui meus parabéns! Use o potenciômetro para controlar a velocidade de rotação
do motor e use a chave liga/desliga para mudar o sentido de rotação do motor. Esteja também
sempre atento a temperatura do L293D ele costuma esquentar bastante, se você for deixar
seu projeto ligado por muito tempo use um dissipador de calor no L293D. E abaixo segue o
vídeo do mini guincho feito de palitos de picolé que demonstra uma das milhares de
aplicações de uma ponte H.
159
if (digitalRead(chaveMudaSentRot) == HIGH) {
digitalWrite(motorCCEnt1,LOW);
digitalWrite(motorCCEnt2,HIGH);
} else {
digitalWrite(motorCCEnt1,HIGH);
digitalWrite(motorCCEnt2,LOW);
}
vamos desenvolver um controle de velocidade de rotação para um motor de corrente contínua
e além disso vamos introduzir um medidor da potência aplicada usando leds. Este projeto
arduino funciona assim, a medida que o potenciômetro é girado para um lado a velocidade de
rotação do motor cc aumenta e os leds vão acendendo de acordo com a potência aplicada, se
o motor estiver girando no máximo todos os leds ficarão acesos. Se você girar o potenciômetro
para o outro lado a velocidade de rotação do motor cc vai diminuindo e os leds vão apagando.
O vídeo abaixo mostra este projeto em funcionamento, veja.
Esquemático de Ligações - Fritzzing
160
37 MOTOR CC NO ARDUINO COM CONTROLE DE VELOCIDADE E LEDS
MEDIDORES DE POTÊNCIA
POTÊNCIA.
•
•
•
•
•
•
•
•
•
uma protoboard;
fios jumper;
quatro pilhas pequenas e o suporte para as pilhas;
um motor cc de 6 volts;
três leds, um vermelho, um amarelo e um verde;
três resistores de 100 ohms;
um potenciômetro de 10K ohms;
um TIP120;
um diodo 1N4007.
O primeiro passo é conectar os componentes (potenciômetro, TIP120, diodo, leds e resistores)
na protoboard como na imagem abaixo.
Conecte os fios jumper entre os componentes da protoboard. Veja o esquema do projeto
acima para visualizar os detalhes de cada conexão entre os componentes.
Faça agora as conexões usando os fios jumper entre o arduino e a protoboard. Os pinos
utilizado no arduino foram:
•
•
•
pino analógico A0, foi conectado ao perna central do potenciômetro;
a pernas positivas dos leds foram conectadas aos pinos digitais 2, 3, e 4;
a primeira perna do transistor TIP120, a base, foi conectada ao pino digital 9.
161
Lista de Componentes utilizados:
162
E finalmente conecte o suporte das pilhas e o motor cc na protoboard, conforme o esquema
do projeto no início deste post. O arduino pode ser alimentado por uma bateria de 9 volts ou
pelo cabo USB conectado ao computador.
Agora vamos a melhor parte, que é programar o arduino. Usando o cabo USB conecte o
arduino ao seu computador execute a IDE do arduino, copie e cole o código fonte abaixo na
IDE, compile e faça o upload.
/*
Projeto Arduino controlando a velocidade de um motor cc
com mostrador de leds.
Por Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
//pino analógico onde o potenciômetro está conectado.
int const potenciometro = 0;
//pino digital onde o TIP120 está conectado.
int const transistor = 9;
//pinos digitais
int const ledVerde = 2;
//led verde está conectado.
int const ledAmarelo = 3; //led amarelo está conectado.
int const ledVermelho = 4; //led vermelho está conectado.
//armazenará o valor lido no potenciômetro.
int valPotenciometro = 0;
//void setup é executada uma vez quando o arduino é ligado.
void setup() {
//definindo o pino digital 9 como de saída.
pinMode(transistor, OUTPUT);
//definindo pinos dos leds como de saída
pinMode(ledVerde, OUTPUT);
pinMode(ledAmarelo, OUTPUT);
pinMode(ledVermelho, OUTPUT);
}
//Função loop é executada repetidamente enquanto
//o arduino estiver ligado.
void loop() {
//lendo o valor do potenciômetro (0 até 1023) e
//dividindo por 4 para obter um valor entre 0 e 255
//que são valores adequados para a base do TIP120.
valPotenciometro = analogRead(potenciometro) / 4;
//atribuindo o valor lido no potenciômetro a
//base do TIP120.
analogWrite(transistor, valPotenciometro);
//acendendo e pagando leds conforme posição do
//potenciômetro
controlarLeds();
}
void controlarLeds() {
//Led verde - acendendo ou apagando conforme
//posição do potenciômetro.
if (valPotenciometro >= 40) {
digitalWrite(ledVerde,HIGH);
} else {
163
Código Fonte do Projeto
//Led amarelo - acendendo ou apagando conforme
//posição do potenciômetro.
if (valPotenciometro >= 125) {
digitalWrite(ledAmarelo,HIGH);
} else {
digitalWrite(ledAmarelo,LOW);
}
//Led vermelho - acendendo ou apagando conforme
//posição do potenciômetro.
if (valPotenciometro >= 210) {
digitalWrite(ledVermelho,HIGH);
} else {
digitalWrite(ledVermelho,LOW);
}
}
164
digitalWrite(ledVerde,LOW);
}
ARDUINO
Controlar um servomotor com um potenciômetro giratório através do arduino. Ao girar o
potenciômetro o braço do servomotor responderá fazendo um movimento proporcional a
velocidade e ao sentido do giro do potenciômetro. O arduino usado neste projeto foi um
arduino uno r3, mas qualquer outra versão poderia ser utilizada. O servomotores são
componentes muito importantes no mundo da robótica, da mecatrônica, e muito usado
também no mundo dos hobbys. Na robótica os servomotores são responsáveis por
movimentar braços, pernas e mãos de robôs. No automodelismo os servomotores são usado
para virar as rodinhas dianteiras dos carrinhos, para esquerda e direita. No aeromodelismo são
usados para controlar os flaps das asas dos aviões. Os servomotores são componentes chave
em muitos projetos, por isso neste post vamos ensinar o conceito básico de controle de um
servomotor, usando um arduino. E ao final deste post veja o vídeo deste projeto em
funcionamento.
Segue abaixo o esquema do projeto, que detalha todas as ligações entre os componentes, a
protoboard e o arduino.
Lista de Componentes utilizados:
•
•
•
•
•
um Arduino;
uma protoboard;
fios jumper;
um potenciômetro de 10K ohms;
um servomotor.
165
38 CONTROLANDO UM SERVOMOTOR
SERVOMOTOR COM POTENCIÔMETRO
POTENCIÔMETRO NO
Começe conectando o potenciômetro na protoboard e depois conecte os fios jumper entre os
componentes da protoboard, o servomotor e o arduino. Para fazer estas conexões
corretamente veja o esquema do projeto, feito em Fritzing, no inicio deste post.
Esquemático de Ligações
Agora vamos programar o arduino para que ele se comporte como desejamos. Então conecte
o arduino ao seu computador com o cabo USB, abra a IDE do arduino e programe o arduino.
Código Fonte do Projeto
/*
Projeto Arduino controlando um servomotor com potenciômetro
Por Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
//incluindo biblioteca para controle do servomotor
#include "Servo.h"
//Criando um objeto da classe Servo
Servo servoMotorObj;
//pino analógico onde o potenciômetro está conectado
int const potenciometroPin = 0;
//pino digital associado ao controle do servomotor
int const servoMotorPin
= 3;
166
O servomotor usado neste projeto foi um TG9e da Turnigy, um micro servo que possui um
ótimo custo benefício.
void setup() {
//associando o pino digital ao objeto da classe Servo
servoMotorObj.attach(servoMotorPin);
}
void loop()
{
//lendo o valor do potenciômetro (intervalo entre 0 e 1023)
valPotenciometro = analogRead(potenciometroPin);
//mapeando o valor para a escala do servo (entre 0 e 180)
valPotenciometro = map(valPotenciometro, 0, 1023, 0, 180);
//definindo o valor/posição do servomotor
servoMotorObj.write(valPotenciometro);
delay(15);
}
Após introduzir o código fonte na IDE do arduino, compile-o e depois faça o upload, aguarde
alguns instantes para que a transferência do programa seja realizada, e pronto, você já pode
controlar servomotor através do potenciômetro. Vire o potenciômetro para um lado e veja
que o braço do servomotor vai se mover.
Então é isso pessoal, este projeto trata do princípio básico para o uso de servomotores, que
você poderá aplicar em diversos outros projeto que se movimentam. E logo mais estará
disponível aqui no site ComoFazerAsCoisas.com.br um guincho robótico que usa 3
servomotores e que aplica este princípio.
167
//variável usada para armazenar o valor lido no potenciômetro
int valPotenciometro;
Uma das diferenças de um robô para um aparelho eletrônico comum é que o robô se
movimenta para realizar tarefas. Para se movimentar um robô usa motores de diversos tipos,
como motores de passo, motores de corrente contínua e servomotores. E no projeto arduino
com servomotor robótico e display lcd faremos um servomotor se movimentar e também
trataremos este movimentos exibindo as direções do braço do servomotor no display lcd.
Como um dos nossos objetivo com os projetos em arduino, aqui do site ComoFazerAsCoisas, é
chegar a construção de robôs de diversos tipos, estamos apresentando os princípios básicos,
que quando unidos permitirão a construção de um robô completo.
O projeto arduino com servomotor e display lcd, permite que você controle os movimentos de
um servomotor através de um potenciômetro giratório. Quando você gira o potenciômetro
para um lado ou para o outro o braço do servomotor acompanha estes movimentos e ainda é
mostrado no display lcd em tempo real em que direção o braço do servomotor está, no final
deste post tem o vídeo que mostra este projeto em funcionamento.
Aplicando o princípio deste projeto você poderia por exemplo construir, por exemplo, um
guincho robótico, ou um braço robótico.
Lista de Componentes utilizados:
•
•
•
•
•
uma protoboard;
um servomotor;
um display lcd do tipo JHD162A, de 16 colunas por 2 linhas;
3 potenciômetros de 10 K ohms;
fios jumper.
O servomotor que usamos neste projeto é um microservo TG9E da Turnigy, que é um dos
melhores custo/benefício do mercado. Ele é um servo bem pequeno e leve, tem um preço
camarada, quando comparado a outros servos, e pode ser usado em muitos projetos de
robótica. Este microservo também é muito usado em aeromodelos e carrinhos controle
remoto. Nos potenciômetros desse projeto usei knobs para facilitar na hora de girá-los.
168
39 SERVOMOTOR ROBÓTICO E DISPLAY LC
169
Então vamos começar! Segue abaixo o esquema do projeto, que servirá de base para a ligação
entre todos os componentes e o arduino, e será nossa referência durante o desenvolvimento
do projeto físico.
Esquemático de Ligações - Fritzzing
Segue abaixo o datasheet, detalhando a funcionalidade de cada pino, do display LCD JHD 162A
que foi usado neste projeto.
170
Segue abaixo o detalhamento de como ligar o display LCD ao arduino.
•
•
•
•
•
•
•
•
•
•
•
•
pino 1 do LCD ligado ao GND do arduino;
pino 2 do LCD ligado ao 5V do arduino;
pino 3 do LCD ligado ao pino central do primeiro potênciômetro (controle de
contraste);
pino 4 do LCD ligado ao pino digital 9 do arduino;
pino 5 do LCD ligado ao GND do arduino;
pino 6 do LCD ligado ao pino digital 8 do arduino;
pino 11 do LCD ligado ao pino digital 5 do arduino;
pino 12 do LCD ligado ao pino digital 4 do arduino;
pino 13 do LCD ligado ao pino digital 3 do arduino;
pino 14 do LCD ligado ao pino digital 2 do arduino;
pino 15 do LCD ligado ao pino central do segundo potênciômetro (controle do brilho);
pino 16 do LCD ligado ao GND do arduino.
•
•
•
•
pino central do potenciômetro de controle do servomotor no pino analógico A0 do
arduino;
fio positivo do servomotor no 5V do arduino;
fio negativo do servomotor no GND do arduino;
fio de controle do servomotor no pino digital 12 do arduino.
Lembrando que você poderá verificar o esquema de montagem do projeto no início deste
post, que mostra com detalhes como foram feitas as ligações entre os componentes.
Bem, então depois de fazer todas as ligações entre os componentes, concluindo o projeto
físico, chegou a hora de programar o arduino para que ele faça o controle do servomotor e
também informe a posição do mesmo no display ldc. Então conecte o seu arduino ao
computador, usando o cabo usb, e execute a IDE do arduino. Segue abaixo o código fonte
completo e comentado deste projeto.
171
Segue abaixo o detalhamento da ligação do servomotor e do potenciômetro que irá controlar
o servomotor.
172
Código Fonte do Projeto
/*
Projeto Arduino - servomotor com display lcd.
Por Jota
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
#include "LiquidCrystal.h" //biblioteca para controle de telas LDCs
#include "Servo.h"
//biblioteca para controle de
servomotores
//Criando um objeto da classe LiquidCrystal e
//inicializando com os pinos da interface.
LiquidCrystal lcd(9, 8, 5, 4, 3, 2);
Servo servoMotorObj; //Criando um objeto da classe Servo
//pino analógico onde o potenciômetro está conectado
int const potenciometroPin = 0;
//pino digital associado ao controle do servomotor
int const servoMotorPin = 12;
//usada para armazenar o valor lido no potenciômetro
int valPotenciometro;
void setup() {
//Inicializando o LCD e informando o tamanho de 16 colunas e 2
linhas
//que é o tamanho do LCD JHD 162A usado neste projeto.
lcd.begin(16, 2);
//associando o pino digital ao objeto da classe Servo
servoMotorObj.attach(servoMotorPin);
}
void loop() {
//lendo o valor do
valPotenciometro =
//mapeando o valor
180)
valPotenciometro =
potenciômetro (intervalo entre 0 e 1023)
analogRead(potenciometroPin);
do potenciômetro para a escala do servo (0 e
map(valPotenciometro, 0, 1023, 0, 180);
//definindo o valor/posição do servomotor
servoMotorObj.write(valPotenciometro);
lcd.clear(); //limpa o display do LCD.
lcd.print("Servomotor"); //imprime a string no display do LCD.
lcd.setCursor(0,1); //posiciona o cursor na coluna 0 linha 1 do
LCD.
//Mostrando no lcd a posição do braço do servomotor
if (valPotenciometro < 90) {
lcd.print("Lado direito");
}
if (valPotenciometro == 90) {
lcd.print("Centro");
}
delay(30);
}
173
if (valPotenciometro > 90) {
lcd.print("Lado esquerdo");
}
Se você já pensou em construir um robô, um game, ou um braço robótico usando o arduino
sabemos que um joystick é um componente fundamental, então nesse post vou mostrar como
ligar um joystick em um arduino e ler as posições X, Y e Z do joystick. Tendo o controle sobre as
posições X, Y e Z de um joystick você estará habilitado a controlar diversos outros dispositivos
também ligados ao Arduino, como por exemplo servomotores que controlam e movimentam
um braço robótico. Então vamos lá!
Lista de Componentes utilizados:
•
•
•
uma protoboard;
o joystick;
e fios.
Esse tipo de joystick você encontra fácil em lojas de eletrônica e robótica na internet, inclusive
você pode comprar mais barato direto da china. Nesse projeto eu usei o da direita na imagem
abaixo, mas também poderia usar o da esquerda, a ligação seria a mesma, a diferença entre os
dois é o tamanho e que o joystick da esquerda tem os terminais dentro de um invólucro
plástico.
174
40 JOYSTICK NO ARDUINO E LER AS POSIÇÕES
POSIÇÕES X, Y E Z
175
O esquema de ligação do joystick no Arduino segue abaixo, mas vou transcrevê-lo para facilitar
o entendimento. Nosso joystick tem 9 pinos, da esquerda para a direita temos:
•
•
•
•
•
•
•
•
•
S-Y: pino do eixo Y, ligado ao pino analógico A1 do Arduino através do fio amarelo.
VCC: ligado ao 5v do Arduino através do fio vermelho.
GND: ligado ao GND do Arduino através do fio preto.
S-X: pino do eixo X, ligado ao pino analógico A0 do arduino através do fio azul.
VCC: ligado ao 5v do Arduino através do fio vermelho.
GND: ligado ao GND do Arduino através do fio preto.
S-K: pino do eixo Z, ligado ao pino digital 2 do Arduino através do fio verde.
VCC: ligado ao 5v do Arduino através do fio vermelho.
GND: ligado ao GND do Arduino através do fio preto.
176
Esquemático de Ligações - Fritzzing
/*
Projeto Arduino - Como ligar um joystick no Arduino
-----------------------------------------=<| www.ComoFazerAsCoisas.com.br |>=----------------------------------------*/
//Variável que armazena a posição lida
//nos eixos do joystick
int joystick = 0;
//Atribuindo o pino analógico A0 a variável eixoX
int eixoX = A0;
//Atribuindo o pino analógico A1 a variável eixoY
int eixoY = A1;
//Atribuindo o pino digital 2 a variável eixoZ
int eixoZ = 2;
void setup() {
//Definindo eixoZ como um pino de entrada
pinMode(eixoZ, INPUT);
//Ativando o Serial Monitor que exibirá os
//valores lidos no Joystick
Serial.begin(9600);
}
void loop() {
//Lê o valor do eixoX
joystick = analogRead(eixoX);
//imprime o valor do eixoX
Serial.print(" X=");
Serial.print(joystick);
//Lê o valor do eixoY
joystick = analogRead(eixoY);
//imprime o valor do eixoY
Serial.print("
Y=");
Serial.print(joystick);
//Lê o valor do eixoZ
joystick = digitalRead(eixoZ);
//imprime o valor do eixoZ
Serial.print("
Z=");
Serial.println(joystick);
//espera 200 milisegundos.
//Se vc quiser aumentar a velocidade
//de leitura dos valores do joystick
//diminua o tempo de espera. Ex: delay(100);
delay(200);
}
177
Código Fonte do Projeto
Vamos aprender a montar uma placa controladora para ser usada em conjunto com o Arduino,
com a placa será possivel ativar o relé através de um comando realizado via programação,
podendo realizar a automação a distância de um equipamento, luz, etc.
A placa de relé pode ser comprada pronta, mas com um custo muito baixo será possível
montarmos nossa própria placa.
Lista de Componentes utilizados:
•
•
•
•
•
•
•
•
•
•
1 - Transistor BC548
2 - Resistores 1K 1/8W (marrom-preto-vermelho)
1 - Diodo 1N4004
1 - LED comum (Pode ser usado 3mm ou 5mm) de qualquer cor
2 - Conectores 2 entradas
1 - Conectores 3 entradas
1 - Relé 12V 15A 1 polo 2 posições
1 - Porta fusivel para placa
1 - Fusível.
1 - Placa de circuito impresso 5cm x 10cm
178
41 CONSTRUINDO UM RELÉ SHIELD
O circuito é muito simples, será usado um transistor NPN BC548 polarizado como chave, de
forma a conduzir a corrente entre o emissor e o coletor quando receber o sinal digital do
Arduino. Quando o sinal é recebido, o transistor é saturado, fechando um circuito e acionando
o relé e ligando o led. Para proteção do circuito será usado um fusível no terminal comum do
relé.
179
Entendendo o diagrama:
Placa de circuito impresso com identificação dos componentes:
Placa de circuito impresso face cobreada:
Circuito impresso em uma folha de sulfite:
180
Vamos a construção:
E pronto, nosso primeiro shield já pode ser utilizado:
Conectar a placa Rele SHield e codificar um programa que detecte a luz do ambiente para
acender ou apagar uma luz
Lista de Componentes:
•
•
•
•
•
.
Cabo USB de Programação
ReleShield
LDR
1 Resitor de 10K 1/8W (marrom-preto-laranja)
Fonte 12V
181
Pinagem do transistor BC548:
Entendendo o circuito:
O LDR é um tipo de resistor cuja resistência varia de acordo com a intensidade de
luminosidade, no circuito acima, ele é ligado de forma que a variação da resistência altere a
tensão na entrada A0.
O conversor (A/D) do Arduino tem entrada máxima de 5V. com uma resolução de 10 bits em
valores digitais de 0 a 1023, ele diferencia valores entre 0V e 5V. quando o sinal da entrada
estiver em 5V ele converte para 1023.
Codificando o programa:
A estrutura de um programa do Arduino, também conhecido como Sketch é divido em duas
funções básicas: void setup() e void loop().
A função void setup() é executada quando o Arduino é inicializado, ela deve ser usada para
inicialização de variáveis e configurações que devem ser realizadas no início da execução.
A função void loop() é executada continuamente após a execução da função setup(), e nela
que escrevemos o código do programa.
182
Conectando o ReleShield ao Arduino:
183
184
No começo do programa declaramos três constantes de definição do nosso programa
O método loop é executando continuamente, efetuando a leitura do sinal analógico,
comparando com a constante para acionar ou desligar o ReleShield.
ATENÇÃO – A ilustração abaixo é só para estudo.
A primeira constante define qual pino digital será usado para acionarmos o
ReleShield, se quiser usar outro pino, atribua a constante o valor do pino
desejado
const int shieldRelePin = 13;
A segunda constante define qual pino analógico será usado para leitura do
sinal análogico produzido pelo circuito do LDR
const int sensorLDRPin = A0;
A terceira constante define qual será o valor para disparo do circuito, se
o valor lido for menor que a constante, o ReleShield será acionado.
const int constanteAjuste = 400;
Método de inicialização do Arduino
void setup() {
Método que define que o estado inicial do pino de saida é baixo, para
não acionar o ReleShield
pinMode(shieldRelePin, LOW);
Configuração da comunicação serial do Arduino, ela será usada para envio
do sinal lido para ajuste do programa.
Serial.begin(9600);
}
Método que executa continuamente após execução do método void setup()
void loop() {
variável para armazenar o valor lido da entrada analógica
int leituraSensorLDR = 0;
atribuição na variável do valor lido da entrada analógica
leituraSensorLDR = analogRead(sensorLDRPin);
Se o valor lido for maior ou igual a constante de Ajuste
if (leituraSensorLDR >= constanteAjuste) {
A saída digital enviará sinal baixo para o ReleShield (Desligar
ReleShiel)
digitalWrite(shieldRelePin, LOW);
}
else
{
Senão a saída digital enviará sinal alto para o ReleShield (Ligar
ReleShiled)
digitalWrite(shieldRelePin, HIGH);
}
O Sinal lido é enviado pela porta serial
Serial.println(leituraSensorLDR);
Tempo de espera de 50 milisegundos para transmissão dos dados pela serial
delay(50);
}
185
Análise do programa
CLP Shield, com ele é possível monitorar entradas e acionar saídas de acordo com a lógica
programada, a placa desenvolvida permite conectar diretamente o Arduino Uno, facilitando a
montagem, troca de componentes e conexões.
O projeto foi desenvolvido para uso do Arduino UNO, portando sua quantidade de IOs é
limitada, o uso em conjunto com outro shield como relógio, ethernet, lcd implicará no
funcionamento do circuito e deverá ser adaptado.
186
42 CLP SHIELD PARA ARDUINO
187
Vamos entender o que é uma CLP
O CLP foi idealizado pela necessidade de poder se alterar uma linha de montagem sem que
tenha de fazer grandes modificações mecânicas e elétricas.
O CLP nasceu praticamente dentro da industria automobilística, especificamente na Hydronic
Division da General Motors, em 1968, sob o comando do engenheiro Richard Morley e
seguindo uma especificação que refletia as necessidades de muitas indústrias manufatureiras.
A idéia inicial do CLP foi de um equipamento com seguintes características resumidas:
1. Facilidade de programação;
2. Facilidade de manutenção com conceito plug-in;
3. Alta confiabilidade;
4. Dimensões menores que painéis de Relês, para redução de custos;
Podemos didaticamente dividir os CLP's historicamente de acordo com o sistema de
programação por ele utilizado:
1ª Geração: Os CLP's de primeira geração se caracterizam pela programação intimamente
ligada ao hardware do equipamento. A linguagem utilizada era o Assembly que variava de
acordo com o processador utilizado no projeto do CLP, ou seja, para poder programar era
necessário conhecer a eletrônica do projeto do CLP. Assim a tarefa de programação era
desenvolvida por uma equipe técnica altamente qualificada, gravando-se o programa em
memória EPROM, sendo realizada normalmente no laboratório junto com a construção do
CLP.
2ª Geração: Aparecem as primeiras “Linguagens de Programação” não tão dependentes do
hardware do equipamento, possíveis pela inclusão de um “Programa Monitor “ no CLP, o qual
converte (no jargão técnico, “compila”), as instruções do programa, verifica o estado das
entradas, compara com as instruções do programa do usuário e altera o estados das saídas. Os
Terminais de Programação (ou maletas, como eram conhecidas) eram na verdade
Programadores de Memória EPROM. As memórias depois de programadas eram colocadas no
CLP para que o programa do usuário fosse executado.
3ª Geração: Os CLP's passam a ter uma Entrada de Programação, onde um Teclado ou
Programador Portátil é conectado, podendo alterar, apagar, gravar o programa do usuário,
além de realizar testes (Debug) no equipamento e no programa. A estrutura física também
sofre alterações sendo a tendência para os Sistemas Modulares com Bastidores ou Racks.
4ª Geração: Com a popularização e a diminuição dos preços dos microcomputadores
(normalmente clones do IBM PC), os CLP's passaram a incluir uma entrada para a comunicação
serial. Com o auxílio dos microcomputadores a tarefa de programação passou a ser realizada
nestes. As vantagens eram a utilização de várias representações das linguagens, possibilidade
de simulações e testes, treinamento e ajuda por parte do software de programação,
possibilidade de armazenamento de vários programas no micro, etc.
5ª Geração: Atualmente existe uma preocupação em padronizar protocolos de comunicação
para os CLP's, de modo a proporcionar que o equipamento de um fabricante “converse” com o
equipamento outro fabricante, não só CLP's, como Controladores de Processos, Sistemas
Supervisórios, Redes Internas de Comunicação e etc., proporcionando uma integração a fim de
facilitar a automação, gerenciamento e desenvolvimento de plantas industriais mais flexíveis e
normalizadas, fruto da chamada Globalização. Existem Fundações Mundiais para o
estabelecimento de normas e protocolos de comunicação. A grande dificuldade tem sido uma
padronização por parte dos fabricantes.
188
5. Envio de dados para processamento centralizado;
6. Preço competitivo;
7. Expansão em módulos;
8. Mínimo de 4000 palavras na memória.
Fontes utilizadas para pesquisa:
http://www.ejm.com.br/download/Introducao%20CLP.pdf
http://pt.wikipedia.org/wiki/Controlador_l%C3%B3gico_program%C3%A1vel
Principais recursos:
5 Entradas digitais optoacopladas.
6 Entradas analógicas.
8 Saídas por Relé.
1 Conexão serial .
1 Saída regulada 5V x 1A.
189
Fluxo de funcionamento:
1- Arduino Uno.
5 - Fotoacopladores TIL111 com soquete.
1 - ULN2803 com soquete.
19 - Resistores 1K 1/8W (marrom preto vermelho).
6 - Resistrores 10K 1/8W (marrom preto laranja).
1- Placa de fenolite cobreada face simples 15cm x 15cm.
9 - Leds 5mm (8 para monitoramento das saídas e 1 para indicação de alimentação do circuito.
1- Regulador de tensão LM7809 com dissipador.
1- Regulador de tensão LM7805 com dissipador.
8 - Relés 12V 15A 1 polo 2 posições.
1 - Barra de pinos macho, serão usado 28 pinos.
9 - Bornes de encaixe TC 3 Vias para saída dos relés.
10 - Bornes de encaixe TC 2 Vias para entradas digitais, analógicas e alimentação.
4 - Espaçador de placa ECI-9,4 (opcional).
1 - Fonte de alimentação 12V 1A.
Placa de circuito impresso
190
Lista de Componentes utilizados:
Componentes e conexões:
191
Dependendo da marca do relé, sua largura pode ter uma mínima variação e ficará apertado na
placa, verifique e se necessário, afaste nas placas os relés. Antes da corrosão da placa sugiro
verificar se o tamanho e largura do pinos dos bornes comprados estão alinhados com as ilhas
da placa, se necessário ajustem o alinhamento.
A placa é alimentada por uma fonte de 12V, usa reguladores de tensão para alimentação do
Arduino e para acionamento das entradas analógicas e digitais, No post construindo-um-releshield usamos um transistor para acionamento do relé, como na CLP Shield acionaremos 8
relés, vamos usar um circuito integrado para simplificar nossa montagem, mas nada impediria
de usarmos os transistores. Usaremos optoacopladorers para isolarmos as entradas digitais do
arduino e leds para monitoramento do acionamento das saídas.
Vamos conhecer os principais componentes do circuito.
LM7809
Regulador de tensão com entrada variável.
Saída constante de 9V
Máxima corrente na saída de 1A.
Encapsulamento com dissipador de calor (modelo TO-220).
Funciona de -40 a 125 graus.
Usado no circuito para alimentação do arduino.
1- Alimentação de entrada
2- GND
3- Saída 9V
LM7805
Regulador de tensão com entrada variável.
Saída constante de 5V
Máxima corrente na saída de 1A.
Encapsulamento com dissipador de calor (modelo TO-220).
192
Como funciona:
Usado no circuito para acionamento das entradas analógicas e digitais.
1- Alimentação de entrada
2- GND
3- Saída 5V
ULN7809
O CI ULN2803 tem 8 entradas que podem controlar até 8 saídas, trabalha com correntes
máximas de 500mA e tensão de até 50v. Internamente cada driver é composto por um
transistor Darlington polarizados com resistores e diodos de proteção.
Usado no circuito para acionar os relés.
193
Funciona de -40 a 125 graus.
194
FotoAcoplador TIL111
OptoAcopladores proporcionam a isolação de sinais em uma grande variedade de aplicações.
Eles comutam ou transmitem sinais e informações ao mesmo tempo que isolam diferentes
partes de um circuito.
Para testar a placa vamos usar uma fonte de 12V, um giga de testes de chaves liga desliga e um
shield de LDR, detalhes da ligação do LDR foram apresentados no post testando-nosso-releshield.
Código Fonte do Projeto
/*
Sergio de Miranda e Castro Mokshin
01/02/2013
Todos os direitos reservados
*/
int EntradaDigital1 = 12;
195
Testando a placa
EntradaDigital2
EntradaDigital3
EntradaDigital4
EntradaDigital5
int
int
int
int
int
int
int
int
Saida1
Saida2
Saida3
Saida4
Saida5
Saida6
Saida7
Saida8
=
=
=
=
=
=
=
=
=
=
=
=
11;
10;
9;
8;
196
int
int
int
int
0;
1;
2;
3;
4;
5;
6;
7;
int sensorLDRPin = A0;
int constanteAjuste = 400;
void setup() {
pinMode(EntradaDigital1,
pinMode(EntradaDigital2,
pinMode(EntradaDigital3,
pinMode(EntradaDigital4,
pinMode(EntradaDigital5,
pinMode(Saida1,
pinMode(Saida2,
pinMode(Saida3,
pinMode(Saida4,
pinMode(Saida5,
pinMode(Saida6,
pinMode(Saida7,
pinMode(Saida8,
INPUT);
INPUT);
INPUT);
INPUT);
INPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
OUTPUT);
digitalWrite(Saida1,
digitalWrite(Saida2,
digitalWrite(Saida3,
digitalWrite(Saida4,
digitalWrite(Saida5,
digitalWrite(Saida6,
digitalWrite(Saida7,
digitalWrite(Saida8,
LOW);
LOW);
LOW);
LOW);
LOW);
LOW);
LOW);
LOW);
}
void loop() {
digitalWrite(Saida1,
digitalWrite(Saida2,
digitalWrite(Saida3,
digitalWrite(Saida4,
digitalWrite(Saida5,
digitalRead(EntradaDigital1));
digitalRead(EntradaDigital2));
digitalRead(EntradaDigital3));
digitalRead(EntradaDigital4));
digitalRead(EntradaDigital5));
int leituraSensorLDR = 0;
leituraSensorLDR = analogRead(sensorLDRPin);
if (leituraSensorLDR >= constanteAjuste) {
digitalWrite(Saida6, LOW);
digitalWrite(Saida7, HIGH);
digitalWrite(Saida8, LOW);
}
else
{
}
}
197
digitalWrite(Saida6, HIGH);
digitalWrite(Saida7, LOW);
digitalWrite(Saida8, HIGH);
Com o Arduino ISP Shield você pode até mesmo gravar o bootloader (uma espécie de BIOS
para os chips Atmega) em um chip ATMEGA com um Arduino. Ideal para pessoas que querem
programar o ATmega328P e transformá-los em chips de bootloader Arduino usando um
esboço AVR-ISP, mas também pode ser usado como programador AVR ISP ‘standalone‘ - de
modo que você possa programar chips virgens, sem um computador! Com esse shield, você
pode simplificar o processo de gravação de vários chips, principalmente pela substituição do
chip devido ao soquete zero in force incluso no projeto.
Lista de Componentes utilizados:
Referencia
Componentes
10k<>120
Header fêmea genérico – 3 pinos
Arduino1
Arduino
ATMEGA328
atmega168 ou 328
C1
Capacitor cerâmico
C2
Capacitor cerâmico
C3
Capacitor cerâmico
C4
Capacitor cerâmico
C4<>dir.
Header fêmea genérico – 3 pinos
C5
Capacitor cerâmico
C6
Capacitor cerâmico
ERR
LED vermelho – 3mm
198
43 ARDUINO ISP SHIELD
Header fêmea genérico – 6 pinos
GND
Header fêmea genérico – 1 pino
HB
LED verde – 3mm
J1
Header fêmea genérico – 14 pinos
J2
Header fêmea genérico – 14 pinos
J5
Header fêmea genérico – 2 pinos
MISO
Header fêmea genérico – 1 pino
MOSI
Header fêmea genérico – 1 pino
PRG
LED amarelo – 3mm
PWR
LED azul – 3mm
R1
120 Ω Resistor
R2
10k Ω Resistor
R3
1k Ω Resistor
R4
1k Ω Resistor
R5
1k Ω Resistor
R6
1k Ω Resistor
RESET
Pushbutton
RESET
Header fêmea genérico – 1 pino
SCK
Header fêmea genérico – 1 pino
Vcc
Header fêmea genérico – 1 pino
XTAL1
Crystal
199
FTDI
Esquemático Elétrico:
200
Esquemático de Ligações - Fritzzing
201
PCB:
Faça o download do projeto no formato Fritzing aqui.
Fonte: fritzing.org
http://www.oarduino.com/downloads/arquivos/isp_shield.rar
Uma Protoboard, ou Breadboard em inglês, é uma placa de ensaio ou matriz de contato, com
furos e conexões condutoras para montagem de circuitos elétricos experimentais. A grande
vantagem da placa de ensaio na montagem de circuitos eletrônicos é a facilidade de inserção de
componentes, uma vez que não necessita soldagem. As placas variam de 800 furos até 6000
furos, tendo conexões verticais e horizontais.
Na superfície de uma matriz de contato há uma base de plástico em que existem centenas de
orifícios onde são encaixados os componentes. Em sua parte inferior são instalados contatos
metálicos que interligam eletricamente os componentes inseridos na placa. Geralmente
suportam correntes entre 1 A e 3 A.
Os contatos metálicos estão em diferentes sentidos na matriz. Como você pode observar na
figura, a placa de montagem possui a matriz principal em seu meio e duas linhas superiores e
duas inferiores em cada matriz (algumas possuem apenas uma linha). Nestes últimos, os
contatos estão na horizontal, enquanto na matriz principal eles estão na vertical. Vamos nos
aprofundar mais no estudo de sua composição e utilização prática.
As protoboards são uma ferramenta fundamental no âmbito da eletrônica. Basicamente, é uma
caixa de plástico com orifícios conectados entre si, que permitem criar um circuito sem
necessidade de soldar os componentes. São excelentes para desenhar e testar circuitos antes
de fabricar uma placa de circuito impresso permanente (PCB).
202
44 PROTOBOARD - HOW TO USE
203
Para que um circuito funcione sobre una protoboard, você somente deve inserir seus
componentes nos pequenos orificios de contacto e uni-los com cabos (pontes ou jumpers). O
melhor de todo o processo é que as protoboards são reutilizáveis. Como os componentes não
estão soldados pode-se alterar o desenho do circuito em projeto de acordo com a necessidade.
Com uma protoboard, pode-se elaborar prototipos de todo tipo de dispositivos, desde circuitos
simples até circuitos tão complexos como um computador, vide os projetos open source Arduino
Standalone ou o Raspberry PI. *Atenção: as protoboards não estão preparadas para conexões
de alta intensidade ou circuitos de alto voltagem.
204
O nome original de breadboard vem do uso que os aficcionados em rádios faziam de tábuas de
(board en inglés) de cortar pão (bread en inglés) para construir prototipos de rádio. Este costume
também era muito utilizado pela resistência na europa durante a segunda guerra mundial, uma
vez que poderiam transportar discretamente componeetes eletrônicos soltos e qualquer técnico
montaria um receptor de rádio usando uma simples tábua de cortar pão. No Brasil, com o boom
da eletrônica de 1970 e a consolidação da Rua Santa Ifigênia no Centro de São Paulo como
fornecedora de produtos eletrônicos incentivaram a criação de um universo não só de técnicos
em eletrônica mas também pessoas que adotaram a eletrônica como hooby. Os técnicos e
projetistas adotaram a breadborad no desenvolvimento de novos projetos visando a reduçao
de custos, antes era necessaário depurar um projeto fabricando várias placas de circuito
impresso e soldando pontes com fios, com a breadboard isso se tornou mais fácil. Aqui no Brasil
chamamos a breadboard de protoboard (project + board).
Existem diversos tipos de protoboards. Umas são grandes, outras pequenas, algunas dispõe de
terminais para alimentação externa, outras incorporam diretamente em seu interior uma fonte
de alimentação, etc... porém todas elas compartilham de uma estrutura muito similar.
Normalmente as protoboards estão marcadas com números e letras para facilitar o máximo a
colocação de cada componente. Estas características não são absolutamente necessárias, mas
muito úteis para utilização com circuitos mais complexos.
205
A protoboard que utilizamos hoje foi inventada em 1971 por Ronald J. Portugal da EI
Instruments.
206
A distância entre os orifícios de uma protoboard de circuitos é de habitualmente de 2,54 mm
(0.1”). (0.1” = 0.1 polegadas). Também chamada de passo (Pitch en inglês).
Alguns modelos incorporan plug´s de encaixe em suas laterais que permitem unir várias
protoboards para formar una superficie de prototipagem única, maior, de acordo com a
necessidade do projeto.
207
Algunas placas possuem uma lamina adesiva em sua parte traseira que permite fixa-las em uma
grande gama de superfícies, de acordo com a necessidade. Isto pode ser realmente útil quando
quieser fixar a protoboard no interior de uma caixa para estudo ou para fixa-la junto a outro
modelo de projeto como o Arduino Standalone ou o Raspberry PI.
No interior de uma protoboard encontramos varias peças de metal condutivo (cobre, estanho,
níquel) que conectam os orifícios exteriores da protoboard entre sí de uma forma prédeterminada (na horizontal e na vertical).
208
Estas peças metálicas no interior da protoboard, estão desenhadas em forma de pinça para
que mantennham os elementos conectados em seu interior.
Uma protoboard típica é formada por 4 seções: 2 seções externas (Buses) e 2 seções internas
(Pistas). Também tem um canal central que divide a protoboard pela metade e impide que a
eletricidade flua entre ambas a metades.
209
As seções externas ou buses são utilizadas para fornecer alimentação ao circuito. São formadas
por duas colunas, uma para voltagem (+) e outra para a conexão do terra (-). A coluna para
voltagem são indicadas por uma linha vermelha e a coluna para terra com uma línha negra ou
azul. Quando se constrói um circuito existe a necessidade de alimentação em diversos pontos,
os buses oferecem muitas opções de alimentação para o circuito em teste em diversos pontos
da placa de prototipagem.
Normalmente, todos os orificios de uma coluna do bus estão conectados entre sí, mas
podemos encontrar placas de prototipagem em que estas colunas estão divididas para
poderem oferecer outras voltagens diferentes (3,3V e 5V). Nesses casos, se queremos uma
voltagem única, será necessário conectar um ou vários cabos de ponte (jumpers em inglês)
para poder alimentar toda a coluna. Sempre é uma boa idéia ter um multímetro para
comprovar a ausencia o presença de corrente eléctrica.
Dois CI´s DIP, um LM358 (acima), muito comum op-amp,
e o ultra popular ATMega328 microcontrolador (abaixo).
(Imagen: Sparkfun)
O habitual nas seções internas é que haja pistas de 5 agrupamentos de cada lado do canal central
aonde os orifícios de cada pista estão interconectados eléctricamente entre sí. Os 5 orifícios do
lado esquerdo do canal central podem estar marcados por colunas com as letras A, B, C, D e E,
e os outros 5 do lado direito marcados com as letras F, G, H, I e J.
Uma protoboard de tamanho standart pode ter entre 56 e 65 filas de pistas. O tamanho de
uma protoboard se define por um número de pontos que somam os orifícios de todos os buses
e pistas.
Para conectar entre si os componentes que são afixados sobre uma protoboard, é necessário
usar cabos de ponte (jumpers em inglês).
210
As seções internas ou pistas são a superfície da protoboard onde se conectam a maioría dos
componentes do circuito em estudo. Esta seção esta dividida em duas partes por um canal
central que separa eletricamente ambos os lados e foi idealizado para poder inserir chip´sen
formato DIP (Dual In-line Package).
211
Conjunto de jumpers para protoboard.
(Imagem: Multilogica-Shop)
No caso de você querer fazer seus próprios cabos de conexão, o tipo de cabo mais adequado
para usar com uma protoboard padrão, é o cabo rígido de 22AWG. (22AWG = 0,325 mm2).
*Atenção: Se for utilizado uma cabo mais grosso, poderá deformar permanentemente as
pinças do interior da protoboard e inutilizar os contatos internos, fazendo com os mesmos
deixem de serem confiáveis.
212
Quando utilizamos um rolo de cabo para conectar nosso circuito é necessário cortar o cabo e
desencapar a ponta da haste. Para realizar esta tarefa com facilidade, podemos utilisar um
alicate de corte que nos permite realizar ambas as operações. (Usar um descascador de fios
também pode ser muito útil para iniciantes, pois fará o desncape do fio na medida desejada).
Uma vez cortado o cabo na medida correta, deve-se desencapar ambas as extremidades.
Cuidado para não desencapar demais, o ideal é algo en torno de 7mm. Um cabo demasiado
desemcapado pode provocar um curto-circuito no projeto, ou realizar o contato indesejado
entre um componenete isolado do projeto e seu vizinho próximo, inviabilizando o circuito como
um todo.
213
Em ciruitos muito grandes, fazer os cabos de conexão um a um pode ser muito improdutivo,
perdendo demasisado tempo, no mercado existem kits de cabos pré-cortados de tamanhos
variados e com terminais rígidos, que facilitam muito a tarefa. Também é muito aconselhável
usar cabos com cores distintas para diferenciar cada conexão no protótipo.
Agora que a estrutura da placa de circuito nos é familiar, vamos fazer um circuito de teste sobre
uma protoboard. Vamos montar um simples circuito que acende um LED, diodo emissor de luz.
Para poder completar este circuito vamos necessitar de uma bateria de 9V, um cabo adaptador
para bateria de 9V com as pontas desencapadas, um LED de 5mm, uma resistência de 300 ohms
e um cabo de ponte.
Temos que alimentar o circuito para energizar a protoboard, usaremos as pontas
desencapadas do terminal de conexão da bateria, conectanto ambas as pontas na protoboard.
Os cabos devem ser conectados nas colunas correspondentes na protoboard. O cabo vermelho
na coluna positiva do bus, coluna com o símbolo positivo (+) e o cabo negro deve ser conectado
214
Primeiro vamos estudar o diagrama do nosso circuito de LED. Um diagrama de circuito (também
chamado de esquema) se usa para planejar e estudar um circuito em um desenho. É uma boa
idéia aprender os símbolos electrônicos que são utilizados habitualmente, para poder desenhar
qualquer circuito. (objeto de um post futuro.)
Muito cuidado com os LED´s. LED´s são polarizados. Isto significa que sua orientação é muito
importante. Ele não funcionará se for ligado invertido, ele simplemente "queimará". Você pode
reconhecer qual é o terminal positivo (anodo) e o negativo (catodo) pelo seu comprimento, ou
pelo chanfro em sua cabeça redonda, o chanfro indica o lado negativo do LED o "catodo" (-).
Insira o LED na protoboard de forma que o anodo (+) esteja inserido dentro do orifício 10E (pista
10 columna E) e o catodo (-) esteja inserido dentro do orificio 9E (pista 9 columna E). Desta
forma, teremos os terminais do LED, em duas pistas diferentes. Se inserir os dois terminais do
LED na mesma pista da protoboard, será produzido um curto-circuito.
Agora é a vez da resistência. A resistência serve para limitar a corriente que passa e atinge o
LED. Neste circuito, se a alimentação de 9v chegar ao LED é provável que ele queime de
imediato. As resistências, diferente dos LED´s, não tem polaridade, assím não importa o lado em
que o mesmo é ligado, mas por padrão em um circuito em que existam diverssos resistores, os
mesmos são alinhados de maneira a facilitar a sua leitura e todos na mesma direção.
215
na coluna negativa do bus, que é a coluna com o símbolo negativo (-). Antes de conctar a bateria
no circuito vamos inserir na protoboard o resto dos componentes...
216
Insira a resistência de forma que um dos terminais esteja conectado na coluna negativa do Bus
e a outra ponta no orifício 9D (pista 9 columna D). Desta forma, teremos o terminal negativo do
LED conectado ao Bus de alimentação (-) por meio da resistência.
Insira um extremo do cabo de ponte no orifício 10D (pista 10 coluna D) e o outro extremo na
coluna positiva do Bus.
Deste modo, teremos o terminal positivo do LED conectado ao Bus de alimentação (+).
Certifique novamente as conexões da bateria e do circuito. Positivo com positivo. Negativo
com negativo.
217
Conectar a bateria de 9V no adaptador que foi colocado ligado ao Bus. Isto é chamado de fonte
de alimetação.
Atenção! Se o LED queimar, revise suas conexões, existe algo errado no circuito.
Circuito complexo montado em uma protoboard. (Imagen: Sparkfun)
Outro uso muito habitual das protoboards é testar diversos componentes, como circuitos
integrados (Chips). Quando quiser averiguar como funciona um componente e tiver que mudar
constantemente conexões e componentes em um projeto de teste, protótipo, você não vai
querer soldar todas as conexões cada vez que fizer uma nova versão do projeto.
218
Se tudo estiver correto o LED acenderá e brilhará, como uma grande idéia em um desenho
animado, isto é um tremedo incentivo para criarmos mais projetos. Na realidade, existem uma
infinidade de maneiras diferentes de montar um mesmo circuito sobre uma protoboard. Isto se
chama depuração, você pode encontrar a maneira que melhor lhe convier, ou a maneira mais
racional a seus olhos, não importa, o que importa é que a cada montagem você estará
aprendendo mais e colocando sua capacidade criativa em evidência.
Resumindo, as protoboards são para a eletrônica o que as calculadoras eletrônicas são para a
matemática. Muitos técnicos rejeitam o seu uso, realmente em muitos casos não é essencial a
sua utilização. Já montei diversos projetos sem placa, mas na minha opinião ajudam muito em
uma solução mais rápida para a analise e depuração de um projeto.
219
Não há a necessidade de placas de circuitos de todos os tamanhos. Com algumas pequenas para
projetos sensíveis, e uma grande você poderá trabalhar em multiplos projetos sem problemas.
Além disso as protoboards podem ser facilmente interconectadas através de seus plug´s,
quando são do mesmo modelo e tamanho, ou através de pontes (jumpers).
O desenvolvimento de circuitos experimentais podem ser facilmente colocados em
funcionamento com a utilização de placas ilhadas universais de fenolite ou fibra de vidro. As
placas de fenolite universais, são desenhadas de tal forma que podemos construir as trilhas do
circuito com pequenas gotas de solda, jumpers ou pequenos cortes realizados com um estilete.
Coloque seus projetos em funcionamento com este modo de montagem utilizando as placas
universais com ilha desligada. As placas universais tipo ilha (desligada) são excelente para se
construir circuitos eletrônicos experimentais, com este tipo de placa podemos alterar facilmente
o circuito e também a ligação de suas trilhas.
O circuito proposto a ser montado é um temporizador que após ativado, manterá o relê ligado
por um determinado tempo. Voltando a se desligar automaticamente e aguardando por um
novo disparo. Este tipo de circuito é muito utilizado em pequenos alarmes, temporizadores para
luz de cortesia em corredores, etc...
Esquema circuito temporizador
Informação adicional: RV1 = 1MΩ ou 2M2Ω
Chave de disparo = Pode ser utilizado uma chave ou um sensor de presença.
220
45 MONTAGEM UTILIZANDO PLACA
PLACA UNIVERSAL
Circuito no papel quadriculado
Verso da placa no papel quadriculado
Além de desenhar os componentes no papel quadriculado, você pode ir traçando as trilhas do
circuito no verso da folha, utilizando como base as linhas do papel quadriculado. Observe que
no cruzamento de cada linha corresponde ao furo da placa.
Não esqueça de conferir atentamente todas as ligações para que o circuito funcione
corretamente.
O tamanho da placa a ser montada é igual a quantidade de cruzamentos utilizados na folha
quadriculada comparado aos furos da placa de fenolite. Aproveite ao máximo os espaços na
folha quadriculada, deste modo você conseguirá montar uma placa de pequenas proporções.
Agora iniciamos o processo de colocação dos componentes na placa universal de acordo com
nossa folha quadriculada.
Furação da placa de fenolite para terminais grossos
Nota importante: alguns componentes podem ter os terminais que não passam nos furos da
placa, ou não coincidem com os furos.
221
Com o esquema do circuito em mãos, o próximo passo é distribuir os componentes do circuito
desenhando-os em uma folha de papel quadriculado comum, simulando a furação da placa
universal. Deste modo podemos encontrar um bom posicionamento para todas as peças que
compõem nosso circuito.
Antes de começar a soldar os componentes, observe se a placa é protegida com verniz e se a
solda pega bem nas ilhas, se a placa não possui verniz, faça uma limpeza na placa com bombril,
deixando-a bem limpa.
Fixação dos componentes no verso da placa
Seguimos colocando os componentes na placa de acordo com a nossa folha quadriculada,
tomando o cuidado de ir fixando-os com uma gota de solda na ilha. Para facilitar o seu trabalho,
começe fixando os componentes de menor altura (jumpers se tiver, depois resistores, diodos,
capacitores), deixe os maiores para o fim. Faça a soldagem dos fios numa última etapa.
Terminado o processo de fixação dos componentes na placa, iniciamos o trabalho de montagem
das trilhas que interligará todos os componentes do circuito. O processo consiste em ligar as
ilhas da placa com uma pequena gota de solda, para isso utilizaremos como guia a folha
quadriculada no lado verso, onde desenhamos somente as trilhas.
Montagem da trilhas na placa universal
Tome o cuidado para não aquecer demais a ilha, utilize um ferro de solda de ponta fina, de 20 a
30 watts de potência. Trilhas longas no circuito, poderão ser contruídas utilizando pequenos
pedaço de fio fino de cobre, geralmente retirados de cabos de rede ou cabos de telefonia.
A grande vantagem em trabalhar com estas placas, está na facilidade de poder alterar o circuito
rapidamente e também as suas trilhas de acordo com a necessidade do novo circuito.
222
Antes de começar a soldar os componentes, devemos preparar a placa para que todos os
componentes sejam inseridos com facilidade. Para isso utilize um broca de 2 mm e refaça os
furos de acordo com o necessário.
Soldagem dos fios
Atenção - Antes de ligar, confira o circuito, observe se não ocorreu curto entre as ilhas, solda
fria ou erro na construção das trilhas.
Circuito em funcionamento
Trabalhando com placas universais, é possível desenvolver e montar rapidamente uma grande
variedade de projetos em eletrônica digital, som e efeitos visuais. Lembre-se que circuitos de
alta frequência, como transmissores e receptores de rádio podem apresentar instabilidades no
seu funcionamento quando utilizamos estes tipos de placas no processo de montagem.
223
Na etapa final, soldamos os fios para chaves, sensores e a fonte de energia. Os fios podem ser
soldados no lado de cima da placa, junto com os componentes ou no lado de baixo diretamente
nas ilhas da placa.
Quando optar em realizar montagens definitivas com placas universais deixe uma área de
margem maior, faça a furação necessária nos cantos com brocas de 4 mm, assim poderá fixar a
placa dentro de gabinetes.
Componentes que trabalham quentes devem ser montados mais distantes da placa para evitar
a queima da placa ou derretimento da solda nos terminais.
Trilhas que conduzem alta corrente, devem ser reforçadas com pedaços de fios de cobre mais
grossos, para evitar o rompimento das trilhas ou da solda.
Comprovado o perfeito funcionamento do projeto, agora é só copia-lo para uma placa de
circuito impresso definitiva.
Atenção - Na foto do circuíto, vemos 5 resistores e também 2 led's. Mas no esquema do circuíto
não vemos estes componentes. Os dois resistores e os dois leds (vermelho e verde) que não
foram incluídos no esquema, tem a função mostrar que o circuito está ligado e funcionando. O
led vermelho indica que o circuito está energizado e o seu resistor é de aproximadamente 1K
ohm, o led verde indica que o relê foi acionado e o valor do resistor limitador para o led é de 1K
ohm. Ambos poderão ser adicionados no circuito para obter uma visualização do funcionamento
e o ponto de montagem é em paralelo com as fontes de alimentação.
224
Algumas dicas adicionais:
PEOPLEWARE Website, http://pplware.sapo.pt/sobre-nos/
COMO FAZER AS COISAS Website, http://www.comofazerascoisas.com.br/
FAZEDORES BLOG Website, http://blog.fazedores.com/
INSTRUCTABLES Website, http://www.instructables.com/tag/type-id/category-technology/
ARDUINO Website, http://arduino.cc/
RASPBERRY PI Website, http://www.raspberrypi.org/
SÊNIOR CONSULTORIA Website, http://seniorcti.com.br/
ROBOHELP Website, http://robohelp.com.br/
225
46 REFERÊNCIAS BIBLIOGRÁFICAS
BIBLIOGRÁFICAS
226
Sobre o Autor
Luiz Henrique Akasaka Ferreira é consultor na área de análise de sistemas, organização e
métodos, especializado em gestão de produção, integração digital de equipamentos de
controle, técnico em eletrônica especializado em CLP para PCP. Estuda as áreas de recursos
naturais para obtenção de energia renovável, é de sua autoria diversos projetos para
implantação de usinas de biodiesel, a cadeia produtiva de insumos pra produção de biodiesel, a
implantação de micro usinas geradoras de energia elétrica com base em células fotovoltaicas e
o estudo e implantação de usinas de energia elétrica com base em células fotovoltaicas para
grande demanda, acima de 11GWh/ano. Como entusiasta da ciência e tecnologia voltada a
eletrônica e tecnologia da informação elaborou este compêndio com informações testadas em
seu dia a dia para auxiliar o inventor iniciante em percorrer seu caminho inicial.
Atualmente, é sócio da Sênior Consultoria e Incorporadora, empresa que desenvolve produtos
para a indústria visando o programa de controle de produção (PCP), a automação da cadeia
produtiva e a assessoria para implantação de sistemas de gestão integrados (ERP).
http://www.seniorcti.com.br
ATENÇÂO
Este estudo faz parte de uma iniciativa da
equipe de desenvolvimento e pesquisas da
Senior Consultoria, todas as informações aqui
contidas estão listadas no item “fonte”, dando crédito ao
seu pesquisador original e colocando-os sob a licença Creative Commons.
Download