Download pdf - Oficina Arduino

Transcript

2. ApresentaoSobre o professor:Marcus Vincius de Sousa LemosMestre em Informtica Aplicada pela Universidade de Fortaleza UniforProfessor da Universidade Estadual do Piau UespiPesquisador do Laboratrio de Inteligncia Computacional Laic - UespiAuditor Fiscal de Controle Externo (Informtica) TCE/PIreas de Interesse:Redes de Sensores, Inteligncia Computacional, [email protected]://www.marvinlemos.net@marvinlemos 3. ApresentaoSobre o professor:Francisco Marcelino Almeida de ArajoMestrando em Biotecnologia pela Universidade Federal do Piau - UFPIProfessor do Instituto Federal do Piau IFPIreas de Interesse:Inteligncia Computacional, Processamento de Imagens,Microeletrnica, [email protected]://www.arduinopi.net@keyjin 4. Arduino 5. MotivaoConvergncia: tecnologia, criao e arteBaixo custo de microcontroladoresPlataformas de hardware abertas sendocriadosFebre DoItYourself 6. MotivaoDiversas aplicaes prticasRobsRoupas eletrnicasDesenvolvimento de celulares customizadosInstrumentos musicaisParedes interativasRedes de Sensores 7. MicrocontroladorTambm conhecido como MCU (MicrocontrollerUnit)Computador em um chipProgramado para funes especficas(geralmente para interagir com atuadores)Geralmente embarcados em outros dispositivos 8. MicrocontroladorATmega328PIC 16F628ABasic Stamp 9. ATMega328PCaractersticas do Atmega328:RISCProcessador: 8-bitFlash (Kbytes): 32EEPROM (Bytes): 1KSRAM (Bytes): 2KPWM Channels: 6Vcc (V): 1.8 5.5 10. ATMega328P 11. ArduinoPlaca + Microcontrolador + USB +SocketsPode ser conectado a uma grandevariedade de dispositivos:Sensores: Luz, temperatura, presena,etc.Displays: LCD, touchscreenMotores e servosGPSComunicao sem fio: 802.15.4,Zigbee, BluetoothEthernetAlimentao: Bateria de 9V ou pormeio da USB 12. Da pgina oficial (www.arduino.org):Arduino is an opensource electronics prototyping platform based onflexible, easytouse hardware and software. Its intended for artists,designers, hobbyists, and anyone interested in creating interactiveobjectsorenvironments.Arduinocansensetheenvironmentbyreceivinginputfromavarietyofsensorsandcanaffectitssurroundingsbycontrollinglights,motors,andotheractuators.ThemicrocontrollerontheboardisprogrammedusingtheArduinoprogramminglanguage(basedonWiring)andtheArduinodevelopmentenvironment(basedonProcessing).Arduinoprojectscanbestandaloneortheycancommunicatewithsoftwareonrunningonacomputer(e.g.Flash,Processing,MaxMSP). 13. Arduino Open-Source 14. Arduino com Protoboard 15. Arduino em Papel 16. ArduinoCriado na Itlia (em 2005) pelo Mssimo Banzi, noInteraction Design IvreaBaixo custo de produo e alta aplicabilidadeComputao fsica e redes de sensoresPermite que os programas (ou sketches) sejamescritos em uma linguagem de alto nvel chamadaProcessingProcessing um ambiente e linguagem deprogramao para criar imagens, animao einteraohttp://processing.org/ 17. Verses do ArduinoArduino Uno 18. Verses do ArduinoArduino Nano 19. Verses do ArduinoArduino Mega 20. Verses do ArduinoArduino Lilypad 21. Verses do ArduinoArduino Romeo All-in-one 22. Caractersticas do Arduino UnoMicrocontrolador ATmega328PTenso Operacional 5VTenso de Alimentao7-12 VPinos de I/O digitais14 (dos quais 6 podem ser sadas PWM)Pinos de entrada analgica 6Corrente contnua por pino de I/O40 mACorrente contnua para o pino de 3.3 V 50 mAMemria Flash2KBEEPROM 1KFrequncia de clock16 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 verso a 0022O arquivo compactado deve ser extrado emqualquer diretrio do sistemaSer criado um diretrio arduino-XXXX, ondeXXXX a verso baixado (por exemplo:arduino-0022). 30. Ambiente de DesenvolvimentoExecutar o arquivo arduino 31. Ambiente de Desenvolvimento 32. Configurando o AmbienteLinuxConecte o Arduino ao seu computador, por meio da porta USB eespere alguns segundos at que o sistema recohea o dispositivoPara confirmar se o dispositivo foi reconhecido, abra um terminal eexecute o comando abaixo:$ dmesgProcure, nas ltimas linhas, por uma linha mais ou menos parecidacom a de baixo:[56999.967291] usb 5-2: FTDI USB Serial Device converternow attached to ttyUSB0Essa mensagem indica que o kernel reconheceu um novodispositivo conectado na porta /dev/ttyUSB0.O sistema nem sempre reconhece como /dev/ttyUSB0, mas emgeral /dev/tty 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 PortConfigurar a placa utilizada:Tools Board e escolher a opo Arduino Uno 35. Hello WorldO primeiro projeto ser o equivalente HelloWorld para dispositivos embarcadosComo no h um terminal, iremos fazer piscar(blink) um LED.A placa do Arduino vem com um LED embutido,conectado ao pin digital 13Esta conexo faz com que o pin 13 seja semprede sada, mas como o LED usa pouca corrente,ainda possvel conectar outras coisas na sada 36. Hello WorldCdigo:int ledPin = 13;void setup() {// initialize the digital pin as an output.// Pin 13 has an LED connected on most Arduinoboards:pinMode(ledPin, OUTPUT);}void loop() {digitalWrite(ledPin, HIGH);// set the LED ondelay(1000); // wait for a seconddigitalWrite(ledPin, LOW); // set the LED offdelay(1000); // wait for a second} 37. Hello WorldPara fazer o upload para a placa, deve-seclicar no boto especfico: 38. Explicando o cdigoUm sketch Arduino possui, no mnimo duasfunes:setup():Executada apenas uma vez, durante a inicializaoloop():Funo principal 39. Explicando o cdigosetup() pinMode(ledPin, OUTPUT); A funo pinMode define o modo de operao do pino. Neste caso, definimos que o pino 13 (ledPin) ser de sada 40. Explicando o cdigoloop() 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 41. Revisando Componentes:Breadboard, Resistor &LED 42. Breadboard (Protoboard)Breadboard (ou protoboard ou Matriz de Contato)Dispositivo que permite aconstruo de circuitos sema necessidade de soldaFcil prototipaoNa superfcie h uma basede plstico com vriosorifcios onde soencaixados os componentesNa parte inferior h contatosmetlicos que interligam oscomponentes inseridos naplaca 43. Breadboard (Protoboard)Breadboard (ou protoboard ou Matriz de Contato)Os furos das linhas verticaisesto interligados 44. ResistorResistor:Componente projetado para gerar uma resistncia corrente eltrica e, consequentemente, diminuir atenso entre os dois terminaisMedido em Ohm e representado pela letra gregaOmega ( )Os pinos digitais geram uma tenso de 5 V (DC) a40mALEDs geralmente precisam de uma tenso de 2 V ecorrente de 10mA (para brilhar razoavelmente bem) 45. ResistorResistor:Precisamos de um resistor capaz de reduzir a tensode 5 para 2 (Voltage Drop) e a corrente de 40mApara 10mAPara descobrir o valor do resistor apropriado, vamosutilizar a Lei de Ohm:I = V/R ouR = V/ I ouR = (Tenso fornecida Tenso 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 direo Um LED um diodo que emite luz 49. Projeto 001:LED Flasher 50. LED FlasherComponentes: 51. LED FlasherConexo: 52. LED Flasher 53. LED FlasherCdigo:int ledPin = 10;void setup() {pinMode(ledPin, OUTPUT);}void loop() {digitalWrite(ledPin, HIGH);delay(1000);digitalWrite(ledPin, LOW);delay(1000);} 54. Revisando Componentes: Potencimetro 55. PotencimetroO potencimetro simplesmenteum resistor cuja resistncia podeser ajustadaPor exemplo: em um potencimetrode 4K7, a resistncia pode variarentre 0 e 4700 Possui trs pernas:Conectando apenas duas, o potencimetrotransforma-se em um resistor varivelConectando 3 e aplicando uma tenso, opotencimetro transforma-se em um divisor detenso (voltage divider) 56. Projeto 002:Interactive LEDChase Effect 57. Interactive LED Chase EffectComponentes: 58. Interactive LED Chase EffectConexo: 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 potdigitalWrite(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 EffectConsideraes:Inicialmente declaramos uma varivel para opotencimetro: int potPin = 2;O potencimetro est conectado a uma porta analgicaPara ler o valor de uma porta analgica, utilizamos afuno analogReadUm Arduino possui 6 portas anlogicas com um conversoranalgico-digital de 10bitsUma porta anlogica pode ler tenso entre 0V e 5V emvalores inteiros entre 0 (0V) e 1023 (5V).Resoluo de: 5V / 1024 unidades ou 0.0049V (4.9mV) porunidade 61. Revisando Componentes:Tactile Switch 62. Tactile SwitchTactile Switch 63. Tactile SwitchTactile Switch 64. Tactile SwitchTactile SwitchFonte: http://www.ladyada.net/learn/arduino/lesson5.html 65. Tactile SwitchAlm de controlar a corrente, funcionam comotimos dispositivos de entradaNo prximo exemplo, vamos configurar a correnteem um pino para 5V ou terra e usar a funodigitalRead para consultar o estado do pino: HIGHou LOW 66. Tactile Switch/* * Switch test program */// Switch connected to digital pin 2int switchPin = 2;void setup(){// set up Serial library at 9600 bpsSerial.begin(9600);// sets the digital pin as input to read switchpinMode(switchPin, INPUT);}void loop(){Serial.print("Valor do Switch: ");// Read the pin and display the valueSerial.println(digitalRead(switchPin));delay(100);} 67. Tactile SwitchAgora, vamos utilizar um fio para alternar aconexo do pino 2 entre 5V e o terra:Fonte: http://www.ladyada.net/learn/arduino/lesson5.html 68. Tactile SwitchSwitch 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 switchO problema que o switch s pode conectar edesconectar dois fios. Ele no pode alternarconexes 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 2to 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 soluo usar um switch que alternaconexes, como o utilizado no diagramaabaixo:Fonte: http://www.ladyada.net/learn/arduino/lesson5.html 74. Resistor Pull-down/Pull-upOutra soluo seria utilizar um recurso conhecido comoresistor pull-down:No esquema abaixo, o resistor pull-down est representadopelo 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 FlasherConexo: 83. Interactive LED FlasherCdigoint ledPin = 4; // choose the pin for the LEDint inPin = 5; // choose the input pin (for a pushbutton)int val = 0; // variable for reading the pin statusvoid setup() {pinMode(ledPin, OUTPUT); // declare LED as outputpinMode(inPin, INPUT); // declare pushbutton as input}void loop(){val = digitalRead(inPin); // read input valueif (val == HIGH) { // check if the input is HIGHdigitalWrite(ledPin, LOW); // turn LED OFF} else {digitalWrite(ledPin, HIGH); // turn LED ON}} 84. ExerccioCriar um projeto semelhante ao demonstradono video:Video 001 85. Projeto 004:Temperature Sensor 86. LM35/LM36 TPM35/TPM36Sensor de temperaturaanalgicoEstado-slido (no usamrcurio)A medida que atemperatura muda, atenso que atravessa umdiodo cresce a uma taxaconhecidaNo precisa ser calibradoBarato e fcil 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 tenso em temperatura:LM35: Temp in C: (V in mV) / 10LM36: Temp in C: [(V in mV - 500)] / 10 89. Lendo a Temperatura 90. Lendo a TemperaturaDevemos conectar o pino do sada do sensordiretamente em uma porta analgica doArduinoA tenso de sada do sensor ser de 0 a 1.75(aproximadamente)O tenso lida pelo Arduino convertido em umvalor binrio pelo Conversor Analgico DigitalAssim, para descobrirmos a temperatura,devemos fazer uma converso: 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 tenso em temperatura, basta utilizarmosa frmulas definidas anteriormente... 92. Lendo a Temperaturaint temperaturaPin = 0;int ledPin = 12;//Converter tensao para temperaturafloat vIn = 5.0; //Tensao de entradafloat 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 sensorfloat leitura = analogRead(temperaturaPin); }float voltagem = (leitura * vIn) / 1023.0;//Imprimir a tensoSerial.print(voltagem);Serial.println(" volts"); 93. Problems you may encounterwith 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 pinto 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 prtica de medir aintensidade da luz usando um LDRLDR = Light-Dependent ResistorPodem ser chamados de PhotoresistoresQuanto maior a intensidade da luz, menor aresistncia20M = Ambiente muito escuro20K = 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. IfR1 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 ccR1 + R 2 98. LDR as a Voltage DividerIf R1 is the photoresistor, the voltage will increase with increasing light intensity. If R2is the photoresistor, the voltagewill decrease with increasing light intensity.R2 V =V ccR1 + 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 Informaespara o Arduino via Serial 101. Enviando Informaes 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 Informaes 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. Funo Utilitria:Enviar E-Mailimport sys smtpserver =import smtplib smtplib.SMTP("smtp.gmail.com",587)from email.MIMEText import MIMETextsmtpserver.ehlo() smtpserver.starttls()to = [email protected] = [email protected] 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] = Testeexcept: msg[From] = "Marvin Lemos"print "falha ao transmitir e-mail" msg[Reply-to] = "Marvin Lemos " print sys.exc_info() msg[To] = tosmtpserver.close() 107. RefernciasArduino Starter Kit Manual: A CompleteBeginners Guide To The Arduinohttp://www.ladyada.net/learn/arduino/http://blog.justen.eng.br/


Recommended