LCD category

gen4 3.2”, The New Intelligent Display Modules

4D Systems, the manufacturer of intelligent graphics solutions, has announced a new 3.2” smart display module as part of the ‘ gen4 ’ series, which had been designed specifically for ease of integration and use, with careful consideration for space requirements and functionality.

These modules features a 3.2” color TFT display with options for Cover Lens Bezel (CLB), Resistive Touch and Capacitive Touch. The display is capable of Touch Detection, microSD memory Storage, GPIO and Communications, along with multiple millisecond resolution timers, and Audio Generation. gen4 modules have 30 pin ZIF socket for a 30 pin FPC cable, for easy and simple connection to an application or a motherboard.

The gen4 display modules are powered by the 4D Systems Diablo16 graphics processor that offers an array of functionality and options for any Designer / Integrator / User. Diablo16 is a custom embedded 4DGL graphics controller designed to interface with many popular OLED and LCD display panels.

gen4 display modules features:

  • Powerful 3.2” Intelligent LCD-TFT display module powered by DIABLO16.
  • 240 x 320 Resolution, RGB 65K true to life colours, TFT Screen with integrated 4-wire Resistive Touch Panel (on DT model only).
  • 6 banks of 32750 bytes of Flash memory for User Application Code and Data.
  • 32Kb of SRAM purely for the User.
  • 16 General Purpose I/O pins for user interfacing, which include 4 configurable Analog Inputs.
  • The GPIO is variously configurable for alternative functions such as:
    • 3x I2C channels available.
    • 1x SPI dedicated for SD Card and 3x configurable SPI channels available.
    • 1x dedicated and 3x configurable TTL Serial comm ports available.
    • Up to 6 GPIO can be used as Pin Counters.
    • Up to 6 GPIO for PWM (simple and Servo).
    • Up to 10 GPIO for Pulse Output.
    • Up to 14 GPIO can be configured for Quadrature Encoder Inputs (2 channels).
  • 30pin FPC connection, for all signals, power, communications, GPIO and programming.
  • On-board latch type micro-SD memory card connector for multimedia storage and data logging purposes.
  • DOS compatible file access (FAT16 format) as well as low level access to card memory.
  • Dedicated PWM Audio pin driven by WAV files from micro-SD card, and for sound generation, for an external amplifier.
  • Display full colour images, animations, icons and video clips.
  • Supports all available Windows fonts.
  • 4.0V to 5.5V range operation (single supply).
  • Module dimensions:
    • (D): 95.7 x 57.1 x 6.3mm.
    • (D-CLB): 98.8 x 72.6 x 7.4mm.
    • (DT): 95.7 x 57.1 x 7.5mm.
    • (DCT-CLB): 98.8 x 72.6 x 8.3mm.
  • 4x mounting tabs with 3.2mm holes for mechanical mounting using M3 screws.
  • RoHS and REACH compliant.
  • CE Compliant – please ask for CE declarations from our Support Team.

The intelligent gen4 displays can be programmed via Workshop4 IDE. It provides an integrated software development platform for all of the 4D family of processors and modules. The IDE combines the Editor, Compiler, Linker and Downloader to develop complete 4DGL application code.

gen4 modules are available in 4 models:

  • gen4-uLCD-32D (non Touch, without Cover Lens Bezel)
  • gen4-uLCD-32DT (Resistive Touch, without Cover Lens Bezel)
  • gen4-uLCD-32D-CLB (non Touch, Cover Lens Bezel)
  • gen4-uLCD-32DCT-CLB (Capacitive Touch, with Cover Lens Bezel)

The module is available on the official website with a range of $55 to $79 including interface board, 150mm FFC cable, and a quick start guide. Starter kits are also available from $75 to $99.

How to Set Up and Program an LCD Display on an Arduino

circuitbasics.com has a tutorial on how to setup an LCD with Arduino.

In this tutorial, I’ll explain how to set up an LCD display on an Arduino, and show you all the functions available to program it (with examples). The display I’m using here is a 16×2 LCD display that I bought for under $10 on Amazon. LCDs are really useful in projects that output data, and they can make your project a lot more interesting and interactive.

How to Set Up and Program an LCD Display on an Arduino – [Link]

4Duino – An Introduction and a Weather API Demo


We covered 4Duino in one of our previous blog posts. 4Duino is a 2.4” Arduino based programmable display module. In our article today, we are presenting a hands-on experience with this product by building a simple project. Many thanks to 4D Systems for sending us a sample and giving us a chance to try this new product.

4Duino – An Introduction and a Weather API Demo – [Link]

0.91 inch OLED display targets wearables

Winstar’s WEO012832F is a small OLED display featuring 128×32 pixels in a 0.91 inch diagonal screen, suitable for wearable devices. by Julien Happich @ edn-europe.com:

The WEO012832F module comes with a built-in SSD1306BZ controller IC, it supports an I 2C interface and a 14-pin FPC pinout.  Standard emitting colours for the WEO012832F are available in white, sky blue and yellow. The WEO012832F features a COG structure OLED display, the built-in voltage generation only requires a single 3V power supply. This lightweight 30.0×11.5×1.45mm OLED module can operate at temperatures from -40℃ to +80℃.

0.91 inch OLED display targets wearables – [Link]

Alarm System Powered By Arduino

Dejan Nedelkovski had built an Arduino security and alarm system project that uses an ultrasonic sensor for detecting objects and a buzzer for notification.

Components needed to build this simple system are: Arduino board, LCD display, 4×4 keypad, ultrasonic sensor and buzzer. The circuit can be connected as shown in the schematics below.

In order to build the project, you have to connect the buzzer with a PWM pin and the keypad pins where 4 of the 8 pins are for rows and the rest are for columns.

“The 4×4 keypad has 8 pins, 4 of them are for the rows and 4 of them for the columns of the keypad. Each button is actually a push button switch which makes a short between one row and column when pressed. So, for example, if we set the row 1 line low, and all column lines high, when we will press, for example, the button 3, due to the short between the two lines, the column 3 line will drop to low so in such a case we can register that the button 3 has been pressed.”

For connecting the LCD display and ultrasonic sensor you can check this detailed video tutorial by Dejan Nedelkovski and to see the project in action:

We want to activate the alarm by setting the A button to activate it. B button is used to change the password, and you need to enter the preset password “1234” to be able to change it.
After activating the alarm by pressing A, a 200 milliseconds sound will be produced from the buzzer showing that the alarm is now active. A message on the LCD display will appear to saying “Alarm will be activated in” and a countdown will be running afterwards until the alarm is completely active. At the end of the countdown a ” Alarm Activated” is on the display and the sensor will start working. Comparing with the initial distance at the start, the sensor will measure the distance is smaller than the initial distance, corrected by a value of 10 cms. The buzzer will  produce a sound if an object is observed as per the condition.

Here’s the complete source code of the Arduino alarm system:

/*
* Arduino Security and Alarm System
*
* by Dejan Nedelkovski,
* www.HowToMechatronics.com
*
*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library 
#include <Keypad.h>
#define buzzer 8
#define trigPin 9
#define echoPin 10
long duration;
int distance, initialDistance, currentDistance, i;
int screenOffMsg =0;
String password="1234";
String tempPassword;
boolean activated = false; // State of the alarm
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword; // State of the entered password to stop the alarm
boolean passChangeMode = false;
boolean passChanged = false;
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keypressed;
//define the cymbols on the buttons of the keypads
char keyMap[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {14, 15, 16, 17}; //Row pinouts of the keypad
byte colPins[COLS] = {18, 19, 20, 21}; //Column pinouts of the keypad
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS); 
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) 
void setup() { 
  lcd.begin(16,2); 
  pinMode(buzzer, OUTPUT); // Set buzzer as an output
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
}
void loop() {
  if (activateAlarm) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Alarm will be");
    lcd.setCursor(0,1);
    lcd.print("activated in");
   
    int countdown = 9; // 9 seconds count down before activating the alarm
    while (countdown != 0) {
      lcd.setCursor(13,1);
      lcd.print(countdown);
      countdown--;
      tone(buzzer, 700, 100);
      delay(1000);
    }
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Alarm Activated!");
    initialDistance = getDistance();
    activateAlarm = false;
    alarmActivated = true;
  }
  if (alarmActivated == true){
      currentDistance = getDistance() + 10;
      if ( currentDistance < initialDistance) {
        tone(buzzer, 1000); // Send 1KHz sound signal 
        lcd.clear();
        enterPassword();
      }
    }
  if (!alarmActivated) {
    if (screenOffMsg == 0 ){
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("A - Activate");
      lcd.setCursor(0,1);
      lcd.print("B - Change Pass");
      screenOffMsg = 1;
    }
    keypressed = myKeypad.getKey();
     if (keypressed =='A'){        //If A is pressed, activate the alarm
      tone(buzzer, 1000, 200);
      activateAlarm = true;            
    }
    else if (keypressed =='B') {
      lcd.clear();
      int i=1;
      tone(buzzer, 2000, 100);
      tempPassword = "";
      lcd.setCursor(0,0);
      lcd.print("Current Password");
      lcd.setCursor(0,1);
      lcd.print(">");
      passChangeMode = true;
      passChanged = true;   
      while(passChanged) {      
      keypressed = myKeypad.getKey();
      if (keypressed != NO_KEY){
        if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
            keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
            keypressed == '8' || keypressed == '9' ) {
         tempPassword += keypressed;
         lcd.setCursor(i,1);
         lcd.print("*");
         i++;
         tone(buzzer, 2000, 100);
        }
      }
      if (i > 5 || keypressed == '#') {
        tempPassword = "";
        i=1;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Current Password");
        lcd.setCursor(0,1);
        lcd.print(">"); 
      }
      if ( keypressed == '*') {
        i=1;
        tone(buzzer, 2000, 100);
        if (password == tempPassword) {
          tempPassword="";
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("Set New Password");
          lcd.setCursor(0,1);
          lcd.print(">");
          while(passChangeMode) {
            keypressed = myKeypad.getKey();
            if (keypressed != NO_KEY){
              if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
                  keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
                  keypressed == '8' || keypressed == '9' ) {
                tempPassword += keypressed;
                lcd.setCursor(i,1);
                lcd.print("*");
                i++;
                tone(buzzer, 2000, 100);
              }
            }
            if (i > 5 || keypressed == '#') {
              tempPassword = "";
              i=1;
              tone(buzzer, 2000, 100);
              lcd.clear();
              lcd.setCursor(0,0);
              lcd.print("Set New Password");
              lcd.setCursor(0,1);
              lcd.print(">");
            }
            if ( keypressed == '*') {
              i=1;
              tone(buzzer, 2000, 100);
              password = tempPassword;
              passChangeMode = false;
              passChanged = false;
              screenOffMsg = 0;
            }            
          }
        }
      }
    }
   }
 }
}
void enterPassword() {
  int k=5;
  tempPassword = "";
  activated = true;
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(" *** ALARM *** ");
  lcd.setCursor(0,1);
  lcd.print("Pass>");
      while(activated) {
      keypressed = myKeypad.getKey();
      if (keypressed != NO_KEY){
        if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
            keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
            keypressed == '8' || keypressed == '9' ) {
          tempPassword += keypressed;
          lcd.setCursor(k,1);
          lcd.print("*");
          k++;
        }
      }
      if (k > 9 || keypressed == '#') {
        tempPassword = "";
        k=5;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(" *** ALARM *** ");
        lcd.setCursor(0,1);
        lcd.print("Pass>");
      }
      if ( keypressed == '*') {
        if ( tempPassword == password ) {
          activated = false;
          alarmActivated = false;
          noTone(buzzer);
          screenOffMsg = 0; 
        }
        else if (tempPassword != password) {
          lcd.setCursor(0,1);
          lcd.print("Wrong! Try Again");
          delay(2000);
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print(" *** ALARM *** ");
          lcd.setCursor(0,1);
          lcd.print("Pass>");
        }
      }    
    }
}
// Custom function for the Ultrasonic sensor
long getDistance(){
  //int i=10;
  
  //while( i<=10 ) {
  // Clears the trigPin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);
  // Calculating the distance
  distance = duration*0.034/2;
  //sumDistance += distance;
  //}
  //int averageDistance= sumDistance/10;
  return distance;
}

Check the project post to know more information and to find detailed tutorial. You can also check other posts by Dejan using this link.

RELATED POSTS

Arduino Tutorial: Menu on a Nokia 5110 LCD Display Tutorial

In this easy Arduino Tutorial educ8s.tv is going to show us how to create a Menu on a Nokia 5110 LCD display.

This is the project we are going to build. In the display a simple menu appears, and with the help of three buttons I can navigate up, or down and select a menu item. Let’s select the first option. As you can see a new a UI screen is displayed and by pressing the up and down buttons we can change the contrast of the display. If we press the middle button again, we go back to the main UI screen. If we now select the second menu item and press the middle button we can turn the backlight of the display on or off. Lastly if we navigate to the last menu item we can reset the settings for the display to the default values. Of course this is just a demonstration project, you can modify it to build your own more complex menus if you wish. Let’s now see how to build this project.

Arduino Tutorial: Menu on a Nokia 5110 LCD Display Tutorial [Link]

How to Set Up and Program an LCD Display on an Arduino

circuitbasics.com writes:

In this tutorial, I’ll explain how to set up an LCD display on an Arduino, and show you all the functions available to program it (with examples). The display I’m using here is a 16×2 LCD display that I bought for under $10 on Amazon. LCDs are really useful in projects that output data, and they can make your project a lot more interesting and interactive.

How to Set Up and Program an LCD Display on an Arduino – [Link]

1K LCD Tinyfont

A tiny pixel font rendered to an LCD display, in under 1K program space. by Zach:

For the Hackaday 1k challenge, I’m attempting to pack a small pixel-based font and rendering to LCD in under 1K.

The project has already been developed in C, but the file size was much larger. This is rewrite in assembly.

Developed on an Atmega328p using a display from a Nokia 5110 on a Sparkfun dev board.

1K LCD Tinyfont – [Link]

Bitmap graphics on an Arduino Touch Screen and other top Arduino Displays

In this video tutorial educ8s.tv shows us how to load bitmap graphics in our Arduino Touch Screen projects using Adafruit’s GFX library.

The procedure that I am going to describe works with all the color displays that are supported by Adafruit’s GFX library and by the displays that use the TFTLCD library from Adafruit with a small modification. So from the displays I own I can use the color OLED display, the 1.8” ST7735 color TFT display, the 2.8” Color Touch Screen that I reviewed a few weeks ago and the 3.5” Color TFT display. You can find links for all the displays below.

Bitmap graphics on an Arduino Touch Screen and other top Arduino Displays [Link]