controlador digital - Arduino e processing
Com base no que foi estudado em sala de aula na disciplina de instalações multimídia nos foi solicitado a criação de uma interface de controle e supervisão que pudesse se relacionar com o ambiente de uma possível instalação.
Esse tipo de tecnologia é bastante vista em instalações visuais por exemplo, onde controladores são usados para mostrar imagens, videos e gerar resultados diferentes.
Exemplo:
Para realizar a tarefa foi proposto o uso do Arduino com o Processing que um programa de programação visual e para isso era obrigatório o uso dos seguintes dispositivos:
1. Leds (simulando o acionamento das luzes de ambiente/palco);
2. Buzzers (Simulando controle de som);
3. LDRs (Reportando os índices de luminescência do ambiente);
4. ServoMotor (Para o controle de mecanismos de ajuste/abertura ou posicionamento de câmeras e iluminação);
No caso do meu sistema considerei que o servomotor poderia ser usado para um sistema de abertura cortinas por exemplo.
o esquema visual das conexões foi o seguinte:
Abaixo encontra-se o código usado no Processing
Segue abaixo o código do Arduino
}
A imagem ta dela de controle ficou assim:

Segue abaixo o vídeo mostrando o projeto em funcionamento:
o modelo do circuito pode ser encontrado no autodesk circuits:
https://circuits.io/circuits/5076455-sistema-de-controle-via-processing
Esse tipo de tecnologia é bastante vista em instalações visuais por exemplo, onde controladores são usados para mostrar imagens, videos e gerar resultados diferentes.
Exemplo:
Temporary-Babel2D de André Sier
Hyperborea de André Sier
NON HUMAN DEVICE #01 de Miguel Neto, Rodrigo Carvalho
Retrovision de Nuno Lemos
Vídeo instalação interativa - Arduino
As vezes são usados controladores fisicos, mas sistemas de controle virtuais também podem ser usados pensando nesse contexto.
Para realizar a tarefa foi proposto o uso do Arduino com o Processing que um programa de programação visual e para isso era obrigatório o uso dos seguintes dispositivos:
1. Leds (simulando o acionamento das luzes de ambiente/palco);
2. Buzzers (Simulando controle de som);
3. LDRs (Reportando os índices de luminescência do ambiente);
4. ServoMotor (Para o controle de mecanismos de ajuste/abertura ou posicionamento de câmeras e iluminação);
No caso do meu sistema considerei que o servomotor poderia ser usado para um sistema de abertura cortinas por exemplo.
o esquema visual das conexões foi o seguinte:
Abaixo encontra-se o código usado no Processing
import processing.serial.*;
Serial port;
//anexar imagens: botoes, background e display
PImage bt1;
PImage bt2;
PImage bt3;
PImage bt4;
PImage bt5;
PImage bg;
PImage display;
void setup() {
size(600, 400);
// definição do tamanho da tela
port = new Serial(this, "COM8", 9600);
// precisa verificar em qual porta o arduino está conectar
/*imagens iniciais são chamadas no setup pois são estaticas e não precisam ficar sendo redesenhadas sempre*/
// essa função lê o local das imagens, no caso estavam na mesma pasta do projeto. bt1= loadImage("bt1.png");
bt2= loadImage("bt2.png");
bt3= loadImage("bt3.png");
bt4= loadImage("bt4.png");
bt5= loadImage("bt5.png");
bg= loadImage("bg.png");
display= loadImage("display.png");
// as imagens são posicionadas nos respectivos locais image(bg, 0, 0);
image(bt2, 43, 43);// ligar o sistema
image(bt1, 43+150, 150+93); // bt 1
image(bt1, 43+250, 150+93); // bt2
image(bt1, 43+450, 150+93); // bt3
image(bt1, 43+350, 43+200);// bt4
image(display, 150, 50);
// textos de apoio para entendimento da função de cada botão text("ON/OFF", 50, 120);
text("LUZ", 210, 330);
text("SOM", 310, 330);
text("CORTINA I", 395, 330);
text("CORTINA II", 495, 330);
}
void draw() {
/* a condição verifica se a interface está ligada, se sim escreve o valor do sinal enviado pelo sensor */
if(sistema==true){
if (port.available()>0) {
fundoverde(300, 85);
text("Luz no palco: "+port.readStringUntil('\n'), 300, 100);
}
}
}
/* para mostrar os botões mudando de cor criei funções para chamar as imagens desejadas e que pudessem ter sua posição fixada de forma fácil, o motivo disso é que as imagens possuem pouco mais de 65x65px, mas as áreas de contato são apenas de 50x50px, assim essas funções já calculam a diferença para que a imagem do botão e da área de contato designada sejam compatíveis*/
void criabt1(int x, int y) {
image(bt1, 43+x, 43+y);
}
void criabt4(int x, int y) {
image(bt4, 43+x, 43+y);
}
void criabt2(int x, int y) {
image(bt2, 43+x, 43+y);
}
void criabt3(int x, int y) {
image(bt3, 43+x, 43+y);
}
void criabt5(int x, int y) {
image(bt5, 43+x, 43+y);
}
//booleanos para a verificação de sistemas e o botão foi ativado ou desativado boolean btliga=false;
boolean sistema= false;
boolean btservo=false;
boolean btmelodia = false;
boolean btluz=false;
void mousePressed() {
println(" ");
println("Coordenada x: " + mouseX + " e y: " + mouseY);
//botão de liga e desliga
if (mouseX > 50 && mouseX < 50+50
&& mouseY > 50 && mouseY < 50+50) {
// if (botao1()) {
if (btliga==false) {
println("Ligou a maquina");
criabt4(0, 0);
btliga=true;
sistema=true;
println("true");
} else if (btliga==true) {
println("desligar");
criabt2(0, 0);
btliga=false;
println("false");
sistema=false;
}
}
if (sistema==true) {
text("SISTEMA LIGADO", 180, 100);
/*esses textos servem apenas para o momento em que o sistema é inciado e não é atualizado*/
text("LUZ:DESATIVADO", 180, 120);
text("SOM: DESATIVADO", 180, 140);
text("CORTINA: FECHADA", 180, 160);
controlLuz();
controlSom();
servomotor();
}
// quando o sistema é desligado as imagens voltam a ser as originais
if (sistema==false) {
image(bt2, 43, 43);// ligar o sistema
image(bt1, 43+150, 150+93); // bt 1
image(bt1, 43+250, 150+93); // bt2
image(bt1, 43+450, 150+93); // bt4
image(bt1, 43+350, 43+200);// bt5
image(display, 150, 50);
}
}
void controlLuz() {
//controla LUZ
if (mouseX > 150+50 && mouseX < 250
&& mouseY > 50+200 && mouseY < 300) {
if (btluz==false) {
port.write(1);
println("Luz: ativado");
criabt4(150, 200);
btluz=true;
println(true);
fundoverde(180, 100);
text("LUZ:ATIVADO", 180, 120);
} else if (btluz==true) {
port.write(2);
btluz=false;
println("false");
criabt1(150, 200);
fundoverde(180, 100);
text("LUZ:DESATIVADO", 180, 120);
}
}
}
void controlSom() {
// controla som
if (mouseX > 50+250 && mouseX < 300+50
&& mouseY > 50+200 && mouseY < 300) {
if (btmelodia==false) {
port.write(5);
println("ativa som");
criabt4(250, 200);
btmelodia=true;
println(true);
fundoverde(180, 120);
text("SOM: ATIVADO", 180, 140);
} else if (btmelodia==true) {
println("desativa som");
port.write(6);
btmelodia=false;
println("false");
criabt1(250, 200);
println(false);
fundoverde(180, 120);
text("SOM: DESATIVADO", 180, 140);
}
}
}
//NAO FUNCIONOU COM A MESMA LÓGICA
/*void controlServo() {
//liga servo motor
if (mouseX > 50+350 && mouseX < 50+400
&& mouseY > 50+200 && mouseY < 300) {
if (btservo==false) {
port.write(3);
println("ativa servo");
criabt4(350, 200);
btservo=true;
println(true);
text("Som:ativado", 400, 160);
} else if (btservo==true) {
println("desativa servo");
port.write(4);
btservo=false;
println("false");
criabt1(350, 200);
println(false);
text("Som: Desativado", 400, 160);
}
}
}*/
//codigo para botões diferentes
// controlador do servo
boolean botao3() {
if (mouseX > 50+350 && mouseX < 50+400
&& mouseY > 50+200 && mouseY < 300) {
return true;
} else {
return false;
}
}
boolean botao4() {
if (mouseX > 50 +450 && mouseX < 50+500
&& mouseY > 50+200 && mouseY < 300) {
return true;
} else {
return false;
}
}
void servomotor() {
if (botao3()) {
println("clicou botao 3");
// Envia código 1 para Arduino
port.write(3);
println("abrir cortina");
criabt4(350, 200);
criabt5(450, 200);
fundoverde(180, 140);
text("CORTINA: ABERTA", 180, 160);
}
if (botao4()) {
println("clicou botao 4");
// Envia código 1 para Arduino
port.write(4);
println("fechar cortina");
criabt4(450, 200);
criabt5(350, 200);
fundoverde(180, 140);
text("CORTINA: FECHADA", 180, 160);
}
}
/*função para criar um fundo com a mesma cor da caixa de texto criada, é importante para que os textos não fiquem se sobreponto a medida que são atualizados*/ void fundoverde(int x, int y) {
fill(135, 173, 52);
noStroke();
rect(x, y, 200, 20);
fill(255);
}
void sensordeluz(){
if (port.available()>0) {
fundoverde(300, 85);
text("Luz no palco: "+port.readStringUntil('\n'), 300, 100);
}
}
Segue abaixo o código do Arduino
#include <Servo.h>
Servo myservo;
int led = 13;
int buzzer = 8;
int sensorPin = A0;
int sensorVar=0;
void setup() {
pinMode(led, OUTPUT);
pinMode(12,OUTPUT);// transforma em GND ( so funciona com pouca corrente)
digitalWrite(12,LOW);
pinMode(buzzer,OUTPUT);
Serial.begin(9600);
myservo.attach(11);
// myservo.write(200);
}
void loop() {
sensorVar = analogRead(sensorPin);
Serial.println(sensorVar);
//1023 valor maximo
if (Serial.available() > 0) {
char valorLido = Serial.read();
Serial.print("Arduino diz: ");
if (valorLido == 1) {
digitalWrite(13, HIGH);
Serial.println("ativar luz");
}
if (valorLido == 2) {
digitalWrite(13, LOW);
Serial.println("desativar luz");
}
if (valorLido == 3) {
myservo.write(0);
Serial.println("Abrir cortina com servo");
Serial.println("som de alerta");
}
if (valorLido == 4) {
myservo.write(200);
Serial.println("fechar cortina com o servo");
}
if (valorLido == 5) {
Serial.println("som de alerta");
tone(buzzer, 1500);
delay(1000);
tone(buzzer, 1000);
}
if (valorLido == 6) {
Serial.println("fim do som");
noTone (buzzer);
}
}
}
A imagem ta dela de controle ficou assim:

Segue abaixo o vídeo mostrando o projeto em funcionamento:
o modelo do circuito pode ser encontrado no autodesk circuits:
https://circuits.io/circuits/5076455-sistema-de-controle-via-processing
Comentários
Postar um comentário