in327 curso arduino

29
Arduino

Upload: thaian-andreia

Post on 16-Aug-2015

234 views

Category:

Documents


0 download

DESCRIPTION

curso para arduino

TRANSCRIPT

ArduinoFerramentasArduino IDE - https://www.arduino.cc/123d Circuit - https://123d.circuits.io/Arduino ATmega328 o microcontrolador do Arduino UNOArduino - BootloaderPara gravar um programa em um microcontrolador(ATmega)sem usar o Arduino necessrio um hardware especial.- Normalmente chamado de Bootburner.- No caso do Arduino, os microcontroladores j vem com um programa pr gravado.- Caso voc compre um microcontrolador do mesmo tipo novo, possvel que ele no venha com o bootloaderpr gravado. Nesse caso possvel usar um bootburner ou usar outro Arduino como gravador.Arduino - BootloaderArduino.hDentro da pasta onde a IDE do Arduino foi instalada (normalmente dentro de c:\arquivos de programas) voc encontrar os arquivos .h e .cpp que rodam em conjunto com o sketch criado pela IDE. Esses arquivos contm:- Endereos e cdigos em hexadecimal para todas as constantes usadas nos programas- O programa main.- BootloaderC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduinoGravao de um SketchMeuSketch.inoArduino.hArduino.hArduino.hPr-processador da IDE do ArduinoPr-processador do GCCCompilador e ligador do GCCAVRDUDE BootloaderMemria Flash do ArduinoPlaca ArduinoIDE do ArduinoUSB SerialSadas DigitaisFuncionam de forma binria- Totalmente ligadas (0v)- Totalmente desligadas (5v)Sadas AnalgicasO Arduno UNO no possui sadas analgicas verdadeiras (apenas o Arduno Due tem essa opo).Para enviar uma tenso entre 0v e 5v possvel ligar e desligar uma sada digital rapidamente. O processo de ligar e desligar chamado de pulso. Controlando a largura desse pulso (Sadas moduladas por pulso PWM pulse widthmodulation) podemos simular uma sada analgica. PWM(Pulse Width Modulation)Algumas aplicaes- Controle de motores- Controle de encoders e decoders- Telecomunicaes uma forma de modulao de sinal- Alimentao de tenso- Efeitos de udioSintetizadores simples- Controlar a intensidade de um LED - Controlar o aquecimento de uma resistnciaPWM - ExemploControlar a velocidade de um motor. - Usando resistor - Se o motor for grande o resistor pode ficar muito quente- Calor = desperdcio de energia- E se quisermos alterar a velocidade?PWM - Exemplo- Usando PWM- Ligar e desligar a energia em uma frequncia controlada eficiente- A frequncia pode ser controlada por um microcontroladorSe quisermos controlar um motor de 12v a uma velocidade de 60%da sua capacidade podemos aplicar um duty cicle de 60% do tempo.Significa dizer que a energia estar ligada 60% do tempo. Utilizando o clculo abaixo possvel observar que o resultado o mesmo do que se estivssemos alimentando o motor com 7,2v.0,6 * 12v = 7,2vPWM Alguns usos com o Arduino- Servos - ECS (Electronic Speed Control)Usado em aeromodelos, quadcopteros, automodelos e etc.- Intensidade de LEDsPode ser usado em conjunto com controladores PID (Proportional, integral, derivative control)Kp, Ki, KdPID e PWMhttp://www.rentanadviser.com/en/pid-fuzzy-logic/pid-fuzzy-logic.aspxSadas Analgicashttps://123d.circuits.io/circuits/924046-arduino-pwm-osciloscopeSadas Analgicasint ledPin = 3;int potPin = A2;int potValue = 0;void setup() {pinMode(potPin, INPUT);Serial.begin(9600);}// the loop routine runs over and over again forever:void loop() {potValue = analogRead(potPin);Serial.print("Pot: ");Serial.println(potValue);int val = map(potValue, 0, 1023, 0, 255); Serial.print("Val: ");Serial.println(val);analogWrite(ledPin, val);delay(5);}Sadas Analgicas PWM e Servoshttps://123d.circuits.io/circuits/924079PID com Arduinohttps://123d.circuits.io/circuits/936535-pid-temperature-sensor-control-refrigerationExerccios1) Monte um projeto usando Arduino, programe um pino de sada como PWM e visualize o pulso no osciloscpio.- Efetue a medio da tenso usando um multmetro1) Controle a velocidade de um motor DC utilizando um transistor e PWM.2) Usando como base o projeto PID com Arduino monte um projeto de controle de temperatura usando PID. O sistema deve:- Usar um potencimetro para selecionar a temperatura desejada- Usar um sensor de temperatura para obter a temperatura atual- Usar um motor como um ventilador para resfriar o sensorInterrupes de hardwareUma forma de verificar a mudana de estado de um pino atravs do cdigo abaixo.void loop(){if(digitalRead(inputPin) == LOW){//Faa alguma coisa}}Interrupes de hardwareEssa abordagem possui alguns problemas:- necessrio ficar verificando continuamente se o pino inputPin deve alguma mudana- Caso a funo loop tenha mais cdigos, o arduino no verificar mudana de estados enquanto esses cdigos esto executandoInterrupes de hardwareEssa abordagem possui alguns problemas:- necessrio ficar verificando continuamente se o pino inputPin deve alguma mudana- Caso a funo loop tenha mais cdigos, o arduino no verificar mudana de estados enquanto esses cdigos esto executando- Em caso de sensores rpidos (pulsos rpidos) a verificao fica comprometida. Enquanto o sensor j mudou de estado vrias vezes a verificao do arduino pode estar fazendo outra coisa.Interrupes Arduino UNONmero da InterrupoPlaca 0 1 2 3 4 5 ObservaesUno D2 D3 - - - -Leonardo D3 D2 D0 D1 - - Cuidado, os nmeros 0 e 1 so invertidosMega2560 D2 D3 D21D20D19D18Due Usar o nome dos prprios pinosInterrupes de hardwarehttps://123d.circuits.io/circuits/924199-interruptionsInterrupes de hardwareint led = 12;int swPin = 2;void setup() {pinMode(led, OUTPUT);pinMode(swPin, INPUT_PULLUP);attachInterrupt(0, facaAlgumaCoisa, FALLING);}void loop() {}void facaAlgumaCoisa(){digitalWrite(led, HIGH);}InterrupesModo Operao ObservaesLOW Dispara a interrupo sempre que estiver em nvel baixo (LOW)Executa a interrupo continuamente enquanto o o pino estiver em nvel baixo (LOW)RISING Dispara quanto o pino passa de baixo (LOW) para alto (HIGH)FALLING Dispara quando o pino passa de alto (HIGH) para baixo (LOW)CHANGE Dispara sempre que o pino mudar de nvel em qualquer sentidoHIGH Dispara a interrupo sempre que estiver em nvel alto (HIGH)Esse modo est disponvel apenas no Arduino DueRotinas de Interrupo (ISR)As funes executadas em uma interrupo so chamadas ISR.Uma ISR no pode receber nenhum parmetro e no pode retornar nenhum valor. necessrio usar uma varivel global voltil para transferir informaes entre a ISR e o restante do programa (que roda no loop)A varivel deve ser do tipo volatile para evitar que o compilador coloque esta varivel em um registrador especial (tentando otimizar o desempenho) e resulte em um valor incorreto.Basicamente o comando volatile diz para o compilador que o valor desta varivel pode mudar a qualquer momento, no necessariamente pelo cdigo a sua volta.ISR Variveis volteis globaishttps://123d.circuits.io/circuits/933078-interruptions-volatile-global-variableRotinas de Interrupo (ISR)Devem ser rotinas pequenas. Se outra interrupo ocorrer enquanto um ISR est sendo executada o controlador NO interromper a ISR.As funes delay e millis no funionaro corretamente dentro de uma ISR (elas dependem de outras interrupes para funcionarem)Use delayMicroseconds no lugar de delayAs comunicaes seriais tambm necessitam de interrupes e no funcionaro corretamente dentro de uma ISR