Updates from December, 2008 Toggle Comment Threads | Keyboard Shortcuts

  • Yury Gitman 5:24 pm on December 2, 2008 Permalink | Reply  

    Birdie/Qwail work in progress… 

    I’ve scrapped the Winbond, which is both good and bad. The Winbond would have been great for making bird sounds, but the Arduino Mini is so much more compact and easy to work with. It makes sound too, but the computery noises it makes are not very bird-like. In fact, they’re just downright annoying.

    I’m using the Play Melody code from an Arduino tutorial to get started. I had to add a couple of extra octaves (by halving the frequency of each tone for each octave), and now I’m working on getting the melody to play at the appropriate time.

    Right now my code will play a little ditty after 15 seconds if someone is not in front of the IR sensor. I need more parameters, but it’s not bad for a proof of concept. Consider is an implementation prototype.

    My code is after the jump, by the way

    Some photos:

    The Whole Mess

    Img_5597

    Here is my arudino mini, hooked up to the arduino as a usb connector. Also featured within the mess of wires is an IR sensor, a speaker (bigger than the one I’ll end up using, actually), and some fine LEDS to help me figure out what’s going on when). The Red LED comes on when the IR is on and reading something is close, and Yellow LED comes on when the IR is reading that nothing is in front of it anymore.


    A Close Up

    Img_5609

    This is just a close up shot of the Arduino Mini, connected to things. I’ll be taking it off of the bread board as soon as I’m happy with my code. Until then, it stays, which unfortunately is holding me back from making Birdie look and feel prototypes.

    A video is coming soon!!

    (More …)

     
  • Yury Gitman 5:04 pm on December 2, 2008 Permalink | Reply  

    vMind physical prototype! 

    http://vimeo.com/moogaloop.swf?clip_id=2410460&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    vMind Physical Prototype from Jessica Floeh on Vimeo.

    Parts_outside

    These are the parts of the vMind prototype! It consists of a mat switch – connected to a toggle switch — that activates an mp3 player/recorder. The device can be recorded onto and custom messages will be played. The vitamin bottle goes on top of this device, when the matswitch is depressed, no sound comes from it (because of the toggle switch). However, when nothing is on it, the music/sounds will play! This encourages people to pick up the vitamin bottle and take their vitamins so they can hear the jams! There is also an LED interface, controlled by a proximity sensor. The lights blink when you are near it, to bring your attention to it.

    Problems: The mat-switch is not that reliable. I need to get a capacitive touch sensor I believe, this will make it more secure. Also, there are some snags in the LED interface, still working on making that function properly. I need to try to get it to be just one battery or simplify the interface…are the LEDs necessary?

    See below for more photos!

    Matswitch

    Mp3player

    Toggle

     
    • led par lights 4:01 am on June 26, 2011 Permalink | Reply

      This is really helpful to people that have a maintenance their medicine or a vitamins. that keep their healthy.. Another great stuff and idea . Thanks for sharing this blog!!

  • Yury Gitman 1:31 pm on December 2, 2008 Permalink | Reply  

    Catertainer Circuit + Code 

    The code finally works!

    The Catertainer has 10 taunts, and every minute, if it isn’t played with, it will say one of the taunts.

    Here is an example of one of the taunts.

    http://vimeo.com/moogaloop.swf?clip_id=2407870&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    Catertainer Circuit from Mouse & the Billionaire on Vimeo.

    I finally got the Wee from Sparkfun, so I’ll be transferring the whole circuit to the new (much smaller) circuit, soon.

    fun!

    (More …)

     
  • Yury Gitman 12:20 pm on December 2, 2008 Permalink | Reply  

    Birdie (or perhaps “Qwail?”) BOM 

    You know, like a quail that wails.

    Anyway, here is a lovely diagram of how I’m hookin’ things up.

    Picture_4

    You don’t actually need the Arduino Mini USB adapter to get things cooking, you can use a regular Arduino, as shown above, if you already have one. Just be sure to remove the Atmel ATmega168 so you can connect the reset pin from the mini to the Arduino (see what I mean below). Without this, data will not transfer.
    Arduino Mini
    Arduino Mini USB Adapter or Arduino
    Superbright LEDS
    8 ohm speaker
    IR Sensor

    Okay, here is a photo of the Arduino without the Atmel chip.

    Img_5604

    Yes, that chip does come off! Just don’t pry it off too violently, or you’ll bend the pins. Mmkay?

     
  • Yury Gitman 9:23 am on December 2, 2008 Permalink | Reply  

    Wee! 

    The Wee I ordered from Sparkfun just came in, and it is ridiculously small.

    I just had to take a picture of it for y’all

    Img_7978

    Careful you don’t eat it!

     
  • Yury Gitman 9:12 am on December 2, 2008 Permalink | Reply  

    Arduino Trick: Treating Digital like Analog 

    In response to Katrina’s great tip about the multiplexer I thought I would pass this little trick on as well.

    With only a few simple lines of code you too can use your digital inputs to read analog data. Below is the function. Just copy and paste the code before your void loop(), then call it with digiAnalog(pin). It’s pretty easy. Continue reading to see the code:

    (More …)

     
  • Yury Gitman 1:38 am on December 2, 2008 Permalink | Reply  

    Making some progress??? 

    So here’s what I’ve got going so far…it doesn’t look like much right now, but it will make a huge difference once I actually have it all set up in the real trash bin I intend to use. Right now I’m just trying to get everything to work.

    I’ve go the IR sensors detecting which bin (recycling or waste) was used, and the Winbond chip changes tracks and plays back the appropriate sound depending which side was just used. I’m having a bit of a problem with the Windbond chip, though. When it needs to change tracks it won’t play back the sound after it has moved forward. It’ll only play the sound the next time that side of the bin is used. I can’t figure out how to fix it in my code, but I don’t think it’s a huge problem…just strange. My code is posted at the end of this blog post.

    I also have the Arduino counting how many times each side has been used. A green or yellow LED will light up when one side is used more than the other (green = you’ve recycled more, yellow = you’ve wasted more).

    Alos, I assembled my XBee transceivers. It took FOREVER to solder everything – I even got injured in the process (one of the pins got shoved under my fingernail…awesome.). I haven’t set them up to work yet…but that’s going to happen in the next day or two. For now, all data from the bin can be seen through the serial reader in Arduino. I’ve posted a screenshot of it below.

    Lastly, I started playing with some big FSR’s to use as a rough scale/weight measurement for now. Next task for me is to figure how I’m going to normalize their numbers in my code…I have no clue how I’m going to do that…

    Here’s some pics:

    Insidebin

    The inside of my ‘bin’…not pretty, but semi-functional at least!

    Xbeeboardtop

    Xbeeboardbottom

    Mountedxbee

    Had to show off my awesome soldering job…male and female header pins all in a row, just so I can mount a silly XBee on it.

    Serialscreenshot

    Screen shot of Arduino serial reader showing my bin data…with some lovely notes included in red.

    http://vimeo.com/moogaloop.swf?clip_id=2403729&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1
    PING Documentation from Katrina Bekessy on Vimeo.

    Current problems I’m having:

    -getting my Windbond chip to change tracks and play back the sound right after
    -normalizing my FSR inputs to numbers that actually mean something
    -keeping the stupid IR sensors consistent. Everytime I turn them on they start with different readings than before

    Next things I need to do:

    -include FSR’s and photoresistor (for lid of bin) with rest of my circuit using a multiplexer
    -get XBee’s to send bin data to computer wirelessly
    -build working circuit into actual trashbin
    -refine code to make readings more accurate

    Am in way over my head? Yes, yes I am…

    Here’s my long Arduino code thus far. I’m sure it could be written much more succinctly/efficiently…

    #define NUMREADINGS1 10
    #define NUMREADINGS2 10
    #define NUMREADINGS3 10
    #define NUMREADINGS4 10

    int readings1[NUMREADINGS1];
    int index1 = 0;
    int total1 = 0;
    int average1 = 0;

    int readings2[NUMREADINGS2];
    int index2 = 0;
    int total2 = 0;
    int average2 = 0;

    int readings3[NUMREADINGS3];
    int index3 = 0;
    int total3 = 0;
    int average3 = 0;

    int readings4[NUMREADINGS4];
    int index4 = 0;
    int total4 = 0;
    int average4 = 0;

    int IR1 = 0;
    int valIR1 = 0;

    int IR2 = 1;
    int valIR2 = 0;

    int IR3 = 3;
    int valIR3 = 0;

    int IR4 = 4;
    int valIR4 = 0;

    boolean readBin = true;

    int playPin = 2;
    int fwdPin = 3;
    int trackCount = 1;

    int wasteCount = 0;
    int recCount = 0;
    int greenLED = 4;
    int yellowLED = 5;

    void setup()
    {
      Serial.begin(9600);
     
      pinMode(playPin, OUTPUT);
      pinMode(fwdPin, OUTPUT);
      pinMode(greenLED, OUTPUT);
      pinMode(yellowLED, OUTPUT);
     
      for (int i = 0; i < NUMREADINGS1; i++){
        readings1[i] = 0;
      }
     
      for (int j = 0; j < NUMREADINGS2; j++){
        readings2[j] = 0;
      }
     
      for (int h = 0; h < NUMREADINGS3; h++){
        readings3[h] = 0;
      }
     
      for (int k = 0; k < NUMREADINGS4; k++){
        readings4[k] = 0;
      }
    }

    void loop()
    {
      digitalWrite(fwdPin, HIGH);
      digitalWrite(playPin, HIGH);
     
      if(readBin == true){
        total1 -= readings1[index1];
        readings1[index1] = analogRead(IR1);
        total1 += readings1[index1];
        index1 = (index1 + 1);
     
        if (index1 >= NUMREADINGS1){
          index1 = 0;
        }
     
        average1 = total1 / NUMREADINGS1;
     
        total2 -= readings2[index2];
        readings2[index2] = analogRead(IR2);
        total2 += readings2[index2];
        index2 = (index2 + 1);
     
        if (index2 >= NUMREADINGS2){
          index2 = 0;
        }
     
        average2 = total2 / NUMREADINGS2;
     
        total3 -= readings3[index3];
        readings3[index3] = analogRead(IR3);
        total3 += readings3[index3];
        index3 = (index3 + 1);
     
        if (index3 >= NUMREADINGS3){
          index3 = 0;
        }
     
        average3 = total3 / NUMREADINGS3;
     
        total4 -= readings4[index4];
        readings4[index4] = analogRead(IR4);
        total4 += readings4[index4];
        index4 = (index4 + 1);
     
        if (index4 >= NUMREADINGS4){
          index4 = 0;
        }
     
        average4 = total4 / NUMREADINGS4;
     
        if(average1 > 365 || average2 > 365){
          readBin = false;
          recCount ++;
          
          Serial.print("waste");
          Serial.println();
          Serial.print(average1);
          Serial.println();
          Serial.print(average2);
          Serial.println();
          Serial.print(recCount);
          Serial.println();
          
          if(trackCount == 1){
            playBack();
          } else {
            digitalWrite(fwdPin, LOW);
            delay(300);
            digitalWrite(fwdPin, HIGH);
            trackCount = 1;
            playBack();
          }
        }
     
        if(average3 > 365 || average4 > 365){
          readBin = false;
          wasteCount ++;
                
          Serial.print("recycle");
          Serial.println();
          Serial.print(average3);
          Serial.println();
          Serial.print(average4);
          Serial.println();
          Serial.print(wasteCount);
          Serial.println();
          
          if(trackCount == 2){
            playBack();
          } else {
            digitalWrite(fwdPin, LOW);
            delay(300);
            digitalWrite(fwdPin, HIGH);
            trackCount = 2;
            playBack();
          }
        }
      }
      if(recCount > wasteCount){
        digitalWrite(greenLED, HIGH);
        digitalWrite(yellowLED, LOW);
      }
      else if(wasteCount > recCount){
        digitalWrite(yellowLED, HIGH);
        digitalWrite(greenLED, LOW);
      }
      else {
        digitalWrite(yellowLED, LOW);
        digitalWrite(greenLED, HIGH);
      }
    }

    void playBack(){
      digitalWrite(playPin, LOW);
      delay(300);
      digitalWrite(playPin, HIGH);
      delay(3000);
      readBin = true;
    }

     
c
Compose new post
j
Next post/Next comment
k
Previous post/Previous comment
r
Reply
e
Edit
o
Show/Hide comments
t
Go to top
l
Go to login
h
Show/Hide help
shift + esc
Cancel