Aaron Ardiri
[Valid RSS] RSS/XML feed
198 entries available (show all)

 

Internet of Things (IoT)
   

PLEASE TAKE A MOMENT TO FOLLOW MY NEW VENTURE:
 
RIoT Secure AB
 
ALL SECURITY RELATED TOPICS ON IoT wILL BE POSTED THERE


2014-05-21
>> ARDUINO - MY FIRST CUSTOM HACK

After tinkering around with the arduino starter kit; I simply had to extend some of the examples and mix and match them to create something unique just for fun. In this case, I took one example using six LEDs and another using the piezo element to create an audibly annoying but visually satisfying hack.

Once you have played with all the samples in the arduino starter kit it should be obvious what changes I made - simply connect six red LED and the piezo elements to the digital connections of the arduino uno. The LEDs are then connected to the ground lines using 220Ω resistors - should be simple figure out based on the other examples provided.

The sketch code is below:

  • //
    // simple arduino sketch using six LED's and the piezo element 
    //
    // - design is to have a sequence 0,1,2,3,4,5,5,4,3,2,1,0 repeat
    // - NOTE: double use of LEDs 0 and 5 - this is for nice visual effect
    
    #define ledPINBase    2
    #define ledPINCount   6  // pins 2,3,4,5,6 and 7
    #define piezoPIN      8
    
    // we want to move across the LED pins in approximately a second
    #define delayPeriod   (1000 / ledPINCount)
    
    // we want to play tones an octive up and down from middle C
    #define toneBase      262
    #define toneDiff      ((toneBase * 2) / ledPINCount)
    #define toneDuration  (delayPeriod / 2)
    
    // some global variables
    int g_direction = 1;
    int g_led       = ledPINBase;
    
    // configuration of the arduino 
    void setup()
    {
      // configure the LED pins - turn them all off
      for (int i=ledPINBase; i<(ledPINBase+ledPINCount); i++)
      {
        pinMode(i, OUTPUT);
        digitalWrite(i, LOW);
      }
    }
    
    // called periodically by the arduino core - this is where we do stuff
    void loop()
    {
      int state;
    
      // for visual effect; toggle the state of the LED
      state = digitalRead(g_led);
      if (state == HIGH) digitalWrite(g_led, LOW);
      else               digitalWrite(g_led, HIGH);
        
      // iterate forwards through LEDs
      if (g_direction == 1)
      {
        g_led++;
    
        // have we had a led counter overflow?
        if (g_led == (ledPINBase+ledPINCount)) 
        {
          g_led == (ledPINBase+ledPINCount)-1;
          g_direction = -1;
        }
      }
    
      // iterate backwards through LEDs
      else
      {
        g_led--;
          
        // have we had a led counter underflow
        if (g_led == (ledPINBase-1)) 
        {
          g_led = ledPINBase;
          g_direction = 1;
        }
      }
        
      // play a ticking sound 
      tone(piezoPIN, toneBase + ((g_led-ledPINBase)*toneDiff), toneDuration);
        
      // wait a specific period of time before the next iteration
      delay(delayPeriod);
    }
    

The arduino IDE is extremely simple to use - the "scratchpad" is where you simply write some C++ code and you can verify and deploy to the device when it is connected via USB cable. While the size of arduino applications seems to be limited to 32,256 bytes (assuming, 32kb not including the bootstrap) you can still do a lot with the device once you figure out how to hook up the sensors and components to the breadboard.

I think I will have more fun on these boards once the LCD (240x320) and Gameduino shields I ordered the other day turn up - there is this crazy satisfaction about receiving a small package in the mail and getting that warm fuzzy feeling like it is xmas every day with gadget madness. Must be the inner geek in me screaming to come out!

UPDATE
I implemented a small binary clock using the exact arduino configuration.


 

advertisement (self plug):
need assistance in an IoT project? contact us for a free consultation.

 



Electric Imp - IoT disguised as an SD card
 
Ynvisible - Printoo

DISCLAIMER:
All content provided on this blog is for informational purposes only.
All comments are generated by users and moderated for inappropriateness periodically.
The owner will not be liable for any losses, injuries, or damages from the display or use of this information.