Wednesday 19 February 2014

Arduino + LED inteligente

Hola a todos,
Hoy les dejo un video de un Arduino Uno controlando una tira de led RGB.
Entren y pueden encontrar los materiales para hacerlo :) 
Saludos 

Requerimientos:

  • Arduino Uno
  • ULN2003AG
  • Sound Detector Module
  • Tira de Leds
  • Transformador de 12V

Diagrama:

Código:

  1. /**
  2.  * Cristian Marquez https://blog.cristianmarquez.me
  3.  * RGB controller with networking, potentiometer and android client
  4.  **/
  5. //External Libraries
  6. #include <SPI.h>
  7. #include <Ethernet.h>
  8. //Network
  9. byte mac[] = {
  10.   0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  11. IPAddress ip(192,168,0,177);
  12. EthernetServer server(80);
  13. IPAddress gateway(192,168,0,1);
  14. IPAddress subnet(255, 255, 255, 0);
  15. //LED
  16. int redLedPin = 3;
  17. int greenLedPin = 5;
  18. int blueLedPin = 6;
  19. //Sensors
  20. int soundDetectorAnalogPin=A0;
  21. int soundDetectorDigitalPin=8;
  22. int potentiometerAnalogPin=A1;
  23. void setup()
  24. {
  25.   Serial.begin(9600); //Just for debugging
  26.   Ethernet.begin(mac, ip);
  27.   server.begin();
  28.   pinMode(soundDetectorDigitalPin, INPUT);
  29.   pinMode(redLedPin, OUTPUT);    
  30.   pinMode(greenLedPin, OUTPUT);    
  31.   pinMode(blueLedPin, OUTPUT);    
  32. }
  33. void loop()
  34. {
  35.   if (digitalRead(soundDetectorDigitalPin)==1){
  36.     int rand = random(1,11);
  37.     switch (rand)
  38.     {
  39.     case 1:
  40.       //red
  41.       turnLights(random(100, 255),0,0);
  42.       delay(150);
  43.       break;
  44.     case 2:
  45.       //green
  46.       turnLights(0,random(100, 255),0);
  47.       delay(150);
  48.       break;
  49.     case 3:
  50.       //blue
  51.       turnLights(0,0,random(100, 255));
  52.       delay(150);
  53.       break;
  54.     case 4:
  55.       //red+green
  56.       turnLights(random(100, 255),random(100, 255),0);
  57.       delay(150);
  58.       break;
  59.     case 5:
  60.       //red+blue
  61.       turnLights(random(100, 255),0,random(100, 255));
  62.       delay(150);
  63.       break;
  64.     case 6:
  65.       //green+blue
  66.       turnLights(0,random(100, 255),random(100, 255));
  67.       delay(150);
  68.       break;
  69.     case 7:
  70.       //red+green+blue
  71.       turnLights(random(100, 255),random(100, 255),random(100, 255));
  72.       delay(150);
  73.       break;
  74.     case 8:
  75.       //yellow
  76.       turnLights(255,255,0);
  77.       delay(150);
  78.       break;
  79.     case 9:
  80.       //white
  81.       turnLights(255,255,255);
  82.       delay(150);
  83.       break;
  84.     case 10:
  85.       //violet
  86.       turnLights(238,130,238);
  87.       delay(150);
  88.       break;    
  89.     }
  90.   }
  91.   else{
  92.     turnLights(0,0,0);
  93.   }
  94. }
  95. void useSerial()
  96. {
  97.   while (Serial.available() > 0) {
  98.     // look for the next valid integer in the incoming serial stream:
  99.     int red = Serial.parseInt();
  100.     // do it again:
  101.     int green = Serial.parseInt();
  102.     // do it again:
  103.     int blue = Serial.parseInt();
  104.     if (Serial.read() == '\n') {
  105.       turnLights(red,green,blue);
  106.     }
  107.   }
  108. }
  109. void useEthernet()
  110. {
  111.   EthernetClient client = server.available();
  112.   if (client) {
  113.     // an http request ends with a blank line
  114.     boolean currentLineIsBlank = true;
  115.     while (client.connected()) {
  116.       if (client.available()) {
  117.         char c = client.read();
  118.         // if you've gotten to the end of the line (received a newline
  119.         // character) and the line is blank, the http request has ended,
  120.         // so you can send a reply
  121.         if (== '\n' && currentLineIsBlank) {
  122.           // send a standard http response header
  123.           client.println("HTTP/1.1 150 OK");
  124.           client.println("Content-Type: text/html");
  125.           client.println();
  126.           // print the current readings, in HTML format:
  127.           client.print("Temperature: ");
  128.           break;
  129.         }
  130.         if (== '\n') {
  131.           // you're starting a new line
  132.           currentLineIsBlank = true;
  133.         }
  134.         else if (!= '\r') {
  135.           // you've gotten a character on the current line
  136.           currentLineIsBlank = false;
  137.         }
  138.       }
  139.     }
  140.     // give the web browser time to receive the data
  141.     delay(1);
  142.     // close the connection:
  143.     client.stop();
  144.   }
  145. }
  146. void turnLights(int red, int green, int blue)
  147. {
  148.   red = constrain(red, 0, 255);
  149.   green =  constrain(green, 0, 255);
  150.   blue =  constrain(blue, 0, 255);
  151.   analogWrite(redLedPin, red);
  152.   analogWrite(greenLedPin, green);
  153.   analogWrite(blueLedPin, blue);
  154. }

Labels: , , , ,