#include <NewTone.h>
#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);
int LDR = A0;
int vermelho = 3;
int verde = 6;
int azul = 9;
int variacao = 40;
int espSetup = 5000;
int desligado = 5;
int ligado = 10;
int VMLDR = 0;
int VDLDR = 0;
int AZLDR = 0;
//padrão do Vermelho*********************
int VermelhoVermelho = 610;
int VermelhoVerde = 840;
int VermelhoAzul = 880;
//padrão do Verde************************
int VerdeVermelho = 870;
int VerdeVerde = 805;
int VerdeAzul = 885;
//padrão do Azul*************************
int AzulVermelho = 870;
int AzulVerde = 836;
int AzulAzul = 815;
//padrão do Amarelo*********************
int AmareloVermelho = 515;
int AmareloVerde = 650;
int AmareloAzul = 845;
//padrão do Branco**********************
int BrancoVermelho = 490;
int BrancoVerde = 590;
int BrancoAzul = 720;
//****************************************
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.begin (16, 2);
pinMode(3, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(13, OUTPUT);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("DETECTOR DE");
lcd.setCursor(5, 1);
lcd.print("CORES");
delay(5000);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("APROXIME UM");
lcd.setCursor(5, 1);
lcd.print("OBJETO");
}
void loop() {
// liga vermelho
digitalWrite(3, LOW);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
VMLDR = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga verde
digitalWrite(6, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
VDLDR = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga azul
digitalWrite(9, LOW);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
delay(ligado);
AZLDR = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
Serial.print("--- Vermelho= ");
Serial.print(VMLDR);
Serial.print("--- Verde= ");
Serial.print(VDLDR);
Serial.print("--- Azul= ");
Serial.print(AZLDR);
Serial.println("---");
if (VMLDR > (VermelhoVermelho - variacao) && VMLDR < (VermelhoVermelho + variacao) && VDLDR > (VermelhoVerde - variacao) && VDLDR < (VermelhoVerde + variacao) && AZLDR > (VermelhoAzul - variacao) && AZLDR < (VermelhoAzul + variacao)) {
Serial.println(" Cor detectada: VERMELHO");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("COR DETECTADA:");
lcd.setCursor(3, 1);
lcd.print("VERMELHO");
// liga vermelho
digitalWrite(3, LOW);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
NewTone(13, 500, 500);
delay(3000);
}
if (VMLDR > (AzulVermelho - variacao) && VMLDR < (AzulVermelho + variacao) && VDLDR > (AzulVerde - variacao) && VDLDR < (AzulVerde + variacao) && AZLDR > (AzulAzul - variacao) && AZLDR < (AzulAzul + variacao)) {
Serial.println(" Cor detectada: AZUL");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("COR DETECTADA:");
lcd.setCursor(3, 1);
lcd.print("AZUL");
// liga azul
digitalWrite(9, LOW);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
NewTone(13, 500, 500);
delay(3000);
}
if (VMLDR > (VerdeVermelho - variacao) && VMLDR < (VerdeVermelho + variacao) && VDLDR > (VerdeVerde - variacao) && VDLDR < (VerdeVerde + variacao) && AZLDR > (VerdeAzul - variacao) && AZLDR < (VerdeAzul + variacao)) {
Serial.println(" Cor detectada: VERDE");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("COR DETECTADA:");
lcd.setCursor(3, 1);
lcd.print("VERDE");
//liga verde
digitalWrite(6, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, HIGH);
NewTone(13, 500, 500);
delay(3000);
}
if (VMLDR > (AmareloVermelho - variacao) && VMLDR < (AmareloVermelho + variacao) && VDLDR > (AmareloVerde - variacao) && VDLDR < (AmareloVerde + variacao) && AZLDR > (AmareloAzul - variacao) && AZLDR < (AmareloAzul + variacao)) {
Serial.println(" Cor detectada: AMARELO");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("COR DETECTADA:");
lcd.setCursor(3, 1);
lcd.print("AMARELO");
// liga amarelo
digitalWrite(3, LOW);
digitalWrite(6, LOW);
digitalWrite(9, HIGH);
NewTone(13, 500, 500);
delay(3000);
}
if (VMLDR > (BrancoVermelho - variacao) && VMLDR < (BrancoVermelho + variacao) && VDLDR > (BrancoVerde - variacao) && VDLDR < (BrancoVerde + variacao) && AZLDR > (BrancoAzul - variacao) && AZLDR < (BrancoAzul + variacao)) {
Serial.println(" Cor detectada: BRANCO");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("COR DETECTADA:");
lcd.setCursor(3, 1);
lcd.print("BRANCO");
// liga amarelo
digitalWrite(3, LOW);
digitalWrite(6, LOW);
digitalWrite(9, LOW);
NewTone(13, 500, 500);
delay(3000);
}
else
{
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("APROXIME UM");
lcd.setCursor(5, 1);
lcd.print("OBJETO");
//lcd.scrollDisplayLeft();
}
}
*********************************************************************************
*********************************************************************************
*********************************************************************************
sketch melhorado. Este realiza um setup inicial que permite que o sistema se adapte à luminosidade de cada ambiente, mas o programa ficou muito grande e a memória do arduino uno ficou pequena de mais, por isso tive que retirar a cor branca:
// DETECTOR DE CORES COM AUTO AJUNTE V1
#include <NewTone.h>
#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);
int LDR = A0;
int vermelho = 3;
int verde = 6;
int azul = 9;
int variacao = 40;
int espSetup = 5000;
int desligado = 5;
int ligado = 10;
int texto = 3000;
int contador = 0;
int VMLDR = 0;
int VDLDR = 0;
int AZLDR = 0;
//padrão do Vermelho*********************
int VermelhoVermelho = 0;
int VermelhoVerde = 0;
int VermelhoAzul = 0;
//padrão do Verde************************
int VerdeVermelho = 0;
int VerdeVerde = 0;
int VerdeAzul = 0;
//padrão do Azul*************************
int AzulVermelho = 0;
int AzulVerde = 0;
int AzulAzul = 0;
//padrão do Amarelo*********************
int AmareloVermelho = 0;
int AmareloVerde = 0;
int AmareloAzul = 0;
//padrão do Branco**********************
int BrancoVermelho = 0;
int BrancoVerde = 0;
int BrancoAzul = 0;
//****************************************
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.begin (16, 2);
pinMode(3, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(13, OUTPUT);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("DETECTOR DE");
lcd.setCursor(5, 1);
lcd.print("CORES");
delay(5000);
// Inicio do set-up ********************************************************************************
/* Verifique as seguintes funções. Elas estão no fim do sketch. Cada uma delas solicita o
posicionamento do objeto com a respectiva cor, e registra a mesma de forma automática. Esta preparação inicial é
muito importante, pois em diferentes ambientes, devido a diferença de luminosidade, a leitura do sensor pode variar;*/
calib ();
setAmarelo();
setVermelho();
setVerde();
setAzul();
// Fim do set-up **********************************************************************************
/* Inicio da apresentação. Esta função faz algumas observações sobre o funcionamento do detector */
apresentacao();
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("APROXIME UM");
lcd.setCursor(5, 1);
lcd.print("OBJETO");
}
void loop() {
// liga vermelho
digitalWrite(3, LOW);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
VMLDR = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga verde
digitalWrite(6, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
VDLDR = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga azul
digitalWrite(9, LOW);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
delay(ligado);
AZLDR = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
Serial.print("--- Vermelho= ");
Serial.print(VMLDR);
Serial.print("--- Verde= ");
Serial.print(VDLDR);
Serial.print("--- Azul= ");
Serial.print(AZLDR);
Serial.println("---");
if (VMLDR > (VermelhoVermelho - variacao) && VMLDR < (VermelhoVermelho + variacao) && VDLDR > (VermelhoVerde - variacao) && VDLDR < (VermelhoVerde + variacao) && AZLDR > (VermelhoAzul - variacao) && AZLDR < (VermelhoAzul + variacao)) {
Serial.println(" Cor detectada: VERMELHO");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("COR DETECTADA:");
lcd.setCursor(3, 1);
lcd.print("VERMELHO");
// liga vermelho
digitalWrite(3, LOW);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
NewTone(13, 500, 500);
delay(3000);
}
if (VMLDR > (AzulVermelho - variacao) && VMLDR < (AzulVermelho + variacao) && VDLDR > (AzulVerde - variacao) && VDLDR < (AzulVerde + variacao) && AZLDR > (AzulAzul - variacao) && AZLDR < (AzulAzul + variacao)) {
Serial.println(" Cor detectada: AZUL");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("COR DETECTADA:");
lcd.setCursor(3, 1);
lcd.print("AZUL");
// liga azul
digitalWrite(9, LOW);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
NewTone(13, 500, 500);
delay(3000);
}
if (VMLDR > (VerdeVermelho - variacao) && VMLDR < (VerdeVermelho + variacao) && VDLDR > (VerdeVerde - variacao) && VDLDR < (VerdeVerde + variacao) && AZLDR > (VerdeAzul - variacao) && AZLDR < (VerdeAzul + variacao)) {
Serial.println(" Cor detectada: VERDE");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("COR DETECTADA:");
lcd.setCursor(3, 1);
lcd.print("VERDE");
//liga verde
digitalWrite(6, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, HIGH);
NewTone(13, 500, 500);
delay(3000);
}
if (VMLDR > (AmareloVermelho - variacao) && VMLDR < (AmareloVermelho + variacao) && VDLDR > (AmareloVerde - variacao) && VDLDR < (AmareloVerde + variacao) && AZLDR > (AmareloAzul - variacao) && AZLDR < (AmareloAzul + variacao)) {
Serial.println(" Cor detectada: AMARELO");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("COR DETECTADA:");
lcd.setCursor(3, 1);
lcd.print("AMARELO");
// liga amarelo
digitalWrite(3, LOW);
digitalWrite(6, LOW);
digitalWrite(9, HIGH);
NewTone(13, 500, 500);
delay(3000);
}
if (VMLDR > (BrancoVermelho - variacao) && VMLDR < (BrancoVermelho + variacao) && VDLDR > (BrancoVerde - variacao) && VDLDR < (BrancoVerde + variacao) && AZLDR > (BrancoAzul - variacao) && AZLDR < (BrancoAzul + variacao)) {
Serial.println(" Cor detectada: BRANCO");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("COR DETECTADA:");
lcd.setCursor(3, 1);
lcd.print("BRANCO");
// liga amarelo
digitalWrite(3, LOW);
digitalWrite(6, LOW);
digitalWrite(9, LOW);
NewTone(13, 500, 500);
delay(3000);
}
else
{
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("APROXIME UM");
lcd.setCursor(5, 1);
lcd.print("OBJETO");
//lcd.scrollDisplayLeft();
}
}
void calib (){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Preparesse para");
lcd.setCursor(0, 1);
lcd.print("calibrar o sist.");
NewTone(13, 500, 500);
delay(texto);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("***** 3 ******");
lcd.setCursor(0, 1);
lcd.print("calibrar o sist.");
NewTone(13, 500, 500);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("***** 2 ******");
lcd.setCursor(0, 1);
lcd.print("calibrar o sist.");
NewTone(13, 500, 500);
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("***** 1 ******");
lcd.setCursor(0, 1);
lcd.print("calibrar o sist.");
NewTone(13, 500, 500);
delay(1000);
}
// Inicio das funções de setup *********************************************************************
//AMARELO
void setAmarelo() {
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("APROXIME UM");
lcd.setCursor(0, 1);
lcd.print("OBJETO AMARELO");
NewTone(13, 500, 500);
contador = millis() + espSetup;
while (contador > millis()) {
// liga vermelho
digitalWrite(3, LOW);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
AmareloVermelho = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga verde
digitalWrite(6, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
AmareloVerde = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga azul
digitalWrite(9, LOW);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
delay(ligado);
AmareloAzul = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
}
}
//VERMELHO
void setVermelho() {
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("APROXIME UM");
lcd.setCursor(0, 1);
lcd.print("OBJETO VERMELHO");
NewTone(13, 500, 500);
contador = millis() + espSetup;
while (contador > millis()) {
// liga vermelho
digitalWrite(3, LOW);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
VermelhoVermelho = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga verde
digitalWrite(6, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
VermelhoVerde = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga azul
digitalWrite(9, LOW);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
delay(ligado);
VermelhoAzul = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
}
}
//VERDE
void setVerde() {
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("APROXIME UM");
lcd.setCursor(0, 1);
lcd.print("OBJETO VERDE");
NewTone(13, 500, 500);
contador = millis() + espSetup;
while (contador > millis()) {
// liga vermelho
digitalWrite(3, LOW);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
VerdeVermelho = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga verde
digitalWrite(6, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
VerdeVerde = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga azul
digitalWrite(9, LOW);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
delay(ligado);
VerdeAzul = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
}
}
//AZUL
void setAzul() {
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("APROXIME UM");
lcd.setCursor(0, 1);
lcd.print("OBJETO AZUL");
NewTone(13, 500, 500);
contador = millis() + espSetup;
while (contador > millis()) {
// liga vermelho
digitalWrite(3, LOW);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
AzulVermelho = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga verde
digitalWrite(6, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, HIGH);
delay(ligado);
AzulVerde = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
// liga azul
digitalWrite(9, LOW);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
delay(ligado);
AzulAzul = analogRead(LDR);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
delay(desligado);
}
}
void apresentacao() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Fim do setup.");
lcd.setCursor(0, 1);
lcd.print("Obrigado.");
NewTone(13, 500, 500);
delay(texto);
//*************************
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("O circuito esta");
lcd.setCursor(0, 1);
lcd.print("configurado...");
NewTone(13, 500, 500);
delay(texto);
//*************************
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("para reconhecer");
lcd.setCursor(0, 1);
lcd.print("4 cores:");
NewTone(13, 500, 500);
delay(texto);
//*************************
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Amarelo:");
lcd.setCursor(0, 1);
lcd.print(" ");
digitalWrite(3, LOW);
digitalWrite(6, LOW);
digitalWrite(9, HIGH);
NewTone(13, 500, 500);
delay(texto);
//*************************
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Vermelho:");
lcd.setCursor(0, 1);
lcd.print(" ");
digitalWrite(3, LOW);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
NewTone(13, 500, 500);
delay(texto);
//*************************
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Verde:");
lcd.setCursor(0, 1);
lcd.print(" ");
digitalWrite(3, HIGH);
digitalWrite(6, LOW);
digitalWrite(9, HIGH);
NewTone(13, 500, 500);
delay(texto);
//*************************
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Azul:");
lcd.setCursor(0, 1);
lcd.print(" ");
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, LOW);
NewTone(13, 500, 500);
delay(texto);
}
Nenhum comentário:
Postar um comentário