Arduino multiple 4 pin pwm pc fans control

Hi all,

I want to build a interactive installation for a school project. I now only need the ledstring to work with my fans and sound impact sensor. Who knows how to combine these elements? Or what am i doing wrong?

I am using this for my first prototype:
1 - Arduino Mega
12 - 4 pin pwm fans: 92mm, 550-1800RPM, 0.16A / +12V DC, 85g
link to fan: http://www.arctic.ac/eu_en/arctic-f9-pwm-co.html
1 - push button
1 - sound impact sensor
1 - WS2801 Bullet ledstring

#include "FastLED.h"
#define NUM_LEDS 48
#define DATA_PIN 0
#define CLOCK_PIN 1
CRGB leds[NUM_LEDS];


//======PWM Pins=============
 const byte fan1 = 2;
 const byte fan2 = 3;
 const byte fan3 = 4;
 const byte fan4 = 5;
 const byte fan5 = 6;
 const byte fan6 = 7;
 const byte fan7 = 8;
 const byte fan8 = 9;
 const byte fan9 = 10;
 const byte fan10 = 11;
 const byte fan11 = 12;
 const byte fan12 = 13;


 //======Button Input======
 const byte buttonPin = 21;
 byte buttonState = 0;
 
 
 //======Sound Input=======
 const byte soundPin = 20;
 byte soundState = 0;
 byte prevsoundState = 0;


void setup() {
  delay(2000);
  FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS); //ledjes inladen
  pinMode(soundPin,INPUT); //SIG Sound Impact Sensor
  pinMode(buttonPin, INPUT_PULLUP); //SIG button pin  
  Serial.begin(9600); //monitor
  delay(2000);
}


void loop() {
  checkButton();
  checkSound();
  ledcolorGreen();
  buttonPress();
  soundInput();
}


//=======Button Check========
void checkButton() {
  buttonState = digitalRead(buttonPin);
}


void buttonPress() {
  if (buttonState == LOW){
          Serial.println("Button On");
          ledcolorRed();
          animation3();
          animation2();
          animation2();
          animation5();
          animation6();
          animation7();
          animation1();
          animation6();
          animation5();
          animation8();
          animation8();
          animation1();
          animation3();
          animation4();
          animation5();
          fansOFF();
  }
  
  else {
          fansSoft();
  }
}


//========Sound Check========
void checkSound() {
  soundState = digitalRead(soundPin);
}


void soundInput() {
  if (soundState == 1){
        Serial.println("Sound On");
        ledcolorRed(); 
        animation6();
        animation4();
        animation5();
        animation6();
  }
  
  else {
         fansSoft();
  }
}


//=======Led Control=======
void ledcolorGreen() {
  leds[0] = CRGB::Green;
  FastLED.show();
  delay(20);
}


void ledcolorRed() {
  leds[0] = CRGB::Red;
  FastLED.show();
  delay(20);
}


void ledRainbow() {
}


//=============Fan Control===========
void fansON() {
          analogWrite(fan1, 255);
          analogWrite(fan2, 255);
          analogWrite(fan3, 255);
          analogWrite(fan4, 255);
          analogWrite(fan5, 255);
          analogWrite(fan6, 255);
          analogWrite(fan7, 255);
          analogWrite(fan8, 255);
          analogWrite(fan9, 255);
          analogWrite(fan10, 255);
          analogWrite(fan11, 255);
          analogWrite(fan12, 255);
          delay (5000);
}

void fansSoft() {
          analogWrite(fan1, 40);
          analogWrite(fan2, 40);
          analogWrite(fan3, 40);
          analogWrite(fan4, 40);
          analogWrite(fan5, 40);
          analogWrite(fan6, 40);
          analogWrite(fan7, 40);
          analogWrite(fan8, 40);
          analogWrite(fan9, 40);
          analogWrite(fan10, 40);
          analogWrite(fan11, 40);
          analogWrite(fan12, 40);
}


void fansOFF() {
          analogWrite(fan1, 10);
          analogWrite(fan2, 10);
          analogWrite(fan3, 10);
          analogWrite(fan4, 10);
          analogWrite(fan5, 10);
          analogWrite(fan6, 10);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10);
}


//===========Animations==================
// animatie 1 midden blazen/zijkanten blazen
void animation1() {
          analogWrite(fan1, 10);
          analogWrite(fan2, 10);
          analogWrite(fan3, 255);
          analogWrite(fan4, 255);
          analogWrite(fan5, 10);
          analogWrite(fan6, 10);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 255);
          analogWrite(fan10, 255);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10);
          delay(2000);
          analogWrite(fan1, 255);
          analogWrite(fan2, 10);
          analogWrite(fan3, 10);
          analogWrite(fan4, 10);
          analogWrite(fan5, 10);
          analogWrite(fan6, 255);
          analogWrite(fan7, 255);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 255);
}


// animatie klein wave link-rechts/rechts-links
void animation2() {
          analogWrite(fan1, 255);
          analogWrite(fan7, 255);
          delay(800); 
          analogWrite(fan2, 255);
          analogWrite(fan8, 255);
          analogWrite(fan1, 10);
          analogWrite(fan7, 10);
          delay(800); 
          analogWrite(fan3, 255);
          analogWrite(fan9, 255);
          analogWrite(fan2, 10);
          analogWrite(fan8, 10);
          delay(800); 
          analogWrite(fan4, 255);
          analogWrite(fan10, 255);
          analogWrite(fan3, 10);
          analogWrite(fan9, 10);
          delay(800); 
          analogWrite(fan5, 255);
          analogWrite(fan11, 255);
          analogWrite(fan4, 10);
          analogWrite(fan10, 10);
          delay(800);
          analogWrite(fan6, 255);
          analogWrite(fan12, 255);
          analogWrite(fan5, 10);
          analogWrite(fan11, 10);
          delay(400); 
          //wave terug
          analogWrite(fan6, 255);
          analogWrite(fan12, 255);
          delay(400); 
          analogWrite(fan5, 255);
          analogWrite(fan11, 255);
          analogWrite(fan6, 10);
          analogWrite(fan12, 10);
          delay(800); 
          analogWrite(fan4, 255);
          analogWrite(fan10, 255);
          analogWrite(fan5, 10);
          analogWrite(fan11, 10);
          delay(800); 
          analogWrite(fan3, 255);
          analogWrite(fan9, 255);
          analogWrite(fan4, 10);
          analogWrite(fan10, 10);
          delay(800); 
          analogWrite(fan2, 255);
          analogWrite(fan8, 255);
          analogWrite(fan3, 10);
          analogWrite(fan9, 10);
          delay(800);
          analogWrite(fan1, 255);
          analogWrite(fan7, 255);
          analogWrite(fan2, 10);
          analogWrite(fan8, 10);
          delay(800); 
          analogWrite(fan1, 10);
          analogWrite(fan7, 10);
          delay(1000); 
}


// animatie 3 - balletjes verspreiden in bak
void animation3() {
         analogWrite(fan1, 255);
          analogWrite(fan2, 255);
          analogWrite(fan3, 255);
          analogWrite(fan4, 255);
          analogWrite(fan5, 255);
          analogWrite(fan6, 255);
          analogWrite(fan7, 255);
          analogWrite(fan8, 255);
          analogWrite(fan9, 255);
          analogWrite(fan10, 255);
          analogWrite(fan11, 255);
          analogWrite(fan12, 255);
          delay(2000); 
          analogWrite(fan1, 10);
          analogWrite(fan2, 10);
          analogWrite(fan3, 10);
          analogWrite(fan4, 10);
          analogWrite(fan5, 10);
          analogWrite(fan6, 10);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10);
          delay(100);
}


// Alle voorste fans aan
void animation4() {
          analogWrite(fan1, 255);
          analogWrite(fan2, 255);
          analogWrite(fan3, 255);
          analogWrite(fan4, 255);
          analogWrite(fan5, 255);
          analogWrite(fan6, 255);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10);
          delay(2000);
}          


// I left the rest of the animations because of to many words...

Every good tip is welcome! I have search a lot on internet. But with no results.

Kind regards,
Stijn

Buttons are a little tricky at times. I have found it easiest to set the button in void setup() as

pinMode(button, INPUT_PULLUP);

which enables the internal pullup resistor on the uC. Just remember to check for a LOW condition not a HIGH when evaluating the button.

With that said, how do you want the fans to interact with the buttons? does each button have a corresponding fan? Are you using the buttons to control the speed, i.e. button1 pressed fan speeds up, button2 pressed fan slows down? If you can give me some more info I can likely help you. Ive built several fan controllers(for automotive use) with great success.

Bill

Hi Bill,

First thank you for you reply!

What I would like to accomplish is a bit hard to explain. So therefore i have tried to state a simpel design above. My end product should be a aquarium with eps foam inside. The fans will blow and the foam should move around inside a tank. I am building this frame at the moment. So when it is finished, I will show some more detail.

The idea behind it is: It is going to be a kind of lamp for children with ADHD. When their environment has to many stimuli, the lamp (=tank with foam) will show a storm inside. That way the child can see (visually) there are to many stimuli and he should filter some of them out by creating a more quite environment. It is a lamp because there will be a light under it that shines through the fans inside the tank (only for a cool effect).

For now I want to start by controlling the fans one by one with each an individually button. I only have 5 buttons at this point so I want to create groups of fans controlled by one button. For instance, 4 groups with each a button and 3 fans. So that, when i press a button the group of fans go's on or completely of.

After I worked this out I am going to add my sensors and let the fans interact with them. But I think it is really cool for the kids if they can manually control the fans with buttons as well to gain their interest in the lamp.

I am going to start with your idea about INPUT_PULLUP first and see where it gets me! Thanks for that! And if you have any more thoughts they are always welcome! Also about my design of product if you think something about that, please let me know:)

Kind regards,
Stijn

I am intrigued by your project. I have a nephew who has ADHD and I may have to build one myself lol.

There are a couple of ways to control multiple outputs with one button press. something like...

byte fan1 = 10;  //fan1 connected to digital pin 10
byte fan2 = 11;  //fan2 connected to digital pin 11
byte fan3 = 12;  //fan3 connected to figital pin 12


byte button1 = 9; //button 1 connected to digital pin 9
byte button1state = 0;  //state of button #1
byte lastbutton1state = 0;  //last state of button 1

byte button2 = 8;
byte button2state = 0;  //state of button #2
byte lastbutton2state = 0;  //last state of button 2


void fanON()    //display fan1 sate ON
{
 digitalWrite(fan1,HIGH);
 digitalWrite(fan2, HIGH);
 digitalWrite(fan3, HIGH);
 
}
void fanOFF()    //display fan1 sate OFF
{

 digitalWrite(fan1,LOW);
 digitalWrite(fan2, LOW);
 digitalWrite(fan3, LOW);
}

typedef void (*GenFunct1)();

GenFunct1 outstate[2]={
  fanON,fanOFF};

void setup()
{
pinMode(fan1, OUTPUT);
pinMode(fan2, OUTPUT);
pinMode(fan3,  OUTPUT);
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
}
void loop()
{
  button1state = digitalRead(button1);
  button2state = digitalRead(button2);

if(button1state == LOW && button2state == HIGH)
{
outstate[0]();
lastbutton1state = button1state;
}
else if(button2state == LOW && button1state == HIGH)
{
outstate[1]();
lasbutton2state = button2state;
}

This is untested but should work and give you an idea how to control multiple outputs. If you want to use just one button to control 3 fans, you can add in a button state counter but you will have to keep track of the number of times the button has been pressed during each iteration of the loop. You can reset the button counter to zero at the beginning or end of the loop to keep things a little bit easier. Try out the above code first and get your feet wet there then we can move on. Hope this helps.

Bill

Hi Bill,

Thank you very much for this example. I think I can work with this example and make it fit for my project. I spend two days building the frame and now that part is finished, so I can continue with my code. As promised, here are some photo's of the first setup.

It is great to hear you like my project. I have never tested the working of the installation with children before. But when the installation is working I am going to test it. But therefore it is now just a crazy idea I wanted to build.

I see now that i can't send pictures with this message. So they will be added to my description above:)

Thanks for your help and if I have adjusted my code I will let you know if I got it working!

Kind regards,
Stijn

One more tip on the code, make the fans and buttons and any other assignment that wont change, add " const" before the byte so the compiler is informed thses will not change.

cont byte fan1 = 10;

the other variables that will have a working value can be prefixed with "volatile" as in

volatile byte button1PushCounter = 0;

Bill

Finally someone that knows using type INT on pin numbers is wasteful and sloppy!

Hi guys,

The construction for the frame is finished. So now I am focussing on my code. I have programmed some really basic animations with the fans and they work great. I also have 2 different inputs: 1 button and 1 sound impact sensor. The button plays some of the programmed animations and the sound sensor sets all the fans on if the sound level is reached. I have added the WS2801 bullet leds as well.

The problem now is that the leds don't work in combination with the rest of my code. If I only upload a code for the leds it works fine. But in combination it does not. Does any of you have some advice for me? Also feedback on the rest of my code is always more then welcome!

#include "FastLED.h"

#define NUM_LEDS 50

#define DATA_PIN 0

#define CLOCK_PIN 1

CRGB leds[NUM_LEDS];

//PWM Pins
 byte fan1 = 2;
 byte fan2 = 3;
 byte fan3 = 4;
 byte fan4 = 5;
 byte fan5 = 6;
 byte fan6 = 7;
 byte fan7 = 8;
 byte fan8 = 9;
 byte fan9 = 10;
 byte fan10 = 11;
 byte fan11 = 12;
 byte fan12 = 13;

// button Input
byte inPin = 21;
byte val = 0;

//Sound Input
byte soundPin = 20;

void setup()
{
  delay(2000);

  FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS); //ledjes inladen
  
  pinMode(soundPin,INPUT); //SIG Sound Impact Sensor
  pinMode(inPin, INPUT); //SIG button pin
  
  //alle ledjes op Groen
  for(int greenLed = 0; greenLed < NUM_LEDS; greenLed = greenLed + 1) {
      leds[greenLed] = CRGB::Green;
      FastLED.show();
      delay(100);
   }
  
  Serial.begin(9600); //monitor
}

void loop()
{

  // Sound statement = Sound On - Installatie aan, kleur rood / Sound Off - Installatie uit, kleur groen.
  boolean soundstate = digitalRead(soundPin);
  if (soundstate == 1) {
            
                    //alle ledjes op Rood
          for(int redLed = 0; redLed < NUM_LEDS; redLed = redLed + 1) {
              leds[redLed] = CRGB::Red;
              FastLED.show();
              delay(10);
              }
    
      Serial.println("sound On");
      
         //anitmatie 3
          analogWrite(fan1, 255);
          analogWrite(fan2, 255);
          analogWrite(fan3, 255);
          analogWrite(fan4, 255);
          analogWrite(fan5, 255);
          analogWrite(fan6, 255);
          analogWrite(fan7, 255);
          analogWrite(fan8, 255);
          analogWrite(fan9, 255);
          analogWrite(fan10, 255);
          analogWrite(fan11, 255);
          analogWrite(fan12, 255);
          delay(10000); 
    }
    
    
  else {
    Serial.println("sound Off");
    
          analogWrite(fan1, 10);
          analogWrite(fan2, 10);
          analogWrite(fan3, 10);
          analogWrite(fan4, 10);
          analogWrite(fan5, 10);
          analogWrite(fan6, 10);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10);
            
  }
  
  //Knop statement = Button On - installatie aan, kleur rood / button Off - installatie uit, kleur groen
  boolean val = digitalRead(inPin);
  if (val == LOW) {
         
      Serial.println("button On");
      Serial.println(val);

          //animatie 4 midden blazen
          analogWrite(fan1, 10);
          analogWrite(fan2, 10);
          analogWrite(fan3, 255);
          analogWrite(fan4, 255);
          analogWrite(fan5, 10);
          analogWrite(fan6, 10);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 255);
          analogWrite(fan10, 255);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10);
          delay(3000);
          analogWrite(fan1, 255);
          analogWrite(fan2, 10);
          analogWrite(fan3, 10);
          analogWrite(fan4, 10);
          analogWrite(fan5, 10);
          analogWrite(fan6, 255);
          analogWrite(fan7, 255);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 255);
          delay(3000);
          analogWrite(fan1, 10);
          analogWrite(fan2, 10);
          analogWrite(fan3, 255);
          analogWrite(fan4, 255);
          analogWrite(fan5, 10);
          analogWrite(fan6, 10);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 255);
          analogWrite(fan10, 255);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10);
          delay(3000);
          analogWrite(fan1, 255);
          analogWrite(fan2, 10);
          analogWrite(fan3, 10);
          analogWrite(fan4, 10);
          analogWrite(fan5, 10);
          analogWrite(fan6, 255);
          analogWrite(fan7, 255);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 255);
          delay(3000);
          analogWrite(fan1, 10);
          analogWrite(fan2, 10);
          analogWrite(fan3, 10);
          analogWrite(fan4, 10);
          analogWrite(fan5, 10);
          analogWrite(fan6, 10);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10); 
          
          //animatie 2 - link naar rechts = wave
          analogWrite(fan1, 255);
          analogWrite(fan7, 255);
          analogWrite(fan2, 100);
          analogWrite(fan8, 100);
          delay(3000); 
          analogWrite(fan2, 255);
          analogWrite(fan8, 255);
          analogWrite(fan1, 10);
          analogWrite(fan7, 10);
          analogWrite(fan3, 100);
          analogWrite(fan9, 100);
          delay(3000); 
          analogWrite(fan3, 255);
          analogWrite(fan9, 255);
          analogWrite(fan2, 10);
          analogWrite(fan8, 10);
          analogWrite(fan4, 100);
          analogWrite(fan10, 100);
          delay(3000); 
          analogWrite(fan4, 255);
          analogWrite(fan10, 255);
          analogWrite(fan3, 10);
          analogWrite(fan9, 10);
          analogWrite(fan5, 100);
          analogWrite(fan11, 100);
          delay(3000); 
          analogWrite(fan5, 255);
          analogWrite(fan11, 255);
          analogWrite(fan4, 10);
          analogWrite(fan10, 10);
          analogWrite(fan6, 100);
          analogWrite(fan12, 100);
          delay(3000);
          analogWrite(fan6, 255);
          analogWrite(fan12, 255);
          analogWrite(fan5, 10);
          analogWrite(fan11, 10);
          delay(1000); 
  }
  
  
  else{
    Serial.println("button Off");
    
          analogWrite(fan1, 10);
          analogWrite(fan2, 10);
          analogWrite(fan3, 10);
          analogWrite(fan4, 10);
          analogWrite(fan5, 10);
          analogWrite(fan6, 10);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10);   
  }
  
  
}

Hi Bill and other people,

This is the code I got so far. In the description above I have added some photo's of the finished frame for the installation. My code is getting better every day, thanks to this forum and you help. I have only one major issue that I haven't been able to fix:

My WS2801 Ledstring does not work with the rest of my code. If I only upload an example for this ledstring it works perfectly fine. But when I combine the led code with the rest of my code it does nothing. I have no idea why I can't get it to work and I have tried several options. Can anybody see something wrong or strange in my code? Or does anybody have some advice on things I can try?

Kind regards,
Stijn

#include "FastLED.h"
#define NUM_LEDS 48
#define DATA_PIN 0
#define CLOCK_PIN 1
CRGB leds[NUM_LEDS];


//======PWM Pins=============
 const byte fan1 = 2;
 const byte fan2 = 3;
 const byte fan3 = 4;
 const byte fan4 = 5;
 const byte fan5 = 6;
 const byte fan6 = 7;
 const byte fan7 = 8;
 const byte fan8 = 9;
 const byte fan9 = 10;
 const byte fan10 = 11;
 const byte fan11 = 12;
 const byte fan12 = 13;


 //======Button Input======
 const byte buttonPin = 21;
 byte buttonState = 0;
 
 
 //======Sound Input=======
 const byte soundPin = 20;
 byte soundState = 0;
 byte prevsoundState = 0;


void setup() {
  delay(2000);
  FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS); //ledjes inladen
  pinMode(soundPin,INPUT); //SIG Sound Impact Sensor
  pinMode(buttonPin, INPUT_PULLUP); //SIG button pin  
  Serial.begin(9600); //monitor
  delay(2000);
}


void loop() {
  checkButton();
  checkSound();
  ledcolorGreen();
  buttonPress();
  soundInput();
}


//=======Button Check========
void checkButton() {
  buttonState = digitalRead(buttonPin);
}


void buttonPress() {
  if (buttonState == LOW){
          Serial.println("Button On");
          ledcolorRed();
          animation3();
          animation2();
          animation2();
          animation5();
          animation6();
          animation7();
          animation1();
          animation6();
          animation5();
          animation8();
          animation8();
          animation1();
          animation3();
          animation4();
          animation5();
          fansOFF();
  }
  
  else {
          fansSoft();
  }
}


//========Sound Check========
void checkSound() {
  soundState = digitalRead(soundPin);
}


void soundInput() {
  if (soundState == 1){
        Serial.println("Sound On");
        ledcolorRed(); 
        animation6();
        animation4();
        animation5();
        animation6();
  }
  
  else {
         fansSoft();
  }
}


//=======Led Control=======
void ledcolorGreen() {
  leds[0] = CRGB::Green;
  FastLED.show();
  delay(20);
}


void ledcolorRed() {
  leds[0] = CRGB::Red;
  FastLED.show();
  delay(20);
}


void ledRainbow() {
}


//=============Fan Control===========
void fansON() {
          analogWrite(fan1, 255);
          analogWrite(fan2, 255);
          analogWrite(fan3, 255);
          analogWrite(fan4, 255);
          analogWrite(fan5, 255);
          analogWrite(fan6, 255);
          analogWrite(fan7, 255);
          analogWrite(fan8, 255);
          analogWrite(fan9, 255);
          analogWrite(fan10, 255);
          analogWrite(fan11, 255);
          analogWrite(fan12, 255);
          delay (5000);
}

void fansSoft() {
          analogWrite(fan1, 40);
          analogWrite(fan2, 40);
          analogWrite(fan3, 40);
          analogWrite(fan4, 40);
          analogWrite(fan5, 40);
          analogWrite(fan6, 40);
          analogWrite(fan7, 40);
          analogWrite(fan8, 40);
          analogWrite(fan9, 40);
          analogWrite(fan10, 40);
          analogWrite(fan11, 40);
          analogWrite(fan12, 40);
}


void fansOFF() {
          analogWrite(fan1, 10);
          analogWrite(fan2, 10);
          analogWrite(fan3, 10);
          analogWrite(fan4, 10);
          analogWrite(fan5, 10);
          analogWrite(fan6, 10);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10);
}


//===========Animations==================
// animatie 1 midden blazen/zijkanten blazen
void animation1() {
          analogWrite(fan1, 10);
          analogWrite(fan2, 10);
          analogWrite(fan3, 255);
          analogWrite(fan4, 255);
          analogWrite(fan5, 10);
          analogWrite(fan6, 10);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 255);
          analogWrite(fan10, 255);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10);
          delay(2000);
          analogWrite(fan1, 255);
          analogWrite(fan2, 10);
          analogWrite(fan3, 10);
          analogWrite(fan4, 10);
          analogWrite(fan5, 10);
          analogWrite(fan6, 255);
          analogWrite(fan7, 255);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 255);
}


// animatie klein wave link-rechts/rechts-links
void animation2() {
          analogWrite(fan1, 255);
          analogWrite(fan7, 255);
          delay(800); 
          analogWrite(fan2, 255);
          analogWrite(fan8, 255);
          analogWrite(fan1, 10);
          analogWrite(fan7, 10);
          delay(800); 
          analogWrite(fan3, 255);
          analogWrite(fan9, 255);
          analogWrite(fan2, 10);
          analogWrite(fan8, 10);
          delay(800); 
          analogWrite(fan4, 255);
          analogWrite(fan10, 255);
          analogWrite(fan3, 10);
          analogWrite(fan9, 10);
          delay(800); 
          analogWrite(fan5, 255);
          analogWrite(fan11, 255);
          analogWrite(fan4, 10);
          analogWrite(fan10, 10);
          delay(800);
          analogWrite(fan6, 255);
          analogWrite(fan12, 255);
          analogWrite(fan5, 10);
          analogWrite(fan11, 10);
          delay(400); 
          //wave terug
          analogWrite(fan6, 255);
          analogWrite(fan12, 255);
          delay(400); 
          analogWrite(fan5, 255);
          analogWrite(fan11, 255);
          analogWrite(fan6, 10);
          analogWrite(fan12, 10);
          delay(800); 
          analogWrite(fan4, 255);
          analogWrite(fan10, 255);
          analogWrite(fan5, 10);
          analogWrite(fan11, 10);
          delay(800); 
          analogWrite(fan3, 255);
          analogWrite(fan9, 255);
          analogWrite(fan4, 10);
          analogWrite(fan10, 10);
          delay(800); 
          analogWrite(fan2, 255);
          analogWrite(fan8, 255);
          analogWrite(fan3, 10);
          analogWrite(fan9, 10);
          delay(800);
          analogWrite(fan1, 255);
          analogWrite(fan7, 255);
          analogWrite(fan2, 10);
          analogWrite(fan8, 10);
          delay(800); 
          analogWrite(fan1, 10);
          analogWrite(fan7, 10);
          delay(1000); 
}


// animatie 3 - balletjes verspreiden in bak
void animation3() {
         analogWrite(fan1, 255);
          analogWrite(fan2, 255);
          analogWrite(fan3, 255);
          analogWrite(fan4, 255);
          analogWrite(fan5, 255);
          analogWrite(fan6, 255);
          analogWrite(fan7, 255);
          analogWrite(fan8, 255);
          analogWrite(fan9, 255);
          analogWrite(fan10, 255);
          analogWrite(fan11, 255);
          analogWrite(fan12, 255);
          delay(2000); 
          analogWrite(fan1, 10);
          analogWrite(fan2, 10);
          analogWrite(fan3, 10);
          analogWrite(fan4, 10);
          analogWrite(fan5, 10);
          analogWrite(fan6, 10);
          analogWrite(fan7, 10);
          analogWrite(fan8, 10);
          analogWrite(fan9, 10);
          analogWrite(fan10, 10);
          analogWrite(fan11, 10);
          analogWrite(fan12, 10);
          delay(100);
}




//rest of animations left out because off maximum allowed length