Wednesday, July 31, 2013

Notes from the Arduino SparkFun Inventor's Kit - Sketch 01 to Sketch 05

Arduino programs are called Sketches, which are uploaded to the board. They are written in Processing, which is a subset of C++.

Exercise: Sketch 01
Learning points:
Each Arduino board must have 2 functions - setup() and loop().
void setup() initializes the Arduino board. It only runs once.
void loop() is the function that runs continuously.

Functions:
pinMode(pin_number, mode)
  e.g. pinMode(13, OUTPUT);
digitalWrite(pin_number, mode)
  e.g. digitalWrite(13, HIGH)
delay(time)
  e.g. delay(1000) // delay 1000 msecs

Exercise: Sketch 02
Learning points:
An Arduino can accept analog and digital inputs. We are using a variable resistor in this circuit.

Functions:
analogRead(pin_number)
  e.g. sensorValue = analogRead(sensorPin)

Exercise: Sketch 03
Learning points:
Putting "const" is like "final static" in Java.
The white LED has 3 pins for RGB, ranging from 0 to 767.

Functions:
for (x = 0; x < 768, x++)
{
  function_A();
}

analogWrite(pin_number, int value)
  e.g. analogWrite( RED_PIN, redIntensity)

Example: Sketch 04
Learning points:
Arrays in Processing
  int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9};

Functions:
random(limit_value);
e.g. int index = random(8); // picks a number randomly from 0 to 7

Exercise: Sketch 05
Learning points:
Boolean logic using digital pins for input
Connect the pin of the pushbutton to GND and the other pin to a digital pin. Use a 10K resistor in between the pin of the pushbutton and the digital pin so that when the pushbutton is not pressed, the pin will read as "HIGH".

Functions:
A == B
A != B
A && B
A || B
!A

Exercise: Sketch 06
Learning points:
Using photoresistors

Functions:
map(initial lower bound, initial upper bound, ideal lower bound, ideal upper bound);
e.g. map(0, 1023, 0 , 255) // map values from 0 to 1023 to 0 to 255
constrain(range of values, lower bound, upper bound); 
e.g. constrain(lightLevel, 0, 255)


Exercise: Sketch 07
Learning points:
Using temperature sensors
Do not connect the temperature sensor in the opposite direction (Vin to the GND pin of the temperature sensor)! The sensor heated up till over 260 degrees and I got burnt. Ouch..
Serial transmission

Functions:
Serial.being(baud rate)
e.g. Serial.begin(9600) 
Serial.print(string or variable) 

Exercise: Sketch 08
Learning points:
Using servos
Importing libraries

Functions:
#import <>
servo1.attach(pin);

Exercise: Sketch 09
Learning points:
Using the flex sensor

Functions:
flexposition = analogRead(filexpin);


The Gap - What haunts me daily

The gap between what I could be and what I am currently haunts me daily, incessantly, relentlessly.

Monday, July 29, 2013

Starting Arduino with Ubuntu 12.04

Bought an Arduino Starter Kit 2 days ago and started with the tutorials.

Note when starting Arduino on Ubuntu: If you are using Ubuntu 12.04, you do need to add Arduino as a user and restart in order to access the serial port.

It's fun to make LEDs light up =)

Hardware Product Design - FreeCAD

I used SolidWorks during my engineering days, but now that I no longer have access to SolidWorks, I had to find an alternative CAD software. Hopefully, something that runs on Windows and Ubuntu.

Just started using FreeCAD, which is not as user-friendly as SolidWorks, but I'm not complaining.

Coming from someone who has used SolidWorks before, I think the easiest method to get started was to watch the video tutorials on FreeCAD.

I started with a new document, under the "Part" mode (not "Part Design").

I found the menu a bit confusing. You have to choose the mode that you are in to access the tools.

For navigation, I selected the "Blender" navigation mode.

For rotation of objects and parts, I used "Edit -> Placement" and selected either Yaw, Pitch and Roll (google for the relevant axis of rotation).

I haven't tried "Assembly", which is similar to "Mate" in Solidworks, where you can align 2 parts to each other using either faces, edges or points.

Tuesday, June 18, 2013

3 free and easily available tools for usability testing

Problem Steps Recorder
Windows 7 comes pre-installed with "Problem Steps Recorder".
Go to "Start", search for "Problem Steps Recorder". Under settings, remember to set the number of steps as 100.

TeamViewer
Allow remote access.

InvisionApp
More for designers, but you can upload a screenshot and let your clients comment on the mockup.

Better than screenshots or emails, saves a lot of frustration.

Wednesday, June 5, 2013

Linux server admin - Adding user accounts, resetting passwords


When logged in as your own account and changing your own password:
$ passwd

As superuser (or root), changing the password for other accounts

Find out list of users
$ cat /etc/passwd | cut -d: -f1

Change password for account "guest1"
$ passwd guest1

Add users (with default configuration)
$ useradd guest1
(http://www.thegeekstuff.com/2009/06/useradd-adduser-newuser-how-to-create-linux-users/)

Monday, May 20, 2013

Getting started with Android Studio on Ubuntu 12.04 - tools.jar missing

I tried installing and running Android Studio, but came across the error: "tools.jar missing from classpath. Please ensure that JAVA_HOME points to the JDK, not the JRE."

I tried the following:
Finding where java is installed:
  $: whereisjava
  $: java -version
  $: echo $JAVA_HOME
  $: echo $JDK_HOME

For Ubuntu, normally the openjdk version of Java is used.

Editing and saving ~/.bashrc
$: nano ~/.bashrc
JAVA_HOME =  /usr/lib/jvm/java-7-openjdk-amd64/
export JAVA_HOME
JDK_HOME = /usr/lib/jvm/java-7-openjdk-amd64/
export JDK_HOME

Reloading ~/.bashrc
$: source ~/.bashrc
$: echo $JAVA_HOME
$: echo $JDK_HOME

Check for the correct version of Java if you are like me, having both Java 6 and 7 installed.

sudo update-alternatives --config java

Choose the correct version of Java.


Saturday, May 11, 2013

Increasing your luck and empathy surface area

I had the chance to attend a dialogue session with George Yeo recently and his astute comment struck me (paraphrasing due to my recollection):
"Imagine a room where we are all individuals living in our own small bubbles. If we were to just reach out 1 cm more, we would touch so many people besides us. Reach out, just a little."

Sunday, March 31, 2013

Ruby - syntax error, unexpected $end

You encounter this error when there is a missing "end" somewhere.

Try running "ruby -w example.rb". The "-w" the warning mode for ruby to give more information about the missing "end".

If you are using Sublime Text 2, you can also try to re-indent your code.
Edit -> Line -> Reindent

Thursday, March 21, 2013

How to conduct a Structured Creative Brainstorming Sessions


Preamble:
I find that I needed to improve at conducting meetings and discussions. A common kind of meeting required is a brainstorming session. However, I'm sure many people have experienced brainstorming sessions which seemed to be unfocused and resulted in a lack of actionable items. 

Much thanks to Ronald Wong, for sharing his thoughts.

How to create a Structured Creative Brainstorming Session

Quality of session depends on the 
  Diversity of ideas generated
  Quantity of ideas generated
  Inclusive participation of all the individuals

For facilitator
Before the meeting
  Send the agenda out with discussion items, directly responsible individual and timings, with sufficient buffer time
  Send background material, if necessary

Prepare the meeting overview
  Structure the meeting
  Prepare 3 possible solutions/ ideas
   
During the meeting
  Set the context for all participants: 5W, 1H
  Set the groundrules
    Only constructive comments
    No distractions such as mobile phones
  Be conscious of the discussion progress
  Get everyone's buy-in and conclusion at every stage before moving on
  Close the meeting by summarising all the points
  Seat in a position such that you are able to see all participants and make sure your body posture is "open"
  
Techniques
  To spur discussion - Ask "How" questions
  To be inclusive - Maintain eye contact with everyone and ask everyone around the table to contribute
  To draw participants who are drifting - Ask them for their opinion on a certain point
  Use props such as the whiteboard and monitor screen

After the discussion
  Send the minutes out, with tasklists