Friday, April 12, 2013

All you need is love, Berlin... and a dog.




All you need is love, Berlin... and a dog.



Thursday, April 11, 2013

Serial and pixels for breakfast. Arduino + pygame.

Taking a byte of bits of Serial, along with Green screen with Sam, pygame, and an Arduino hooked up to a light sensor and a motor thing.

Coffee too?  Naturally.

Where do we begin?  At the end of course.  A video of the result...



The arduino code

#include <Servo.h>  
Servo myservo;
int potpin = 0;
int val;

void setup() { 
  Serial.begin(9600);
  myservo.attach(9);
} 
 
void loop() { 
  val = analogRead(potpin);
  Serial.println(val);
  val = map(val, 62, 540, 0, 179);  
  myservo.write(val);
  delay(15);
}

python pygame code

Extended the "green eggs and ham" code I made recently to read serial data from the Arduino, and paint the screen different shades of green, whilst also making some silly sounds depending on the value read from the light sensor.



import os
import pygame
import serial

# guessing serial ports names. Linux or macosx.
#'/dev/tty.usbserial'
ser = serial.Serial('/dev/tty.usbmodem1411',
                    9600,
                    timeout = 0)
serial_buffer = ""

# an event number for the SERIAL
SERIAL = pygame.USEREVENT + 1


from pygame.locals import *
Event = pygame.Event
split = os.path.split


pygame.mixer.pre_init(44100, 8, 2, 1024)
pygame.init()
screen = pygame.display.set_mode((640, 480))
message = "Press q to quit, b for blue, r for red."
pygame.display.set_caption(message)

import pygame.examples
example_path = split(pygame.examples.__file__)[0]
example_data = os.path.join(example_path, "data")
sounds = [pygame.mixer.Sound("wiff.wav"), 
          pygame.mixer.Sound("punch.wav"), 
         ]

going = True
while going:
    serial_data = ser.read()
    #print (repr(serial_data))
    while serial_data:
        serial_buffer += serial_data
        # if there is a new line in it, then 
        if "\r\n" in serial_buffer:
            #print (repr(serial_buffer))

            evt = Event(SERIAL, 
                        {'line': serial_buffer})
            pygame.event.post(evt)
            serial_buffer = ""
        serial_data = ser.read()

    events = pygame.event.get()

    for event in events:
        print (event)
        if event.type == KEYDOWN and event.key == K_q:
            going = False
        if event.type == KEYDOWN and event.key == K_b:
            screen.fill(Color("blue"))
        if event.type == KEYDOWN and event.key == K_r:
            screen.fill(Color("red"))
        if event.type == SERIAL:
            # read the line from the serial event.
            print (repr(event.line))

            # clean up, and do sanity checking.
            # It could be corrupt or garbage.
            line = event.line.replace("\r\n", "")
            line = line.replace("\n", "")
            line = line.replace("\r", "")
            # it could be empty.
            if line:
                val = int(line)
                if val < 1024 and val > 0:
                    print (repr(val))
                    # map 0 and 1023 of analog read to
                    #  0-255 colour colour range.
                    green = int((val/float(1023))*255 )
                    screen.fill((0, green, 0))
                    if val < 100:
                        sounds[0].play()
                    if val > 300:
                        sounds[1].play()
                    
    pygame.display.flip()

ser.close()

Tuesday, April 09, 2013

Touchless UI with a Light Dependent Resistor, and the Arduino.

Touchless UI?  This is the next step in my little adventure into the world of Arduino...

It can sense light, from which the Ardunio reads an analog signal and then drives a Servo Mototor.




Arduino Servo motor, and a Potentiometer

Moving a servo motor(vrmmm vrommm) based on the analog input Linearly interpolated (LERP'd) from the Potentiometer (turny thing).

Arduino, Analogout fading LED.

So the Arduino adventure continues... This time, playing around with fading a light via an Analog output.

Vietnamese style coffee.

Coffee good.  Different styles of coffee good.  Viet coffee good.

Try and get the viet bean, and get it ground the way they do it too.  It's usually a mild flavour... but with the sweetened condensed milk it can be very sweet.  Plus you can make it on your desk!  Mostly I don't drink it sweetened, but that's the way they mostly do it, so for this video I did that too :)


Here is a much better video on how to make Vietnamese style coffee... great song too!


Monday, April 08, 2013

LED, lumens and a multimeter

Picked up a small 360 lumen LED light with built in heatsink. As well as a multimeter.  Going to use them in a projector project with the Arduino.
LED lights with built in heatsink, and a multimeter.

Saturday, April 06, 2013

Reducing the number of concepts. To make teaching easier.

I am Sam.  Sam I am*.  Well at least my middle name is Sam.  So of course, one fun book I've always been drawn to is Green Eggs and Ham. The famous beginners book by "Dr. Seuss".
 
It contains just 50 different words: a, am, and, anywhere, are, be, boat, box, car, could, dark, do, eat, eggs, fox, goat, good, green, ham, here, house, I, if, in, let, like, may, me, mouse, not, on, or, rain, Sam, say, see, so, thank, that, the, them, there, they, train, tree, try, will, with, would, you.

A great beginners book, because it's a full story teaching a number of other concepts using a limited amount of words.  It's a clever bootstrapping hack to language learning.  Apart from all its cleverness, it's a fun & entertaining read too! :)

So you want to teach some newbies how to be l33t python pygame pr0grAmm3rs?  Maybe Sam I am, and Green Eggs and Ham have something to teach us, the teachers?

Let's reduce the number of concepts!

Classes, packages, and even functions are hard to get right away.  As in the first 10 minutes of teaching something to someone it's hard anyway.  Some people may get your car metaphors, and your nonsense about Ducks quacking like ducks... but others will look at you blankly.  Then that snotty nosed brat at the back of the class will start texting rude words about how you are a poo poo head, and it's GAME OVER.

However, there are two parts to these concepts.  Creating them, and just using them.

Here is an example pygame program using functions, packages, and classes... but not creating them.  This requires less knowledge to start doing something.

Press r for red.

import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((640, 480))
message = "Press q to quit, b for blue, r for red."
pygame.display.set_caption(message)

going = True
while going:
    events = pygame.event.get()
    for event in events:
        print (event)
        if event.type == KEYDOWN and event.key == K_q:
            going = False
        if event.type == KEYDOWN and event.key == K_b:
            screen.fill(Color("blue"))
        if event.type == KEYDOWN and event.key == K_r:
            screen.fill(Color("red"))
      
    pygame.display.flip()


This displays quite a number of perhaps confusing concepts, but removes a few of the complex concepts.

Watch ALL the events printed out!

Notice how there are no functions declared, no classes created, and no packages declared.  There's also no "Reactor", or callbacks required for the events.  It's just importing (which is boiler plate).

Ask yourself, "How would I see all of the events coming into a browser with JavaScript?".  This example prints out all of the events happening to the program.  Including Keyboard events, and Mouse events.  You don't need to know in advance what type of events will be appearing.  You can discover that there is a key up event, that there are mouse motion events.

By reducing the set of concepts needed to understand the code you will have an easier job teaching it.

Press b for blue!


(* I don't like Green Eggs and Ham. I don't like them here or there. I don't like them anywhere.)

q for quit.

Friday, April 05, 2013

Raspberry pygame

The Arduino adventure took a little pause today...

I finally managed to buy a raspberry pi.

Things have improved greatly with the software since I messed around with an alpha board 1 year and 7 months ago.  Pygame is even on the desktop!  Pretty cool :)  I just wish they'd been in contact with the project so we could have made the experience better.  Tried to reach out a few times with no luck.
 
But anyway... managed to get one finally.  *happy dance*
 
raspberry pygame

Improvements to the sound, OpenGL ES, camera, movie, python 3 version, are amongst 
some of the things I see that can be improved so far.

Thursday, April 04, 2013

Amplification via a NPN bipolar transistor.

In this part of the little Arduino adventure, I've been messing around with the Fritzing prototyping application.  This lets you design things based on bread board layouts, then to generate Schematics and PCB.

Unfortunately I couldn't get the schematic to draw properly.  Some connections are missing or wrong.  But that's ok, I'm not using it for anything serious :)

Behold some pretty screenshots!

Schematic... slightly wrong.

Bread board diagram made in Fritzing.

Wednesday, April 03, 2013

Push the button!


The little Arduino makes the lights go on and off.  Simply amazing ;)

Sideways

Read a bunch of this book this morning whilst I lay in bed drinking coffee and laughing. Really enjoying the blend of wine critic style with the struggling writer buddy road trip genres. Was even reading it on the train on the way home... so engrossed I missed my stop!

I give it 7 stars. Out of 5.

Shelf painting

Roughly sanded, and now coated twice with grey. What remains is masking tape to get straight strong lines where the grey meets the pink.

Tuesday, April 02, 2013

Italian white bean 'soup'


*Onion diced along with three bits of garlic smalled.
*In a pot with olive oil Browning.
*Then brown red capsicum (paprika) with about a cup of mushrooms(chunkily chopped).
*Fresh parsley and basil chopped up with a knife.
*Tomatoes 2 cups.
*White beans, cup of.
*Pesto, basil spoon of.
*Diluted half teaspoon of veggie stock in cup of water, add to pot.
*half hour later chop more flat leaf parsley.
*Serve in a bowl each with a spoon of sour cream.

pygame logo colour swatches

Been messing around with some colour swatches for the neu pygame website...
colors/colours for pygame logo

Arduino blinking lights.


Working on an Arduino(micro controllers) project with a friend.  Have to start somewhere... and that somewhere is programming the famous Blinking Lights!

Tape Wallet.

I made a Tape Wallet