Mirko Pavleski
Published © GPL3+

DIY Precise Arduino Anemometer with Linear Scale - DFRobot

How to make a how to make a simple Arduino device where the value of wind intensity is presented on RGB Led strip.

BeginnerFull instructions provided3 hours2,447
DIY Precise Arduino Anemometer with Linear Scale - DFRobot

Things used in this project

Hardware components

Anemometer Kit (0-5V)
DFRobot Anemometer Kit (0-5V)
×1
dfrobot - Beetle CM-32U4 Compatible with Arduino Leonardo - ATmega32U4
×1
DFRobot - 5V RGB Programmable LED Strip (50cm)
×1
Linear Regulator (7805)
Linear Regulator (7805)
×1
Buzzer
Buzzer
×1
Pushbutton Switch, Momentary
Pushbutton Switch, Momentary
×1
LED (generic)
LED (generic)
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free

Story

Read more

Schematics

Schematic diagram

Code

Arduino code

C/C++
#include "Wire.h"    // imports the wire library for talking over I2C 
#include <Adafruit_NeoPixel.h>

 int buttonPin = A1;    // momentary push button on pin 0
 int oldButtonVal = 0;

#define NUM_PIXEL 64 
#define PIN 9 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIXEL, PIN, NEO_GRB + NEO_KHZ800); 

 int nPatterns = 3;
 int lightPattern = 1;
 int out = 0 ;
 int w = 0 ;
 int sensorValue = 0;
void setup() 
{
  Serial.begin(9600); //turn on serial monitor
strip.begin();
clearStrip();
strip.show();
strip.setBrightness(15);
testing();
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH);  // button pin is HIGH, so it drops to 0 if pressed

}
void testing(){
  for(int L = 0; L<64; L++) { 
clearStrip();
strip.setPixelColor(L,wheel(((205+(L*3)) & 255)));//Gradient from blue (cold) to green (ok) to red (warm), first value here 205 = start color, second value here 42 = end color
 strip.show();
delay(100);
}
for(int L = 63; L>=0; L--) { 
clearStrip();
    strip.setPixelColor(L,wheel(((205+(L*3)) & 255)));//Gradient from blue (cold) to green (ok) to red (warm), first value here 205 = start color, second value here 42 = end color

strip.show();
delay(100);
  }
}
void dot() {

sensorValue = analogRead(A0);
int w = map(sensorValue, 0, 1023, 0, NUM_PIXEL);

for(uint16_t L = 0; L<w; L++) { 
clearStrip();
strip.setPixelColor(L,wheel(((205+(L*3)) & 255))); //Gradient from blue (cold) to green (ok) to red (warm), first value here 205 = start color, second value here 42 = end color
} 
strip.show(); //Output on strip 

delay(100); 
} 

void line() {

  sensorValue = analogRead(A0);
int w = map(sensorValue, 0, 1023, 0, NUM_PIXEL);

for(uint16_t L = 0; L<w; L++) { 

strip.setPixelColor(L,wheel(((205+(L*3)) & 255))); //Gradient from blue (cold) to green (ok) to red (warm), first value here 205 = start color, second value here 42 = end color
} 
strip.show(); //Output on strip 

clearStrip();
delay(100); 
} 

void loop() {
  // read that stapressurete of the pushbutton value;
  int buttonVal = digitalRead(buttonPin);
  if (buttonVal == LOW && oldButtonVal == HIGH) {// button has just been pressed
    lightPattern = lightPattern + 1;
  }
  if (lightPattern > nPatterns) lightPattern = 1;
  oldButtonVal = buttonVal;
  
  switch(lightPattern) {
    case 1:
      dot();
      break;
      case 2:
      line();
      break;
 
       }

      if (sensorValue > 150)
    {tone(11,1000);
     delay(50);
    noTone(11);
    } 
    else  {delay(50);
    }
}
//Color wheel ################################################################ 
uint32_t wheel(byte WheelPos) { 
if(WheelPos < 85) { 
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); 
} 
else if(WheelPos < 205) { 
WheelPos -= 85; 
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); 
} 
else { 
WheelPos -= 205; 
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); 
} 
} 
void clearStrip(){ 
for(int i = 0; i < NUM_PIXEL; i++) { 
strip.setPixelColor(i, 0); 
} 
}

Credits

Mirko Pavleski

Mirko Pavleski

149 projects • 1281 followers

Comments