quinta-feira, 27 de setembro de 2018

RADAR COM DISPLAY (INACABADO)

  Este é o sketch do nosso projeto, que une nossos conhecimentos adquiridos com respeito ao funcionamento e utilização dos seguintes módulos:
 - servo motor;
 - display com modulo i2c;
 - sensor ultrassônico;
  Neste projeto construimos um radar com ângulo de varredura de 160 graus. A informação de distância em centímetros é impressa numericamente na linha inferior do display, e na linha superior é possível visualizar graficamente a plotagem da distância medida.
  O presente sketch exibe um carácter aleatório que percorre a tela da esquerda para a direita  e da direita para a esquerda, de acordo com o ângulo para o qual o radar está apontando. Para a próxima aula fica a tarefa de plotar diferentes caracteres para diferentes valores de distância, e comentar adequadamente as principais linhas do código.
  A baixo segue o sketch (ainda em construção e sem muitos comentários), que produzimos em aula até o momento.

// ------------------------------------------------------------------------------------------------------------------
// RADAR COM PLOTAGEM NUMÉRICA E GRÁFICA VIA DISPLAY COM MODULO I2C
// ------------------------------------------------------------------------------------------------------------------
int coluna;
int bip;
int tempo;
double freq;
int pos = 0;
#include <NewPing.h>
#include <Servo.h>
Servo myservo;
#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 50 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

// PARAMETROS DO LCD ****************************************

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADOR 0x3F // <<
#define BACKLIGHT_PIN 3
#define En 2
#define Rw 1
#define Rs 0
#define D4 4
#define D5 5
#define D6 6
#define D7 7
LiquidCrystal_I2C lcd(I2C_ADOR, En, Rw, Rs, D4, D5, D6, D7);

// **********************************************************


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

//******************caracter ***************
byte caracter[8] = {
  B11111,
  B10101,
  B11111,
  B01110,
  B11111,
  B01110,
  B11111,
  B10001,
};

void setup() {
  pinMode(9, OUTPUT);
  myservo.attach(10);
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
  lcd.begin (16, 2);
  lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.createChar(0, caracter);
}

void loop() {
  //delay(bip);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  for (pos = 10; pos <= 170; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position

    Serial.print("Ping: ");
    Serial.print(sonar.ping_cm()); // Send ping, get distance in cm and print result (0 = outside set distance range)
    Serial.print("cm.  freq = ");
    Serial.println(freq);
    tempo = sonar.ping_cm();
    bip = map(tempo, 0, 50, 0, 1000);

    lcd.setCursor( 0 , 1); // linha, coluna;
    lcd.print("distancia: ");

    lcd.setCursor( 11 , 1); // linha, coluna;
    lcd.print(tempo);

    lcd.setCursor( 14 , 1); // linha, coluna;
    lcd.print("cm");



    while (millis() > freq && bip != 0) {
      freq = bip + millis();
     // lcd.clear();
      lcd.setCursor( 11 , 1); // linha, coluna;
    lcd.print("  ");
    }
    coluna = (pos-10)/10;
     lcd.setCursor(coluna,0);
      lcd.write(byte(0));
  }
  lcd.clear();

 for (pos = 170; pos >= 10; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
   Serial.print("Ping: ");
    Serial.print(sonar.ping_cm()); // Send ping, get distance in cm and print result (0 = outside set distance range)
    Serial.print("cm.  freq = ");
    Serial.println(freq);
    tempo = sonar.ping_cm();
    bip = map(tempo, 0, 50, 0, 1000);

    lcd.setCursor( 0 , 1); // linha, coluna;
    lcd.print("distancia: ");

    lcd.setCursor( 11 , 1); // linha, coluna;
    lcd.print(tempo);

    lcd.setCursor( 14 , 1); // linha, coluna;
    lcd.print("cm");



    while (millis() > freq && bip != 0) {

      freq = bip + millis();
     // lcd.clear();
      lcd.setCursor( 11 , 1); // linha, coluna;
    lcd.print("  ");
    }
      coluna = (pos-10)/10;
     lcd.setCursor(coluna,0);
      lcd.write(byte(0));
  }
  lcd.clear();
}

Nenhum comentário:

Postar um comentário