Oficina Arduino

6.062 visualizações

Publicada em

Publicada em: Educação
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
6.062
No SlideShare
0
A partir de incorporações
0
Número de incorporações
9
Ações
Compartilhamentos
0
Downloads
453
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Oficina Arduino

  1. 1. Workshop Arduino Francisco Marcelino Almeida franciscomarcelinoalmeida@gmail.com Marcus Vinícius de Sousa Lemos marvinlemos@gmail.com
  2. 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. 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. 4. Arduino
  5. 5. MotivaçãoConvergência: tecnologia, criação e arteBaixo custo de microcontroladoresPlataformas de hardware abertas sendocriadosFebre Do It Yourself
  6. 6. MotivaçãoDiversas aplicações práticas Robôs Roupas eletrônicas Desenvolvimento de celulares customizados Instrumentos musicais Paredes interativas Redes de Sensores
  7. 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. 8. MicrocontroladorATmega328 PIC 16F628A Basic Stamp
  9. 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. 10. ATMega328P
  11. 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. 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. 13. Arduino éOpen-Source
  14. 14. Arduino com Protoboard
  15. 15. Arduino em Papel
  16. 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. 17. Versões do ArduinoArduino Uno
  18. 18. Versões do ArduinoArduino Nano
  19. 19. Versões do ArduinoArduino Mega
  20. 20. Versões do ArduinoArduino Lilypad
  21. 21. Versões do ArduinoArduino Romeo All-in-one
  22. 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. 23. Arduino Diecimila/Uno
  24. 24. Ok... but first, lets go shopping
  25. 25. Kit Para Iniciante
  26. 26. Outros Componentes
  27. 27. Sensores
  28. 28. “Hello World”
  29. 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. 30. Ambiente de DesenvolvimentoExecutar o arquivo arduino
  31. 31. Ambiente de Desenvolvimento
  32. 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. 33. Configurando o AmbienteWindows: http://arduino.cc/en/Guide/WindowsMac OSX: http://arduino.cc/en/Guide/MacOSX
  34. 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. 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. 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. 37. “Hello World”Para fazer o upload para a placa, deve-seclicar no botão específico:
  38. 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. 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. 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. 41. Revisando Componentes:Breadboard, Resistor & LED
  42. 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. 43. Breadboard (Protoboard)Breadboard (ou protoboard ou Matriz de Contato) Os furos das linhas verticais estão interligados
  44. 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. 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. 46. ResistorComo ler os valores dos resistores:
  47. 47. Resistor
  48. 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. 49. Projeto 001:LED Flasher
  50. 50. LED FlasherComponentes:
  51. 51. LED FlasherConexão:
  52. 52. LED Flasher
  53. 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. 54. Revisando Componentes: Potenciômetro
  55. 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. 56. Projeto 002:Interactive LED Chase Effect
  57. 57. Interactive LED Chase EffectComponentes:
  58. 58. Interactive LED Chase EffectConexão:
  59. 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. 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. 61. Revisando Componentes: Tactile Switch
  62. 62. Tactile SwitchTactile Switch
  63. 63. Tactile SwitchTactile Switch
  64. 64. Tactile SwitchTactile Switch Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  65. 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. 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. 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. 68. Tactile Switch Switch input tied LOW (ground)Switch input tied HIGH (5v)
  69. 69. Tactile Switch
  70. 70. Tactile SwitchFonte: http://www.ladyada.net/learn/arduino/lesson5.html
  71. 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. 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. 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. 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. 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. 76. Resistor Pull-down/Pull-up Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  77. 77. Resistor Pull-down/Pull-up
  78. 78. Resistor Pull-down/Pull-upResistor pull-up: Fonte: http://www.ladyada.net/learn/arduino/lesson5.html
  79. 79. Resistor Pull-down/Pull-up
  80. 80. Projeto 003:Interactive LED Flasher
  81. 81. Interactive LED FlasherComponentes:
  82. 82. Interactive LED FlasherConexão:
  83. 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. 84. ExercícioCriar um projeto semelhante ao demonstradono video:Video 001
  85. 85. Projeto 004:Temperature Sensor
  86. 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. 87. LM35/LM36 – TPM35/TPM36 a) LM35 b) LM36Fonte: http://www.ladyada.net/learn/sensors/tmp36.html
  88. 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. 89. Lendo a Temperatura
  90. 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. 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. 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. 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. 94. Projeto 005:Sensing Light
  95. 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. 96. Sensing Light
  97. 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. 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. 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. 100. Projeto 006: Enviando Informaçõespara o Arduino via Serial
  101. 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. 102. Enviando Informações Via Serial
  103. 103. Projeto 007: PySerial
  104. 104. apt-get install python-serial -y
  105. 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. 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. 107. ReferênciasArduino Starter Kit Manual: A CompleteBeginners Guide To The Arduinohttp://www.ladyada.net/learn/arduino/http://blog.justen.eng.br/

×