WWoorrkksshhoopp AArrdduuiinnoo 
Francisco Marcelino Almeida 
franciscomarcelinoalmeida@gmail.com 
Marcus Vinícius de Sousa Lemos 
marvinlemos@gmail.com
AApprreesseennttaaççããoo 
Sobre o professor: 
Marcus Vinícius de Sousa Lemos 
Mestre em Informática Aplicada pela Universidade de Fortaleza – Unifor 
Professor da Universidade Estadual do Piauí – Uespi 
Pesquisador do Laboratório de Inteligência Computacional – Laic - Uespi 
Auditor Fiscal de Controle Externo (Informática) – TCE/PI 
Áreas de Interesse: 
Redes de Sensores, Inteligência Computacional, Robótica 
marvinlemos@gmail.com 
http://www.marvinlemos.net 
@marvinlemos
AApprreesseennttaaççããoo 
Sobre o professor: 
Francisco Marcelino Almeida de Araújo 
Mestrando em Biotecnologia pela Universidade Federal do Piauí - UFPI 
Professor do Instituto Federal do Piauí – IFPI 
Áreas de Interesse: 
Inteligência Computacional, Processamento de Imagens, 
Microeletrônica, Nanotecnologia 
franciscomarcelinoalmeida@gmail.com 
http://www.arduinopi.net 
@keyjin
AArrdduuiinnoo
MMoottiivvaaççããoo 
Convergência: tecnologia, criação e arte 
Baixo custo de microcontroladores 
Plataformas de hardware abertas sendo 
criados 
Febre Do It Yourself
MMoottiivvaaççããoo 
Diversas aplicações práticas 
Robôs 
Roupas eletrônicas 
Desenvolvimento de celulares customizados 
Instrumentos musicais 
Paredes interativas 
Redes de Sensores
MMiiccrrooccoonnttrroollaaddoorr 
Também conhecido como MCU (Microcontroller 
Unit) 
“Computador em um chip” 
Programado para funções específicas 
(geralmente para interagir com atuadores) 
Geralmente embarcados em outros dispositivos
MMiiccrrooccoonnttrroollaaddoorr 
PIC 16F628A 
ATmega328 
Basic Stamp
AATTMMeeggaa332288PP 
Características do Atmega328: 
RISC 
Processador: 8-bit 
Flash (Kbytes): 32 
EEPROM (Bytes): 1K 
SRAM (Bytes): 2K 
PWM Channels: 6 
Vcc (V): 1.8 – 5.5
AATTMMeeggaa332288PP
AArrdduuiinnoo 
Placa + Microcontrolador + USB + 
Sockets 
Pode ser conectado a uma grande 
variedade de dispositivos: 
Sensores: Luz, temperatura, presença, 
etc. 
Displays: LCD, touchscreen 
Motores e servos 
GPS 
Comunicação sem fio: 802.15.4, 
Zigbee, Bluetooth 
Ethernet 
Alimentação: Bateria de 9V ou por 
meio da USB
Da página oficial (www.arduino.org): 
Arduino is an open­source 
electronics prototyping platform based on 
flexible, easy­to­use 
hardware and software. It’s intended for artists, 
designers, hobbyists, and anyone interested in creating interactive 
objects or environments. 
Arduino can sense the environment by receiving input from a variety of 
sensors and can affect its surroundings by controlling lights, motors, 
and other actuators. The microcontroller on the board is programmed 
using the Arduino programming language (based on Wiring) and the 
Arduino development environment (based on Processing). Arduino 
projects can be stand­alone 
or they can communicate with software on 
running on a computer (e.g. Flash, Processing,MaxMSP). ”
AArrdduuiinnoo éé 
OOppeenn--SSoouurrccee
AArrdduuiinnoo ccoomm PPrroottoobbooaarrdd
AArrdduuiinnoo eemm PPaappeell
AArrdduuiinnoo 
Criado na Itália (em 2005) pelo Mássimo Banzi, no 
Interaction Design Ivrea 
Baixo custo de produção e alta aplicabilidade 
Computação física e redes de sensores 
Permite que os programas (ou sketches) sejam 
escritos em uma linguagem de alto nível chamada 
Processing 
Processing é um ambiente e linguagem de 
programação para criar imagens, animação e 
interação 
http://processing.org/
VVeerrssõõeess ddoo AArrdduuiinnoo 
Arduino Uno
VVeerrssõõeess ddoo AArrdduuiinnoo 
Arduino Nano
VVeerrssõõeess ddoo AArrdduuiinnoo 
Arduino Mega
VVeerrssõõeess ddoo AArrdduuiinnoo 
Arduino Lilypad
VVeerrssõõeess ddoo AArrdduuiinnoo 
Arduino Romeo All-in-one
CCaarraacctteerrííssttiiccaass ddoo AArrdduuiinnoo UUnnoo 
Microcontrolador ATmega328P 
Tensão Operacional 5 V 
Tensão de Alimentação 7-12 V 
Pinos de I/O digitais 14 (dos quais 6 podem ser saídas PWM) 
Pinos de entrada analógica 6 
Corrente contínua por pino de I/O 40 mA 
Corrente contínua para o pino de 3.3 V 50 mA 
Memória Flash 2KB 
EEPROM 1K 
Frequência de clock 16 MHz
AArrdduuiinnoo DDiieecciimmiillaa//UUnnoo
OOkk...... bbuutt ffiirrsstt,, lleett''ss ggoo 
sshhooppppiinngg
KKiitt PPaarraa IInniicciiaannttee
OOuuttrrooss CCoommppoonneenntteess
SSeennssoorreess
““HHeelllloo WWoorrlldd””
AAmmbbiieennttee ddee DDeesseennvvoollvviimmeennttoo 
O ambiente de desenvolvimento pode ser 
baixado em: 
● http://arduino.cc/en/Main/Software 
● A última versão é a 0022 
O arquivo compactado deve ser extraído em 
qualquer diretório do sistema 
Será criado um diretório arduino-XXXX, onde 
XXXX é a versão baixado (por exemplo: 
arduino-0022).
AAmmbbiieennttee ddee DDeesseennvvoollvviimmeennttoo 
Executar o arquivo 'arduino'
AAmmbbiieennttee ddee DDeesseennvvoollvviimmeennttoo
CCoonnffiigguurraannddoo oo AAmmbbiieennttee 
Linux 
Conecte o Arduino ao seu computador, por meio da porta USB e 
espere alguns segundos até que o sistema recoheça o dispositivo 
Para confirmar se o dispositivo foi reconhecido, abra um terminal e 
execute o comando abaixo: 
$ dmesg 
Procure, nas últimas linhas, por uma linha mais ou menos parecida 
com a de baixo: 
[56999.967291] usb 5-2: FTDI USB Serial Device converter 
now attached to ttyUSB0 
Essa mensagem indica que o kernel reconheceu um novo 
dispositivo conectado na porta /dev/ttyUSB0. 
O sistema nem sempre reconhece como /dev/ttyUSB0, mas em 
geral é /dev/tty<alguma_coisa>
CCoonnffiigguurraannddoo oo AAmmbbiieennttee 
Windows: 
http://arduino.cc/en/Guide/Windows 
Mac OSX: 
http://arduino.cc/en/Guide/MacOSX
CCoonnffiigguurraannddoo oo AAmmbbiieennttee 
Configurar o ambiente de desenvolvimento para 
utilizar a porta detectado pelo sistema: 
“Tools” → “Serial Port” 
Configurar a placa utilizada: 
“Tools” → “Board” e escolher a opção “Arduino Uno”
““HHeelllloo WWoorrlldd”” 
O primeiro projeto será o equivalente “Hello 
World” para dispositivos embarcados 
Como não há um terminal, iremos fazer piscar 
(blink) um LED. 
A placa do Arduino vem com um LED embutido, 
conectado ao pin digital 13 
Esta conexão faz com que o pin 13 seja sempre 
de saída, mas como o LED usa pouca corrente, 
ainda é possível conectar outras coisas na saída
““HHeelllloo WWoorrlldd”” 
Código: 
int ledPin = 13; 
void setup() { 
// initialize the digital pin as an output. 
// Pin 13 has an LED connected on most Arduino 
boards: 
pinMode(ledPin, OUTPUT); 
} 
void loop() { 
digitalWrite(ledPin, HIGH); // set the LED on 
delay(1000); // wait for a second 
digitalWrite(ledPin, LOW); // set the LED off 
delay(1000); // wait for a second 
}
““HHeelllloo WWoorrlldd”” 
Para fazer o upload para a placa, deve-se 
clicar no botão específico:
EExxpplliiccaannddoo oo ccóóddiiggoo 
Um sketch Arduino possui, no mínimo duas 
funções: 
setup(): 
Executada apenas uma vez, durante a inicialização 
loop(): 
Função principal
EExxpplliiccaannddoo oo ccóóddiiggoo 
setup() 
pinMode(ledPin, OUTPUT); 
A função pinMode define o modo de operação do 
pino. Neste caso, definimos que o pino 13 (ledPin) 
será de saída
EExxpplliiccaannddoo oo ccóóddiiggoo 
loop() 
digitalWrite(ledPin, HIGH); 
Permite ligar (5V) ou desligar (0V) um pino digital 
Neste código especifico, estamos ligando (constante 
HIGH) o pino 13 (ledPin) 
Por meio da constante LOW, podemos desligar o pino 
delay(200) 
A função delay() faz com que o processado fique X 
milisegundos em espera
RReevviissaannddoo CCoommppoonneenntteess:: 
BBrreeaaddbbooaarrdd,, RReessiissttoorr && 
LLEEDD
BBrreeaaddbbooaarrdd ((PPrroottoobbooaarrdd)) 
Breadboard (ou protoboard ou Matriz de Contato) 
Dispositivo que permite a 
construção de circuitos sem 
a necessidade de solda 
Fácil prototipação 
Na superfície há uma base 
de plástico com vários 
orifícios onde são 
encaixados os componentes 
Na parte inferior há contatos 
metálicos que interligam os 
componentes inseridos na 
placa
BBrreeaaddbbooaarrdd ((PPrroottoobbooaarrdd)) 
Breadboard (ou protoboard ou Matriz de Contato) 
Os furos das linhas verticais 
estão interligados
RReessiissttoorr 
Resistor: 
Componente projetado para gerar uma resistência 
à corrente elétrica e, consequentemente, diminuir a 
tensão entre os dois terminais 
Medido em Ohm e é representado pela letra grega 
Omega ( Ω ) 
Os pinos digitais geram uma tensão de 5 V (DC) a 
40mA 
LEDs geralmente precisam de uma tensão de 2 V e 
corrente de 10mA (para brilhar razoavelmente bem)
RReessiissttoorr 
Resistor: 
Precisamos de um resistor capaz de reduzir a tensão 
de 5 para 2 (Voltage Drop) e a corrente de 40mA 
para 10mA 
Para descobrir o valor do resistor apropriado, vamos 
utilizar a Lei de Ohm: 
I = V/R ou 
R = V/ I ou 
R = (Tensão fornecida – Tensão apropriada) / I 
● R = (5 – 2)/0.01 = 3/0.01 = 300 Ω
RReessiissttoorr 
Como ler os valores dos resistores:
RReessiissttoorr
LLEEDD 
LED: 
Light Emmiting Diode 
Diodo é um componente que permite que a corrente 
siga apenas uma direção 
Um LED é um diodo que emite luz
PPrroojjeettoo 000011:: 
LLEEDD FFllaasshheerr
LLEEDD FFllaasshheerr 
Componentes:
LLEEDD FFllaasshheerr 
Conexão:
LLEEDD FFllaasshheerr
LLEEDD FFllaasshheerr 
Código: 
int ledPin = 10; 
void setup() { 
pinMode(ledPin, OUTPUT); 
} 
void loop() { 
digitalWrite(ledPin, HIGH); 
delay(1000); 
digitalWrite(ledPin, LOW); 
delay(1000); 
}
RReevviissaannddoo CCoommppoonneenntteess:: 
PPootteenncciiôômmeettrroo
PPootteenncciiôômmeettrroo 
O potenciômetro é simplesmente 
um resistor cuja resistência pode 
ser ajustada 
Por exemplo: em um potenciômetro 
de 4K7, a resistência pode variar 
entre 0 e 4700 Ω 
Possui três pernas: 
Conectando apenas duas, o potenciômetro 
transforma-se em um resistor variável 
Conectando 3 e aplicando uma tensão, o 
potenciômetro transforma-se em um divisor de 
tensão (voltage divider)
PPrroojjeettoo 000022:: 
IInntteerraaccttiivvee LLEEDD 
CChhaassee EEffffeecctt
IInntteerraaccttiivvee LLEEDD CChhaassee EEffffeecctt 
Componentes:
IInntteerraaccttiivvee LLEEDD CChhaassee EEffffeecctt 
Conexão:
IInntteerraaccttiivvee LLEEDD CChhaassee EEffffeecctt 
byte ledPin[] = {11,12,13}; 
int ledDelay; //delay between changes 
int direcao = 1; 
int currentLed = 0; 
unsigned long changeTime; 
int potPin = 2; //select the input pin for 
the pot 
void setup() { 
for (int x = 0; x < 3; x++){ 
pinMode(ledPin[x], OUTPUT); 
} 
changeTime = millis(); 
} 
void loop(){ 
ledDelay = analogRead(potPin); 
if ((millis() - changeTime) > ledDelay){ 
changeLed(); 
changeTime = millis(); 
} 
} 
void changeLed(){ 
for (int x = 0; x < 3; x++){ 
digitalWrite(ledPin[x], LOW); 
} 
digitalWrite(ledPin[currentLed], HIGH); 
currentLed += direcao; 
if (currentLed == 2) { direcao = -1; } 
if (currentLed == 0) { direcao = 1; } 
}
IInntteerraaccttiivvee LLEEDD CChhaassee EEffffeecctt 
Considerações: 
Inicialmente declaramos uma variável para o 
potenciômetro: 
int potPin = 2; 
O potenciômetro está conectado a uma porta analógica 
Para ler o valor de uma porta analógica, utilizamos a 
função analogRead 
Um Arduino possui 6 portas análogicas com um conversor 
analógico-digital de 10bits 
Uma porta análogica pode ler tensão entre 0V e 5V em 
valores inteiros entre 0 (0V) e 1023 (5V). 
Resolução de: 5V / 1024 unidades ou 0.0049V (4.9mV) por 
unidade
RReevviissaannddoo CCoommppoonneenntteess:: 
TTaaccttiillee SSwwiittcchh
TTaaccttiillee SSwwiittcchh 
Tactile Switch
TTaaccttiillee SSwwiittcchh 
Tactile Switch
TTaaccttiillee SSwwiittcchh 
Tactile Switch 
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
TTaaccttiillee SSwwiittcchh 
Além de controlar a corrente, funcionam como 
ótimos dispositivos de entrada 
No próximo exemplo, vamos configurar a corrente 
em um pino para 5V ou terra e usar a função 
digitalRead para consultar o estado do pino: HIGH 
ou LOW
TTaaccttiillee SSwwiittcchh 
/* 
* Switch test program 
*/ 
// Switch connected to digital pin 2 
int switchPin = 2; 
void setup() 
{ 
// set up Serial library at 9600 bps 
Serial.begin(9600); 
// sets the digital pin as input to read switch 
pinMode(switchPin, INPUT); 
} 
void loop() 
{ 
Serial.print("Valor do Switch: "); 
// Read the pin and display the value 
Serial.println(digitalRead(switchPin)); 
delay(100); 
}
TTaaccttiillee SSwwiittcchh 
Agora, vamos utilizar um fio para alternar a 
conexão do pino 2 entre 5V e o terra: 
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
TTaaccttiillee SSwwiittcchh 
Switch input tied HIGH (5v) 
Switch input tied LOW (ground)
TTaaccttiillee SSwwiittcchh
TTaaccttiillee SSwwiittcchh 
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
FFllooaattiinngg hhiigghh aabboovvee tthhee cclloouuddss 
Vamos substituir os fios pelo tactile switch 
O problema é que o switch só pode conectar e 
desconectar dois fios. Ele não pode alternar 
conexões 
Two alternative switch wiring possibilities
FFllooaattiinngg hhiigghh aabboovvee tthhee cclloouuddss 
For example, in these schematics we can connect and 
disconnect pin 2 to 5V, or we can connect and disconnect pin 2 
to ground. In both cases, as long as the button is held down, the 
pin is connected to a valid input voltage. When the button is 
released, though, pin 2 is not connected to anything. This is called 
a floating input voltage. Basically, it's invalid input!
RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp 
Uma solução é usar um switch que alterna 
conexões, como o utilizado no diagrama 
abaixo: 
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp 
Outra solução seria utilizar um recurso conhecido como 
resistor pull-down: 
No esquema abaixo, o resistor pull-down está representado 
pelo resistor de 10Kohm 
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp 
Quando o switch for pressionado, o resistor de 
100Ω estará conectado diretamente ao 5V. 
Quando o switch for liberado, o resistor de 
100Ω estará conectado ao resistor de 10K, o 
qual “puxa-o” (pull-down) para o terra
RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp 
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp
RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp 
Resistor pull-up: 
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp
PPrroojjeettoo 000033:: 
IInntteerraaccttiivvee LLEEDD FFllaasshheerr
IInntteerraaccttiivvee LLEEDD FFllaasshheerr 
Componentes:
IInntteerraaccttiivvee LLEEDD FFllaasshheerr 
Conexão:
IInntteerraaccttiivvee LLEEDD FFllaasshheerr 
● Código 
int ledPin = 4; // choose the pin for the LED 
int inPin = 5; // choose the input pin (for a pushbutton) 
int val = 0; // variable for reading the pin status 
void setup() { 
pinMode(ledPin, OUTPUT); // declare LED as output 
pinMode(inPin, INPUT); // declare pushbutton as input 
} 
void loop(){ 
val = digitalRead(inPin); // read input value 
if (val == HIGH) { // check if the input is HIGH 
digitalWrite(ledPin, LOW); // turn LED OFF 
} else { 
digitalWrite(ledPin, HIGH); // turn LED ON 
} 
}
EExxeerrccíícciioo 
Criar um projeto semelhante ao demonstrado 
no video: 
Video 001
PPrroojjeettoo 000044:: 
TTeemmppeerraattuurree SSeennssoorr
LLMM3355//LLMM3366 –– TTPPMM3355//TTPPMM3366 
Sensor de temperatura 
analógico 
Estado-sólido (não usa 
mércurio) 
A medida que a 
temperatura muda, a 
tensão que atravessa um 
diodo cresce a uma taxa 
conhecida 
Não precisa ser calibrado 
Barato e fácil de usar
LLMM3355//LLMM3366 –– TTPPMM3355//TTPPMM3366 
a) LM35 
b) LM36 
Fonte: http://www.ladyada.net/learn/sensors/tmp36.html
LLMM3355//LLMM3366 –– TTPPMM3355//TTPPMM3366 
Para converter a tensão em temperatura: 
LM35: 
Temp in ºC: (V in mV) / 10 
LM36: 
– Temp in ºC: [(V in mV - 500)] / 10
LLeennddoo aa TTeemmppeerraattuurraa
LLeennddoo aa TTeemmppeerraattuurraa 
Devemos conectar o pino do saída do sensor 
diretamente em uma porta analógica do 
Arduino 
A tensão de saída do sensor será de 0 a 1.75 
(aproximadamente) 
O tensão lida pelo Arduino é convertido em um 
valor binário pelo Conversor Analógico Digital 
Assim, para descobrirmos a temperatura, 
devemos fazer uma conversão:
LLeennddoo aa TTeemmppeerraattuurraa 
Voltage at pin in milliVolts = (reading from ADC) * 
(5000/1024) 
This formula converts the number 0-1023 from the ADC into 0- 
5000mV (= 5V) 
Voltage at pin in milliVolts = (reading from ADC) * 
(3300/1024) 
This formula converts the number 0-1023 from the ADC into 0- 
3300mV (= 3.3V) 
Para converter a tensão em temperatura, basta utilizarmos 
a fórmulas definidas anteriormente...
LLeennddoo aa TTeemmppeerraattuurraa 
int temperaturaPin = 0; 
int ledPin = 12; 
float vIn = 5.0; //Tensao de entrada 
void setup() 
{ 
pinMode(ledPin, OUTPUT); 
Serial.begin(9600); 
} 
void loop() 
{ 
digitalWrite(ledPin, HIGH); 
//ler o valor do sensor 
float leitura = analogRead(temperaturaPin); 
float voltagem = (leitura * vIn) / 1023.0; 
//Imprimir a tensão 
Serial.print(voltagem); 
Serial.println(" volts"); 
//Converter tensao para temperatura 
float temperaturaC = voltagem * 100.0; 
delay(1000); 
Serial.print(temperaturaC); 
Serial.println(" graus em C"); 
Serial.println(" "); 
digitalWrite(ledPin, LOW); 
delay(1000); 
}
PPrroobblleemmss yyoouu mmaayy eennccoouunntteerr 
wwiitthh mmuullttiippllee sseennssoorrss...... 
If, when adding more sensors, you find that the 
temperature is inconsistant, this indicates that 
the sensors are interfering with each other when 
switching the analog reading circuit from one pin 
to the other. You can fix this by doing two 
delayed readings and tossing out the first one
PPrroojjeettoo 000055:: 
SSeennssiinngg LLiigghhtt
SSeennssiinngg LLiigghhtt 
Uma forma bastante prática de medir a 
intensidade da luz é usando um LDR 
LDR = Light-Dependent Resistor 
Podem ser chamados de Photoresistores 
Quanto maior a intensidade da luz, menor a 
resistência 
20MΩ = Ambiente “muito escuro” 
20KΩ = Ambiente “muito iluminado”
SSeennssiinngg LLiigghhtt
LLDDRR aass aa VVoollttaaggee DDiivviiddeerr 
A voltage divider is just two resistors in series 
connected between a voltage supply and ground. If 
R1 is connected to the voltage supply and R2 is 
connected to ground then the voltage at the junction 
between the two resistors is: 
V =V cc∗ 
R2 
R1+ R2
LLDDRR aass aa VVoollttaaggee DDiivviiddeerr 
If R1 is the photoresistor, the 
voltage will increase with 
increasing light intensity. If R2 
is the photoresistor, the voltage 
will decrease with increasing 
light intensity. 
V =V cc∗ 
R2 
R1+ R2
SSeennssiinngg LLiigghhtt 
int ledPin = 13; 
int sensorPin = 1; 
int period = 400; 
int limit = 1000; 
int acesso = 0; 
void setup() 
{ 
pinMode(ledPin, OUTPUT); 
Serial.begin(9600); 
} 
void loop() 
{ 
int rawValue = 
analogRead(sensorPin); 
if (rawValue < limit){ 
digitalWrite(ledPin, LOW); 
if (acesso != 1){ 
acesso = 1; 
Serial.println("ligado"); 
} 
} 
else{ 
digitalWrite(ledPin, HIGH); 
Serial.println(rawValue); 
if (acesso != 0){ 
acesso = 0; 
Serial.println("apagado"); 
} 
} 
delay(period); 
}
PPrroojjeettoo 000066:: 
EEnnvviiaannddoo IInnffoorrmmaaççõõeess 
ppaarraa oo AArrdduuiinnoo vviiaa SSeerriiaall
EEnnvviiaannddoo IInnffoorrmmaaççõõeess VViiaa SSeerriiaall 
int ledPin = 13; 
int tempoEspera = 500; 
void setup(){ 
pinMode(ledPin, OUTPUT); 
Serial.begin(9600); 
} 
void loop(){ 
char ch; 
if (Serial.available()){ 
ch = Serial.read(); 
if (ch == '0'){ 
digitalWrite(ledPin, LOW); 
}else{ 
digitalWrite(ledPin, HIGH); 
} 
} 
delay(tempoEspera); 
}
EEnnvviiaannddoo IInnffoorrmmaaççõõeess VViiaa SSeerriiaall
PPrroojjeettoo 000077:: 
PPyySSeerriiaall
apt-get install python-serial -y
PPyySSeerriiaall 
from serial import Serial 
porta = '/dev/ttyACM1' 
ser=Serial(porta, 19200, timeout=10) 
ser.readline() #descartar a primeira leitura 
info=ser.readline() 
ser.close() 
print info
FFuunnççããoo UUttiilliittáárriiaa:: 
EEnnvviiaarr EE--MMaaiill 
import sys 
import smtplib 
from email.MIMEText import MIMEText 
to = 'marvin.lemos@tce.pi.gov.br' 
user = 'marvinlemos@gmail.com' 
password = 'senhaaqui' 
def mandar_email(mensagem): 
msg = MIMEText(mensagem) 
msg['Subject'] = 'Teste' 
msg['From'] = "Marvin Lemos" 
msg['Reply-to'] = "Marvin Lemos " 
msg['To'] = to 
smtpserver = 
smtplib.SMTP("smtp.gmail.com",587) 
smtpserver.ehlo() 
smtpserver.starttls() 
smtpserver.ehlo 
smtpserver.login(user, password) 
try: 
smtpserver.sendmail(user,to, 
msg.as_string()) 
print "e-mail encaminhado" 
except: 
print "falha ao transmitir e-mail" 
print sys.exc_info() 
smtpserver.close()
RReeffeerrêênncciiaass 
Arduino Starter Kit Manual: A Complete 
Beginners Guide To The Arduino 
http://www.ladyada.net/learn/arduino/ 
http://blog.justen.eng.br/

Arduino001 110911083100-phpapp02

  • 1.
    WWoorrkksshhoopp AArrdduuiinnoo FranciscoMarcelino Almeida franciscomarcelinoalmeida@gmail.com Marcus Vinícius de Sousa Lemos marvinlemos@gmail.com
  • 2.
    AApprreesseennttaaççããoo Sobre oprofessor: Marcus Vinícius de Sousa Lemos Mestre em Informática Aplicada pela Universidade de Fortaleza – Unifor Professor da Universidade Estadual do Piauí – Uespi Pesquisador do Laboratório de Inteligência Computacional – Laic - Uespi Auditor Fiscal de Controle Externo (Informática) – TCE/PI Áreas de Interesse: Redes de Sensores, Inteligência Computacional, Robótica marvinlemos@gmail.com http://www.marvinlemos.net @marvinlemos
  • 3.
    AApprreesseennttaaççããoo Sobre oprofessor: Francisco Marcelino Almeida de Araújo Mestrando em Biotecnologia pela Universidade Federal do Piauí - UFPI Professor do Instituto Federal do Piauí – IFPI Áreas de Interesse: Inteligência Computacional, Processamento de Imagens, Microeletrônica, Nanotecnologia franciscomarcelinoalmeida@gmail.com http://www.arduinopi.net @keyjin
  • 4.
  • 5.
    MMoottiivvaaççããoo Convergência: tecnologia,criação e arte Baixo custo de microcontroladores Plataformas de hardware abertas sendo criados Febre Do It Yourself
  • 6.
    MMoottiivvaaççããoo Diversas aplicaçõespráticas Robôs Roupas eletrônicas Desenvolvimento de celulares customizados Instrumentos musicais Paredes interativas Redes de Sensores
  • 7.
    MMiiccrrooccoonnttrroollaaddoorr Também conhecidocomo MCU (Microcontroller Unit) “Computador em um chip” Programado para funções específicas (geralmente para interagir com atuadores) Geralmente embarcados em outros dispositivos
  • 8.
  • 9.
    AATTMMeeggaa332288PP Características doAtmega328: RISC Processador: 8-bit Flash (Kbytes): 32 EEPROM (Bytes): 1K SRAM (Bytes): 2K PWM Channels: 6 Vcc (V): 1.8 – 5.5
  • 10.
  • 11.
    AArrdduuiinnoo Placa +Microcontrolador + USB + Sockets Pode ser conectado a uma grande variedade de dispositivos: Sensores: Luz, temperatura, presença, etc. Displays: LCD, touchscreen Motores e servos GPS Comunicação sem fio: 802.15.4, Zigbee, Bluetooth Ethernet Alimentação: Bateria de 9V ou por meio da USB
  • 12.
    Da página oficial(www.arduino.org): Arduino is an open­source electronics prototyping platform based on flexible, easy­to­use hardware and software. It’s intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments. Arduino can sense the environment by receiving input from a variety of sensors and can affect its surroundings by controlling lights, motors, and other actuators. The microcontroller on the board is programmed using the Arduino programming language (based on Wiring) and the Arduino development environment (based on Processing). Arduino projects can be stand­alone or they can communicate with software on running on a computer (e.g. Flash, Processing,MaxMSP). ”
  • 13.
  • 14.
  • 15.
  • 16.
    AArrdduuiinnoo Criado naItália (em 2005) pelo Mássimo Banzi, no Interaction Design Ivrea Baixo custo de produção e alta aplicabilidade Computação física e redes de sensores Permite que os programas (ou sketches) sejam escritos em uma linguagem de alto nível chamada Processing Processing é um ambiente e linguagem de programação para criar imagens, animação e interação http://processing.org/
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
    VVeerrssõõeess ddoo AArrdduuiinnoo Arduino Romeo All-in-one
  • 22.
    CCaarraacctteerrííssttiiccaass ddoo AArrdduuiinnooUUnnoo Microcontrolador ATmega328P Tensão Operacional 5 V Tensão de Alimentação 7-12 V Pinos de I/O digitais 14 (dos quais 6 podem ser saídas PWM) Pinos de entrada analógica 6 Corrente contínua por pino de I/O 40 mA Corrente contínua para o pino de 3.3 V 50 mA Memória Flash 2KB EEPROM 1K Frequência de clock 16 MHz
  • 23.
  • 25.
    OOkk...... bbuutt ffiirrsstt,,lleett''ss ggoo sshhooppppiinngg
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
    AAmmbbiieennttee ddee DDeesseennvvoollvviimmeennttoo O ambiente de desenvolvimento pode ser baixado em: ● http://arduino.cc/en/Main/Software ● A última versão é a 0022 O arquivo compactado deve ser extraído em qualquer diretório do sistema Será criado um diretório arduino-XXXX, onde XXXX é a versão baixado (por exemplo: arduino-0022).
  • 31.
  • 32.
  • 33.
    CCoonnffiigguurraannddoo oo AAmmbbiieennttee Linux Conecte o Arduino ao seu computador, por meio da porta USB e espere alguns segundos até que o sistema recoheça o dispositivo Para confirmar se o dispositivo foi reconhecido, abra um terminal e execute o comando abaixo: $ dmesg Procure, nas últimas linhas, por uma linha mais ou menos parecida com a de baixo: [56999.967291] usb 5-2: FTDI USB Serial Device converter now attached to ttyUSB0 Essa mensagem indica que o kernel reconheceu um novo dispositivo conectado na porta /dev/ttyUSB0. O sistema nem sempre reconhece como /dev/ttyUSB0, mas em geral é /dev/tty<alguma_coisa>
  • 34.
    CCoonnffiigguurraannddoo oo AAmmbbiieennttee Windows: http://arduino.cc/en/Guide/Windows Mac OSX: http://arduino.cc/en/Guide/MacOSX
  • 35.
    CCoonnffiigguurraannddoo oo AAmmbbiieennttee Configurar o ambiente de desenvolvimento para utilizar a porta detectado pelo sistema: “Tools” → “Serial Port” Configurar a placa utilizada: “Tools” → “Board” e escolher a opção “Arduino Uno”
  • 36.
    ““HHeelllloo WWoorrlldd”” Oprimeiro projeto será o equivalente “Hello World” para dispositivos embarcados Como não há um terminal, iremos fazer piscar (blink) um LED. A placa do Arduino vem com um LED embutido, conectado ao pin digital 13 Esta conexão faz com que o pin 13 seja sempre de saída, mas como o LED usa pouca corrente, ainda é possível conectar outras coisas na saída
  • 37.
    ““HHeelllloo WWoorrlldd”” Código: int ledPin = 13; void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(ledPin, LOW); // set the LED off delay(1000); // wait for a second }
  • 38.
    ““HHeelllloo WWoorrlldd”” Parafazer o upload para a placa, deve-se clicar no botão específico:
  • 39.
    EExxpplliiccaannddoo oo ccóóddiiggoo Um sketch Arduino possui, no mínimo duas funções: setup(): Executada apenas uma vez, durante a inicialização loop(): Função principal
  • 40.
    EExxpplliiccaannddoo oo ccóóddiiggoo setup() pinMode(ledPin, OUTPUT); A função pinMode define o modo de operação do pino. Neste caso, definimos que o pino 13 (ledPin) será de saída
  • 41.
    EExxpplliiccaannddoo oo ccóóddiiggoo loop() digitalWrite(ledPin, HIGH); Permite ligar (5V) ou desligar (0V) um pino digital Neste código especifico, estamos ligando (constante HIGH) o pino 13 (ledPin) Por meio da constante LOW, podemos desligar o pino delay(200) A função delay() faz com que o processado fique X milisegundos em espera
  • 42.
  • 43.
    BBrreeaaddbbooaarrdd ((PPrroottoobbooaarrdd)) Breadboard(ou protoboard ou Matriz de Contato) Dispositivo que permite a construção de circuitos sem a necessidade de solda Fácil prototipação Na superfície há uma base de plástico com vários orifícios onde são encaixados os componentes Na parte inferior há contatos metálicos que interligam os componentes inseridos na placa
  • 44.
    BBrreeaaddbbooaarrdd ((PPrroottoobbooaarrdd)) Breadboard(ou protoboard ou Matriz de Contato) Os furos das linhas verticais estão interligados
  • 45.
    RReessiissttoorr Resistor: Componenteprojetado para gerar uma resistência à corrente elétrica e, consequentemente, diminuir a tensão entre os dois terminais Medido em Ohm e é representado pela letra grega Omega ( Ω ) Os pinos digitais geram uma tensão de 5 V (DC) a 40mA LEDs geralmente precisam de uma tensão de 2 V e corrente de 10mA (para brilhar razoavelmente bem)
  • 46.
    RReessiissttoorr Resistor: Precisamosde um resistor capaz de reduzir a tensão de 5 para 2 (Voltage Drop) e a corrente de 40mA para 10mA Para descobrir o valor do resistor apropriado, vamos utilizar a Lei de Ohm: I = V/R ou R = V/ I ou R = (Tensão fornecida – Tensão apropriada) / I ● R = (5 – 2)/0.01 = 3/0.01 = 300 Ω
  • 47.
    RReessiissttoorr Como leros valores dos resistores:
  • 48.
  • 49.
    LLEEDD LED: LightEmmiting Diode Diodo é um componente que permite que a corrente siga apenas uma direção Um LED é um diodo que emite luz
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
    LLEEDD FFllaasshheerr Código: int ledPin = 10; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }
  • 55.
  • 56.
    PPootteenncciiôômmeettrroo O potenciômetroé simplesmente um resistor cuja resistência pode ser ajustada Por exemplo: em um potenciômetro de 4K7, a resistência pode variar entre 0 e 4700 Ω Possui três pernas: Conectando apenas duas, o potenciômetro transforma-se em um resistor variável Conectando 3 e aplicando uma tensão, o potenciômetro transforma-se em um divisor de tensão (voltage divider)
  • 57.
    PPrroojjeettoo 000022:: IInntteerraaccttiivveeLLEEDD CChhaassee EEffffeecctt
  • 58.
  • 59.
  • 60.
    IInntteerraaccttiivvee LLEEDD CChhaasseeEEffffeecctt byte ledPin[] = {11,12,13}; int ledDelay; //delay between changes int direcao = 1; int currentLed = 0; unsigned long changeTime; int potPin = 2; //select the input pin for the pot void setup() { for (int x = 0; x < 3; x++){ pinMode(ledPin[x], OUTPUT); } changeTime = millis(); } void loop(){ ledDelay = analogRead(potPin); if ((millis() - changeTime) > ledDelay){ changeLed(); changeTime = millis(); } } void changeLed(){ for (int x = 0; x < 3; x++){ digitalWrite(ledPin[x], LOW); } digitalWrite(ledPin[currentLed], HIGH); currentLed += direcao; if (currentLed == 2) { direcao = -1; } if (currentLed == 0) { direcao = 1; } }
  • 61.
    IInntteerraaccttiivvee LLEEDD CChhaasseeEEffffeecctt Considerações: Inicialmente declaramos uma variável para o potenciômetro: int potPin = 2; O potenciômetro está conectado a uma porta analógica Para ler o valor de uma porta analógica, utilizamos a função analogRead Um Arduino possui 6 portas análogicas com um conversor analógico-digital de 10bits Uma porta análogica pode ler tensão entre 0V e 5V em valores inteiros entre 0 (0V) e 1023 (5V). Resolução de: 5V / 1024 unidades ou 0.0049V (4.9mV) por unidade
  • 62.
  • 63.
  • 64.
  • 65.
    TTaaccttiillee SSwwiittcchh TactileSwitch Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 66.
    TTaaccttiillee SSwwiittcchh Alémde controlar a corrente, funcionam como ótimos dispositivos de entrada No próximo exemplo, vamos configurar a corrente em um pino para 5V ou terra e usar a função digitalRead para consultar o estado do pino: HIGH ou LOW
  • 67.
    TTaaccttiillee SSwwiittcchh /* * Switch test program */ // Switch connected to digital pin 2 int switchPin = 2; void setup() { // set up Serial library at 9600 bps Serial.begin(9600); // sets the digital pin as input to read switch pinMode(switchPin, INPUT); } void loop() { Serial.print("Valor do Switch: "); // Read the pin and display the value Serial.println(digitalRead(switchPin)); delay(100); }
  • 68.
    TTaaccttiillee SSwwiittcchh Agora,vamos utilizar um fio para alternar a conexão do pino 2 entre 5V e o terra: Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 69.
    TTaaccttiillee SSwwiittcchh Switchinput tied HIGH (5v) Switch input tied LOW (ground)
  • 70.
  • 71.
    TTaaccttiillee SSwwiittcchh Fonte:http://www.ladyada.net/learn/arduino/lesson5.html
  • 72.
    FFllooaattiinngg hhiigghh aabboovveetthhee cclloouuddss Vamos substituir os fios pelo tactile switch O problema é que o switch só pode conectar e desconectar dois fios. Ele não pode alternar conexões Two alternative switch wiring possibilities
  • 73.
    FFllooaattiinngg hhiigghh aabboovveetthhee cclloouuddss For example, in these schematics we can connect and disconnect pin 2 to 5V, or we can connect and disconnect pin 2 to ground. In both cases, as long as the button is held down, the pin is connected to a valid input voltage. When the button is released, though, pin 2 is not connected to anything. This is called a floating input voltage. Basically, it's invalid input!
  • 74.
    RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp Umasolução é usar um switch que alterna conexões, como o utilizado no diagrama abaixo: Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 75.
    RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp Outrasolução seria utilizar um recurso conhecido como resistor pull-down: No esquema abaixo, o resistor pull-down está representado pelo resistor de 10Kohm Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 76.
    RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp Quandoo switch for pressionado, o resistor de 100Ω estará conectado diretamente ao 5V. Quando o switch for liberado, o resistor de 100Ω estará conectado ao resistor de 10K, o qual “puxa-o” (pull-down) para o terra
  • 77.
    RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp Fonte:http://www.ladyada.net/learn/arduino/lesson5.html
  • 78.
  • 79.
    RReessiissttoorr PPuullll--ddoowwnn//PPuullll--uupp Resistorpull-up: Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
    IInntteerraaccttiivvee LLEEDD FFllaasshheerr ● Código int ledPin = 4; // choose the pin for the LED int inPin = 5; // choose the input pin (for a pushbutton) int val = 0; // variable for reading the pin status void setup() { pinMode(ledPin, OUTPUT); // declare LED as output pinMode(inPin, INPUT); // declare pushbutton as input } void loop(){ val = digitalRead(inPin); // read input value if (val == HIGH) { // check if the input is HIGH digitalWrite(ledPin, LOW); // turn LED OFF } else { digitalWrite(ledPin, HIGH); // turn LED ON } }
  • 85.
    EExxeerrccíícciioo Criar umprojeto semelhante ao demonstrado no video: Video 001
  • 86.
  • 87.
    LLMM3355//LLMM3366 –– TTPPMM3355//TTPPMM3366 Sensor de temperatura analógico Estado-sólido (não usa mércurio) A medida que a temperatura muda, a tensão que atravessa um diodo cresce a uma taxa conhecida Não precisa ser calibrado Barato e fácil de usar
  • 88.
    LLMM3355//LLMM3366 –– TTPPMM3355//TTPPMM3366 a) LM35 b) LM36 Fonte: http://www.ladyada.net/learn/sensors/tmp36.html
  • 89.
    LLMM3355//LLMM3366 –– TTPPMM3355//TTPPMM3366 Para converter a tensão em temperatura: LM35: Temp in ºC: (V in mV) / 10 LM36: – Temp in ºC: [(V in mV - 500)] / 10
  • 90.
  • 91.
    LLeennddoo aa TTeemmppeerraattuurraa Devemos conectar o pino do saída do sensor diretamente em uma porta analógica do Arduino A tensão de saída do sensor será de 0 a 1.75 (aproximadamente) O tensão lida pelo Arduino é convertido em um valor binário pelo Conversor Analógico Digital Assim, para descobrirmos a temperatura, devemos fazer uma conversão:
  • 92.
    LLeennddoo aa TTeemmppeerraattuurraa Voltage at pin in milliVolts = (reading from ADC) * (5000/1024) This formula converts the number 0-1023 from the ADC into 0- 5000mV (= 5V) Voltage at pin in milliVolts = (reading from ADC) * (3300/1024) This formula converts the number 0-1023 from the ADC into 0- 3300mV (= 3.3V) Para converter a tensão em temperatura, basta utilizarmos a fórmulas definidas anteriormente...
  • 93.
    LLeennddoo aa TTeemmppeerraattuurraa int temperaturaPin = 0; int ledPin = 12; float vIn = 5.0; //Tensao de entrada void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(ledPin, HIGH); //ler o valor do sensor float leitura = analogRead(temperaturaPin); float voltagem = (leitura * vIn) / 1023.0; //Imprimir a tensão Serial.print(voltagem); Serial.println(" volts"); //Converter tensao para temperatura float temperaturaC = voltagem * 100.0; delay(1000); Serial.print(temperaturaC); Serial.println(" graus em C"); Serial.println(" "); digitalWrite(ledPin, LOW); delay(1000); }
  • 94.
    PPrroobblleemmss yyoouu mmaayyeennccoouunntteerr wwiitthh mmuullttiippllee sseennssoorrss...... If, when adding more sensors, you find that the temperature is inconsistant, this indicates that the sensors are interfering with each other when switching the analog reading circuit from one pin to the other. You can fix this by doing two delayed readings and tossing out the first one
  • 95.
  • 96.
    SSeennssiinngg LLiigghhtt Umaforma bastante prática de medir a intensidade da luz é usando um LDR LDR = Light-Dependent Resistor Podem ser chamados de Photoresistores Quanto maior a intensidade da luz, menor a resistência 20MΩ = Ambiente “muito escuro” 20KΩ = Ambiente “muito iluminado”
  • 97.
  • 98.
    LLDDRR aass aaVVoollttaaggee DDiivviiddeerr A voltage divider is just two resistors in series connected between a voltage supply and ground. If R1 is connected to the voltage supply and R2 is connected to ground then the voltage at the junction between the two resistors is: V =V cc∗ R2 R1+ R2
  • 99.
    LLDDRR aass aaVVoollttaaggee DDiivviiddeerr If R1 is the photoresistor, the voltage will increase with increasing light intensity. If R2 is the photoresistor, the voltage will decrease with increasing light intensity. V =V cc∗ R2 R1+ R2
  • 100.
    SSeennssiinngg LLiigghhtt intledPin = 13; int sensorPin = 1; int period = 400; int limit = 1000; int acesso = 0; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { int rawValue = analogRead(sensorPin); if (rawValue < limit){ digitalWrite(ledPin, LOW); if (acesso != 1){ acesso = 1; Serial.println("ligado"); } } else{ digitalWrite(ledPin, HIGH); Serial.println(rawValue); if (acesso != 0){ acesso = 0; Serial.println("apagado"); } } delay(period); }
  • 101.
    PPrroojjeettoo 000066:: EEnnvviiaannddooIInnffoorrmmaaççõõeess ppaarraa oo AArrdduuiinnoo vviiaa SSeerriiaall
  • 102.
    EEnnvviiaannddoo IInnffoorrmmaaççõõeess VViiaaSSeerriiaall int ledPin = 13; int tempoEspera = 500; void setup(){ pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop(){ char ch; if (Serial.available()){ ch = Serial.read(); if (ch == '0'){ digitalWrite(ledPin, LOW); }else{ digitalWrite(ledPin, HIGH); } } delay(tempoEspera); }
  • 103.
  • 104.
  • 105.
  • 106.
    PPyySSeerriiaall from serialimport Serial porta = '/dev/ttyACM1' ser=Serial(porta, 19200, timeout=10) ser.readline() #descartar a primeira leitura info=ser.readline() ser.close() print info
  • 107.
    FFuunnççããoo UUttiilliittáárriiaa:: EEnnvviiaarrEE--MMaaiill import sys import smtplib from email.MIMEText import MIMEText to = 'marvin.lemos@tce.pi.gov.br' user = 'marvinlemos@gmail.com' password = 'senhaaqui' def mandar_email(mensagem): msg = MIMEText(mensagem) msg['Subject'] = 'Teste' msg['From'] = "Marvin Lemos" msg['Reply-to'] = "Marvin Lemos " msg['To'] = to smtpserver = smtplib.SMTP("smtp.gmail.com",587) smtpserver.ehlo() smtpserver.starttls() smtpserver.ehlo smtpserver.login(user, password) try: smtpserver.sendmail(user,to, msg.as_string()) print "e-mail encaminhado" except: print "falha ao transmitir e-mail" print sys.exc_info() smtpserver.close()
  • 108.
    RReeffeerrêênncciiaass Arduino StarterKit Manual: A Complete Beginners Guide To The Arduino http://www.ladyada.net/learn/arduino/ http://blog.justen.eng.br/