Mini-curso Prof. Stefano 1 Prof. Stefano O que é o Arduino? Arduino é uma plataforma de prototipagem eletrônica opensourcebaseadoemhardwareesoftware, flexívelefácildeusar.é destinado a artistas, designers, hobbistas e qualquer pessoa interessada em criar objetos ou ambientes interativos. fonte: http://www.arduino.cc/ 2 1
Ou seja, O que é o Arduino? O Arduino é uma placa eletrônica que possui um microcontrolador, onde você pode desenvolver programas, para receber sinais de sensores e botões nas suas entradas e controlar leds e outras cargas nas suas saídas. Para fazer sua programação utiliza-se um software específico baseado em linguagem C; Ele baseia-se na filosofia de hardware e software livre, onde pode-se baixar gratuitamente o software e o hardware é aberto, para que se alguém quiser montar sua própria placa ou pode ser comprado pronta por um dos inúmeros fornecedores existentes. 3 Exemplo de placa do Arduino Alguns componentes de uma placa do Arduino Entradas/Saídas Digitais Modelo Conector Mini-B USB microcontrolador Entrada fonte Alimentação Entradas Analógicas 4 2
Outros modelos Arduino Mega Arduino Nano 5 Software Arduino IDE (Integrated Development Environment Ambiente Integrado de Desenvolvimento) Verifica o programa Carrega o programa no microcontrolador Programa novo Abrir um programa Salvar o programa 6 3
Exemplo prático exer01 DigiteoprogramaaseguirnoIDEdoArduino. Salve o programa como exer01. Após digitar aperte o primeiro ícone para verificar o programa 7 Exemplo prático exer01 Explicando o programa // - permite a inclusão de comentários, que são importantes para documentar o projeto. Funciona por linha; /* */ - comentário para várias linhas; ; - opontoevírgulaéutilizadoparaindicarofimdocomando; No programa temos no mínimo duas funções obrigatórias: void setup ( ) - onde fazemos as configurações, como por exemplo se os pinos são entrada(input) ou saída(output). É executada somente uma vez; void loop ( ) é a principal função do programa onde ele é executado continuamente; 8 4
Explicando o programa Exemplo prático exer01 pinmode(pino, MODO); - instrução para definir se o pino é entrada(input) ou saída(output). Ex: pinmode(7,input); digitalwrite(pino, VALOR); - instrução que coloca determinado pinoemnívellógicoalto(high 5voltsnasaída)oubaixo(LOW zero volts na saída). Neste caso irá liga o led do pino 13, que está na própria placa; delay(tempo em ms); - instrução que gera um atraso, em milisegundos. Lembrando que 1000 milisegundos é igual a 1 segundo; 9 Exemplo prático exer01 Conecte a placa do arduino ao computador; EmToolsverifique omodelodeplacaeportaqueestáconectada; placa Porta serial Depois carregue o programa no arduino; 10 5
Exemplo prático exer01 Programa final com comentários. Altere o programa para que pisque a cada 2 segundos. 11 Examples e Sketchbook AbraoexemploBlink.FileExamples01BasicsBlink; Altereotempopara500msesalve. 12 6
Examples e Sketchbook Os exemplos (examples) são arquivos somente de leitura e não será permitido salvar; Quando pressionamos o OK o IDE irá abrir uma nova página para que seja salvo no livro de rascunho (Sketchbook), geralmente na área de documentos; 13 Entrada Analógica O arduino tem 6 entradas analógicas, onde é possível aplicar uma tensão entre 0 e 5 volts que serão convertidos para um valor digitalentre0e1023,poisoconversoréde10bits(2 10 =1024); analogread(pino); retorna um valor entre 0 e 1023. Exemplo de aplicação: Int valor = analogread(a0); // Faz a leitura da entrada A0 e atribui este valor a variável valor. A função map converte o valor de uma variável de uma escala para outra. map(variável,ini,fim,ininova,fimnova) map(valor,0,1023,0,100) 14 7
Comunicação Serial O software do arduino tem uma função específica que permite obter informações do microcontrolador durante a execução do programa utilizando os comandos de comunicação serial. Para isso devemos inicialmente definir a taxa de transmissão em bits por segundo. O usual é que a transmissão seja de 9600 bits por segundo. No programa a seguir enviaremos o valor obtido da entrada analógica e depois o valor convertido 15 Comunicação Serial Exemplo de programa com comunicação serial int valor,valorcon; void setup() { pinmode(9, OUTPUT); Serial.begin(9600); void loop() { valor = analogread(a0); valorcon= map(valor,0,1023,0,255); analogwrite(9,valorcon); Serial.print( \n Entrada = ); Serial.print(valor); Serial.print( \t Convertido = ); Serial.println(valorCon); 16 8
Comunicação Serial Funções para comunicação serial: Serial.begin(taxa); -- inicializa a comunicação serial na taxa desejada; Serialprint( mensagem );-- envia para tela a mensagem Serialprintln( mensagem ); -- envia para tela e vai para nova linha; Serial.read();- lê dados da porta serial; Funções de caracteres: \n -novalinha; \t tabulação horizontal; \a tabulação vertical; 17 Comunicação Serial Para visualizar as informações abra o Serial Monitor 18 9
Comunicação Serial Exercício Desenvolver um programa para monitorar as entradas digitais 2 e 3. DigitalReadSerial 10
SHIELD LCD DISPLAY ALFANUMÉRICO MODELO 16 COLUNAS POR 2 LINHAS 21 SHIELD LCD Fonte: http://www.arduinoecia.com.br/2013/08/arduino-shield-lcd-16x2-com-keypad.html http://blog.filipeflop.com/display/controlando-um-lcd-16x2-com-arduino.html 22 11
DISPLAY DE CRISTAL LÍQUIDO - LCD Composto por display alfanumérico com 16 colunas e 2 linhas. É preciso verificar a pinagem com o fabricante, mas no geral encontramos a seguinte sequência para o LCD. 14 Pinagem 1 No caso deste shield são utilizados os pinos Os botões utilizam a entrada analógica A0 Sobram os pinos 0, 1, 2, 3, 11, 12, 13 (digitais), e A1, A2, A3, A4, A5 (analógicos) 12
Programas: fazer uma versão ensinando a programar utilizando o LCD - mostrar no lcd, posicionar linha coluna, apagar, tempo - leitura da entrada analógica A1. Valor aparece na tela lcd e utilizar função MAP em outro ponto do LCD. Depois mostrar o valor da entrada utilizando as chaves e A0 - mostrar o conceito de variável e constante utilizando o LCD e inicialização dos elementos - tipos de if com as chaves, switch - for chaves e função scroll - while chaves - arrays e matrizes - mini projetos - menu -? mostrar operação matemática? SHIELD LCD #include <LiquidCrystal.h> // Inclui biblioteca do LCD // Inicializa a biblioteca com os números dos pinos da interface LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Cria um LCD objeto com estes pinos //ATENÇÃO: Diferente dos exemplos do Arduino lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); // Seta o display 16 colunas por 2 linhas void loop() { lcd.clear(); // Limpa Display lcd.print("ifsc"); // Escreve o texto delay(2000); //espera em ms lcd.setcursor(5,1); // Cursor coluna 5 linha 1 (linhas 0 ou 1) lcd.print("campus JLLE"); delay(2000); 26 13
SHIELD LCD #include <LiquidCrystal.h>// inclui a biblioteca de LCD LiquidCrystal(rs, enable, d4, d5, d6, d7); // Cria um objeto LCD com os respectivos pinos lcd.begin(coluna, linha); // define o nr de colunas e linhas do LCD lcd.clear();// Limpa Display lcd.print( TEXTO");// Escreve algum texto lcd.setcursor(coluna,linha);// Posiciona Cursor lcd.scrolldisplayleft(); //Desloca display esquerda lcd.scrolldisplayright();//desloca display direita lcd.nodisplay();// Desliga Display lcd.display();//liga display 27 Constantes e variáveis Constantes: são elementos que tem um valor fixo, não podendo ser mudados durante a execução do programa; Exemplo: π = 3,1415927... Em vez de escrever toda vez o número podemos nomear uma constante PI = 3,1415927 e durante programa utilizar PI; Variáveis: são elementos que permitem a alteração do seu valor durante a execução do programa. É recomendável que no início do programa seja atribuído um valor inicial a elas, que elas sejam inicializadas; Exemplo: Calcule consumo médio de combustível de um automóvel. CONSUMO= KM/L 28 14
Constantes e variáveis No arduino os tipos básicos são: Tipo Tamanho (Bits) Tamanho (Bytes) Intervalo Char 8 1-128 a 127 Especificados pela tabela ASCII Obs Int 16 2-32768 a 32767 Números inteiros Float 32 4-3.4028235E+38 a 3.4028235E+38 Double 32 4-3.4028235E+38 a 3.4028235E+38 Valor em ponto flutuante Valor em ponto flutuante (Na placa Due é de 64 bits) Boolean 8 1 true ou false Valores booleanos verdadeiros ou falsos Byte 8 1 0 a 255 Números inteiros Word 16 2 0 a 65535 Números inteiros O uso de operador do tipo float ou double acarretará em maior espaço alocado na memória e mais tempo de processamento nas operações matemáticas; Ainda temos outros tipos que veremos em maiores detalhes mais adiante. 29 #include <LiquidCrystal.h> // Inclui biblioteca do LCD SHIELD LCD Exemplo de programa com utilização de variáveis LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //ATENÇÃO: Diferente dos exemplos do Arduino lcd(12, 11, 5, 4, 3, 2); int i=5; char valor = B ; Declara e inicializa variáveis globais void setup() { lcd.begin(16, 2); void loop() { byte by=b1001; Declara e inicializa variável local lcd.clear(); // Limpa Display lcd.print("valor de i = "); lcd.print(i); //Mostra o valor da variável inteira na mesma linha lcd.setcursor(5,1); lcd.print(valor); //Mostra o valor do caractere lcd.setcursor(8,1); lcd.print(by); //Mostra o valor da variável byte delay(2000); Variável Global X Local 30 15
Operador Aritmético Operadores Operador Operação realizada + Soma - Subtração * Multiplicação / Divisão % Resto da divisão + + Incremento -- Decremento 31 SHIELD LCD + Entrada Analógica #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int valor,valorcon; void setup() { lcd.begin(16, 2); No shield LCD a entrada A0 tem o conjunto de chaves conectadas através de divisor de tensão e de acordo chave pressionada obtemos diferentes valores. Na figura abaixo temos os valores aproximados para cada caso. void loop() { valor = analogread(a0); //Leitura entrada A0 lcd.clear(); // Limpa Display lcd.print("a0 = "); lcd.print(valor); lcd.setcursor(0,1); valorcon= map(valor,0,1023,0,100); lcd.print(" A0 Conver = "); lcd.print(valorcon); delay(200); A função map converte o valor de uma variável de uma escala para outra. map(variável,ini,fim,ininova,fimnova) map(valor,0,1023,0,100) 0 132 307 480 720 32 16
Operadores Operador de Relação: eles testam as relações nas expressões. Seu resultado é 1 se for verdadeiro ou 0 se for falso; Operador Operação realizada = = Igual a! = Diferente > Maior que < Menor que > = Maior ou igual a < = Menor ou igual a 33 Operadores Exemplos de Operador de Relação: 4==3;retorna0-FALSO 3==3;retorna1-VERDADEIRO 7>=3;retorna1 VERDADEIRO 4<=3;retorna0-FALSO 4!=3;retorna1 VERDADEIRO 4 > 3;retorna1 VERDADEIRO 34 17
Operadores Operadores lógicos: realizam operações lógicas nas expressões. Os operandos são considerados verdadeiros(1) ou falsos(0). Seu resultado é 1 se for verdadeiroou0seforfalso; Operador & & Operação realizada AND OR! NOT (Negado) 35 Operadores Exemplos de Operador Lógico: a) (3 > 1) &&(2= = 2); 1 && 1; resulta em 1 -verdadeiro b) (3 > 7) (2= = 2); 0 1 ; resulta em 1 -verdadeiro c)!{(3 > 1) & & (2= = 2) ;!{ 1 & & 1;!{ 1 ; -resulta em 0 -falso 36 18
Operadores Operadores Bit a Bit: eles testam as relações dos operadores nas expressões bit a bit; Operador & Operação realizada AND OR ^ XOR ~ NOT > > SHIFT RIGHT,desloca bits a direita < < SHIFT LEFT, desloca bits a esquerda 37 Operadores Exemplos de Operador Bit a Bit: a) v1= 101101, v2=110011, v3 = v1 & v2; AND v1 = 101101 v2 = 110011 v3 = 100001 b) v1= 110001, v2=010111, v3 = v1 v2; OR v1 = 110001 v2 = 010111 v3 = 110111 38 19
Operadores Exemplos de Operador Bit a Bit: c) v1= 101101, v2=110011, v3 = v1 ^ v2; XOR v1 = 101101 v2 = 110011 v3 = 011110 d) v1= 110001, v2 = ~ v1 ; NOT v1 = 1 1 0 0 0 1 v2 = 0 0 1 1 1 0 39 SHIELD LCD Exemplos de programas com operadores lógicos #include <LiquidCrystal.h> // Inclui biblioteca do LCD LiquidCrystal lcd(8, 9, 4, 5, 6, 7); boolean running = false; void setup() { lcd.begin(16, 2); void loop() { lcd.clear(); // Limpa Display lcd.print("bool "); lcd.print(running); lcd.setcursor(8,0); lcd.print("4>3 = "); lcd.print(4>3); lcd.setcursor(0,1); lcd.print("(3>1)&&(2==2)= "); lcd.print((3>1) && (2==2)); //3>1=1;2==2=1;1&&1=1 delay(2000); running =!running; //inverte variável Teste o programa para manipulação de bits #include <LiquidCrystal.h> // Inclui biblioteca do LCD LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int a = 5; int b = 0; void setup() { lcd.begin(16, 2); void loop() { lcd.clear(); // Limpa Display lcd.print("a="); lcd.print(a); // binary: 000101 (5 dec) lcd.setcursor(5,0); b=a<<3; // binary: 00101000 (40 dec) lcd.print("b=a<<3 ->"); lcd.print(b); lcd.setcursor(4,1); lcd.print("a OR b = "); lcd.print(a b); // binary: 00101101 (45 dec) delay(2000); 40 20
Controle de fluxo de um programa O controle do fluxo normal de um programa é um poderoso recurso em qualquer linguagem de programação; A seguir veremos as diferentes formas de fazer este controle; 41 Controle de fluxo de um programa Declaração de controle condicional IF IF...THEN...ELSE SE...ENTÃO...SENÃO Ele é utilizado para executar um determinado comando se uma determinada condição for verdadeira. A opção ELSE não é obrigatória. IF (true) THEN CommandsTrue ELSE CommandsFalse IF (verdadeiro) THEN ComandosVerdadeiro ELSE ComandosFalso 42 21
Controle de fluxo de um programa Caso 1: somente verdadeiro: if (true) { CommandsTrue #include <LiquidCrystal.h> // Inclui biblioteca do LCD LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int entrada=0; void setup() { lcd.begin(16, 2); void loop() { lcd.clear(); // Limpa Display entrada = analogread(a0); if(entrada<100){ //botão direita do shield pressionado lcd.print( right selecionado ); delay(2000); 43 Controle de fluxo de um programa Caso 2: com verdadeiro e falso: if (true) { CommandsTrue else { CommandsFalse #include <LiquidCrystal.h> // Inclui biblioteca do LCD LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int entrada=0; void setup() { lcd.begin(16, 2); void loop() { lcd.clear(); // Limpa Display entrada = analogread(a0); lcd.setcursor(1,0); lcd.print( botão right ); lcd.setcursor(3,1); if(entrada<100){ //botão direita do shield pressionado lcd.print( pressionado ); else{ lcd.print( não pressionado ); delay(2000); 44 22
Controle de fluxo de um programa Caso 3: IF aninhado: if (true1) { Commands1 else if(true2) { Commands2 else if (true3) { Commands3 else { Commands4 N N N true1? true2? true3? Commands4 V V V Commands1 Commands2 Commands3 45 28/04/16 #include <LiquidCrystal.h> // Inclui biblioteca do LCD LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int entrada=0; void setup() { lcd.begin(16, 2); void loop() { lcd.clear(); // Limpa Display entrada = analogread(a0); lcd.setcursor(1,0); if (entrada < 100) { lcd.print ("Direita "); else if (entrada < 200) { lcd.print ("Cima "); else if (entrada < 400){ lcd.print ("Baixo "); else if (entrada < 600){ lcd.print ("Esquerda"); else if (entrada < 800) { lcd.print ("Select "); 23
switch Switch( ) case: Declaração de controle condicional switch(var){ case 1: comandos; break; case 2: comandos; break; default: comandos; break; 28/04/16 Switch( ) case: #include <LiquidCrystal.h> // Inclui biblioteca do LCD LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int entrada=0; void setup() { lcd.begin(16, 2); void loop() { 28/04/16 lcd.clear(); // Limpa Display entrada = analogread(a0); valorcon= map(entrada,0,1023,0,10); lcd.setcursor(1,0); lcd.print(" valorcon "); lcd.print(valorcon); lcd.setcursor(1,1); switch (valorcon){ case 1: lcd.print ("Direita "); break; case 2: lcd.print ("Cima "); break; default: lcd.print ("Select "); Break; 24
Controle de fluxo de um programa Declaração de controle condicional WHILE WHILE (true) { ENQUANTO (verdadeiro) { Faz a verificação da condição ANTES de executar o comando. Enquanto a condição permanecer verdadeira o(s) comando(s) é/são executados. WHILE (true) { Comandos pergunta? N V Comandos 49 Controle de fluxo de um programa #include <LiquidCrystal.h> // Inclui biblioteca do LCD LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int entrada=0; void setup() { lcd.begin(16, 2); void loop() { lcd.clear(); // Limpa Display entrada = analogread(a0); lcd.setcursor(1,0); lcd.print(" entrada "); lcd.print(entrada); lcd.setcursor(1,1); while(entrada<400){ lcd.print( robô explorando ); delay(1000); lcd.print( robô parado ); delay(2000); 50 25
Controle de fluxo de um programa Declaração de controle condicional DO... WHILE DO { WHILE (true) FAÇA{ ENQUANTO (verdadeiro) Executa a ação ANTES de verificar a condução. Enquanto a condição permanecer verdadeira o(s) comando(s) é/são executados.(menu) DO { Comandos WHILE (true); Comandos pergunta? N V 51 Controle de fluxo de um programa #include <LiquidCrystal.h> // Inclui biblioteca do LCD LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int entrada=0; void setup() { lcd.begin(16, 2); void loop() { lcd.clear(); // Limpa Display entrada = analogread(a0); lcd.setcursor(1,0); lcd.print(" entrada "); lcd.print(entrada); lcd.setcursor(1,1); do{ lcd.print( robô explorando ); delay(1000); while(entrada<400){ lcd.print( robô parado ); delay(2000); 52 26
Controle de fluxo de um programa Declaração de controle condicional FOR Ele é utilizado para executar determinados comandos porumcertonúmerodevezes. FOR (INÍCIO;CONDIÇÃO,INCREMENTO) { Comandos; 53 #include <LiquidCrystal.h> // Inclui biblioteca do LCD LiquidCrystal lcd(8, 9, 4, 5, 6, 7); Exemplo Scroll LCD int entrada=0; void setup() { lcd.begin(16, 2); void loop() { lcd.clear(); // Limpa Display lcd.setcursor(1,0); lcd.print( IFSC ); lcd.setcursor(3,1); lcd.print( Robótica ); for (int Counter = 0; Counter < 13; Counter++) { lcd.scrolldisplayleft(); delay(150); for (int Counter = 0; Counter < 29; Counter++) { lcd.scrolldisplayright(); delay(150); 28/04/16 27
PWM PWM Modulação por Largura de Pulso (Pulse-Width Modulation) Permite variar a largura do pulso de uma saída simplesmente variandoonúmero(0 255)enviadoparaela. Se ligarmos um led na saída poderemos observar o feito da variação da tensão média sobre o componente 55 PWM Exercício: Elabore um programa que varie a intensidade luminosa de um led no pino 9 entre 100%, 75%, 50%, 25% e 0%, com meio segundo de intervalo entre cada estágio. void setup( ) { pinmode(9, OUTPUT); void loop( ) { analogwrite(9,255); // saída em 100% delay(500); analogwrite(9,191); // saída em 175% delay(500); analogwrite(9,127); // saída em 50% delay(500); analogwrite(9,63); // saída em 25% delay(500); analogwrite(9,0); // saída em 0% delay(500); 56 28
Entrada Analógica e PWM Exercício: Elabore um programa que controle a luminosidade de um led utilizando a saída PWM do pino 9 através de um potenciômetro na entrada analógica A0. int valor,valorcon; void setup() { pinmode(9, OUTPUT); void loop() { valor = analogread(a0); valorcon= map(valor,0,1023,0,255); analogwrite(9,valorcon); A função map converte o valor de uma variável de uma escala para outra. map(variável,ini,fim,ininova,fimnova) map(valor,0,1023,0,255) Faltou esquema para ligar pot 57 Servomotor São motores especiais que permitem o controle do ângulo de posição do eixo. 58 29
Servomotor 59 Servomotor ATENÇÃO: LIGAR A ALIMENTAÇÃO INVERTIDA PODE LEVAR A QUEIMA DO SERVO 60 30
Servomotor Programa exemplo: Controle um servo no pino 5 pela leitura do potenciômetro. #include <Servo.h> Servo servo1; // Cria um objeto servo void setup() { servo1.attach(5); // Anexa o servo (físico), no pino 5, ao objeto servo (lógico) void loop() { int angle = analogread(0); // Lê o valor do potenciômetro angle=map(angle, 0, 1023, 0, 180); // Mapeia os valores de 0 a 180 graus servo1.write(angle); // Escreve o ângulo para o servo delay(15); // Espera de 15ms, para permitir que o servo atinja a posição 61 Leitura da entrada Para ler o nível lógico de algum pino da entrada utilizamos a instrução: digitalread(pino); Para ler o nível lógico de algum pino da entrada utilizamos a instrução: 62 31
Motor Corrente Contínua Fonte: http://en.wikipedia.org/wiki/brushed_dc_electric_motor 63 Motor Corrente Contínua SentidodegirodeummotorCC-Exemplo I I + V - - V + 64 32
Ponte H 65 SHIELD para motor CC Fonte:http://www.dfrobot.com 66 33
SHIELD para motor CC int M1 = 4; //direção motor 2 int E1 = 5; //PWM motor 2 int E2 = 6; //PWM motor 1 int M2 = 7; //direção motor 1 void setup() { pinmode(m1, OUTPUT); pinmode(m2, OUTPUT); void loop() { digitalwrite(m1,high); //sentido digitalwrite(m2, HIGH); //sentido analogwrite(e1, 255); //PWM analogwrite(e2, 122); //PWM delay(30); Altere o programa para mudar o sentido e velocidades dos motores 67 Motor de Passo Motor de passo é um motor síncrono sem escovas, com enrolamento no estator e imã permanente no rotor(tipo PM ou híbrido). Seu movimento é feito em passos. Os motores de passo são fabricados geralmente com 12, 24, 72, 144, 180, e 200, passos por volta, o que resulta em ângulos de 30, 15, 5, 2.5, 2, e 1.8 graus por passo (pode variar) Fonte:http://www.engineersgarage.com/articles/stepper-motors 68 34
Motor de Passo UNIPOLAR 69 Motor de Passo 70 35
Motor de Passo BIPOLAR Os motores de passo bipolares são conhecidos por sua excelente relação tamanho/torque: eles proporcionam um maior torque, cerca de 40% a mais, comparativamente a um motor unipolar do mesmo tamanho. Isto se deve ao fato de que quando se energiza uma fase, se magnetiza ambos os pólos em que a fase (ou bobina) está instalada Fonte: http://labdegaragem.com/profiles/blogs/tutorial-sobre-motor-de-passo 71 Motor de Passo 72 36
Motor de Passo Modo de acionamento PASSO COMPLETO(Full Step) 73 Motor de Passo Modo de acionamento MEIO PASSO(Half-Step) 74 37
Motor de Passo Fonte: http://www.stepperworld.com/tutorials/pgbipolartutorial.htm 75 Motor de Passo MOTORDEPASSOCOMARDUINO ULN2003 Fonte: http://filipeflop.wordpress.com/2013/02/18/controlando-um-motor-de-passo-5v-com-arduino/ 76 38
Motor de Passo LIGAÇÕES Alimente o motor de passo com +5V e o GND provenientes do Arduino. Conecte o Pino 2 do Arduino ao IN1, Pino 3 ao IN2, Pino 4 ao IN3 e Pino 5 ao IN4. Fonte: http://filipeflop.wordpress.com/2013/02/18/controlando-um-motor-de-passo-5v-com-arduino/ 77 Motor de Passo #include <Stepper.h> // Incluir Biblioteca 'Stepper' Stepper mystepper(300, 2, 4,3, 5); void setup(){ void loop(){ mystepper.setspeed(20); // Ajusta a velocidade. mystepper.step(1500); // Numero de passos, sentido horário delay(500); // Delay de 0,5seg antes do próximo mystepper.setspeed(30); // // Ajusta a velocidade mystepper.step(-1500); // Numero de passos, agora sentido anti-horário delay(500); // Delay de 0,5seg Fonte: http://filipeflop.wordpress.com/2013/02/18/controlando-um-motor-de-passo-5v-com-arduino/ 78 39
Motor de Passo #include <Stepper.h> - inclui a biblioteca do motor de passo; Stepper mystepper(passo, pino1, pino2, pino3, pino4); - informa aoprogramaopassoeligaçõesdomotor; mystepper.setspeed(rpm); - seta a velocidade do motor de passo em RPM; mystepper.step(passos); - faz com que o motor se desloque um determinado número de passos. (esta função faz o programa parar até que atinja o número de passos programado) 79 Comparativo Motores Fonte:http://www.telecom.uff.br/pet/petws/downloads/tutoriais/stepmotor/stepmotor2k81119.pdf 80 40
SENSOR ULTRASSONICO HC-SR04 Primeiramente é enviado um pulso de 10µs, indicando o início da transmissão de dados. Depois disso, são enviado 8 pulsos de 40 KHz e o sensor então aguarda o retorno (em nível alto/high), para determinar a distância entre o sensor e o objeto, utilizando a equação Distância = (Tempo echo em nível alto * velocidade do som) /2 http://blog.filipeflop.com/sensores/sensorultrassonico-hc-sr04-ao-arduino.html http://blog.filipeflop.com/sensores/sensor-ultrassonico-hc-sr04-ao-arduino.html http://www.arduinoecia.com.br/2013/12/controle-de-vagas-de-estacionamento-com.html 28/04/16 biblioteca Ultrasonic, 28/04/16 41
//Programa: Conectando Sensor Ultrassonico HC-SR04 ao Arduino //Autor: FILIPEFLOP //Carrega a biblioteca do sensor ultrassonico #include <Ultrasonic.h> //Define os pinos para o trigger e echo #define pino_trigger 4 #define pino_echo 5 //Inicializa o sensor nos pinos definidos acima Ultrasonic ultrasonic(pino_trigger, pino_echo); void setup() { Serial.begin(9600); Serial.println("Lendo dados do sensor..."); void loop() { //Le as informacoes do sensor, em cm e pol float cmmsec, inmsec; long microsec = ultrasonic.timing(); cmmsec = ultrasonic.convert(microsec, Ultrasonic::CM); inmsec = ultrasonic.convert(microsec, Ultrasonic::IN); //Exibe informacoes no serial monitor Serial.print("Distancia em cm: "); Serial.print(cmMsec); Serial.print(" - Distancia em polegadas: "); Serial.println(inMsec); delay(1000); SENSOR DE PRESENÇA INFRAVERMELHO PIR DYP-ME003 http://blog.filipeflop.com/sensores/acendendo-uma-lampada-com-sensor-de-presenca.html 28/04/16 42
//Programa : Sensor de presenca com modulo PIR //Autor : FILIPEFLOP int pinopir = 7; //Pino ligado ao sensor PIR int acionamento; //Variavel para guardar valor do sensor void setup() { pinmode(pinopir, INPUT); //Define pino sensor como entrada Serial.begin(9600); void loop() { acionamento = digitalread(pinopir); //Le o valor do sensor PIR if (acionamento == LOW) //Sem movimento, mantem rele desligado { Serial.println("Parado"); else //Caso seja detectado um movimento, aciona o rele { Serial.println("Movimento!!!"); 28/04/16 Michael McRoberts.Arduino Básico.; Aprendendo a programar o arduino. PET Autonet www.arduino.cc REFERÊNCIAS Notas de aula. Professor Stefano. 86 43