Table of Contents

ODUINO ONE is a package of Arduino Uno R3 and LCD/Keypad/sensor. You can buy this item in this link. (Will be available soon)

Arduino Uno R3 schematics http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf

LCD+Keypad shield schematics http://dn.odroid.com/ODUINO/schematics-v1.0-dfr0009.pdf

DHT11 Sensor (Humidity / Temperature sensor) http://www.micro4you.com/files/sensor/DHT11.pdf

Connections are (V)oltage, (S)ignal, (G)round

dht11-humiditytempvsg.jpg

DHT11 uses one-wire communication and I connected it to the digital Pin#3 of Arduino. Also note that we should add a 10Kohm pull-up resistor on that pin.

The example code shows the temperature, humidity and pressed keypad information on LCD. It also transmit that information to the host via USB.

To compile this source code, you need to install the Arduino IDE on your ODROID board or PC.

$ sudo apt-get install arduino

I could run the Arduino IDE on ODROID with Ubnutu image. The connection node of Arduino USB is “/dev/ttyACM0” or “/dev/ttyACM1”.

To complete to compile this test code, you must install the library of DHT sensor.

Download dht.cpp and dht.h from below link and copy them into “~/sketchbook/libraries/dht”.

http://playground.arduino.cc/Main/DHTLib

I should restart the Arduino IDE after copying to use the library.

    #include <LiquidCrystal.h>
    #include <dht.h>
    /*******************************************************
    This program will test the LCD panel, the buttons
    and the Humidity/Temperature sensor
    Version : 0.1
    Date : 20-Oct-2013
    By Hardkernel
    ********************************************************/
    // for Digital Humidity and Temperature sensor (DHT11)
    dht DHT;
    #define DHT11_PIN 3
    // Global variables
    unsigned long elapsed_time;
    // select the pins used on the LCD panel
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
     
    // define some values used by the panel and buttons
    int lcd_key     = 0;
    int adc_key_in  = 0;
    #define btnRIGHT  0
    #define btnUP     1
    #define btnDOWN   2
    #define btnLEFT   3
    #define btnSELECT 4
    #define btnNONE   5
     
    // read the buttons
    int read_LCD_buttons()
    {
     adc_key_in = analogRead(0);      // read the value from the sensor
     // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
     // we add approx 50 to those values and check to see if we are close
     if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
     if (adc_key_in < 50)   return btnRIGHT; 
     if (adc_key_in < 195)  return btnUP;
     if (adc_key_in < 380)  return btnDOWN;
     if (adc_key_in < 555)  return btnLEFT;
     if (adc_key_in < 790)  return btnSELECT;   
     return btnNONE;  // when all others fail, return this...
    }
     
    void setup()
    {
         // initialize serial communication at 115200 bits per second:
         Serial.begin(115200); 
         lcd.begin(16, 2);              // start the LCD library
         lcd.setCursor(0,0);
         lcd.print(" Hello, ODUINO! "); // print a simple message
         //         1234567890123456
         delay(1500); // Splash for 1.5 second
         Serial.println("ODUINO TEST PROGRAM ");
         Serial.println();
         Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
         elapsed_time = millis()/1000; // Returns the number of milliseconds since the Arduino board began running the current program.
    }
   
    void loop()
    {
         lcd.setCursor(0,1);            // move to the begining of the second line     
         lcd.print("KEY :");     
         lcd.setCursor(6,1);            // move to the begining of the second line
         lcd_key = read_LCD_buttons();  // read the buttons
         switch (lcd_key)               // depending on which button was pushed, we perform an action
         {
           case btnRIGHT:
             {
             lcd.print("RIGHT ");
             Serial.println("RIGHT ");
             break;
             }
           case btnLEFT:
             {
             lcd.print("LEFT   ");
             Serial.println("LEFT ");     
             break;
             }
           case btnUP:
             {
             lcd.print("UP    ");
             Serial.println("UP ");     
             break;
             }
           case btnDOWN:
             {
             lcd.print("DOWN  ");
             Serial.println("DOWN ");     
             break;
             }
           case btnSELECT:
             {
             lcd.print("SELECT");
             Serial.println("SELECT ");     
             break;
             }
             case btnNONE:
             {
             lcd.print("NONE  ");
             break;
             }
         }
         // Read & Display the humidity / temperature data every 1 second (approx.)
         if(elapsed_time != millis()/1000)
         {
                elapsed_time = millis()/1000;
                Serial.print("DHT11, \t");
                int chk = DHT.read11(DHT11_PIN);
                switch (chk)
                {
                  case DHTLIB_OK: 
                              Serial.print("OK,\t");
                              break;
                  case DHTLIB_ERROR_CHECKSUM:
                              Serial.print("Checksum error,\t");
                              break;
                  case DHTLIB_ERROR_TIMEOUT:
                              Serial.print("Time out error,\t");
                              break;
                  default:
                              Serial.print("Unknown error,\t");
                              break;
                }
                // DISPLAY DATA
                Serial.print(DHT.humidity,0);
                Serial.print(",\t");
                Serial.println(DHT.temperature,0);
               
                lcd.setCursor(0,0);            // move cursor to second line "1" and 9 spaces over
                lcd.print("HUMI:");
                lcd.print((int)(DHT.humidity));
                lcd.print("%");
                lcd.print(" TEM:");
                lcd.print((int)(DHT.temperature));
                lcd.print("C");
         }
         delay(50); // delay 50 msec.
    }

Application

Qt(Ubuntu x86)

http://dn.odroid.com/ODUINO/binary/Ubuntu_Qt/x86/oduino

Qt(Ubuntu arm)

http://dn.odroid.com/ODUINO/binary/Ubuntu_Qt/arm/oduino

The binary & source code of PC Application. http://dn.odroid.com/ODUINO/source/Ubuntu_Qt/oduino.zip

How to compile x86 and ARM Application for Ubuntu/Linux

install packages
$ sudo apt-get install qt4-default qt4-designer libqwt-dev
build the oduino
$ cd oduino
$ uic oduin.ui > ui_oduino.h
$ qmake
$ make
Tip

If you need the application with Qt5, refer this link.
http://forum.odroid.com/viewtopic.php?f=90&t=8524#p104675

Android

http://dn.odroid.com/ODUINO/binary/Android/Oduino.apk

The binary & source code of Android Application.
http://dn.odroid.com/ODUINO/source/Android/Oduino.zip