Skip to content

A PLAY EXPERIENCE MAKER'S WORK LOG FOR FUTURE SELF©2001 – 2023 Kyle Li 李肅綱 All Rights Reserved.

Author: Kyle Li

SMALLab: Open logic System

Posted on June 2, 2010 by Kyle Li

Open logic System is to rethink the role of game logic in a SMALLab play scenario by releasing certain key decision moment to the hands of teachers, players, peers, or spectators. An example will be the debate mechanic in Ross’s Civsift game, Ross holds the final decision on which defense argument makes more sense than others. This method definitely makes the problem solving moment more creative than ever, however, it requires teacher to participant more which might cause problems since every scenario has very short production time.

SMALLab: Digital Puppet Show ver.2 Multiculture in Q2L

Posted on April 30, 2010 by Kyle Li

We decided to use Quollywood in one of Lara’s wellness sections this trimester to help students understand and respect each others culture in our diverse student body. We decided to bring in extraterritorial creatures to Earth and questioning about humanity and kids have to work together to defend their native cultures.  Prior to the SMALLab section, each kid will bring a picture of  food, sports, games, or fashion that is significant to their culture and be ready to talk about it. These pictures are dynamically loaded into the app. When the game starts, Lara, the voice behind the aliens will do the introduction and the first group of kids will be “beamed-up” to the spaceship through a webcam. The conversation starts, spectators are welcome to join if they asked politely and be respectful to others culture.  The stratification meter, assessed by the teacher secretly, will increase over time to power up the spaceship, Aliens eventually flown away with respect to Earth!

aliens aliens
aliens aliens

Work with µOLED-128-G1

Posted on April 27, 2010 by Kyle Li

HARDWARE

I decided to write some HOW-TOs on this particular model this weekend since I am responsible for Burcum’s purchase. First of all, please read through the Datasheet (revision 4). That is the number one thing you do every time when you encounter new technology. In the revision 4, G4 added in a new picture of how to wire µOLED-128-G1 to a micro controller, which is extremely important because the wiring is slightly different from the older models, 10k resistor is no longer required. You can wire all the pins (1,3,5,7,9) directly to your Arduino board (5v, RX, TX, GND, Pin 5). I connect the reset pin to pin 5 on my Arduino board, this will work with the code/library later. I also put together a small break-out board so I can take it with me anywhere, so nerd, yes I know.
wiring
wiring
wiring

SOFTWARE

The Arduino driver I found online is outdated, it was made for Arduino 011 when printByte was still working. I rewrote them into a library for Arduino 017 or later based on the old code by Oscar Gonzalez, download it here. Unzip, drag the entire folder and put it in the libraries folder inside of your Arduino app. The library should have everything you need to make a pong game, a portable interactive narrative thingy, omg a D&D text adventure!! In the following sample code shows how it works: Simply create an uoled instance with the reset pin number as the parameter, and you can access all the drawing functions in the library.
wiring
wiring

DISPLAY IMAGES

Now displaying images using microSD, uOLED-128-G1 has an upgraded micro SD/SDHC reader. Here are the requirements: On-board uSD/uSDHC memory card adaptor for storing of icons, images, animations, etc. Supports 64Mb to 2Gig micro-SD as well as micro-SDHC memory cards (4GB and above).
However, just by dropping images into the SD card didn’t work out for me because to display an image, uOLED requires sector address to retrieve the image from the SD card. Sector address, briefly speaking, is the minimum memory unit in SD card. In order to get those addresses, we need to organize our images though G4’s Graphics Composer Software, the bad news is it only works on Windows.
For the format of your SD card, I would try to format the cards in the Windows command prompt which can do an unconditional format and specify the filesystem. Figure out the drive letter of the card, let’s say it’s F:\, run the command prompt, and type:

format f: /u /fs:fat32

Plug the SD card in, get your pictures together and open Graphics Composer on a PC. Start a new project, save it in a new folder since there are going to be multiple files generated at the end. Right click on the left column to add new media. Once done adding, save and right click Device on the menu bar and choose Load Options, check “Serial Command Platform” and find your micro SD adaptor. Now click Device/Load. When finish loading, look at the folder you save the project, there should be a txt file. Open it up, look at the Data line of each picture, and write down the last three HEX numbers, those are the sector address of each picture. Eject the micro SD and insert it to your uoLED. You are all set to load pictures now! Enter the code and replace the last 3 HEX with the ones of your picture.
wiring
wiring
wiring
wiring
wiring
wiring

library v01 reference:

uoled(int resetpin);
void OLED_Init();
int GetRGB(int red, int green, int blue);
void OLED_Clear(); //clear the screen
void OLED_DrawLine(char x1, char y1, char x2, char y2, int color);
void OLED_DrawRectangle(char x, char y, char width, char height, char filled, int color); //filled=1, not filled =0
void OLED_DrawCircle(char x, char y, char radius, char filled, int color);
void OLED_DrawText(char column, char row, char font_size, char *mytext, int color); // font size (0 = 5×7 font, 1 = 8×8 font, 2 = 8×12 font)

**Note: Columns and rows are determined by the font size, the bigger the font size, the less columns and rows available on the 128X128 screen.

SMALLab: Quollywood digital puppet show

Posted on March 20, 2010 by Kyle Li

1_4463221007_f79f518e6e_o

For the Boss Level this trimester, students are creating a play together. The idea behind the theme is to introduce system and components, and to create relationships between them. All kinds of workshops are provided to take students through different aspect of a stage play, such as script writing, site design, light design, prop design, and character design. To celebrate the theme and system thinking, in SMALLab we put on a real-time digital puppet show, named Quellywood. The characters are borrowed from Systemia, another very popular trimester theme at Q2L New York.

Students are divided into teams and each team collaboratively acts out a puppet show in SMALLab. A team consists of 2 puppeteers, 2 prop masters, 1 voice actor, and 1 director. Puppeteers use the SMALLab controllers to act with the digital puppets. They can create different facial expressions on their puppet by moving the controller up and down in SMALLab. Prop masters are in charge of sound effects, props, and the backdrops of the show. The voice actor and the director are usually the same person who dubs and keeps the team in sync with their script. They will spend the first 15 mins of the session to write a story. An online version of the Quollywood is available to them as a simulator during the writing. Afterwards, they rehearse their script once in SMALLab, make some last-minute changes,and go into the official recording. Projection screen, including sound effects and voice-overs, is recorded while they act out the whole play, we then corp out the stage area and publish the show to Youtube and BeingMe.

In this play experience, we have built in a few mechanisms that requires players to communicate with each other in order to put on a successful play. There is a special sound effect that requires both prop masters to trigger certain backdrops in a specific sequence. There are tricks to create seamless prop exchange between the two puppets and they are heavily relied on the synchronization between puppeteers and prop masters. Voice actor has to work with puppeteers to sync the voice-overs with the mouth animation.

Step 1: Writing and Simulating

Step 2: Rehearsing and Iterating

Step 3: Recording and sharing


The cheer at the end is real! That is all of us in the room congratulating them a job well done! A urban fairy tale in 45 mins!

SMALLab: Systemia and Angle Carnival

Posted on February 27, 2010 by Kyle Li

This trimester in Q2L SMALLab, we work with students on angles. The goal is to create SMALLab scenarios that reinforce the concept of supplementary angles and opposite interior angles created by two crossed straight lines. We also decided to create a story based on the Carnival theme they have for this trimester with the characters from Systemia.

“Rumor has it, Kalc is building a giant safe in her lab. She is one of the suspects in Professor PI’s kidnap incident. We haven’t seen her for the past three days, and worried that she is up to no good. Codebreakers, we would like you to sneak into her lab while she is gone and investigate the giant safe. But before that, you have to prove your codebreaking skill. We will be waiting at the carnival booth 13…”

img_8487

booth 13 is hosted by Arithmus and Wordix, they are Professor PI’s trustworthy assistants. In booth 13 players work together to measure angles generated by the game with an augmented protractor and recreated them accordingly. Every round consists of two major steps, the first step is measuring the given angle, and the second one is angle calculation, both steps require recreating the correct angle with angle generator to proceed. However, game master (teacher) holds the power to alter the questions for both steps, which means he/she can bypass the game logic and proceed the game if students creatively solve the problems. The goal here is to emphasis the understanding of the sum of supplementary angles is 180 degrees, the sum of complimentary angles is 90 degrees, and opposite exterior angles are congruent, and hopefully in the end of the SMALLab session, students would be able to measure one angle and calculate the rest.

After booth 13, students are packed with angle skills, it is about time sneak into Kalc’s lab. Kalc’s giant safe is secured with an eight-angle combination lock. Every angle will be announced by the safe in a futuristic female voice. This scenario doesn’t really have any controller inputs for interactivity, all the controls are on game master’s mighty clicker. All four angles are numbered when a new combination comes up. Game master will ask question related to the coved concepts, and player(s) have to step on the right angle to respond. Then game master will proceed to the next combination or ask more questions based on the answers. After the 8th combinations, students have successfully broke the lock, and the safe will open up and show the content. What is really in there? it is for students to find out…

We’ve discovered a new way of implementing Smallab into classroom. It is to shift part of game logics into teacher’s hands or even students’ hands. That way, the gameplay becomes more creative and dynamic, and teachers also have more control over the scenarios. It harden the bond between teachers and the scenarios.

time connected: momentum

Posted on December 15, 2009 by Kyle Li

miketimeline

This interface is an early prototype and built for Mike Sy Lee’s thesis project – momentum.

…This interactive web application uses different data visualization techniques to help users organize and understand their memories. Momentum focuses on the studies of autobiographical memory and interaction design to develop a system that makes reminiscing an enjoyable experience.

::launch it::


SMALLab: Data Emulator DATAMUX

Posted on November 19, 2009 by Kyle Li

Datamux:
Double click on the application DatamuX in the folder, you should see an infterface with three balls on the left and bunch other stuff on the right. Drag the color balls on the left to change pos_x and pos_y value, and the three sliders with correspondent colors to change the pos_z value. DatamuX also support clicker and logitech game controller data from SCREM.

Click on either Flash or UDP (Processing) radio button on the bottom right corner to start data broadcasting, you should see a blinking square indicator turns on. Make sure you start this application before running Flash or Processing. And before you mod the example file, make sure you either trace, or println out the data, make sure you are getting stuff from Datamux, it should work like magic.

Flash:
We using socket server to read the data from DatamuX as well as SCREM. Open “document.as” in the flashExample folder, and look for updateDIS method. In there is a switch that assigns incoming values from DatamuX to local variables based on their attribute names in SCREM. ox is the pos_x of orange ball, gx is the pos_x of green ball, and bx is the pos_x of blueball, so on so forth. We made up these attribute names in SCREM for convinience.

Processing:
Processing can read UDP directly, so you need to download the UDP library from: http://ubaa.net/shared/processing/udp/udp.zip and install it properly before anything can happen. Open the processing example.pde file in the processingExample folder, and at the very bottom, look for a method named “dataParser” In there is a series of if statements that assigns incoming values from DatamuX to local variables based on their attribute names in SCREM. If you are
reading more, just add more if statements, and assign the values to your own variables.

***Your computer might have security set up to block socket server, you will get a prompt message asking you to change the security setting, if changing the setting doesn’t help, just publish your Flash to an application instead of running swf. That will solve the problem.
***When you testing your Flash with Datamux, it is advised to restart Datamux every time before test run your Flash due to weird java stuff.

Download the package: 359.9 kb

Arduino to Processing to Flash

Posted on October 27, 2009 by Kyle Li

This is a demo/workshop to get your data from your Arduino board to your Flash application using a Processing sketch as the middleware. Since AS3 doesn’t directly interact with your computer’s local hardware including the serial port, a middleware, or a reflective broadcaster is needed to pick up the data from the serial port and broadcast it else where that higher level runtime like Flash can access. In most cases, especially with Flash, that else where is a socket server, and we are going to create this server with Processing. There are other applications out there that helps you do the same thing too.

This demo consist of three parts, however, once the data gets through the serial port from Arduino board to your laptop, it is pretty much up for grab by any applications, OF, MAXMSP, C#, Objective C, Python, Zinc … etc, that has the ability to access local serial port. Data will be sent from your Arduino character by character in ASCII code. On the computer end, it will see a data stream coming, ASCII by ASCII, however, it won’t be able to tell where is the beginning or the end of a particular set of data if we don’t define one for it.

Therefore, we need to set up an end ASCII code for the data set we are sending, so our Processing sketch knows that in between every two end ASCII codes is a complete data set. We will take advantage of a build-in command in Arduino to save some works for us. When uses the command “server.println(data)” in Arduino, it will add two extra ASCII codes, 10 and 13, at the end of your data. These two extra ASCII codes stand for “Newline” (10) and “Pointer returns to the header”(13), which is a perfect identifier for Processing to determine the end of a data set. In between every 1013 there is the completely data set.

Fun starts here:

Hook up your Arduino board to your computer with a USB cable, install USB driver that come with the software, and program your Arduino for serial communication as usual, see picture below. For the purpose of this demo, we are not setting up any sensor, you should already have something set up on your Arduino board that you desperately want to get it to your computer. Just read the pin on your Arduino board, digital or Analogue, and Serial.println the data, and you are good to go.

This is what’s in the Arduino program:

You can also print them in many different format, but no matter what format you are sending, it will be ASCII coded. Which means it will chop up your data, and send character by character in its ASCII code form. Upload you program and open the serial monitor, you should see random number flowing through the 9600 bps channel. After you done, completely exit the Arduino software, and open up Processing. It is crucial that you exit Arduino software completely because it will cause a port conflict with Processing if you don’t.

This is what’s in the Processing sketch:

If you decide to use Processing as your visual solution, you don’t have to implement the server part of this sketch. The data will be read one character at a time in its ASCII code form, so we need to concatenate them back to what it was. Because we set up NEWLINE (ASCII code: 10) as the end byte, we concatenate whatever that is in between the two end byte, with the right bps on both ends, we should be getting a complete data set from the serial port. At the every end of the sketch, we write the complete data to the XMLsocket server where Flash will pick them up.

This is what’s in the Flash document.as:

Make sure you plug in your Arduino before running Processing, and run you Flash application the last, it has to be done in this order.

sample code: 36KB

Multiple input values:

If you have more than just one data that you want to send at any given time, ex. you have five buttons on your Arduino board and you want to send all of them to your laptop. You have to set up an standard divider so when Processing or Flash read the data set, they can split the set into individual ones.  To make this happen, we will use “Serial.print(data)” to send each individual value and a divider in between and we use “Serial.println(data)” to send the last value. The difference between “Serial.print(data)” and “Serial.println(data)” is that the “Serial.print(data)” doesn’t send out the extra two ASCII codes. The Arduino code should look similar to this: (I use “,” as my divider)

Serial.print(value1);
Serial.print(“,”);
Serial.print(value2);
Serial.print(“,”);
Serial.print(value3);
Serial.print(“,”);
Serial.print(value4);
Serial.print(“,”);
Serial.println(value5);

And Processing receives it, the string will look like this:

value1,value2,value3,value4,value5

just split them using split(data, divider you defined); and you get yourself a array with all five data.

iBot – an iphone robot made with Arduino and photocells

Posted on October 5, 2009 by Kyle Li

iphone robot
Always wanted to use smart phones as robot brains. These technology packed mobile devices have lots of built-in abilities that a robot brain would die for, GPS, gyro, internet access, camera, size, low-cost and many more. Extended from my thesis research, an iPhone robot is here~

In order to make the phone take to the motors underneath, I used photo diodes to read the brightness of different sections of the iPhone screen. That way I can have it communicate with external hardwares by setting up my own protocols. This is the first prototype of iBot focus on enabling mobility. The current built users have to manually control iBot’s movement by tabbing on an custom iPhone app that controls a slave mobile unit built with Arduino. My next step is looking into computer vision so this tiny little robot knows where he is going, or who he is going to.

SMALLab: Liferaft + Level editor

Posted on September 23, 2009 by Kyle Li

Liferaft is a jungle river adventure game made in SMALLab. Players use glowing controllers to paddle, pump, and signal inside of a broken liferaft. The goal is to get to the river shore without sinking the raft. To succeed this game, players have to avoid obstacles, gather power-ups, pump water out, and manage the weight of their raft.

This collaborative game also has a stand alone level editing tool that allows players to design their own levels on the fly. The tool provides a smooth transition from paper (analogue) prototype into digital game level design. Players plan their level on a set of of three narrow boards resembles the beginning, the middle, and the end of a game level in Liferaft. Then they put color-coded stickers on the board based on their plans. Each color sticker represents a kind of game events. During the planning, players will explain their levels to teachers and game designers including predictions of play experience that their level is going to invoke.

After putting down the stickers, they insert their boards underneath the Computer Vision Box, a support equipment I designed and built to read those color stickers on the three boards. They will then be translated onto the computer screen. The color stickers will be replaced with real game components. Players can either test their level on the screen or send the level into SMALLab and play the real deal there. We usually have groups of players play each others game and give feedback and they will then go through an iterative process to make their game more fun and be close to the play experience they predicted.

Posts navigation

Older posts
Newer posts

Recent Posts

  • BMP – Rearrange Colormap
  • Reset Allow USB Debugging? Notification
  • 8-bit Notes
  • AT29C256 90PI
  • Super-Toys Last All Summer Long

Archives

Proudly powered by WordPress | Theme: MiniZen by Martin Stehle.