sexta-feira, 31 de agosto de 2018

16º Encontro - Controle de direção com potenciômetro

16º Encontro - Controle de direção com potenciômetro - 2ª parte

Olá turma, neste encontro do dia 31/08/2018 demos continuidade ao nosso estudo de programação para controlar 2 motores
Além da programação virtual iniciamos o controle de motor físico do Kit Atto
Nossas atividades




Eletrônica
Montagem com fiação do kit Atto; instalação de potenciômetro
Testes

Programação no simulador tinkercad
Conhecer a estrutura de decisão if...else;
Rever a função map( );
Testar e alterar o código abaixo no circuito da aula anterior:

int motorD = 5;  //motor Direito
int motorE = 6;  //motor Esquerdo
int pos;

int pinoPOT = A0; //PINO ANALÓGICO usado pelo Potenciômetro
int leituraA0; //VARIÁVEL QUE ARMAZENA O valor lido na porta analogica
void setup()
{
  pinMode(motorD, OUTPUT);
  pinMode(motorE, OUTPUT);
  pos=90; //inicializa em 90
  
}

void loop()
{
// avancar(240);
//  parar();
 leituraA0= analogRead(pinoPOT);//analogRead(pinPOT);
 pos= map(leituraA0, 0, 1023, 180, 0); //EXECUTA A FUNÇÃO "map" DE ACORDO COM OS 
 controle(pos);
}

//====COMANDOS DE CONTROLE DO MOTOR================
void avancar(int vel){
 analogWrite(motorD,vel);
 analogWrite(motorE,vel);
}


void parar()
{
  digitalWrite(motorD, 0);
  digitalWrite(motorE,0);
  //delay(t);
}

void direita(int vel){
  analogWrite(motorD,0);
  analogWrite(motorE,vel); 


void esquerda(int vel){
  analogWrite(motorD,vel);
  analogWrite(motorE,0); 
}

void controle(int control){
/*valor de 0 a 80 motor esquerdo para
valor de 100 a 180 motor direito para
valor de 81 a 99 os dois motores giram
*/
  if(control>81 && control<100 ){
   avancar(200); 
  }
  else if(control<81)
  {
    esquerda(200);
  }
  else
  {
    direita(200);//if(control>99)direita(200);
  }

}

Caso tenham dificuldade para copiar e colar usem este link aqui

Abraço a todos!!


sexta-feira, 24 de agosto de 2018

15º Encontro - controle de motores com potenciômetro

Controlando motores com potenciômetro

Olá turma, hoje 24/08/2018, vamos simular o controle de motores utilizando um potenciômetro na porta A0

Nossa atividade
Eletrônica



Programação
Concluir o código abaixo ciando uma função chamada controle para que ao girar o potenciômetro ocorra as seguintes situações
valor de 0 a 80 motor esquerdo para
valor de 100 a 180 motor direito para
valor de 81 a 99 os dois motores giram

int motorD = 5;  //motor Direito
int motorE = 6;  //motor Esquerdo
void setup()
{
  pinMode(motorD, OUTPUT);
  pinMode(motorE, OUTPUT);

}

void loop()
{
 avancar(200);
//  parar();
}

//====COMANDOS DE CONTROLE DO MOTOR================
void avancar(int vel){
 analogWrite(motorD,vel);
 analogWrite(motorE,vel);
}


void parar()
{
  digitalWrite(motorD, 0);
  digitalWrite(motorE,0);
  //delay(t);
}

void direita(int vel){
  analogWrite(motorD,0);
  analogWrite(motorE,vel);
}

void esquerda(int vel){
  analogWrite(motorD,vel);
  analogWrite(motorE,0);
}



quinta-feira, 23 de agosto de 2018

Código controle de servomotor com potenciômetro

Código controle de servomotor com potenciômetro

Olá turma segue abaixo o código completo do circuito do encontro de 17/08/2018

#include <Servo.h>
#define SERVO 3 // Porta Digital 3 PWM
//portas para os leds
int ledVerde=12;
int ledVermelho=11;
int ledAmarelo=13;
int pinoPOT = A0; //PINO ANALÓGICO usado pelo Potenciômetro
int leituraA0; //VARIÁVEL QUE ARMAZENA O valor lido na porta analogica 

Servo s; // Variável Servo
int pos; // Posição Servo

void setup ()
{
  pinMode(ledVerde,OUTPUT);//define pinos como saida
  pinMode(ledVermelho,OUTPUT);
  pinMode(ledAmarelo,OUTPUT);
  s.attach(SERVO);
  Serial.begin(9600);
 // s.write(0); // Inicia motor posição zero
}

void loop()
{
 //servoMover();
 //ledServoAcionar();
 leituraA0= analogRead(pinoPOT);//analogRead(pinPOT);
 pos= map(leituraA0, 0, 1023, 180, 0); //EXECUTA A FUNÇÃO "map" DE ACORDO COM OS PARÂMETROS PASSADOS 
 s.write(pos);  
 posLed(pos);
 delay(5);
}

void servoMover(){
for(pos = 0; pos < 180; pos++)
  {
    s.write(pos);
  delay(15);
  }
delay(1000);
  for(pos = 180; pos >= 0; pos--)
  {
    s.write(pos);
    delay(15);
  }
 delay(1000);
  
}

void posLed(int grau){
 if(grau>87 && grau<93){
   digitalWrite(ledVerde,HIGH);
   digitalWrite(ledVermelho,LOW);
   digitalWrite(ledAmarelo,LOW);
   }
if(grau<88){
   digitalWrite(ledVerde,LOW);
   digitalWrite(ledVermelho,HIGH);
   digitalWrite(ledAmarelo,LOW);
   }
if(grau>92){
   digitalWrite(ledVerde,LOW);
   digitalWrite(ledVermelho,LOW);
   digitalWrite(ledAmarelo,HIGH);
   }

}
//função automatica para movimentar servo e acender led
void ledServoAcionar(){
   pos=0;
s.write(pos);  
posLed(pos);
delay(2000); 
 
    pos=90;
s.write(pos);  
posLed(pos);
delay(2000);
    pos=180;
s.write(pos);  
posLed(pos);
delay(2000); 
}


14 º Encontro - Controle de Servo motor com potenciômetro

14 º Encontro - Controle de Servo motor com potenciômetro

Olá turma, em nosso encontro do dia 17/08/2018, passamos a controlar nosso servo motor com um potenciômetro (resistor variável). mantivemos a sinalização com leds,
Outra atividade que realizamos foi reconfigurar um dos carros robóticos para funcionar com apenas 3 rodas, todavia não conseguimos concluir esta parte, ainda estamos procurando uma solução apropriada.
Nossa atividade no Tinkercad (simulador virtual).
Eletrônica
Conhecemos com funciona um potenciômetro.
Conectamos um potenciômetro no circuito com Arduino (porta A0).
conforme imagem abaixo:



Programação
Criamos as seguintes variáveis:
int pinoPOT = A0; //PINO ANALÓGICO usado pelo Potenciômetro
int leituraA0; //VARIÁVEL QUE ARMAZENA O valor lido na porta analogica A0


Conhecemos a função map 
Através desta função convertemos os valores lido na porta analógica A0 que vão de 0 a 1023 em 0 a 180 que são os valores que precisamos para controlar o servo.

leituraA0= analogRead(pinoPOT);//analogRead(pinPOT);
 pos= map(leituraA0, 0, 1023, 180, 0); //EXECUTA A FUNÇÃO "map" DE ACORDO COM OS PARÂMETROS PASSADOS.

Fizemos alterações  na função posLed que monitora a posição em graus.Para solucionarmos a visualização do led Verde, aumentamos a faixa de sensibilidade entre mair que 87 e menor que 93.

void posLed(int grau){
 if(grau>87 && grau<93){
   digitalWrite(ledVerde,HIGH);
   digitalWrite(ledVermelho,LOW);
   digitalWrite(ledAmarelo,LOW);
   }
if(grau<88){
   digitalWrite(ledVerde,LOW);
   digitalWrite(ledVermelho,HIGH);
   digitalWrite(ledAmarelo,LOW);
   }
if(grau>92){
   digitalWrite(ledVerde,LOW);
   digitalWrite(ledVermelho,LOW);
   digitalWrite(ledAmarelo,HIGH);
   }

}

Abraço a todos!


13° Encontro - Programação de servo Motor e sinalização com Leds

13° Encontro - Programação de servo Motor  e sinalização com Leds

Em 10/08/2018, aprofundamos nossos conhecimento com servo motor e programação,assim,  em nosso circuito anterior acrescentamos uma sinalização com Leds. Para tal utilizamos o comando if, revimos o comando digitarlWrite do Arduino.
Nossa atividade no simulador Tinkercad
Eletrônica
Acrescentamos Leds no nosso circuito conforme o esquema e imagem abaixo:



Programação
Revimos o comando if;
Criamos a função posLed()
Testamos a função dentro do loop(), o circuito funcionou perfeitamente
Parabéns para as adaptações que alguns alunos fizeram.

#include <Servo.h>
#define SERVO 3 // Porta Digital 3 PWM
//portas para os leds
int ledVerde=12;
int ledVermelho=11;
int ledAmarelo=13;

Servo s; // Variável Servo
int pos; // Posição Servo

void setup ()
{
  pinMode(ledVerde,OUTPUT);//define pinos como saida
  pinMode(ledVermelho,OUTPUT);
  pinMode(ledAmarelo,OUTPUT);
  s.attach(SERVO);
  Serial.begin(9600);
 // s.write(0); // Inicia motor posição zero
}

void loop()
{
 //servoMover();
  pos=0;
s.write(pos);  
posLed(pos);
delay(2000); 

    pos=90;
s.write(pos);  
posLed(pos);
delay(2000);
    pos=180;
s.write(pos);  
posLed(pos);
delay(2000);
}


void posLed(int grau){ 
 if(grau==90){
   digitalWrite(ledVerde,HIGH);
   digitalWrite(ledVermelho,LOW);
   digitalWrite(ledAmarelo,LOW);
   }
if(grau<90){
   digitalWrite(ledVerde,LOW);
   digitalWrite(ledVermelho,HIGH);
   digitalWrite(ledAmarelo,LOW);
   }
if(grau>90){
   digitalWrite(ledVerde,LOW);
   digitalWrite(ledVermelho,LOW);
   digitalWrite(ledAmarelo,HIGH);
   }

}



Abr a todos!









12º Encontro carro robótico e conhecendo servo motor

12º Encontro: Carro robótico e conhecendo servo motor

Olá turma, nesse dia 03/08/2018,Recebemos mais dois alunos para compor nosso time, dividimos a turma em duas equipes:
Com uma equipe fizemos ajuste no carro com sensor ultrassônico
Realizamos a  montagem virtual com o Tinkercad, simulamos um circuito Arduíno/servo.
A outra equipe trabalhou no Tinkercad - Automatizando a ida e vinda de um servo com movimentos  de 0 a 180 graus.

Nossas atividades
Mecânica
Montagem e ajuste do carro com sensor e servo - ajustes.
Eletrônica
Montagem do circuito virtual Arduíno e servo motor, combinamos de usar a porta 3 do Arduíno.



Programação
Com base no site flip flop  adaptamos o código disponibilizados por eles para nossa atividade.
segue abaixo o código e imagem do circuito.

#include <Servo.h>
#define SERVO 3 // Porta Digital 3 PWM

Servo s; // Variável Servo
int pos; // Posição Servo
void setup ()
{
  s.attach(SERVO);
  Serial.begin(9600);
  s.write(0); // Inicia motor posição zero
}

void loop()
{
  for(pos = 0; pos < 180; pos++)
  {
    s.write(pos);
  delay(15);
  }
delay(1000);
  for(pos = 180; pos >= 0; pos--)
  {
    s.write(pos);
    delay(15);
  }
 delay(1000);
}

Abraço a todos!

quarta-feira, 22 de agosto de 2018

11º Encontro Carro Robótico com Sensor de Ultrassom

11º Encontro Carro Robótico com Sensor de Ultrassom

Olá turma, nesse dia 27/07/2018, Iniciamos o uso do sensor ultrassônico em nosso carro
fizemos adaptações no sensor conhecemos como funciona um servo motor e realizamos as interconexões e testes.
Conseguimos realizar os testes de medição de distância
Não concluímos o controle do servo.
Fizemos uma demonstração para uma turma de fundamental da sala de informática
Nossas atividades
Mecânica e eletrônica
Vimos o princípio de funcionamento do servo motor.
Instalação do servo motor e sensor ultrassônico no carro.









Programação
Fizemos teste e variações com o código abaixo
//Leitura de distância com o sensor HC-SR04
#include <Ultrasonic.h>
#include <Servo.h>
 Ultrasonic ultrassom(8,9); // define o nome do sensor(ultrassom)
                            //e onde esta ligado o trig(8) e o echo(9) respectivamente
 Servo servoMotor; // Cria objeto de Servo nomeado como servoMotor

long distancia=0;  
int pinoServo = 3;// pino arduino conetado ao servoMotor
int motorD = 5;  //motor Direito
int motorE = 6;  //motor Esquerdo
int sentgiroMD = 10;
int sentgiroME = 11;



void setup()
{
  pinMode(13, OUTPUT);
  pinMode(motorD, OUTPUT);
  pinMode(motorE, OUTPUT);
  pinMode(sentgiroME, OUTPUT);
  pinMode(sentgiroMD, OUTPUT);
  servoMotor.attach(pinoServo);
  servoMotor.write(90); // Inicia motor posição 90 graus
  Serial.begin(9600); //Inicia a comunicação serial
}

void loop()
{
  sensorServo();
 //servoTestar();
 //testeinfra();
 //leituraFina(3);
}//fim loop

//==========MEDIÇÃO ULTRASSONICA==================
//le a distancia n vezes, tira a média e coloca o valor na veriável distancia.
void leituraFina(int vezes){ 
  int le=0;
  for(int x=0;x<vezes; x++){   
    le += ultrassom.Ranging(CM);// ultrassom.Ranging(CM) retorna a distancia em
    delay(10);
  }
  distancia =le/vezes; //media do valor lido
  Serial.print( "distancia ");
  Serial.print( distancia);
  Serial.println( );

}//fim leituraFina
//==========FIM DA MEDIÇÃO ULTRASSONICA==================

//=========TESTA SERVO=============================
void servoTestar(){
  servoMotor.write(15);
  delay(1500);
  servoMotor.write(90);
  delay(1500);
  servoMotor.write(165);
  delay(1500);
}
//=======FIM TESTA SERVO===========================

//======TESTE COM ULTRASSOM  SEM SERVO============================
void testeinfra(){
  leituraFina(3);
  if(distancia>25){
    avancar(254);
  }else{
    parar();
    delay(100);
    recuar(254);
    delay(1000);
    direita(254);
    delay(1000);
  }
}

//===========TESTE SENSOR/SERVO=========
void sensorServo(){
  servoMotor.write(90);
  delay(1500);
  Serial.println( "Frente ");
  leituraFina(4);
  
  servoMotor.write(15);
  delay(1500);
  Serial.print( "direita ");
  leituraFina(4);
  
  servoMotor.write(165); //esqerda do carro a frente
  delay(1500);
  Serial.print( "Esquerda ");
  leituraFina(4);
}
//==========fim TESTE SENSOR/SERVO=========

//===========testainfra==================

//função para o carro avançar e recuar
void vaivem2(){
delay(2000);
 avancar(205);
delay(10000);
parar();
delay(3000);
recuar(170);
delay(8000);  
}
  


//====COMANDOS DE CONTROLE DO MOTOR================
void avancar(int vel)//0 ate 254
{
 digitalWrite(sentgiroME, HIGH);
 digitalWrite(sentgiroMD, HIGH); 
 analogWrite(motorD, vel);
 analogWrite(motorE, vel);

}

void parar()
{
  digitalWrite(motorD, 0);
  digitalWrite(motorE, 0);
  //delay(t);
}

void recuar(int vel)
{
 analogWrite(motorD, vel);
 analogWrite(motorE, vel);
 digitalWrite(sentgiroME, LOW);
 digitalWrite(sentgiroMD, LOW);
}

void direita(int vel)
{
 digitalWrite(sentgiroME, HIGH);
 digitalWrite(sentgiroMD, LOW); //high
 analogWrite(motorD, vel);//0
 analogWrite(motorE, vel);

}

void esquerda(int vel)
{
 digitalWrite(sentgiroME, LOW);//high
 digitalWrite(sentgiroMD, HIGH); 
 analogWrite(motorD, vel);
 analogWrite(motorE, vel);//0

}
//============FIM DOS COMANDOS DO MOTOR=======================

void piscar(int tempo){
  digitalWrite(13, HIGH);
  delay(tempo); // Wait for 1000 millisecond(s)
  digitalWrite(13, LOW);
  delay(tempo); // Wait for 1000 millisecond(s)  
}

No próximo encontro vamos realizar  testes com o servo motor.
Abraço a todos!

domingo, 12 de agosto de 2018

10º Encontro - Montagem final - Carros robóticos

10º Encontro - Montagem final do Semestre -  Carros robóticos em ação

Olá turma, neste encontro final do 1º semestre 29/06/2018, concluímos as montagens dos carros robóticos. 
Realizamos algumas corridas com os carros para verificarmos a estabilidade e nível das estruturas montadas.
 Conseguimos instalar um sensor de obstáculo em um dos carros e fizemos testes e brincadeiras.
No próximo semestre vamos adaptar outros tipos de sensores ao carro.
Segue abaixo imagens do encontro
















Abraço a todos!!!



quarta-feira, 1 de agosto de 2018

9º Encontro - Carro Robótico - Testes 4ª parte

9º  Encontro Carro Robótico - testes de sensibilidade a luminosidade
Olá turma, nosso encontro do dia 22/06/2018 foi leve devido ao jogo do Brasil, mas mesmo assim conseguimos avançar ao melhorarmos a sensibilidade de um dos carro para procurar e dirigir-se para áreas iluminadas.
Nossa atividade focou-se na programação. Para tal fizemos testes com a função leituraFina  que depois executamos dentro da função loop :

void leituraFina(int vezes){
  int le=0;
  for(int x=0;x<vezes; x++){
    le += analogRead(ldrPin); //O valor lido será entre 0 e 1023
  }
  Serial.print( "ldrValor ");
  Serial.print( ldrValor);
  Serial.println( );
  ldrValor =le/vezes; //media do valor lido 
}

Ao executá-la definimos quantas vezes ela lê o sensor com o objetivo de melhorar a precisão.

Abç a todos!

8º Encontro - Programação do carro robótico 3ªparte

8º Encontro -Continuação da montagem  carro robótico parte 3

Salve turma, em nosso encontro do dia 15/06/2018, demos continuidade a montagem dos carros e a programação. Apesar das dificuldades estamos pesquisando e fazendo testes para conseguirmos resultados satisfatórios.
Atividades

Mecânica - Remontagem dos carros para acertar o alinhamento e melhorar o acondicionamento da placa Atto as estrutura dos carros e posicionamento dos sensores.

Programação - Testes para deixar o carro robótico sensível a luz para tal criamos o código abaixo o carro seguir a direção a um fonte de luz.

int motorD = 5;  //motor Direito
int motorE = 6;  //motor Esquerdo
int sentgiroMD = 10;
int sentgiroME = 11;

//sensor de luz
#define ldrPin A0 //LDR no pino analígico 0
int ldrValor =0; //Valor lido do LDR

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(motorD, OUTPUT);
  pinMode(motorE, OUTPUT);
  pinMode(sentgiroME, OUTPUT);
  pinMode(sentgiroMD, OUTPUT);
  Serial.begin(9600); //Inicia a comunicação serial
}

void loop()
{
 /* ldrValor = analogRead(ldrPin); //O valor lido será entre 0 e 1023
  if(ldrValor>=285){
    if(ldrValor<=350)avancar(150);
    if(ldrValor>350&&ldrValor<=450)avancar(200);
    if(ldrValor>450)avancar(250);

  }else{
    parar();
    direita(250);
    delay(100);
  }
  */
  //imprime o valor lido do LDR no monitor serial
 leituraFina(2);
 Serial.println( ldrValor);
 delay(300);

}//fim loop

void leituraFina(int vezes){
  int le=0;
  for(int x=0;x<vezes; x++){
    le += analogRead(ldrPin); //O valor lido será entre 0 e 1023
  }
  Serial.print( "ldrValor ");
  Serial.print( ldrValor);
  Serial.println( );
  ldrValor =le/vezes; //media do valor lido
}


void avancar(int vel)
{
 digitalWrite(sentgiroME, HIGH);
 digitalWrite(sentgiroMD, HIGH);
 analogWrite(motorD, vel);
 analogWrite(motorE, vel);

}

void parar()
{
  digitalWrite(motorD, 0);
  digitalWrite(motorE, 0);
  //delay(t);
}

void recuar(int vel)
{
 analogWrite(motorD, vel);
 analogWrite(motorE, vel);
 digitalWrite(sentgiroME, LOW);
 digitalWrite(sentgiroMD, LOW);
}

void direita(int vel)
{
 digitalWrite(sentgiroME, HIGH);
 digitalWrite(sentgiroMD, LOW); //high
 analogWrite(motorD, vel);//0
 analogWrite(motorE, vel);

}

void esquerda(int vel)
{
 digitalWrite(sentgiroME, LOW);//high
 digitalWrite(sentgiroMD, HIGH);
 analogWrite(motorD, vel);
 analogWrite(motorE, vel);//0

}


abraço a todos!