Introduction: Simple POV W/Ardweeny - Persistence of Vision

Picture of Simple POV W/Ardweeny  - Persistence of Vision
This is basically a remake of a previous POV project but I scaled it down a bit 

The original is from this instructable https://www.instructables.com/id/Arduino-LEDs-fan-POV-APPLAUSE-sign/


This particular one will be given to a relative who has decided she is a Honey Badger .  Her inspiration is from a popular YouTube video about Honey Badgers.  But the phrase that is produced is easily changed in the code so this is a project that others could use for other reasons.



Step 1: Supplies

Picture of Supplies

Items used in this project:
 
At a flea market , I had purchased 5 computer fans for a dollar each so I used one for this project.  I was not sure if it would be strong enough to turn with the battery and the attached PCB  but it does turn easily.

misc lumber - my basement - 0.00

a length of plastic  9 by 1.25  inches  - my basement - 0.00

an Arduino - I use a Ardweeny from SolarBotics - about 10.00

7 red LEDs -  already had -  1.00

7 - 470  ohm resistors - 3.00

 1 - 7805 voltage regulator - 1.00

1 - 12 volt wall wart - already had - 0.00

2 - small SPST switches - had  in my supplies - 0.00

1 - old record -  0.00
 
 

also will need : wire, 9v battery , screws, Loctite 5 min epoxy, small PCB from Radio Shack

Step 2: Begin Assembly

Picture of Begin Assembly

1. Cut a small - 2 by 2  - piece of 1/4 inch plywood and epoxied to the fan hub . Right now the epoxy is the only thing holding the LED assembly to the fan.  I have had good luck with the Loctite but it could be the weak link in this setup.  Time will tell.

2.  I cut a 9 by 1.25 inch piece of plastic from some stock I had.  Sheets of plastic can be had at Home Depot.  I just  guessed at the size and it turned out to be pretty good.

3. Drill 7 holes in one end about 3/8  of an inch apart for the LEDs.  I found a drill size that allows the LEDs to be pressed into the holes quite tightly. 

4. Insert the 7 LEDs into the holes.

 

Step 3: Wiring the Leds and Attaching to the Ardweeny

Picture of Wiring the Leds and Attaching to the Ardweeny

The Ardweeny from Solarbotics comes in a kit and it requires about 30 minutes to solder the pieces together. It is intended to be used on a breadboard. After I  have bread boarded the circuit, I solder it to a small piece of PCB board which I can in turn attach to the plywood .  The Ardweeny will spin along with the LEDs.

After the Ardweeny is constructed, it is time to wire up the LEDs.  I used a bare copper wire as a common ground wire.  Each of the short wires from the LEDs is soldered to the copper wire and then the copper wire is connected to a ground on the Ardweeny. From the longer, positive leg, of the LED attach a wire to the Ardweeny and include a 470 ohm resistor in the circuit.

I connected the LEDs to pins 1,2,3,4,5,6,7 with the inner most LED being connected to pin 1. 

A voltage regulator is also needed  and I added a small SPST switch so I can control the power to the Ardweeny. 

I find using the short lengths of wire with female/male ends already  attached in combination with some headers soldered to the PCB will make the build easier and reuse for possible without a lot of desoldering.

After all connections are made, attach the Ardweeny to the plastic with  small bolts thru a short length of plastic tubing, which is used as a stand off for the PCB.

Step 4: Hall Sensor

Picture of Hall Sensor

This time , I did not use a sensor to trigger the LEDs.  I was able to get it pretty good in the code.

Step 5: Finish the Construction

Picture of Finish the Construction

The remaining steps were:

- attach the plastic arm to the wood hub with small wood screws.

- attach the 9 volt battery to the plastic arm .  As the battery may need to be replaced, I wire tied it to the arm but that turned out to be not enough of a tie down.  As the arm spins , the battery will try to be flung from the arm so I glued in a small piece of wood to keep it from dislodging.  Also the more balanced you can get the arm, the less vibration it will do .

- I then built a stand from scrap wood, painted it black  

- I attached the fan (which has the arm attached ) to an old LP record .   The record inturn is attached to the stand . 

- I used a wire tie to make a tension relief for the wire and added a SPST switch so I can turn the power on/off to the fan.


- The AC adapter is a 12volt 200 milli amp that I had around.

Step 6: The Code

Picture of The Code

/ Code for the Arduino Bike POV project
The original code is from an internet find which is noted in the comments
I have modified it greatly

Some issues:
without a hall sensor, one will have to play with the time between words to get a reasonably stable image
 

// Arduino Bike POV
//
// by Scott Mitchell
// www.openobject.org
// Open Source Urbanism
//
// Copyright (C) 2008 Scott Mitchell 12-10-2008
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//

//============================================================
// 6/2011 heavily modified by c. Dubois for my POV project
// Hall sensor is a switch so I  used different code for it
// also used a font.h that I found
// ------------------------------------------------------------




// defining the alphabet
#include "font.h"

// define the Arduino LED pins in use
const int LEDpins[] = {
   1,2,3,4,5,6,7};

// number of LEDs
  const int charHeight = sizeof(LEDpins);
  const int charWidth = 5;
int var = 0;
int worddelay = 50000;
 

// sensor setup
const int sensorPIN = 0;  // define the Arduino sensor pin

//  boolean sensorFlag = false;  // stores sensor state
  int sensVal;  // variable to store the value coming from the sensor

const char textString[] = "CLAIRE";
const char textString2[] =" is a ";
const char textString3[] ="HONEY ";
const char textString4[] ="BADGER";

void setup()
{
   pinMode(13, OUTPUT);
    pinMode(1 , OUTPUT);
   pinMode(2, OUTPUT);
    pinMode(3, OUTPUT);
     pinMode(4, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);
    pinMode(7, OUTPUT);
 
  
  //   Serial.begin(9600);
}

void loop()
{
   // turn on Led for a circle in middle and proof that arduino is powered
    digitalWrite(13, HIGH);   // set the LED on 
 
    
// sensVal = analogRead(sensorPIN);  // read the Hall Effect Sensor 



//    Serial.println(sensVal);
// delay(500 ); 

//  if (sensVal  != 1023  ) {
 
   //   Turn on the leds to test that they work and create circles
digitalWrite(1 , HIGH);   // set the LED  on
delay(500);
digitalWrite(2 , HIGH);   // set the LED on
delay(500);
digitalWrite(3 , HIGH);   // set the LED on
delay(500);
digitalWrite(4 , HIGH);   // set the LED on
delay(500);
digitalWrite(5 ,HIGH);   // set the LED on
delay(500);
digitalWrite(6 ,HIGH);   // set the LED on
delay(500);
digitalWrite(7 ,HIGH);   // set the LED on

// delay to let the fan get to speed
     delay (3000);
    
   // printing every letter of the textString
   // then clear and print textstring2
   var = 0;
while(var < 200){
  // do something repetitive 150 times
  
   
   for (int k=0; k<sizeof(textString); k++){
     printLetter(textString[k]);
   }

var++;
  // space between words
   delayMicroseconds(worddelay);
}
   
        //clear the LEDs
digitalWrite(1 , LOW);   // set the LED off
digitalWrite(2 , LOW);   // set the LED off
digitalWrite(3 , LOW);   // set the LED off
digitalWrite(4 , LOW);   // set the LED off
digitalWrite(5 ,LOW);   // set the LED off
digitalWrite(6 , LOW);   // set the LED off
digitalWrite(7 , LOW);   // set the LED off

// delay between phrases
     delay (500);
    
    
    
  //   ------------------------------  
// -- now do second phrase    ----
    
     var = 0;
     while(var < 100){
  // do something repetitive 75 times
  
      for (int k=0; k<sizeof(textString2); k++){
     printLetter(textString2[k]);
             }
            
             var++;
              // space between words
   delayMicroseconds(worddelay);
}

       //clear the LEDs
digitalWrite(1 , LOW);   // set the LED off
digitalWrite(2 , LOW);   // set the LED off
digitalWrite(3 , LOW);   // set the LED off
digitalWrite(4 , LOW);   // set the LED off
digitalWrite(5 ,LOW);   // set the LED off
digitalWrite(6 , LOW);   // set the LED off
digitalWrite(7 , LOW);   // set the LED off

// delay between phrases
     delay (500);
    
   
    
// -- now do third  phrase    ----
    
     var = 0;
     while(var < 100){
  // do something repetitive 200 times
  
      for (int k=0; k<sizeof(textString3); k++){
     printLetter(textString3[k]);
             }
            
             var++;
              // space between words
   delayMicroseconds(worddelay);
}
    //clear the LEDs
digitalWrite(1 , LOW);   // set the LED off
digitalWrite(2 , LOW);   // set the LED off
digitalWrite(3 , LOW);   // set the LED off
digitalWrite(4 , LOW);   // set the LED off
digitalWrite(5 ,LOW);   // set the LED off
digitalWrite(6 , LOW);   // set the LED off
digitalWrite(7 , LOW);   // set the LED off

// delay between phrases
     delay (250);
// -- now do fourth   phrase    ----
    
     var = 0;
     while(var < 175){
  // do something repetitive 200 times
  
      for (int k=0; k<sizeof(textString4); k++){
     printLetter(textString4[k]);
             }
            
             var++;
              // space between words
   delayMicroseconds(worddelay);
}
}
//  }

//  -------------------  Functions _________________



void printLetter(char ch)
{
   // make sure the character is within the alphabet bounds (defined by the font.h file)
   // if it's not, make it a blank character
  
   
  
   if (ch < 32 || ch > 126){
     ch = 32;
   }
   // subtract the space character (converts the ASCII number to the font index number)
   ch -= 32;
   // step through each byte of the character array
   for (int i=0; i<charWidth; i++) {
     byte b = font[ch][i];
    
 

     // bit shift through the byte and output it to the pin
     for (int j=0; j<charHeight; j++) {
       digitalWrite(LEDpins[j], !!(b & (1 << j)));
    
     }
     // space between columns

delayMicroseconds(425);
   }
   //clear the LEDs
digitalWrite(1 , LOW);   // set the LED on
digitalWrite(2 , LOW);   // set the LED on
digitalWrite(3 , LOW);   // set the LED on
digitalWrite(4 , LOW);   // set the LED on
digitalWrite(5 ,LOW);   // set the LED on
digitalWrite(6 , LOW);   // set the LED on
digitalWrite(7 , LOW);   // set the LED on
  
   // space between letters
   delayMicroseconds(2600);

   }

Comments

CaritoC2 (author)2017-06-07

hi, can you help me?, i dont know that mean !!(b & (1 << j))

AlexandreR72 (author)CaritoC22017-08-31

Hi, I too would like to know what !!(b & (1 << j)) means in the printLetter function.

To me !! would means double NOT and it doesn't make much sense. The & is a bitwise AND so as long as the result of (1<<j) gives 0 a 0 will be written to the corresponding LED (anything & 0 = 0). Why there is this limitation, I don't know.

dudbarn (author)2012-08-12

I built this fan and it works great! I now want to know if you have to buy a new arduino for the next project, or is there a way to build a circuit to work the way it is programmed (and be able to re-program) and use the same arduino on the next project. I'm sure this is a stupid question, but I am just starting out. Noobie.
Any favorite books on this subject?

Djandco (author)dudbarn2012-09-05

I buy ATMega328 chips from eBay, some come with the capacitors and the crystal which in most cases is all you need. Just make sure they have the Bootloader already on. Saves some hassle until you get to know the chip a bit more.
If you use DIP IC sockets you can always pull the chip out and shove it into an Arduino to put a new program in. Or you can add some connectors to pins 1,2,3 and Gnd then link them to an Arduino to put a new program in the chip in place.

I find that Simon Monk does some rather good books, Projects for the Evil Genius.
He takes time to explain things in a way that you can understand if you are new to this sort of thing.

The other way to find things out is just ask :-)

They are a helpful bunch around the instructables site.


duboisvb (author)dudbarn2012-08-12

This is a question I have had too. I find I have just gone ahead and used a new Arduino each time but I know there are other ways. Here is a link to a discussion and instructions about how to replace the Arduino in a completed project. Hopefully that will shed some light on what is best to do. I , too am going to study this
http://hackaday.com/2010/02/10/the-day-after-arduino/

About This Instructable

15,169views

27favorites

License:

Bio: Retired Math teacher who needs a hobby! So I tinker with stuff: Arduino, welding, my 1958 TR-3 , my tennis serve
More by duboisvb:Pizza RatPOV Clock & Message display w/RTC and PS/2 KeyboardPurple Rotary Phone
Add instructable to: