Desde el viernes 8, estoy con la programación del software de arduino que controlará a la obra de Tesis: "xxz - mellizas nacidas a destiempo" que propone una performance infantil con dos esferas robóticas que dependen del otro para moverse y desplazarse libremente por el espacio.
De momento trabajando en el código de arduino, utilizarán 2 sensores cada una, 1 sensor de movimiento PIR y 1 acelerómetro para con ellos, reaccionar a los impulsos de sus compañer@s de juego.
Aun tiene varias fallas pero por el momento así es:
Todas las partes en gris son comentarios o bien partes del código que no quiero ejecutar de momento, algunas porque son para calibrar el software y otras porque aun no las planifiqué demasiado pero que me sirve que estén presentes en el código.
/* Pelotedra I:
2017_12_08
+ 12 Leds, 4 de cada color primario con resistencias de 220ohms
+ 3 transistores NPN c/u para cada color Luz
+ 1 sensor PIR
+ 1 sensor Acelerometro
Pelotedra II:
+ 30 Leds RGB con sus resistencias de 220ohms
+ 3 transistores PNP de 1000mA, uno para cada color Luz
+ 1 sensor PIR
+ 1 sensor Acelerometro
Meta a programar:
//Nada se mueve:
IF lectura PIR = LOW;
blink R (delay 10.000);
//Algo fuera de pelotedra se mueve:
IF lectura PIR = HIGH && Accelero = LOW;
blink G (delay 1.000);
//La pelotedra se mueve:
IF lectura PIR = HIGH && Accelero = HIGH;
Leds responden a los valores de x,y,z del Accelero;
//No existe la variable PIR = LOW && Accelero = HIGH porque ambos
sensores estan dentro de la Pelotedra y, si esta se mueve,
la lectura PIR siempre sera HIGH.
*/
//Variables del Acelerometro:
#include <AcceleroMMA7361.h>
AcceleroMMA7361 accelero;
int x;
int y;
int z;
//sensor PIR
int pinSensor = 2; // entrada al arduino del sensor pin 2
int pirState = LOW; // no detecta movimiento
int valSensor = 0; // variable para leer el estado del pin
//Leds:
int rojo = 3;
int verde = 5;
int azul = 6;
//Temporizadores de milisegundos del delay en los leds
int green = 180;
int red = 450;
int todos = 150;
//Temporizador
unsigned long actual;
unsigned long previo;
int eventoTiempo;
void setup(){
//Declara los pines de los Leds como emisores:
pinMode(rojo, OUTPUT);
pinMode(verde, OUTPUT);
pinMode(azul, OUTPUT);
//Inicializa el puerto serial:
Serial.begin(9600);
//Inicializar el Acelerometro:
accelero.begin(13, 12, 11, 10, A0, A1, A2);
accelero.setARefVoltage(3.3); //sets the AREF voltage to 3.3V
accelero.setSensitivity(HIGH); //sets the sensitivity to +/-1.5G
accelero.calibrate();
//Declara al sensor PIR como receptor:
pinMode(pinSensor, INPUT);
//Temporizador
previo = 0;
eventoTiempo = 0;
}
void loop(){
actual = millis();
if (actual - previo > 10000){
previo = actual;
eventoTiempo = 1;
digitalWrite(rojo, LOW);
}
//Nada se mueve:
//sensor PIR:
valSensor = digitalRead(pinSensor); // Lee el valor de entrada del sensor
if (valSensor == LOW){ // Verifica si la entrada es BAJA (no hay movimiento)
Serial.println("No Hay Movimiento"); // Imprime en pantalla cuando no hay un cambio de estado
digitalWrite(rojo, HIGH);
digitalWrite(verde, LOW); //Esto garantiza que los Leds verdes esten apagados
digitalWrite(azul, LOW); //Esto garantiza que los Leds azules esten apagados
delay(red);
digitalWrite(rojo, LOW);
delay(red);
digitalWrite(rojo, HIGH);
delay(red);
digitalWrite(rojo, LOW);
digitalWrite(verde, LOW);
digitalWrite(azul, LOW);
//delay(red*3);
} if(eventoTiempo == 1){
digitalWrite(rojo,LOW);
digitalWrite(verde,LOW);
//digitalWrite(azul, HIGH);
//delay(red);
digitalWrite(azul,LOW);
eventoTiempo = 0;
}
//Algo fuera de pelotedra se mueve:
//sensor PIR:
valSensor = digitalRead(pinSensor); // Lee el valor de entrada del sensor
if (valSensor == HIGH){ // Verifica si la entrada es ALTA (hay movimiento)
Serial.println("Hay Movimiento"); // Imprime en pantalla cuando hay un cambio de estado
digitalWrite(verde, HIGH);
digitalWrite(rojo, LOW); //Esto garantiza que los Leds rojos esten apagados
digitalWrite(azul, LOW); //Esto garantiza que los Leds azules esten apagados
delay(green);
digitalWrite(verde, LOW);
delay(green);
digitalWrite(verde, HIGH);
delay(green);
digitalWrite(verde, LOW);
digitalWrite(rojo, LOW);
digitalWrite(azul, LOW);
//delay(green*3);
}
if(eventoTiempo == 1){
digitalWrite(rojo,LOW);
digitalWrite(verde,LOW);
digitalWrite(azul, LOW);
eventoTiempo = 0;
}
//La pelotedra se mueve:
/*IF lectura PIR = HIGH && Accelero = HIGH;
Leds responden a los valores de x,y,z del Accelero;
*/
/*
x = accelero.getXAccel();
y = accelero.getYAccel();
z = accelero.getZAccel();
Serial.print("\nx: ");
Serial.print(x);
x = map(x, 0, 511, 0, 255);
//Serial.print(x);
analogWrite(rojo, x);
Serial.print(" \ty: ");
y = map(y, 0, 511, 0, 255);
analogWrite(verde, y);
Serial.print(y);
Serial.print(" \tz: ");
z = map(z, 0, 511, 0, 255);
analogWrite(azul, z);
Serial.print(z);
Serial.print("\tG*10^-2");
delay(todos); //make it readable
if(eventoTiempo == 1){
digitalWrite(rojo,LOW);
digitalWrite(verde,LOW);
digitalWrite(azul, LOW);
eventoTiempo = 0;
}
*/
}
2017_12_08
+ 12 Leds, 4 de cada color primario con resistencias de 220ohms
+ 3 transistores NPN c/u para cada color Luz
+ 1 sensor PIR
+ 1 sensor Acelerometro
Pelotedra II:
+ 30 Leds RGB con sus resistencias de 220ohms
+ 3 transistores PNP de 1000mA, uno para cada color Luz
+ 1 sensor PIR
+ 1 sensor Acelerometro
Meta a programar:
//Nada se mueve:
IF lectura PIR = LOW;
blink R (delay 10.000);
//Algo fuera de pelotedra se mueve:
IF lectura PIR = HIGH && Accelero = LOW;
blink G (delay 1.000);
//La pelotedra se mueve:
IF lectura PIR = HIGH && Accelero = HIGH;
Leds responden a los valores de x,y,z del Accelero;
//No existe la variable PIR = LOW && Accelero = HIGH porque ambos
sensores estan dentro de la Pelotedra y, si esta se mueve,
la lectura PIR siempre sera HIGH.
*/
//Variables del Acelerometro:
#include <AcceleroMMA7361.h>
AcceleroMMA7361 accelero;
int x;
int y;
int z;
//sensor PIR
int pinSensor = 2; // entrada al arduino del sensor pin 2
int pirState = LOW; // no detecta movimiento
int valSensor = 0; // variable para leer el estado del pin
//Leds:
int rojo = 3;
int verde = 5;
int azul = 6;
//Temporizadores de milisegundos del delay en los leds
int green = 180;
int red = 450;
int todos = 150;
//Temporizador
unsigned long actual;
unsigned long previo;
int eventoTiempo;
void setup(){
//Declara los pines de los Leds como emisores:
pinMode(rojo, OUTPUT);
pinMode(verde, OUTPUT);
pinMode(azul, OUTPUT);
//Inicializa el puerto serial:
Serial.begin(9600);
//Inicializar el Acelerometro:
accelero.begin(13, 12, 11, 10, A0, A1, A2);
accelero.setARefVoltage(3.3); //sets the AREF voltage to 3.3V
accelero.setSensitivity(HIGH); //sets the sensitivity to +/-1.5G
accelero.calibrate();
//Declara al sensor PIR como receptor:
pinMode(pinSensor, INPUT);
//Temporizador
previo = 0;
eventoTiempo = 0;
}
void loop(){
actual = millis();
if (actual - previo > 10000){
previo = actual;
eventoTiempo = 1;
digitalWrite(rojo, LOW);
}
//Nada se mueve:
//sensor PIR:
valSensor = digitalRead(pinSensor); // Lee el valor de entrada del sensor
if (valSensor == LOW){ // Verifica si la entrada es BAJA (no hay movimiento)
Serial.println("No Hay Movimiento"); // Imprime en pantalla cuando no hay un cambio de estado
digitalWrite(rojo, HIGH);
digitalWrite(verde, LOW); //Esto garantiza que los Leds verdes esten apagados
digitalWrite(azul, LOW); //Esto garantiza que los Leds azules esten apagados
delay(red);
digitalWrite(rojo, LOW);
delay(red);
digitalWrite(rojo, HIGH);
delay(red);
digitalWrite(rojo, LOW);
digitalWrite(verde, LOW);
digitalWrite(azul, LOW);
//delay(red*3);
} if(eventoTiempo == 1){
digitalWrite(rojo,LOW);
digitalWrite(verde,LOW);
//digitalWrite(azul, HIGH);
//delay(red);
digitalWrite(azul,LOW);
eventoTiempo = 0;
}
//Algo fuera de pelotedra se mueve:
//sensor PIR:
valSensor = digitalRead(pinSensor); // Lee el valor de entrada del sensor
if (valSensor == HIGH){ // Verifica si la entrada es ALTA (hay movimiento)
Serial.println("Hay Movimiento"); // Imprime en pantalla cuando hay un cambio de estado
digitalWrite(verde, HIGH);
digitalWrite(rojo, LOW); //Esto garantiza que los Leds rojos esten apagados
digitalWrite(azul, LOW); //Esto garantiza que los Leds azules esten apagados
delay(green);
digitalWrite(verde, LOW);
delay(green);
digitalWrite(verde, HIGH);
delay(green);
digitalWrite(verde, LOW);
digitalWrite(rojo, LOW);
digitalWrite(azul, LOW);
//delay(green*3);
}
if(eventoTiempo == 1){
digitalWrite(rojo,LOW);
digitalWrite(verde,LOW);
digitalWrite(azul, LOW);
eventoTiempo = 0;
}
//La pelotedra se mueve:
/*IF lectura PIR = HIGH && Accelero = HIGH;
Leds responden a los valores de x,y,z del Accelero;
*/
/*
x = accelero.getXAccel();
y = accelero.getYAccel();
z = accelero.getZAccel();
Serial.print("\nx: ");
Serial.print(x);
x = map(x, 0, 511, 0, 255);
//Serial.print(x);
analogWrite(rojo, x);
Serial.print(" \ty: ");
y = map(y, 0, 511, 0, 255);
analogWrite(verde, y);
Serial.print(y);
Serial.print(" \tz: ");
z = map(z, 0, 511, 0, 255);
analogWrite(azul, z);
Serial.print(z);
Serial.print("\tG*10^-2");
delay(todos); //make it readable
if(eventoTiempo == 1){
digitalWrite(rojo,LOW);
digitalWrite(verde,LOW);
digitalWrite(azul, LOW);
eventoTiempo = 0;
}
*/
}