Herramientas de usuario

Herramientas del sitio


proyectos:vestuario_aqa

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
Próxima revisiónAmbos lados, revisión siguiente
proyectos:vestuario_aqa [2019/12/03 01:53] kzproyectos:vestuario_aqa [2019/12/06 06:04] – [Leds con plantower] kz
Línea 359: Línea 359:
   FastLED.show();   FastLED.show();
 } }
 +
 +
 </code> </code>
  
 +
 +
 +==== Leds con plantower ====
 +
 +=== platformio.ini ===
 +
 +<code c++>
 +;PlatformIO Project Configuration File
 +;
 +;   Build options: build flags, source filter
 +;   Upload options: custom upload port, speed and extra flags
 +;   Library options: dependencies, extra library storages
 +;   Advanced options: extra scripting
 +;
 +; Please visit documentation for the other options and examples
 +; https://docs.platformio.org/page/projectconf.html
 +
 +[env:d1_mini]
 +platform = espressif8266
 +board = d1_mini
 +framework = arduino
 +lib_deps = FastLED, PMS Library, https://github.com/DedeHai/FastLEDPainter.git
 +</code>
 +
 +=== main.cpp ===
 +<code c++>
 +/**
 +   Simple animation demo for using the FastLED painter library
 +   This demo does the Knight Rider scanner effect with just a few lines of code
 +   The speed and fadespeed need to be adjusted for different processor speeds
 +   Chosen settings work nicely on 60-pixels and an Arduino Duemilenove (Uno)
 +*/
 +
 +#include "Arduino.h"
 +#include <SoftwareSerial.h>
 +#include "PMS.h"
 +#include <FastLED.h>
 +#include <FastLEDPainter.h>
 +
 +#define P_TOWER_RX D2
 +#define P_TOWER_TX 6
 +// Plantower
 +SoftwareSerial plantower_serial(P_TOWER_RX, P_TOWER_TX);
 +PMS pms(plantower_serial);
 +PMS::DATA data;
 +
 +// Leds
 +#define DATA_PIN    D7
 +#define CLK_PIN     D6
 +#define LED_TYPE    DOTSTAR
 +#define COLOR_ORDER BGR
 +#define NUM_LEDS    30
 +#define BRIGHTNESS  96
 +CRGB leds[NUM_LEDS];
 +
 +//create one canvas and one brush with global scope
 +FastLEDPainterCanvas pixelcanvas = FastLEDPainterCanvas(NUM_LEDS); //create canvas, linked to the FastLED library (canvas must be created before the brush)
 +FastLEDPainterBrush pixelbrush = FastLEDPainterBrush(&pixelcanvas); //crete brush, linked to the canvas to paint to
 +
 +CHSV brushcolor; //the brush and the canvas operate on HSV color space only
 +
 +void setup() {
 +  //initilize FastLED library
 +  FastLED.addLeds<LED_TYPE,DATA_PIN,CLK_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
 +
 +  plantower_serial.begin(9600);
 +  Serial.begin(115200);
 +  Serial.println(" ");
 +  Serial.println(F("FastLED Painter simple demo"));
 +
 +  //check if ram allocation of brushes and canvases was successful (painting will not work if unsuccessful, program should still run though)
 +  //this check is optional but helps to check if something does not work, especially on low ram chips like the Arduino Uno
 +  if (pixelcanvas.isvalid() == false) Serial.println(F("canvas allocation problem (out of ram, reduce number of pixels)"));
 +  else  Serial.println(F("canvas allocation ok"));
 +
 +  if (pixelbrush.isvalid() == false) Serial.println(F("brush allocation problem"));
 +  else  Serial.println(F("brush allocation ok"));
 +
 +  //initialize the animation, this is where the magic happens:
 +
 +  brushcolor.h = 0; //zero is red in HSV. Library uses 0-255 instead of 0-360 for colors (see https://en.wikipedia.org/wiki/HSL_and_HSV)
 +  brushcolor.s = 255; //full color saturation
 +  brushcolor.v = 130; //about half the full brightness
 +
 +  pixelbrush.setSpeed(1200); //set the brush movement speed (4096 means to move one pixel per update)
 +  pixelbrush.setColor(brushcolor); //set the brush color
 +  pixelbrush.setFadeSpeed(130); //fading speed of pixels (255 is maximum fading speed)
 +  pixelbrush.setFadeout(true); //do brightness fadeout after painting
 +  pixelbrush.setBounce(true); //bounce the brush when it reaches the end of the strip
 +
 +  //this sets up the brush to paint pixels in red, the pixels fade out after they are painted (the brush is the size of one pixel and can only one pixel per brush update, see other examples to paint multiple pixels at once)
 +
 +}
 +
 +void loop() {
 +
 +  Serial.println("Leyendo sensor");
 +  if (pms.readUntil(data)){
 +    Serial.print("PM2.5 ");Serial.println(data.PM_AE_UG_2_5);
 +    // brushcolor.h = data.PM_AE_UG_2_5;
 +    // pixelbrush.setColor(brushcolor);
 +    // // pixelbrush.setFadeSpeed(data.PM_AE_UG_2_5*3);
 +    Serial.print("PM10 ");Serial.println(data.PM_AE_UG_10_0);
 +    // saveDataForAverage(data.PM_AE_UG_2_5,data.PM_AE_UG_10_0);
 +  }
 +  else Serial.println("ERROR leyendo sensor");
 +
 +  Serial.println("Encendiendo leds");
 +  FastLED.clear(); //always need to clear the pixels, the canvas' colors will be added to whatever is on the pixels before calling a canvas update
 +
 +  pixelbrush.paint(); //paint the brush to the canvas (and update the brush, i.e. move it a little)
 +  pixelcanvas.transfer(); //transfer the canvas to the LEDs
 +
 +  FastLED.show();
 +}
 +</code>
 +
 +==== Leds + plantower: cambia color segun lectura del sensor ====
 +
 +platformio.ini
 +
 +<code c++>
 +[env:d1_mini]
 +platform = espressif8266
 +board = d1_mini
 +framework = arduino
 +lib_deps = FastLED, PMS Library, https://github.com/DedeHai/FastLEDPainter.git, Time
 +
 +</code>
 +
 +main.cpp
 +<code>
 +#include "Arduino.h"
 +#include <SoftwareSerial.h>
 +#include "PMS.h"
 +#include <FastLED.h>
 +#include <FastLEDPainter.h>
 +#include <Time.h>
 +
 +#define P_TOWER_RX D2
 +#define P_TOWER_TX 6
 +
 +// Plantower
 +SoftwareSerial plantower_serial(P_TOWER_RX, P_TOWER_TX);
 +PMS pms(plantower_serial);
 +PMS::DATA data;
 +
 +int pm2_5 = 0;
 +int *dir_pm2_5;
 +
 +// Leds
 +#define DATA_PIN D7
 +#define CLK_PIN D6
 +#define LED_TYPE DOTSTAR
 +#define COLOR_ORDER BGR
 +#define NUM_LEDS 26 // estos 10 es para que cuando lea el sensor no se vean los leds prendidos
 +#define BRIGHTNESS 96
 +CRGB leds[NUM_LEDS];
 +
 +//create one canvas and one brush with global scope
 +FastLEDPainterCanvas pixelcanvas = FastLEDPainterCanvas(NUM_LEDS);  //create canvas, linked to the FastLED library (canvas must be created before the brush)
 +FastLEDPainterBrush pixelbrush = FastLEDPainterBrush(&pixelcanvas); //crete brush, linked to the canvas to paint to
 +
 +CHSV brushcolor; //the brush and the canvas operate on HSV color space only
 +
 +int color = 0;
 +int speed = 400;
 +
 +int time_hours = 0;
 +int time_minutes = 0;
 +int time_seconds = 0;
 +
 +void readPlantower();
 +void animateLeds();
 +void updateValues();
 +
 +void setup() {
 +  //initilize FastLED library
 +  FastLED.addLeds<LED_TYPE, DATA_PIN, CLK_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
 +
 +  plantower_serial.begin(9600);
 +  Serial.begin(115200);
 +  Serial.println(" ");
 +  Serial.println(F("FastLED Painter simple demo"));
 +
 +  //check if ram allocation of brushes and canvases was successful (painting will not work if unsuccessful, program should still run though)
 +  //this check is optional but helps to check if something does not work, especially on low ram chips like the Arduino Uno
 +  if (pixelcanvas.isvalid() == false)
 +    Serial.println(F("canvas allocation problem (out of ram, reduce number of pixels)"));
 +  else
 +    Serial.println(F("canvas allocation ok"));
 +
 +  if (pixelbrush.isvalid() == false)
 +    Serial.println(F("brush allocation problem"));
 +  else
 +    Serial.println(F("brush allocation ok"));
 +
 +  //initialize the animation, this is where the magic happens:
 +  brushcolor.h = color; //zero is red in HSV. Library uses 0-255 instead of 0-360 for colors (see https://en.wikipedia.org/wiki/HSL_and_HSV)
 +  brushcolor.s = 255;   //full color saturation
 +  brushcolor.v = 130;   //about half the full brightness
 +
 +  pixelbrush.setSpeed(speed);      //set the brush movement speed (4096 means to move one pixel per update)
 +  pixelbrush.setColor(brushcolor); //set the brush color
 +  pixelbrush.setFadeSpeed(130);    //fading speed of pixels (255 is maximum fading speed)
 +  pixelbrush.setFadeout(true);     //do brightness fadeout after painting
 +  pixelbrush.setBounce(true);      //bounce the brush when it reaches the end of the strip
 +
 +  // set pointer
 +  dir_pm2_5 = &pm2_5;
 +
 +  // setup time
 +  setTime(time_hours, time_minutes, time_seconds, 30, 11, 19);
 +}
 +
 +void loop() {
 +  readPlantower();
 +}
 +
 +void readPlantower() {
 +  int sec = second();
 +  if (sec == 0 || sec == 15 || sec == 20 || sec == 30 || sec == 40 || sec == 50 ||
 +      sec == 5 || sec == 10 || sec == 35 || sec == 35 || sec == 45 || sec == 55) {
 +    pms.wakeUp();
 +    if (pms.read(data)) { 
 +      pm2_5 = data.PM_AE_UG_2_5; 
 +      delay(500);
 +      updateValues(); 
 +    }
 +    Serial.print("Leyendo pm 2.5 "); 
 +    Serial.println(*dir_pm2_5);
 +  }
 +  else {
 +    Serial.print("durmiendo. Ultimo valor ");
 +    Serial.println(*dir_pm2_5); 
 +    pms.sleep();
 +    animateLeds();
 +  }
 +  // Serial.print("sec: ");
 +  // Serial.println(sec);
 +}
 +
 +void animateLeds(){
 +  // Serial.println("Encendiendo leds");
 +  FastLED.clear();        //always need to clear the pixels, the canvas' colors will be added to whatever is on the pixels before calling a canvas update
 +  pixelbrush.paint();     //paint the brush to the canvas (and update the brush, i.e. move it a little)
 +  pixelcanvas.transfer(); //transfer the canvas to the LEDs
 +  FastLED.show();
 +}
 +
 +void updateValues() {
 +  // varia en los que varia
 +  /*
 +    233 minimo
 +    1225 maximo
 +  */
 +  if (*dir_pm2_5 < 400){ 
 +    brushcolor.h = 90; // aire bueno verde
 +    pixelbrush.setColor(brushcolor);
 +    pixelbrush.setFadeout(true);
 +    pixelbrush.setBounce(true);
 +  } else if (*dir_pm2_5 > 400 ) {
 +    brushcolor.h = 200; // aire regular azul
 +    pixelbrush.setColor(brushcolor);
 +    pixelbrush.setFadeout(true);
 +    pixelbrush.setBounce(true);
 +  } else if (*dir_pm2_5 > 800) {
 +    brushcolor.h = 155; // aire malo ?
 +    pixelbrush.setColor(brushcolor);
 +    pixelbrush.setFadeout(true);
 +    pixelbrush.setBounce(true);
 +  } else if (*dir_pm2_5 > 1200) {
 +    brushcolor.h = 0; // magenta aire podrido 
 +    pixelbrush.setColor(brushcolor);
 +    pixelbrush.setFadeout(true);
 +    pixelbrush.setBounce(true);
 +  }
 +}
 +</code>
  
  
proyectos/vestuario_aqa.txt · Última modificación: 2021/10/30 23:38 por kz