A look at the Starter kit Rich Shield

In this article we take a look at a shield that has many useful components on it from open-smart, its known as the Starter kit Rich Shield

This Rich Shield has many basic components onboard such as LED, button, buzzer. It is a very good shield for beginners.

It has 2 I2C ports for you to connect an external I2C device. There is also a UART port which allows you to connect a serial controlled device. Here is an image of the shield

Features

DHt11 temperature and humidity sensor
2 push buttons
4 coloured LEDs (yellow, blue, green , red)
Light dependent resistor
NTC thermistor
Infrared reciever
A buzzer
A knob (potentiometer)
24C02 eeprom
4 digit display which is controlled by a TM1637 integrated circuit
I2C connector
UART connector

Standard Arduino expansion board interface, compatible with Arduino UNO, Arduino MEGA2560 and or arduino compatible boards;
Operating voltage: 3.3V – 5.5V
Operating current: 100mA (MAX)
EEPROM size: 2K bit(256Byte)

Parts List

Name Link
Arduino Uno UNO R3 CH340G/ATmega328P, compatible for Arduino UNO
Starter kit Rich Shield Starter kit Rich Shield for Arduino UNO R3

Code examples

We have various code examples, there is a sample library with examples. Some of the libraries are basic and I decided to also use existing libraries.

LED example

[codesyntax lang=”cpp”]

#define LED1 7
#define LED2 6
#define LED3 5
#define LED4 4

uint8_t led[4];

void setup() 
{
  led[0] = LED1;
  led[1] = LED2;
  led[2] = LED3;
  led[3] = LED4;
  for(unsigned int i=0; i < 4; i++)
  {
        pinMode(led[i], OUTPUT);
        LEDoff(i+1);
  }
}

void loop() 
{
  for(uint8_t i=1;i < 5; i++)
  {
    LEDon(i);//turn on LED i
    delay(500);
    LEDoff(i);//turn off it.
  }
}

void LEDon(uint8_t num)//num = 1, 2, 3, 4
{
 if((num > 0) && (num < 5))
digitalWrite(led[num-1], HIGH);
}

void LEDoff(uint8_t num)//num = 1, 2, 3, 4
{
 if((num > 0) && (num < 5))
   digitalWrite(led[num-1], LOW);
}

[/codesyntax]

LDR example

[codesyntax lang=”cpp”]

#include <math.h>

#define LIGHTSENSOR_PIN A2

void setup() 
{
  Serial.begin(9600); 
  pinMode(LIGHTSENSOR_PIN, INPUT);
}

void loop() 
{
  float Rsensor = getRes();//if Rsensor is larger than 40 KOhm, the ambient light is very dark.
                                       //if Rsensor is smaller than 10 KOhm, the ambient light is bright.
  Serial.println("The resistance of the Light sensor is "); 
  Serial.print(Rsensor,1);
  Serial.println(" KOhm");
  
  float lux;
  lux = 325*pow(Rsensor,-1.4);
  
  Serial.print("Illuminance is  ");
  Serial.print(lux,1);
  Serial.println(" lux");
  delay(1000);  
}

float getRes()
{
  int sensorValue = analogRead(LIGHTSENSOR_PIN);
  float Rsensor;
  Rsensor=(float)(1023-sensorValue)*10/sensorValue;
  return Rsensor;//unit is KOhm
}

[/codesyntax]

Button example

[codesyntax lang=”cpp”]

#define KEY1_PIN 9//
#define KEY2_PIN 8//

uint8_t out[2];
int count = 0;

void setup()
{
  Serial.begin(9600);
  out[0] = KEY1_PIN;
  out[1] = KEY2_PIN;
  for(uint8_t i=0; i < 2; i++)
  {
        pinMode(out[i], INPUT);
        digitalWrite(out[i], HIGH);
  }
}

void loop()
{
  int keynum;
  keynum = get();
  if(keynum == 1) //if you press K1
  {
    delay(10);//delay for 10ms
    if(get() == 1)//check it again
    {
      count++;
    Serial.println(count);
    }
  while(get() == 1);//Wait for the button to be released
  }
  
}

uint8_t get()                        
{
  for(uint8_t i=0; i < 2; i++)
  {
      if(!digitalRead(out[i]))
      {
        delay(10);
        if(!digitalRead(out[i])) return i+1;
      }
}
return 0;
}

[/codesyntax]

EEPROM example

[codesyntax lang=”cpp”]

#include <Wire.h>

void EEwrite(byte data_addr, byte data, byte address=0x57)
{
    Wire.beginTransmission(address);
    Wire.write(data_addr);
    Wire.write(data);
    Wire.endTransmission();
}

byte EEread(int data_addr, byte address=0x57)
{
    Wire.beginTransmission(address);
    Wire.write(data_addr);
    Wire.endTransmission();
  
    Wire.requestFrom(address, 1);
    if(Wire.available())
      return Wire.read();
    else
      return 0xFF;
}

void setup() 
{
  Wire.begin();
  Serial.begin(9600);

  for(int addr = 0; addr < 10; addr++) 
  {
    EEwrite(addr, 10+addr);
    delay(100);
  }

  Serial.println("Have writen to memory!");

  for(int addr = 0; addr < 10; addr++) 
  {
    byte r = EEread(addr);
    Serial.print("address = ");
    Serial.print(addr);
    Serial.print(" - ");
    Serial.print("number = ");
    Serial.print(r);
    Serial.print("\n");
    delay(1000);
  }
  Serial.println("Have read 10 number from AT24C02!");
}

void loop() {
  
}

[/codesyntax]

Voltage example

[codesyntax lang=”cpp”]

#define VOL_SENSOR A3
#define GAIN 0.18// Vread = VIN * GAIN
#define ADC_REF 5  //reference voltage of ADC is 5v

uint8_t samples = 10;

void setup(){
  Serial.begin(9600);
}

void loop(){  
   float vol;
   vol = readValue();
   Serial.println(vol);
   delay(1000);
}

float readValue()
{
  int sensorValue;
  long  sum=0;
    for(uint8_t i = 0;i < samples;i ++)
    {  
      sensorValue=analogRead(VOL_SENSOR);
      sum += sensorValue;
      delay(2);
    }   
    sensorValue = sum / samples;//Calculate the average
    float vol = sensorValue*ADC_REF/1023.00/GAIN;
    return vol;
}

[/codesyntax]

NTC thermistor example

[codesyntax lang=”cpp”]

#define NTC_PIN A1 //SIG pin of NTC module connect to A1 of IO Shield, that is pin A1 of OPEN-SMART UNO R3
#define SAMPLING_RESISTOR  10000//the sampling resistor is 10k ohm
#define NTC_R25 10000//the resistance of the NTC at 25'C is 10k ohm
#define NTC_B   3950

void setup()
{
  Serial.begin(9600);
  delay(1000);//
}

void loop()
{
  float celsius;
  celsius = getTemperature();//get temperature
  Serial.println((int8_t)celsius);//
  delay(1000);//delay 1000ms
}


float getTemperature()
{
  float temperature,resistance;
  int a;
  a = analogRead(NTC_PIN);
  resistance   = (float)a*SAMPLING_RESISTOR/(1024-a); //Calculate the resistance of the thermistor
  /*Calculate the temperature according to the following formula.*/
  temperature  = 1/(log(resistance/NTC_R25)/NTC_B+1/298.15)-273.15;
  return temperature;
}

[/codesyntax]

DHT11 example

I used the adafruit library – https://github.com/adafruit/Adafruit_DHT_Unified

[codesyntax lang=”cpp”]

/ DHT Temperature & Humidity Sensor
// Unified Sensor Library Example
// Written by Tony DiCola for Adafruit Industries
// Released under an MIT license.

// Depends on the following Arduino libraries:
// - Adafruit Unified Sensor Library: https://github.com/adafruit/Adafruit_Sensor
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

#define DHTPIN            12         // Pin which is connected to the DHT sensor.
#define DHTTYPE           DHT11     // DHT 11 

DHT_Unified dht(DHTPIN, DHTTYPE);

uint32_t delayMS;

void setup() 
{
  Serial.begin(9600); 
  // Initialize device.
  dht.begin();
  Serial.println("DHTxx Unified Sensor Example");
  // Print temperature sensor details.
  sensor_t sensor;
  dht.temperature().getSensor(&sensor);
  // Set delay between sensor readings based on sensor details.
  delayMS = sensor.min_delay / 1000;
}

void loop() 
{
  // Delay between measurements.
  delay(delayMS);
  // Get temperature event and print its value.
  sensors_event_t event;  
  dht.temperature().getEvent(&event);
  if (isnan(event.temperature)) 
  {
    Serial.println("Error reading temperature!");
  }
  else 
  {
    Serial.print("Temperature: ");
    Serial.print(event.temperature);
    Serial.println(" *C");
  }
  // Get humidity event and print its value.
  dht.humidity().getEvent(&event);
  if (isnan(event.relative_humidity)) 
  {
    Serial.println("Error reading humidity!");
  }
  else 
  {
    Serial.print("Humidity: ");
    Serial.print(event.relative_humidity);
    Serial.println("%");
  }
}

[/codesyntax]

Display example

I used the following library – https://github.com/avishorp/TM1637

[codesyntax lang=”cpp”]

#include <Arduino.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 10
#define DIO 11

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   2000

const uint8_t SEG_DONE[] = {
	SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,           // d
	SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
	SEG_C | SEG_E | SEG_G,                           // n
	SEG_A | SEG_D | SEG_E | SEG_F | SEG_G            // E
	};

TM1637Display display(CLK, DIO);

void setup()
{
}

void loop()
{
  int k;
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  display.setBrightness(0x0f);

  // All segments on
  display.setSegments(data);
  delay(TEST_DELAY);

  // Selectively set different digits
  data[0] = 0b01001001;
  data[1] = display.encodeDigit(1);
  data[2] = display.encodeDigit(2);
  data[3] = display.encodeDigit(3);

  for(k = 3; k >= 0; k--) {
	display.setSegments(data, 1, k);
	delay(TEST_DELAY);
	}

  display.setSegments(data+2, 2, 2);
  delay(TEST_DELAY);

  display.setSegments(data+2, 2, 1);
  delay(TEST_DELAY);

  display.setSegments(data+1, 3, 1);
  delay(TEST_DELAY);


  // Show decimal numbers with/without leading zeros
  bool lz = false;
  for (uint8_t z = 0; z < 2; z++) {
	for(k = 0; k < 10000; k += k*4 + 7) {
		display.showNumberDec(k, lz);
		delay(TEST_DELAY);
	}
	lz = true;
  }

  // Show decimal number whose length is smaller than 4
  for(k = 0; k < 4; k++)
	data[k] = 0;
  display.setSegments(data);

	// Run through all the dots
	for(k=0; k <= 4; k++) {
		display.showNumberDecEx(0, (0x80 >> k), true);
		delay(TEST_DELAY);
	}

  display.showNumberDec(153, false, 3, 1);
  delay(TEST_DELAY);
  display.showNumberDec(22, false, 2, 2);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 3);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 2);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 1);
  delay(TEST_DELAY);
  display.showNumberDec(0, true, 1, 0);
  delay(TEST_DELAY);

  // Brightness Test
  for(k = 0; k < 4; k++)
	data[k] = 0xff;
  for(k = 0; k < 7; k++) {
    display.setBrightness(k);
    display.setSegments(data);
    delay(TEST_DELAY);
  }
  
  // On/Off test
  for(k = 0; k < 4; k++) {
    display.setBrightness(7, false);  // Turn off
    display.setSegments(data);
    delay(TEST_DELAY);
    display.setBrightness(7, true); // Turn on
    display.setSegments(data);
    delay(TEST_DELAY);  
  }

  // Done!
  display.setSegments(SEG_DONE);

  while(1);
}

[/codesyntax]

 

Links

Here is the schematic and also as I stated the library for the board with examples if you wanted to use it

Rich Shield Schmatic

OPEN-SMART libaries for Arduino

LEAVE A REPLY

Please enter your comment!
Please enter your name here