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.
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