Oficina Arduino
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Oficina Arduino

on

  • 5,690 views

 

Statistics

Views

Total Views
5,690
Views on SlideShare
5,689
Embed Views
1

Actions

Likes
1
Downloads
421
Comments
0

1 Embed 1

http://paper.li 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Oficina Arduino Presentation Transcript

  • 1. Workshop Arduino Francisco Marcelino Almeida franciscomarcelinoalmeida@gmail.com Marcus Vinícius de Sousa Lemos marvinlemos@gmail.com
  • 2. ApresentaçãoSobre 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óticamarvinlemos@gmail.comhttp://www.marvinlemos.net@marvinlemos
  • 3. ApresentaçãoSobre 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, Nanotecnologiafranciscomarcelinoalmeida@gmail.comhttp://www.arduinopi.net@keyjin
  • 4. Arduino
  • 5. MotivaçãoConvergência: tecnologia, criação e arteBaixo custo de microcontroladoresPlataformas de hardware abertas sendocriadosFebre Do It Yourself
  • 6. MotivaçãoDiversas aplicações práticas Robôs Roupas eletrônicas Desenvolvimento de celulares customizados Instrumentos musicais Paredes interativas Redes de Sensores
  • 7. MicrocontroladorTambém conhecido como MCU (MicrocontrollerUnit)“Computador em um chip”Programado para funções específicas(geralmente para interagir com atuadores)Geralmente embarcados em outros dispositivos
  • 8. MicrocontroladorATmega328 PIC 16F628A Basic Stamp
  • 9. ATMega328PCaracterí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
  • 10. ATMega328P
  • 11. ArduinoPlaca + Microcontrolador + USB +SocketsPode ser conectado a uma grandevariedade de dispositivos: Sensores: Luz, temperatura, presença, etc. Displays: LCD, touchscreen Motores e servos GPS Comunicação sem fio: 802.15.4, Zigbee, Bluetooth EthernetAlimentação: Bateria de 9V ou pormeio 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. Arduino éOpen-Source
  • 14. Arduino com Protoboard
  • 15. Arduino em Papel
  • 16. ArduinoCriado na Itália (em 2005) pelo Mássimo Banzi, noInteraction Design IvreaBaixo custo de produção e alta aplicabilidadeComputação física e redes de sensoresPermite que os programas (ou sketches) sejamescritos em uma linguagem de alto nível chamadaProcessingProcessing é um ambiente e linguagem deprogramação para criar imagens, animação einteraçãohttp://processing.org/
  • 17. Versões do ArduinoArduino Uno
  • 18. Versões do ArduinoArduino Nano
  • 19. Versões do ArduinoArduino Mega
  • 20. Versões do ArduinoArduino Lilypad
  • 21. Versões do ArduinoArduino Romeo All-in-one
  • 22. Características do Arduino UnoMicrocontrolador ATmega328PTensão Operacional 5VTensão de Alimentação 7-12 VPinos de I/O digitais 14 (dos quais 6 podem ser saídas PWM)Pinos de entrada analógica 6Corrente contínua por pino de I/O 40 mACorrente contínua para o pino de 3.3 V 50 mAMemória Flash 2KBEEPROM 1KFrequência de clock 16 MHz
  • 23. Arduino Diecimila/Uno
  • 24. Ok... but first, lets go shopping
  • 25. Kit Para Iniciante
  • 26. Outros Componentes
  • 27. Sensores
  • 28. “Hello World”
  • 29. Ambiente de DesenvolvimentoO ambiente de desenvolvimento pode serbaixado em:● http://arduino.cc/en/Main/Software● A última versão é a 0022O arquivo compactado deve ser extraído emqualquer diretório do sistemaSerá criado um diretório arduino-XXXX, ondeXXXX é a versão baixado (por exemplo:arduino-0022).
  • 30. Ambiente de DesenvolvimentoExecutar o arquivo arduino
  • 31. Ambiente de Desenvolvimento
  • 32. Configurando o Ambiente 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 converternow 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>
  • 33. Configurando o AmbienteWindows: http://arduino.cc/en/Guide/WindowsMac OSX: http://arduino.cc/en/Guide/MacOSX
  • 34. Configurando o AmbienteConfigurar o ambiente de desenvolvimento parautilizar a porta detectado pelo sistema: “Tools” → “Serial Port”Configurar a placa utilizada: “Tools” → “Board” e escolher a opção “Arduino Uno”
  • 35. “Hello World”O primeiro projeto será o equivalente “HelloWorld” para dispositivos embarcadosComo não há um terminal, iremos fazer piscar(blink) um LED.A placa do Arduino vem com um LED embutido,conectado ao pin digital 13Esta conexão faz com que o pin 13 seja semprede saída, mas como o LED usa pouca corrente,ainda é possível conectar outras coisas na saída
  • 36. “Hello World”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 }
  • 37. “Hello World”Para fazer o upload para a placa, deve-seclicar no botão específico:
  • 38. Explicando o códigoUm sketch Arduino possui, no mínimo duasfunções: setup(): Executada apenas uma vez, durante a inicialização loop(): Função principal
  • 39. Explicando o códigosetup() 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
  • 40. Explicando o códigoloop() 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
  • 41. Revisando Componentes:Breadboard, Resistor & LED
  • 42. Breadboard (Protoboard)Breadboard (ou protoboard ou Matriz de Contato)Dispositivo que permite aconstrução de circuitos sema necessidade de soldaFácil prototipaçãoNa superfície há uma basede plástico com váriosorifícios onde sãoencaixados os componentesNa parte inferior há contatosmetálicos que interligam oscomponentes inseridos naplaca
  • 43. Breadboard (Protoboard)Breadboard (ou protoboard ou Matriz de Contato) Os furos das linhas verticais estão interligados
  • 44. ResistorResistor: 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)
  • 45. ResistorResistor: 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 Ω
  • 46. ResistorComo ler os valores dos resistores:
  • 47. Resistor
  • 48. LEDLED: Light Emmiting Diode Diodo é um componente que permite que a corrente siga apenas uma direção Um LED é um diodo que emite luz
  • 49. Projeto 001:LED Flasher
  • 50. LED FlasherComponentes:
  • 51. LED FlasherConexão:
  • 52. LED Flasher
  • 53. LED FlasherCódigo: int ledPin = 10; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }
  • 54. Revisando Componentes: Potenciômetro
  • 55. PotenciômetroO potenciômetro é simplesmenteum resistor cuja resistência podeser ajustadaPor exemplo: em um potenciômetrode 4K7, a resistência pode variarentre 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)
  • 56. Projeto 002:Interactive LED Chase Effect
  • 57. Interactive LED Chase EffectComponentes:
  • 58. Interactive LED Chase EffectConexão:
  • 59. Interactive LED Chase Effectbyte ledPin[] = {11,12,13}; void changeLed(){int ledDelay; //delay between changesint direcao = 1; for (int x = 0; x < 3; x++){int currentLed = 0; digitalWrite(ledPin[x], LOW);unsigned long changeTime; }int potPin = 2; //select the input pin forthe pot digitalWrite(ledPin[currentLed], HIGH);void setup() { currentLed += direcao; for (int x = 0; x < 3; x++){ pinMode(ledPin[x], OUTPUT); if (currentLed == 2) { direcao = -1; } } if (currentLed == 0) { direcao = 1; } changeTime = millis(); }}void loop(){ ledDelay = analogRead(potPin); if ((millis() - changeTime) > ledDelay){ changeLed(); changeTime = millis(); }}
  • 60. Interactive LED Chase EffectConsideraçõ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
  • 61. Revisando Componentes: Tactile Switch
  • 62. Tactile SwitchTactile Switch
  • 63. Tactile SwitchTactile Switch
  • 64. Tactile SwitchTactile Switch Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 65. Tactile SwitchAlé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
  • 66. Tactile Switch/* * Switch test program */// Switch connected to digital pin 2int 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);}
  • 67. Tactile SwitchAgora, vamos utilizar um fio para alternar aconexão do pino 2 entre 5V e o terra: Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 68. Tactile Switch Switch input tied LOW (ground)Switch input tied HIGH (5v)
  • 69. Tactile Switch
  • 70. Tactile SwitchFonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 71. Floating high above the cloudsVamos 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
  • 72. Floating high above the clouds For example, in these schematics we can connect anddisconnect 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, its invalid input!
  • 73. Resistor Pull-down/Pull-upUma solução é usar um switch que alternaconexões, como o utilizado no diagramaabaixo: Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 74. Resistor Pull-down/Pull-upOutra solução seria utilizar um recurso conhecido comoresistor pull-down: No esquema abaixo, o resistor pull-down está representado pelo resistor de 10Kohm Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 75. Resistor Pull-down/Pull-upQuando o switch for pressionado, o resistor de100Ω estará conectado diretamente ao 5V.Quando o switch for liberado, o resistor de100Ω estará conectado ao resistor de 10K, oqual “puxa-o” (pull-down) para o terra
  • 76. Resistor Pull-down/Pull-up Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 77. Resistor Pull-down/Pull-up
  • 78. Resistor Pull-down/Pull-upResistor pull-up: Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  • 79. Resistor Pull-down/Pull-up
  • 80. Projeto 003:Interactive LED Flasher
  • 81. Interactive LED FlasherComponentes:
  • 82. Interactive LED FlasherConexão:
  • 83. Interactive LED Flasher● 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 } }
  • 84. ExercícioCriar um projeto semelhante ao demonstradono video:Video 001
  • 85. Projeto 004:Temperature Sensor
  • 86. LM35/LM36 – TPM35/TPM36Sensor de temperaturaanalógicoEstado-sólido (não usamércurio)A medida que atemperatura muda, atensão que atravessa umdiodo cresce a uma taxaconhecidaNão precisa ser calibradoBarato e fácil de usar
  • 87. LM35/LM36 – TPM35/TPM36 a) LM35 b) LM36Fonte: http://www.ladyada.net/learn/sensors/tmp36.html
  • 88. LM35/LM36 – TPM35/TPM36Para converter a tensão em temperatura: LM35: Temp in ºC: (V in mV) / 10 LM36: – Temp in ºC: [(V in mV - 500)] / 10
  • 89. Lendo a Temperatura
  • 90. Lendo a TemperaturaDevemos conectar o pino do saída do sensordiretamente em uma porta analógica doArduinoA tensão de saída do sensor será de 0 a 1.75(aproximadamente)O tensão lida pelo Arduino é convertido em umvalor binário pelo Conversor Analógico DigitalAssim, para descobrirmos a temperatura,devemos fazer uma conversão:
  • 91. Lendo a TemperaturaVoltage 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 utilizarmosa fórmulas definidas anteriormente...
  • 92. Lendo a Temperaturaint temperaturaPin = 0;int ledPin = 12; //Converter tensao para temperaturafloat vIn = 5.0; //Tensao de entrada float temperaturaC = voltagem * 100.0;void setup() delay(1000);{ pinMode(ledPin, OUTPUT); Serial.print(temperaturaC); Serial.begin(9600); Serial.println(" graus em C");} Serial.println(" ");void loop() digitalWrite(ledPin, LOW);{ digitalWrite(ledPin, HIGH); delay(1000); //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");
  • 93. Problems you may encounter with multiple sensors... If, when adding more sensors, you find that the temperature is inconsistant, this indicates thatthe sensors are interfering with each other whenswitching 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
  • 94. Projeto 005:Sensing Light
  • 95. Sensing LightUma forma bastante prática de medir aintensidade da luz é usando um LDRLDR = Light-Dependent ResistorPodem ser chamados de PhotoresistoresQuanto maior a intensidade da luz, menor aresistência 20MΩ = Ambiente “muito escuro” 20KΩ = Ambiente “muito iluminado”
  • 96. Sensing Light
  • 97. LDR as a Voltage Divider A voltage divider is just two resistors in seriesconnected between a voltage supply and ground. If R1 is connected to the voltage supply and R2 isconnected to ground then the voltage at the junction between the two resistors is: R2 V =V cc∗ R1 + R 2
  • 98. LDR as a Voltage Divider If R1 is the photoresistor, the voltage will increase with increasing light intensity. If R2is the photoresistor, the voltage will decrease with increasing light intensity. R2 V =V cc∗ R1 + R 2
  • 99. Sensing Lightint ledPin = 13; else{int sensorPin = 1; digitalWrite(ledPin, HIGH);int period = 400; Serial.println(rawValue); if (acesso != 0){int limit = 1000; acesso = 0; Serial.println("apagado");int acesso = 0; } }void setup(){ delay(period); 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"); } }
  • 100. Projeto 006: Enviando Informaçõespara o Arduino via Serial
  • 101. Enviando Informações Via Serial 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); }
  • 102. Enviando Informações Via Serial
  • 103. Projeto 007: PySerial
  • 104. apt-get install python-serial -y
  • 105. PySerialfrom serial import Serialporta = /dev/ttyACM1ser=Serial(porta, 19200, timeout=10)ser.readline() #descartar a primeira leiturainfo=ser.readline()ser.close()print info
  • 106. Função Utilitária: Enviar E-Mailimport sys smtpserver =import smtplib smtplib.SMTP("smtp.gmail.com",587)from email.MIMEText import MIMEText smtpserver.ehlo() smtpserver.starttls()to = marvin.lemos@tce.pi.gov.br smtpserver.ehlouser = marvinlemos@gmail.com smtpserver.login(user, password)password = senhaaqui try:def mandar_email(mensagem): smtpserver.sendmail(user,to, msg = MIMEText(mensagem) msg.as_string()) print "e-mail encaminhado" msg[Subject] = Teste except: msg[From] = "Marvin Lemos" print "falha ao transmitir e-mail" msg[Reply-to] = "Marvin Lemos " print sys.exc_info() msg[To] = to smtpserver.close()
  • 107. ReferênciasArduino Starter Kit Manual: A CompleteBeginners Guide To The Arduinohttp://www.ladyada.net/learn/arduino/http://blog.justen.eng.br/