Ozeki Display Module

The Ozeki Display Module is a modified Arduino Nano, that was built to accept LCD display and keypad connections. This is an open source board, with all the files needed for manufacturing. You may also freely modify the design.

The Ozeki Display Module contains an ATmega328P microcontroller so you can program it just like an Arduino Nano using the Arduino IDE environment. It has a micro USB port, which is compatible with mobile phone USB cables. It was designed to make it easy to use the LCD display and keypad. It also has standard mounting holes for M2 screws. The supported LCD is the HD44780 and the supported capacitive touch keypad controller is the MPR121. The MPR121 is capable to control 12 touch sensitive buttons. The 5V LCD screen voltage is provided directly through the USB port but the 3.3V for the keypad controller (MPR121) is converted from the 5V USB voltage. The LCD has it's own protocol with a 4 datapin communication. While the MPR121 uses I2C which is also accepted by the Ozeki Display Module.

Figure 1 - Ozeki Display Module photos


Specifications:

  • IC: ATmega328P
    • Clock Speed: 16 MHz
    • Flash Memory: 32 KB
    • SRAM: 2 KB
    • EEPROM: 1 KB
  • USB support provided by a CH340G USB to serial chip:
  • Power supply from USB (5V, 100mA)
  • 500mA resettable fuse
  • Status LEDs: power, TX, RX, D13
  • Supported devices:
    • LCD display (5V): HD44780
      (LCD backlight can be set with D3 pin)
    • Keypad (3.3V): MPR121 Capacitive Touch Keypad
      (Capable to sensor 12 buttons.)
  • Can be screwed on an Ozeki Matrix Board
  • Product dimensions:
    2.40in.[60.96mm]×0.80in.[20.32mm]

Pinout of the Ozeki Display Module:

the pinout of the ozeki display module
Figure 2 - The pinout of the Ozeki Display Module


The pinout for LCD:

HD44780 GND Supply Voltage V0 RS RW E D4 D5 D6 D7 Backlight (+,-)
Ozeki Display Module GND 5V - D6 D7 D8 D9 D10 D11 D12 D3

The pinout for the keypad (I2C):

MPR121 Supply Voltage IRQ SCL SDA GND
Ozeki Display Module 3.3V D2 (int0) SCL SDA GND

The pinout of the LCD display:

The Backlight(+) pin is connected to the D3 pin of the Ozeki Display Module, so you can turn on and off the backlight by the code. The D0, D1, D2, D3 pins are not connected.

the hd four four seven eight zero lcd display pinout
Figure 3 - The HD44780 LCD display pinout

The pinout of the Capacitive Touch Keypad:

The capacitive touch sensor controller driven by an I2C interface. The chip can control up to twelve individual electrodes, as well as a simulated thirteenth electrode.

the pinout of the capacitive touch keypad the mpr one two one capacitivetouch sensor controller is integrated in the keypad
Figure 4 - The pinout of the Capacitive Touch Keypad. The MPR121 capacitive
touch sensor controller is integrated in the keypad.

Wiring:

Connect the Capacitive Touch Keypad and the LCD display to the Ozeki Display Module as shown below. Before wiring the LCD screen and the Capacitive Touch Keypad to your Ozeki Display Module we suggest to solder a JST header strip to the following 12 pin count connector of the LCD screen and a 5 pin JST header strip the the Capacitive Touch Keypad, as you can see in the image above.

how to wire ozeki display module to a hd four four seven eight zero and a keypad
Figure 5 - How to wire Ozeki Display Module to a HD44780 and a keypad


Program codes

  • For connecting a HD44780 LCD display

    This code displays 'OZEKI ROBOTICS!' on a HD44780 LCD display. It is a 2x16 LCD crystal screen. First 'OZEKI ROBOTICS!' appears in the middle of the top row then it slowly moves from left to right periodically leaving 150 ms between every small movement.


    Video 1 - Shifting the Ozeki Robotics sign. The video uses the code below.
    start the video

    Downloadable code:
    Example code for HD44780 LCD (.zip)

    #include <LiquidCrystal.h>
    
    LiquidCrystal lcd(6,7,8,9,10,11,12);
    
    void setup() {
      lcd.begin(16, 2);
      lcd.print("OZEKI ROBOTICS!");
     
      pinMode(3,OUTPUT);
      digitalWrite(3,HIGH); //turns backlight on
    
      delay(1000);
    }
    
    void loop() {
      for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
        lcd.scrollDisplayLeft();
        delay(150);
      }
    
      for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
        lcd.scrollDisplayRight();
        delay(150);
      }
    
      for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
        lcd.scrollDisplayLeft();
        delay(150);
      }
      
      delay(150);
    }
    
    Source Code 1 - Arduino example for shifting characters on a HD44780 LCD display
  • Code for using an MPR121 touch sensor and a HD44780 LCD display

    You can press 12 different buttons on the keypad. The code displays the button's number on the LCD. It also shows if the button has been pressed or released. These information are shown on the Serial too.


    Video 2 - Displaying keypress, keyrelease information. The video is based on the code below.
    start the video

    You need to download Adafruit_MPR121.h from the Arduino IDE.

    adding adafruit mpr one two one h library through the arduino ide
    Figure 6 - Adding 'Adafruit_MPR121.h' library through the Arduino IDE

    Downloadable code:
    Example code for LCD with keypad (.zip)

    #include <Wire.h>
    #include "Adafruit_MPR121.h"
    #include <LiquidCrystal.h>
    
    Adafruit_MPR121 cap = Adafruit_MPR121();
    
    LiquidCrystal lcd(6,7,8,9,10,11,12);
    
    uint16_t lasttouched = 0;
    uint16_t currtouched = 0;
    
    void setup() {
      lcd.begin(16, 2); //2x16 LCD screen
      pinMode(3,OUTPUT);
      digitalWrite(3,HIGH); //turns backlight on
      lcd.print("OZEKI ROBOTICS!");
      
      Serial.begin(115200);
      
      Serial.println("Adafruit MPR121 Capacitive Touch sensor test"); 
      // Default address is 0x5A, if tied to 3.3V its 0x5B
      // If tied to SDA its 0x5C and if SCL then 0x5D
      if (!cap.begin(0x5A)) {
        Serial.println("MPR121 not found, check wiring?");
        while (1); //check wiring and reboot
      }
      Serial.println("MPR121 found!");
    }
    
    void loop() {
    lcd.setCursor(0, 1);  
    currtouched = cap.touched();
      
      for (uint8_t i=0; i<12; i++) {
        // if it *is* touched and *wasnt* touched before, alert!
        if ((currtouched & _BV(i)) && !(lasttouched & _BV(i)) ) {
          Serial.print(i); Serial.println("  touched  ");
         
          lcd.setCursor(0, 1);
          lcd.print(i); lcd.print("  touched ");
          
        }
        // if it *was* touched and now it *isnt*, alert!
        if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) ) {
          Serial.print(i); Serial.println(" released ");
        
          lcd.setCursor(0, 1); 
          lcd.print(i); lcd.print(" released ");
        }
      }
    
      // reset touched state
      lasttouched = currtouched;
    }
    
    Source Code 2 - Arduino example for displaying keypad information on a HD44780 LCD display

Other modules

All of the Ozeki Processing Modules have ATmega328P or ATmega2560 microcontrollers integrated. Ozeki Modules can be connected to eachother like pieces of blocks. The connection is provided through USB to each module. They have M2 screw holes to give you an option to screw them on an Ozeki Matrix Board.

AutoConnect Link

If Ozeki 10 is running on your computer (such as on a Raspberry Pi) and you have plugged a microcontroller to it than Ozeki can be set to find serial devices on windows/linux and place them into a connection list so you can interact and control them through the software GUI.

See all Ozeki Processing Modules