Páginas

lunes, 11 de diciembre de 2017

2017_12_11 - pequeños logros con la programación

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;
     }
*/

}

No hay comentarios:

Publicar un comentario