Tag Archives: Nokia 5110 LCD

Infrared Thermometer with Arduino and MLX90614 Temperature Sensor

Most of the temperature measurement techniques around the world require some sort of physical contact between the temperature sensor and the object or environment whose temperature is to be measured, but as technology advanced, this changed too. The need to be able to measure the temperature of an object without physical contact arose. This need brought the measurement of temperature using infrared sensors.

The principle of operation of Infrared thermometers is simple, all bodies at a temperature above 0°Kelvin (absolute zero) emit an infrared energy which can be detected by the infrared thermometer sensor. It’s design includes a lens that focuses the infrared energy being emitted by the object in front of a detector. The detector converts the energy into an electrical signal which then can be passed to a microcontroller to interpret and display in units of temperature after compensating for the variation in ambient temperature.

Today, we will build a DIY Infrared based thermometer using an Arduino Uno, the MLX90614 IR temperature sensor, and a Nokia 5110 LCD display shield to display the measured temperature.

Infrared Thermometer with Arduino and MLX90614 Temperature Sensor – [Link]

Arduino FM Radio project with a Nokia 5110 display and TEA5767 module

Our friends on educ8s.tv uploaded a new version of their FM Radio on breadboard based on TEA5767 module.

I have built a new, improved version of the FM radio project, which resolves the issues we had in the previous version of the project. The sound quality the project now offers is much better, and it has some new features as well. But first, let’s hear it play a YouTube safe song I am broadcasting using this small FM transmitter.

Arduino FM Radio project with a Nokia 5110 display and TEA5767 module – [Link]

Arduino distance meter with Ultrasonic Sensor (HC SR04) and Nokia 5110 LCD display

Ultrasonic Sensor

Measuring distance is so important in today’s world that things like driverless cars will be impossible without it, that description is probably enough to describe how important knowing the distance between two objects can be. For that reason, today we will be building a distance meter using the Arduino and the HC-SR04 ultrasonic sensor.

The HC-SR04 ultrasonic sensor is a cheap ranging sensor capable of measuring a distance between 20 – 400cm without contact and at an accuracy of up to 3mm. The sensor is made up of a transmitter and receiver with operating frequency of around 40khz. It uses the echo principle for distance measurement by emitting an ultrasonic wave of 40khz. If there is an object in its path, the emitted wave is reflected and the reflected signal is received via the receiver. The time elapsed between the transmission of the signal and the reception of the echo is then used to determine the distance between the sensor and an object in its path.

Arduino distance meter with Ultrasonic Sensor (HC SR04) and Nokia 5110 LCD display – [Link]

Arduino UV Meter using the UV30A Ultraviolet Sensor

Ultraviolet rays, also known as UV for short are rays emitted by sun. Due to the depletion of the ozone layer, these rays tend to get to extreme levels that could lead to sunburns etc for those under it, that’s why daily and hourly forecast of the UV index is always available to help people keep track and stay safe. For monitoring purposes, why not own a personal UV meter?

Today, we will build a UV meter using the Arduino and the ultraviolet sensor (UVM30A) with a Nokia 5110 LCD display as the display for the meter. The Nokia 5110 is used to display the UV index which is an international standard unit for the intensity of ultraviolet rays from the sun being experienced in a particular place and at a particular time.

Arduino UV Meter using the UV30A Ultraviolet Sensor – [Link]

DS18B20 Sensor Based Thermometer with Nokia 5110 LCD display

Hi guys welcome to this tutorial. Today we will be building a simple temperature monitor using the DS18B20 sensor with a Nokia 5110 LCD Display and an Arduino mega.

The DS18B20 digital temperature sensor gives a 9-bit to 12-bit Celsius temperature readings and also has an alarm function with nonvolatile user-programmable upper and lower trigger points. The sensor communicates via the 1-Wire communication protocol and thus by definition requires only one data line (and ground) for communication with a central microprocessor. Among the special features of this sensor, is an operational mode in which it can derive power directly from the data line (“parasite power”), eliminating the need for an external power supply line.

DS18B20 Sensor Based Thermometer with Nokia 5110 LCD display – [Link]

Rotary Encoder with Arduino and Nokia 5110 LCD Tutorial

Today we will take a look at using a rotary encoder with Arduino and displaying rotation data on the Nokia 5110 LCD display.

A rotary encoder is an Electro-mechanical device that converts angular position or the rotation of a shaft into analog or digital values. By turning the shaft to the right or left, we either get an increase or decrease in value. One of the major advantage of rotary encoders is the fact that rotation is limitless. If the maximum position, (which is 20 for the particular rotary encoder used in this tutorial) is reached, the device starts the position counting all over again while the Value attached to the position continues to increase/decrease with every turn of the knob in the same direction. This means we could still keep increasing the value associated with turning the rotary encoder so far we keep rotating in the same direction.

Rotary Encoder with Arduino and Nokia 5110 LCD Tutorial – [Link]

Choose The Best Display For Your Arduino Project

Have you ever been unsure which display you should be using in your next project? This tutorial from educ8s.tv will come in handy for choosing the best display for your each and every Arduino project!

There are lots of choices, so let’s talk about each one of them. Basically, you have three types of displays: LCD displays, OLED displays, and E-paper displays.

LCD displays: LCD (liquid crystal display) is the technology used for displays in notebook and other smaller computers. Like light-emitting diode (LED) and gas-plasma technologies, LCDs allow displays to be much thinner than cathode ray tube (CRT) technology. LCD display is a flat-panel display or other electronic visual display that uses the light-modulating properties of liquid crystals.

One of the famous LCD displays is Nokia 5110 LCD display, a basic graphic LCD screen for lots of applications. It was originally intended for as a cell phone screen.

6851997-danbo-wallpaper

Its controller is a low power CMOS LCD controller which makes it a good choice for low-consumption projects. It uses only 0.4mA when it is on and less than 0.06mA when in sleep mode. You have to use this library and you don’t need more than 8 wires to start using this display. This tutorial video will show you with details how to use Nokia 5110 LCD with Arduino:

A second choice is the OLED displays. OLED is an organic light emitting diode in which the emissive electroluminescent layer is a film of organic compound that emits light in response to an electric current. An OLED display works without a backlight; it can display deep black levels and can be thinner and lighter than a liquid crystal display. Thus, it is provides better contrast than the LCD choice but it becomes a bit more expensive.

color_oled

One of the newest OLED displays is the color SSD1331 display that can display 65.000 colors. Just download its library from Adafruit and start using it. A video explaining how to use it is available here.

The last type is E-paper displays, that mimic the appearance of ordinary ink on paper.

lg-paper

Unlike LCD or OLED displays, these displays reflect light instead of emitting it. Such displays are great for low power projects since they have the ability to keep the text or the image you had set before for a really long time and without electricity. One of these displays disadvantages that they are absolutely costly compared with other choices, some displays can reach $60!

Color TFT Display ST7735, White OLED Display SSD1306 and 3.5″ Color TFT Display are all mentioned in the tutorial. You should check it out for more details, information, and some hardware offers.

The tutorial concludes with this interactive table based on different criteria, this is ordered progressively by price. You can compare between displays here.

display

DIY Spectrum Analyser

Alan X has been working on a spectrum analyser project that can show the spectrum visually! He started working with ATTiny85 and kept on updating the project over time.

1952321477553334016

Alan X used Goertzel’s algorithm with a Hamming window, this algorithm can be used to detect a frequency from sampled data. Here is the preliminary code for a spectrum analyzer:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// Uses Daniil Guitelson's BGI library
#include "graphics.h" // -lBGI -lgdi32


#define SampleFreq 125000


int main(void)
{
  int N=250;
  double data[N];
  double samples[N];
  double freq;
  double s;
  double s_prev;
  double s_prev2;
  double coeff;
  double magn;
  int i;


  int gd=CUSTOM, gm=CUSTOM_MODE(700,700);
  initgraph(&gd, &gm, "");
  setcolor(WHITE);


  int X1,Y1,X2,Y2;
  double scale,xmin,ymin,xmax,ymax;


  // Find the maximum and minimum data range
  xmin=0;
  ymin=0;
  xmax=50000;
  ymax=N;
  scale=1.1*(xmax-xmin>ymax-ymin?xmax-xmin:ymax-ymin);


  // Generate samples
  for (i=0;i<N;i++) {
    samples[i]=(50*sin(2*M_PI*i*3300/SampleFreq)+50*sin(2*M_PI*i*5700/SampleFreq)+50*sin(2*M_PI*i*25700/SampleFreq)+100);
    // Window the data
    // data[i]=samples[i]; // Straight Goertzel - not great
    // data[i]=samples[i]*(0.5-0.25*cos(2*M_PI*i/N)); // Hanning Window
    data[i]=samples[i]*(0.54-0.46*cos(2*M_PI*i/N)); // Hamming Window
    // data[i]=samples[i]*(0.426551-0.496561*cos(2*M_PI*i/N)+0.076848*cos(4*M_PI*i/N)); // Exact Blackman Window
  }


  // Scan frequencies
  for (freq=100;freq<=50000;freq+=100) {
    coeff=2*cos(2*M_PI*freq/SampleFreq);
    s_prev=0.0;
    s_prev2=0.0;
    for (i=0;i<N;i++) {
      // Goertzel
      s=data[i]+coeff*s_prev-s_prev2;
      s_prev2=s_prev;
      s_prev=s;


    }


    // Get magnitude
    magn=2*sqrt(s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2)/N;
    printf("Freq: %6f Mag: %6.4f\n",freq,magn);


    // Plot data
    X1=(int)((freq-(xmin+xmax)/2)*700/scale+350);
    Y1=(int)((0+(ymin+ymax)/2)*700/scale+650);
    X2=(int)((freq-(xmin+xmax)/2)*700/scale+350);
    Y2=(int)((-magn*700/2+(ymin+ymax)/2)*700/scale+650);
    line(X1,Y1,X2,Y2);


  }
  getchar();
  closegraph();


  return 0;
}

Daniil Guitelson’s BGI library was also used for the graphics.

Output

Here is the output showing the DC, 3300 Hz, 5700 Hz and 25700 Hz signals:

8398261477186172386

 

The next step is to port the code to a suitable Arduino board and to show the results physically. Thus, he used a MicroView OLED display and here it is listening to a 3v 1kHz square wave:

68801477279127568

 

#include <MicroView.h>

// Audio Spectrum Analyser
#define SampleInput A0   // Name the sample input pin
#define BandWidth  500   // BandWidth
#define MaxFreq   4000   // Max analysis frequency
#define Trigger     10   // Trigger to synchronise the sampler 2vpp at 1kHz = 32

// Define various ADC prescaler
const unsigned char PS_16=(1<<ADPS2);
const unsigned char PS_32=(1<<ADPS2)|(1<<ADPS0);
const unsigned char PS_64=(1<<ADPS2)|(1<<ADPS1);
const unsigned char PS_128=(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);

// Setup the serial port and pin 2
void setup() {
// Setup the ADC
pinMode(SampleInput,INPUT);
ADCSRA&=~PS_128; // Remove bits set by Arduino library
// Set prescaler
// ADCSRA|=PS_64; // 64 prescaler (250 kHz assuming a 16MHz clock)
// ADCSRA|=PS_32; // 32 prescaler (500 kHz assuming a 16MHz clock)
ADCSRA|=PS_16; // 16 prescaler (1 MHz assuming a 16MHz clock)

uView.begin();// Start MicroView
uView.clear(PAGE); // Clear page
uView.println("Spectrum  Analyser"); // Project
uView.println("0-20 kHz"); // Range
uView.println();
uView.println("agp.cooper@gmail.com"); // Author
uView.display(); // Display
uView.clear(PAGE); // Clear page
delay(2000);// Wait
}

void loop() {
static byte *samples; // Sample array pointer
static byte *window; // Window array pointer
static int N=0; // Number of samples for BandWidth
static long sampleFreq; // Sample frequency
long freq; // Frequency of interest
float s; // Goertzel variables
float s_prev;
float s_prev2;
float coeff;
float magn;
int i;

if (N==0) {
// Check sample frequency and set number of samples
samples=(byte *)malloc(100);
unsigned long ts=micros();
for (i=0;i<100;i++) samples[i]=(byte)(analogRead(SampleInput)>>2);
unsigned long tf=micros();
free(samples);
sampleFreq=100000000/(tf-ts);
N=2*sampleFreq/BandWidth+1;

uView.setCursor(0,0); // Set cursor to beginning
uView.print("SI: A"); // Sample input pin
uView.println(SampleInput-14);
uView.print("SF: "); // Sample frequency
uView.println(sampleFreq);
uView.print("MF: "); // Max frequency
uView.println(MaxFreq);
uView.print("BW: ");// andWidth
uView.println(MaxFreq);
uView.print("SN: ");// Number of samples
uView.println(N);
uView.display(); // Display
uView.clear(PAGE);// Clear page
delay(2000);

// Create arrays
samples=(byte *)malloc(N);
window=(byte *)malloc(N);

// Modified Hamming Window
for (i=0;i<N;i++) window[i]=(byte)((0.54-0.46*cos(2*M_PI*i/(N-1)))*255);

// Generate test samples
for (i=0;i<N;i++) {
samples[i]=(byte)(30*(sin(2*M_PI*i*5000/sampleFreq)+sin(2*M_PI*i*2500/sampleFreq)+sin(2*M_PI*i*7500/sampleFreq)+sin(2*M_PI*i*10000/sampleFreq))+127);
}
}

if (true) {
// Sychronise the start of sampling with data slicer
int a0,a1;
a0=1023;
for (i=0;i<N;i+=2) {
a1=analogRead(SampleInput);
a0=(a0*13+a1*3)/16;
if (a1>a0+3) break;
}
for (i=0;i<N;i++) samples[i]=(byte)(analogRead(SampleInput)>>2);
}

// Scan frequencies
for (freq=0;freq<=MaxFreq;freq+=(MaxFreq/40)) {
// Goertzel (https://en.wikipedia.org/wiki/Goertzel_algorithm)
coeff=2*cos(2*M_PI*freq/sampleFreq);
s_prev=0;
s_prev2=0;
for (i=0;i<N;i++) {
s=0.0000768935*window[i]*samples[i]+s_prev*coeff-s_prev2;
s_prev2=s_prev;
s_prev=s;
}
// Get magnitude
magn=2*sqrt(s_prev2*s_prev2+s_prev*s_prev-coeff*s_prev*s_prev2)/N;
// Display on MicroView
uView.line(freq*40/MaxFreq,47,freq*40/MaxFreq,10-(int)(20*log10(magn+0.0001)));
}
// Frequency graduations
uView.setCursor(47,0);
uView.print(MaxFreq/1000);
uView.print("k");
uView.line(0,0,0,5);
uView.line(10,0,10,2);
uView.line(20,0,20,5);
uView.line(30,0,30,2);
uView.line(40,0,40,5);
// Voltage graduations
uView.line(0,40,40,40);
uView.setCursor(47,38);
uView.print("-30");
uView.line(0,20,40,20);
uView.setCursor(47,18);
uView.print("-10");
uView.line(0,10,40,10);
uView.setCursor(47,8);
uView.print("  0");
//Display
uView.display();
uView.clear(PAGE);
}

He then updated the project to work with Nokia LCD, here it is showing the 0-3v 1 kHz square wave signal:

3095781477395166324

Amazing ideas and projects can be inspired by this project. You can download these files to start your own spectrum analyser!

The full project and detailed information are available at the project page on Hackaday. You can follow it to keep updates with the latest versions.

Weather Station Based On ChipKIT

ChipKIT Uno32 by Digilent is an easy-to-use platform for developing microcontroller-based applications. It uses chipKIT-core development environment and Arduino IDE for compatibility with existing code examples, tutorials and resources. Pin-compatible with many Arduino shields that can operate at 3.3V.
It contains:

  • PIC32MX320F128H processor
  • 128K Flash, 16K RAM
  • Up to 80 MHz operating speed
  • 42 available I/O lines
  • USB or externally powered
  • USB cable required for programming (not included)

chipkit-uno32-obl-500-big-500x361

This kit is now discontinued and replaced by chipKIT uC32.

By following this tutorial you will be able to build a weather station based on chipKIT and using Bosch BME280 module, a fully integrated environmental unit that combines sensors for pressure, humidity, and temperature in a tiny 8-pin metal-lid LGA package of size 2.5 x 2.5 x 0.93 mm³. This module seems popular due to many features such as its support for standard I2C and SPI interfaces and availability of supporting open-source Arduino libraries.

R-B, the maker behind this project, uses BME280 to read barometric pressure, relative humidity, and temperature measurements then the readings will be sent via I2C bus and finally displayed on a Nokia 5110 LCD.

p_20161109_153854-600

Hardware Setup:

You will need these parts in order to build this project:

  • ChipKIT Uno32
  • BME 280
  • Nokia 5110 LCD:  It is a 48×84 pixels matrix LCD driven by the low-power PCD8544 controller chip. It is powered by 3.3V and includes on-chip generation of LCD supply and bias voltages, thus requiring minimum external components for its operation. The PCD8544 receives display data and commands from a microcontroller through a serial bus interface.

The complete hardware setup for this project is shown in the following figure:

Connections between chipKIT Uno32, BME280 and Nokia 5110 LCD
Connections between chipKIT Uno32, BME280 and Nokia 5110 LCD
Software

You will need to install the following libraries prior to develop the firmware for this project.

Output

The program displays ambient temperature in Centigrade, humidity in %, and atmospheric pressure in hectopascal (hPa) units.

Weather station displaying temperature, humidity, and pressure shown in hPa unit.
Weather station displaying temperature, humidity, and pressure shown in hPa unit.

Full description of how to connect the modules together, how to set the I2C connection and more detailed information are available at the project page.
Just download the complete program, get the needed parts and you are ready to build your own weather station! You can check other tutorials by R-B here.

Arduino Geiger–Müller counter with LCD display

IMG_2569

Bob tipped us with his latest project. It’s a custom Arduino shield able to communicate with a Geiger-Muller counter and display data on a LCD display. The data are displayed in two layouts: bar graph of the pulses in one minute interval and histogram of the gathered data.

In the previous posts I’ve described a simple Geiger–Müller counter and various experiments with this device. Today I would like to present Arduino project to communicate with a Geiger-Muller counter, gather data and present it to the user. The device is based on Arduino Uno, Nokia 5110 LCD and homemade shield.

Arduino Geiger–Müller counter with LCD display – [Link]