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

}

miércoles, 6 de diciembre de 2017

2017_12_06 listo para empezar la nueva programación

La tesis escrita está prácticamente terminada, tengo que hacerle correcciones y agregar unas cuantas citas bibliográficas que guarden relación con la bibliografía mencionada al final... algo que no suelo hacer porque muchas veces son textos que leo para nutrirme e informarme pero no por el hecho de citarlo sino por el de aprender más sobre un tema antes de redactar algo al respecto.

Mientras tanto avanzo con la obra:
(grabado ayer)
En pelotedra I, (la primer esfera que hice) me tocó volver a soldar los Leds porque en un 75% se habían soltado... en ese desarrollo quemé una varilla plástica con el soldador pero decidí dejarla así. A esta altura de la obra resulta un trabajo importante, tedioso y de mucha precisión cambiarle alguna varilla a la estructura de la obra y, se justifica sólo si está rota, en este caso solo se quemó un poco pero no se perforó.

Logré volver a entender dónde va cada cable que sale de la estructura (que luego irán dentro):
Los colores son los de mis cables, 5 en total. Y aquí me di cuenta que en pelotedra II debo emplear transistores PNP porque el pin común de los leds RGB es el positivo. Para pelotedra II, los mismos además deberán ser de 1A porque al ser 30 leds cada uno RGB son 30mA por cada uno, es decir, 900mA en cada color primario.