Professional Documents
Culture Documents
Apresentao
Sobre o professor: Marcus Vincius de Sousa Lemos
Mestre em Informtica Aplicada pela Universidade de Fortaleza Unifor Professor da Universidade Estadual do Piau Uespi Pesquisador do Laboratrio de Inteligncia Computacional Laic - Uespi Auditor Fiscal de Controle Externo (Informtica) TCE/PI
Apresentao
Sobre o professor: Francisco Marcelino Almeida de Arajo
Mestrando em Biotecnologia pela Universidade Federal do Piau - UFPI Professor do Instituto Federal do Piau IFPI
Arduino
Motivao
Convergncia: tecnologia, criao e arte Baixo custo de microcontroladores Plataformas de hardware abertas sendo criados Febre DoItYourself
Motivao
Diversas aplicaes prticas
Robs Roupas eletrnicas Desenvolvimento de celulares customizados Instrumentos musicais Paredes interativas Redes de Sensores
Microcontrolador
Tambm conhecido como MCU (Microcontroller Unit) Computador em um chip Programado para funes especficas (geralmente para interagir com atuadores) Geralmente embarcados em outros dispositivos
Microcontrolador
Basic Stamp
ATMega328P
Caractersticas do Atmega328:
RISC Processador: 8-bit Flash (Kbytes): 32 EEPROM (Bytes): 1K SRAM (Bytes): 2K PWM Channels: 6 Vcc (V): 1.8 5.5
ATMega328P
Arduino
Placa + Microcontrolador + USB + Sockets Pode ser conectado a uma grande variedade de dispositivos:
Sensores: Luz, temperatura, presena, etc. Displays: LCD, touchscreen Motores e servos GPS Comunicao sem fio: 802.15.4, Zigbee, Bluetooth Ethernet
Da pgina oficial (www.arduino.org): Arduino is an opensource electronics prototyping platform based on flexible, easytouse hardware and software. Its intended for artists, designers, hobbyists, and anyone interested in creating interactive objectsorenvironments. Arduinocansensetheenvironmentbyreceivinginputfromavarietyof sensorsandcanaffectitssurroundingsbycontrollinglights,motors, andotheractuators.Themicrocontrollerontheboardisprogrammed usingtheArduinoprogramminglanguage(basedonWiring)andthe Arduinodevelopmentenvironment(basedonProcessing).Arduino projectscanbestandaloneortheycancommunicatewithsoftwareon runningonacomputer(e.g.Flash,Processing,MaxMSP).
Arduino Open-Source
Arduino em Papel
Arduino
Criado na Itlia (em 2005) pelo Mssimo Banzi, no Interaction Design Ivrea Baixo custo de produo e alta aplicabilidade Computao fsica e redes de sensores Permite que os programas (ou sketches) sejam escritos em uma linguagem de alto nvel chamada Processing Processing um ambiente e linguagem de programao para criar imagens, animao e interao http://processing.org/
Verses do Arduino
Arduino Uno
Verses do Arduino
Arduino Nano
Verses do Arduino
Arduino Mega
Verses do Arduino
Arduino Lilypad
Verses do Arduino
Arduino Romeo All-in-one
Arduino Diecimila/Uno
Outros Componentes
Sensores
Hello World
Ambiente de Desenvolvimento
O ambiente de desenvolvimento pode ser baixado em:
O arquivo compactado deve ser extrado em qualquer diretrio do sistema Ser criado um diretrio arduino-XXXX, onde XXXX a verso baixado (por exemplo: arduino-0022).
Ambiente de Desenvolvimento
Ambiente de Desenvolvimento
Configurando o Ambiente
Linux
Conecte o Arduino ao seu computador, por meio da porta USB e espere alguns segundos at que o sistema recohea 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>
Configurando o Ambiente
Windows:
http://arduino.cc/en/Guide/Windows
Mac OSX:
http://arduino.cc/en/Guide/MacOSX
Configurando o Ambiente
Configurar o ambiente de desenvolvimento para utilizar a porta detectado pelo sistema:
Tools Serial Port
Hello World
O primeiro projeto ser o equivalente Hello World para dispositivos embarcados Como no h um terminal, iremos fazer piscar (blink) um LED. A placa do Arduino vem com um LED embutido, conectado ao pin digital 13 Esta conexo faz com que o pin 13 seja sempre de sada, mas como o LED usa pouca corrente, ainda possvel conectar outras coisas na sada
Hello World
Cdigo:
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 }
Hello World
Para fazer o upload para a placa, deve-se clicar no boto especfico:
Explicando o cdigo
Um sketch Arduino possui, no mnimo duas funes:
setup():
Executada apenas uma vez, durante a inicializao
loop():
Funo principal
Explicando o cdigo
setup()
pinMode(ledPin, OUTPUT); A funo pinMode define o modo de operao do pino. Neste caso, definimos que o pino 13 (ledPin) ser de sada
Explicando o cdigo
loop()
digitalWrite(ledPin, HIGH);
Permite ligar (5V) ou desligar (0V) um pino digital Neste cdigo especifico, estamos ligando (constante HIGH) o pino 13 (ledPin) Por meio da constante LOW, podemos desligar o pino
delay(200)
A funo delay() faz com que o processado fique X milisegundos em espera
Revisando Componentes:
Breadboard (Protoboard)
Breadboard (ou protoboard ou Matriz de Contato)
Dispositivo que permite a construo de circuitos sem a necessidade de solda Fcil prototipao Na superfcie h uma base de plstico com vrios orifcios onde so encaixados os componentes Na parte inferior h contatos metlicos que interligam os componentes inseridos na placa
Breadboard (Protoboard)
Breadboard (ou protoboard ou Matriz de Contato)
Resistor
Resistor: Componente projetado para gerar uma resistncia corrente eltrica e, consequentemente, diminuir a tenso entre os dois terminais Medido em Ohm e representado pela letra grega Omega ( ) Os pinos digitais geram uma tenso de 5 V (DC) a 40mA LEDs geralmente precisam de uma tenso de 2 V e corrente de 10mA (para brilhar razoavelmente bem)
Resistor
Resistor:
Precisamos de um resistor capaz de reduzir a tenso 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 = (Tenso fornecida Tenso apropriada) / I
Resistor
Como ler os valores dos resistores:
Resistor
LED
LED:
Light Emmiting Diode Diodo um componente que permite que a corrente siga apenas uma direo Um LED um diodo que emite luz
LED Flasher
Projeto 001:
LED Flasher
Componentes:
LED Flasher
Conexo:
LED Flasher
LED Flasher
Cdigo:
int ledPin = 10; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }
Revisando Componentes:
Potencimetro
Potencimetro
O potencimetro simplesmente um resistor cuja resistncia pode ser ajustada Por exemplo: em um potencimetro de 4K7, a resistncia pode variar entre 0 e 4700 Possui trs pernas:
Conectando apenas duas, o potencimetro transforma-se em um resistor varivel Conectando 3 e aplicando uma tenso, o potencimetro transforma-se em um divisor de tenso (voltage divider)
Projeto 002:
O potencimetro est conectado a uma porta analgica Para ler o valor de uma porta analgica, utilizamos a funo analogRead Um Arduino possui 6 portas anlogicas com um conversor analgico-digital de 10bits Uma porta anlogica pode ler tenso entre 0V e 5V em valores inteiros entre 0 (0V) e 1023 (5V).
Resoluo de: 5V / 1024 unidades ou 0.0049V (4.9mV) por unidade
Revisando Componentes:
Tactile Switch
Tactile Switch
Tactile Switch
Tactile Switch
Tactile Switch
Tactile Switch
Tactile Switch
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
Tactile Switch
Alm de controlar a corrente, funcionam como timos dispositivos de entrada
No prximo exemplo, vamos configurar a corrente em um pino para 5V ou terra e usar a funo digitalRead para consultar o estado do pino: HIGH ou LOW
Tactile Switch
/* * 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); }
Tactile Switch
Agora, vamos utilizar um fio para alternar a conexo do pino 2 entre 5V e o terra:
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
Tactile Switch
Switch input tied LOW (ground) Switch input tied HIGH (5v)
Tactile Switch
Tactile Switch
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
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!
Resistor Pull-down/Pull-up
Uma soluo usar um switch que alterna conexes, como o utilizado no diagrama abaixo:
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
Resistor Pull-down/Pull-up
Outra soluo 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
Resistor Pull-down/Pull-up
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
Resistor Pull-down/Pull-up
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
Resistor Pull-down/Pull-up
Resistor Pull-down/Pull-up
Resistor pull-up:
Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
Resistor Pull-down/Pull-up
Cdigo
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); pinMode(inPin, INPUT); } // declare LED as output // 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 } }
Exerccio
Criar um projeto semelhante ao demonstrado no video:
Video 001
LM35/LM36 TPM35/TPM36
Sensor de temperatura analgico Estado-slido (no usa mrcurio) A medida que a temperatura muda, a tenso que atravessa um diodo cresce a uma taxa conhecida No precisa ser calibrado Barato e fcil de usar
LM35/LM36 TPM35/TPM36
a) LM35 b) LM36
Fonte: http://www.ladyada.net/learn/sensors/tmp36.html
LM35/LM36 TPM35/TPM36
Para converter a tenso em temperatura:
LM35:
Temp in C: (V in mV) / 10
LM36:
Lendo a Temperatura
Lendo a Temperatura
Devemos conectar o pino do sada do sensor diretamente em uma porta analgica do Arduino A tenso de sada do sensor ser de 0 a 1.75 (aproximadamente) O tenso lida pelo Arduino convertido em um valor binrio pelo Conversor Analgico Digital Assim, para descobrirmos a temperatura, devemos fazer uma converso:
Lendo a Temperatura
Voltage at pin in milliVolts = (reading from ADC) * (5000/1024)
This formula converts the number 0-1023 from the ADC into 05000mV (= 5V)
Lendo a Temperatura
int temperaturaPin = 0; int ledPin = 12; float vIn = 5.0; //Tensao de entrada void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } delay(1000); Serial.print(temperaturaC); Serial.println(" graus em C"); Serial.println(" ");
digitalWrite(ledPin, LOW); void loop() { delay(1000); digitalWrite(ledPin, HIGH); //ler o valor do sensor float leitura = analogRead(temperaturaPin); } float voltagem = (leitura * vIn) / 1023.0; //Imprimir a tenso Serial.print(voltagem); Serial.println(" volts");
Sensing Light
Uma forma bastante prtica 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 resistncia
20M = Ambiente muito escuro
Sensing Light
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.
R2 V =V cc R1 + R 2
Sensing Light
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);
PySerial
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
Referncias
Arduino Starter Kit Manual: A Complete Beginners Guide To The Arduino http://www.ladyada.net/learn/arduino/ http://blog.justen.eng.br/