#03 – LCD Shield
SparkFun – Screw – Phillips Head (1/4″, 4-40)
Kingbright – 3mm Low Current Red LED
Kingbright: WP710A10LSRD
3mm Low Current Red Led
- Emitting Color: Red
- Material: GaAlAs
- Color/Wavelenght: 640nm
- Lens Type: Color Diffused
Product Featured
- Low power consumption
- Popular T-1 diameter package
- Viewing angle – 34°
- Available on tape and reel
- RoHS compliant
Applications
- Traffic signage
- Signage application
- Decorative & entertainment lighting
- Commercial & Residential architectural lighting
Don Luc
Kingbright – 3mm Low Current Yellow LED
Kingbright: WP710A10LYD
3mm Low Current Yellow Led
- Emitting Color: Yellow
- Material: GaAsP/GaP
- Color/Wavelenght: 588nm
- Lens Type: Color Diffused
Product Featured
- Low power consumption
- Popular T-1 diameter package
- Viewing angle – 34°
- Available on tape and reel
- RoHS compliant
Applications
- Traffic signage
- Signage application
- Decorative & entertainment lighting
- Commercial & Residential architectural lighting
Don Luc
Adafruit – Standard LCD 20×4 + Extras – White on Blue
Adafruit: 198
Description
Standard HD44780 LCDs are useful for creating standalone projects.
- 20 characters wide, 4 rows
- White text on blue background
- Connection port is 0.1″ pitch, single row for easy breadboarding and wiring
- Single LED backlight with a resistor included, you can power it directly from 5V. If it’s too bright for you, it can be dimmed easily with a resistor or PWM and uses much less power than LCD with EL (electroluminescent) backlights
- Can be fully controlled with only 6 digital lines!
- Built in character set supports English/Japanese text, see the HD44780 datasheet for the full character set
- Up to 8 extra characters can be created for custom glyphs or ‘foreign’ language support (like special accents)
- Comes with necessary contrast potentiometer and strip of header
For more information, check out our detailed step-by-step Arduino+LCD tutorial
We have a generic 20×4 datasheet that has dimensions and pin-locations (the exact model may vary but the pinout, size and protocol information is the same). We also have a HD44780 datasheet with the detailed commands for control.
Don Luc
SparkFun – Arduino Uno – R3
SparkFun: DEV-11021
Description: This is the new Arduino Uno R3. In addition to all the features of the previous board, the Uno now uses an ATmega16U2 instead of the 8U2 found on the Uno (or the FTDI found on previous generations). This allows for faster transfer rates and more memory. No drivers needed for Linux or Mac (inf file for Windows is needed and included in the Arduino IDE), and the ability to have the Uno show up as a keyboard, mouse, joystick, etc.
The Uno R3 also adds SDA and SCL pins next to the AREF. In addition, there are two new pins placed near the RESET pin. One is the IOREF that allow the shields to adapt to the voltage provided from the board. The other is a not connected and is reserved for future purposes. The Uno R3 works with all existing shields but can adapt to new shields which use these additional pins.
Arduino is an open-source physical computing platform based on a simple i/o board and a development environment that implements the Processing/Wiring language. Arduino can be used to develop stand-alone interactive objects or can be connected to software on your computer (e.g. Flash, Processing, MaxMSP). The open-source IDE can be downloaded for free (currently for Mac OS X, Windows, and Linux).
Note: The Arduino Uno R3 requires the Arduino 1.0 drivers folder in order to install properly on some computers. We have tested and confirmed that the R3 can be programmed in older versions of the IDE. However, the first time using the R3 on a new computer, you will need to have Arduino 1.0 installed on that machine. If you are interested in reading more about the changes to the IDE, check out the official Arduino 1.0 Release notes!
Features:
- ATmega328 microcontroller
- Input voltage – 7-12V
- 14 Digital I/O Pins (6 PWM outputs)
- 6 Analog Inputs
- 32k Flash Memory
- 16Mhz Clock Speed
Don Luc
SparkFun – Arduino Pro Mini 328 – 3.3V/8MHz
SparkFun: DEV-11114
Description: It’s blue! It’s thin! It’s the Arduino Pro Mini! SparkFun’s minimal design approach to Arduino. This is a 3.3V Arduino running the 8MHz bootloader. Arduino Pro Mini does not come with connectors populated so that you can solder in any connector or wire with any orientation you need. We recommend first time Arduino users start with the Uno R3. It’s a great board that will get you up and running quickly. The Arduino Pro series is meant for users that understand the limitations of system voltage (3.3V), lack of connectors, and USB off board.
We really wanted to minimize the cost of an Arduino. In order to accomplish this we used all SMD components, made it two layer, etc. This board connects directly to the FTDI Basic Breakout board and supports auto-reset. The Arduino Pro Mini also works with the FTDI cable but the FTDI cable does not bring out the DTR pin so the auto-reset feature will not work. There is a voltage regulator on board so it can accept voltage up to 12VDC. If you’re supplying unregulated power to the board, be sure to connect to the “RAW” pin on not VCC.
The latest and greatest version of this board breaks out the ADC6 and ADC7 pins as well as adds footprints for optional I2C pull-up resistors! We also took the opportunity to slap it with the OSHW logo.
Dimensions: 0.7×1.3″ (18x33mm)
Features:
- ATmega328 running at 8MHz with external resonator (0.5% tolerance)
- Low-voltage board needs no interfacing circuitry to popular 3.3V devices and modules (GPS, accelerometers, sensors, etc)
- 0.8mm Thin PCB
- USB connection off board
- Weighs less than 2 grams!
- Supports auto-reset
- 3.3V regulator
- Max 150mA output
- Over current protected
- DC input 3.3V up to 12V
- On board Power and Status LEDs
- Analog Pins: 8
- Digital I/Os: 14
Don Luc
Project #3 – LCD Shield – Mk5
LCDShieldMk5.1.ino
// ***** Don Luc ***** // Software Version Information // 5.1 // include the library code: #include <Wire.h> #include <Adafruit_MCP23017.h> #include <Adafruit_RGBLCDShield.h> #include <SPI.h> #include <RTClib.h> #include <RTC_DS3231.h> #include <OneWire.h> RTC_DS3231 RTC; #define SQW_FREQ DS3231_SQW_FREQ_1024 //0b00001000 1024Hz Adafruit_RGBLCDShield RGBLCDShield = Adafruit_RGBLCDShield(); // These #defines make it easy to set the backlight color #define OFF 0x0 #define RED 0x1 #define YELLOW 0x3 #define GREEN 0x2 #define TEAL 0x6 #define BLUE 0x4 #define VIOLET 0x5 #define WHITE 0x7 int yy = 0; uint8_t momentaryButton = 0; // Chorno boolean isChorno = true; boolean isChor = false; char datastr[100]; int zz = 0; // LDR (light dependent resistor) int LDR_Pin = A0; int LDRReading = 0; String LDR = ""; // Temperature chip i/o int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2 OneWire ds(DS18S20_Pin); // on digital pin 2 float temperature = 0; String tempZ = ""; // Potentiometer int potPin = A2; // select the input pin for the potentiometer int ledPin = 4; // select the pin for the LED boolean isVal = false; int potPot = 0; String cap = ""; void loop() { RGBLCDShield.clear(); // ChronoDot // set the cursor to column 0, line 1 RGBLCDShield.setCursor(0, 1); timeChrono(); // LDR (light dependent resistor) timeLDR(); // Temperature chip i/o temperatu(); // Potentiometer getPotentio(); momentaryButton = RGBLCDShield.readButtons(); // set the cursor to column 0, line 0 RGBLCDShield.setCursor(0,0); switch ( yy ) { case 1: // LDR (light dependent resistor) isLDR(); break; case 2: // Temperature chip i/o isTe(); break; case 3: // Potentiometer isCap(); break; case 4: // Yellow RGBLCDShield.print("YELLOW - RIGHT"); break; case 5: // OFF RGBLCDShield.print("OFF"); break; default: yy = 0; RGBLCDShield.print("Don Luc!!!"); } if ( momentaryButton ) { if ( momentaryButton & BUTTON_UP ) { isChorno = true; yy = 1; // LDR (light dependent resistor) RGBLCDShield.setBacklight(GREEN); } if ( momentaryButton & BUTTON_DOWN ) { isChorno = true; yy = 2; // Temperature chip i/o RGBLCDShield.setBacklight(RED); } if ( momentaryButton & BUTTON_LEFT ) { isChorno = true; yy =3; // Potentiometer RGBLCDShield.setBacklight(BLUE); } if ( momentaryButton & BUTTON_RIGHT ) { isChorno = true; yy = 4; //RGBLCDShield.print("YELLOW - RIGHT"); RGBLCDShield.setBacklight(YELLOW); } if ( momentaryButton & BUTTON_SELECT ) { isChorno = false; yy = 5; //RGBLCDShield.print("OFF"); RGBLCDShield.setBacklight(OFF); } } delay(5000); }
setup.ino
void setup() { // set up the LCD's number of columns and rows: RGBLCDShield.begin(16, 2); RGBLCDShield.setBacklight(VIOLET); // ChronoDot setupChrono(); // Pot pinMode(ledPin, OUTPUT); }
ChronoDot.ino
void setupChrono() { RTC.begin(); DateTime now = RTC.now(); DateTime compiled = DateTime(__DATE__, __TIME__); RTC.getControlRegisterData( datastr[0] ); } void timeChrono() { DateTime now = RTC.now(); DateTime isNow (now.unixtime() + 5572 * 86400L + 26980); if ( isChorno == true ) { if ( isChor == false ) { isChor = true; RGBLCDShield.print(isNow.year(), DEC); RGBLCDShield.print('/'); RGBLCDShield.print(isNow.month(), DEC); RGBLCDShield.print('/'); RGBLCDShield.print(isNow.day(), DEC); RGBLCDShield.print(' '); RGBLCDShield.print(' '); } else if ( isChor == true ) { isChor = false; RGBLCDShield.print(isNow.hour(), DEC); RGBLCDShield.print(':'); RGBLCDShield.print(isNow.minute(), DEC); RGBLCDShield.print(':'); RGBLCDShield.print(isNow.second(), DEC); RGBLCDShield.print(' '); RGBLCDShield.print(' '); } } }
getLDR.ino
void timeLDR() { // LDR LDRReading = analogRead(LDR_Pin); } void isLDR() { LDR = "LDR: "; LDR.concat(LDRReading); // LDR (light dependent resistor) RGBLCDShield.print( LDR ); }
getPot.ino
void getPotentio() { if ( isVal == false ) { isVal = true; digitalWrite(ledPin, HIGH); // turn the ledPin on } else if ( isVal == true ) { isVal = false; digitalWrite(ledPin, LOW); // turn the ledPin off } potPot = analogRead(potPin); // read the value from the sensor } void isCap(){ cap = "Pot: "; cap.concat(potPot); RGBLCDShield.print( cap ); }
getTemperature.ino
float getTemp() { //returns the temperature from one DS18S20 in DEG Celsius byte data[12]; byte addr[8]; if ( !ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return -1001; } if ( OneWire::crc8( addr, 7) != addr[7]) { return -1002; } if ( addr[0] != 0x10 && addr[0] != 0x28) { return -1003; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (int i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } ds.reset_search(); byte MSB = data[1]; byte LSB = data[0]; float tempRead = ((MSB << 8) | LSB); //using two's compliment float TemperatureSum = tempRead / 16; return TemperatureSum; } void temperatu(){ temperature = getTemp(); } void isTe() { tempZ = "Temp: "; tempZ.concat(temperature); tempZ.concat("C"); RGBLCDShield.print( tempZ ); }
Don Luc
Project #3 – LCD Shield – Mk4
1 X Mini Photocell
1 X Resistor 10k Ohm
1 X One Wire Digital Temperature Sensor – DS18B20
1 X Resistor 4.7k Ohm
1 X Trimpot 10K with Knob
1 X Resistor 1.65k Ohm
1 X 3MM Low Current Red LED
14 X Jumper Wires Premium 3″ M/M
1 X Project #3 – LED Shield – Mk3
LCDShieldMk4.3.ino
// ***** Don Luc ***** // Software Version Information // 4.3 // include the library code: #include <Wire.h> #include <Adafruit_MCP23017.h> #include <Adafruit_RGBLCDShield.h> #include <SPI.h> #include <RTClib.h> #include <RTC_DS3231.h> #include <OneWire.h> RTC_DS3231 RTC; #define SQW_FREQ DS3231_SQW_FREQ_1024 //0b00001000 1024Hz Adafruit_RGBLCDShield RGBLCDShield = Adafruit_RGBLCDShield(); // These #defines make it easy to set the backlight color #define OFF 0x0 #define RED 0x1 #define YELLOW 0x3 #define GREEN 0x2 #define TEAL 0x6 #define BLUE 0x4 #define VIOLET 0x5 #define WHITE 0x7 // Chorno boolean isChorno = false; char datastr[100]; // LDR (light dependent resistor) int LDR_Pin = A0; String LDR = ""; // Temperature chip i/o int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2 OneWire ds(DS18S20_Pin); // on digital pin 2 String tempZ = ""; // Potentiometer int potPin = A2; // select the input pin for the potentiometer int ledPin = 4; // select the pin for the LED boolean isVal = false; int potPot = 0; String cap = ""; void loop() { // timeChrono(); timeChrono(); uint8_t momentaryButton = RGBLCDShield.readButtons(); if ( momentaryButton ) { RGBLCDShield.clear(); RGBLCDShield.setCursor(0,0); if ( momentaryButton & BUTTON_UP ) { timeLDR(); RGBLCDShield.print( LDR ); RGBLCDShield.setBacklight(GREEN); } if ( momentaryButton & BUTTON_DOWN ) { temperatu(); RGBLCDShield.print( tempZ ); RGBLCDShield.setBacklight(RED); } if ( momentaryButton & BUTTON_LEFT ) { getPotentio(); RGBLCDShield.print( cap ); RGBLCDShield.setBacklight(BLUE); } if ( momentaryButton & BUTTON_RIGHT ) { RGBLCDShield.print("YELLOW - RIGHT"); RGBLCDShield.setBacklight(YELLOW); } if ( momentaryButton & BUTTON_SELECT ) { RGBLCDShield.print("OFF"); RGBLCDShield.setBacklight(OFF); } } delay(3000); }
setup.ino
void setup() { // set up the LCD's number of columns and rows: RGBLCDShield.begin(16, 2); RGBLCDShield.print("Don Luc!!!"); RGBLCDShield.setBacklight(VIOLET); // ChronoDot setupChrono(); // Pot pinMode(ledPin, OUTPUT); }
ChronoDot.ino
void setupChrono() { RTC.begin(); DateTime now = RTC.now(); DateTime compiled = DateTime(__DATE__, __TIME__); RTC.getControlRegisterData( datastr[0] ); } void timeChrono() { DateTime now = RTC.now(); DateTime isNow (now.unixtime() + 5572 * 86400L + 26980); // set the cursor to column 0, line 1 RGBLCDShield.setCursor(0, 1); if ( isChorno == false ) { isChorno = true; RGBLCDShield.print(isNow.year(), DEC); RGBLCDShield.print('/'); RGBLCDShield.print(isNow.month(), DEC); RGBLCDShield.print('/'); RGBLCDShield.print(isNow.day(), DEC); RGBLCDShield.print(' '); RGBLCDShield.print(' '); } else if ( isChorno == true ) { isChorno = false; RGBLCDShield.print(isNow.hour(), DEC); RGBLCDShield.print(':'); RGBLCDShield.print(isNow.minute(), DEC); RGBLCDShield.print(':'); RGBLCDShield.print(isNow.second(), DEC); RGBLCDShield.print(' '); RGBLCDShield.print(' '); } }
getLDR.ino
void timeLDR() { // LDR int LDRReading = analogRead(LDR_Pin); LDR = "LDR: "; LDR.concat(LDRReading); }
getPot.ino
void getPotentio() { if ( isVal == false ) { isVal = true; digitalWrite(ledPin, HIGH); // turn the ledPin on } else if ( isVal == true ) { isVal = false; digitalWrite(ledPin, LOW); // turn the ledPin off } potPot = analogRead(potPin); // read the value from the sensor cap = "Pot: "; cap.concat(potPot); }
getTemperature.ino
float getTemp() { //returns the temperature from one DS18S20 in DEG Celsius byte data[12]; byte addr[8]; if ( !ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return -1001; } if ( OneWire::crc8( addr, 7) != addr[7]) { return -1002; } if ( addr[0] != 0x10 && addr[0] != 0x28) { return -1003; } ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end byte present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (int i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } ds.reset_search(); byte MSB = data[1]; byte LSB = data[0]; float tempRead = ((MSB << 8) | LSB); //using two's compliment float TemperatureSum = tempRead / 16; return TemperatureSum; } void temperatu(){ float temperature = getTemp(); tempZ = "Temp: "; tempZ.concat(temperature); tempZ.concat("C"); }
Don Luc
Project #3 – LCD Shield – Mk3
2 X Jumper Wires Premium 3″ M/M
1 X Project #3 – LED Shield – Mk2
LCDShieldMk3.0.ino
// ***** Don Luc ***** // Software Version Information // 3.0 // include the library code: #include <Wire.h> #include <Adafruit_MCP23017.h> #include <Adafruit_RGBLCDShield.h> #include <SPI.h> #include <RTClib.h> #include <RTC_DS3231.h> RTC_DS3231 RTC; #define SQW_FREQ DS3231_SQW_FREQ_1024 //0b00001000 1024Hz Adafruit_RGBLCDShield RGBLCDShield = Adafruit_RGBLCDShield(); // These #defines make it easy to set the backlight color #define OFF 0x0 #define RED 0x1 #define YELLOW 0x3 #define GREEN 0x2 #define TEAL 0x6 #define BLUE 0x4 #define VIOLET 0x5 #define WHITE 0x7 boolean isChorno = false; char datastr[100]; void loop() { // timeChrono(); timeChrono(); uint8_t momentaryButton = RGBLCDShield.readButtons(); if ( momentaryButton ) { RGBLCDShield.clear(); RGBLCDShield.setCursor(0,0); if ( momentaryButton & BUTTON_UP ) { RGBLCDShield.print("GREEN - UP"); RGBLCDShield.setBacklight(GREEN); } if ( momentaryButton & BUTTON_DOWN ) { RGBLCDShield.print("RED - DOWN"); RGBLCDShield.setBacklight(RED); } if ( momentaryButton & BUTTON_LEFT ) { RGBLCDShield.print("BLUE - LEFT"); RGBLCDShield.setBacklight(BLUE); } if ( momentaryButton & BUTTON_RIGHT ) { RGBLCDShield.print("YELLOW - RIGHT"); RGBLCDShield.setBacklight(YELLOW); } if ( momentaryButton & BUTTON_SELECT ) { RGBLCDShield.print("OFF"); RGBLCDShield.setBacklight(OFF); } } delay(3000); }
setup.ino
void setup() { // set up the LCD's number of columns and rows: RGBLCDShield.begin(16, 2); RGBLCDShield.print("Don Luc!!!"); RGBLCDShield.setBacklight(VIOLET); // ChronoDot setupChrono(); }
ChronoDot.ino
void setupChrono() { RTC.begin(); DateTime now = RTC.now(); DateTime compiled = DateTime(__DATE__, __TIME__); RTC.getControlRegisterData( datastr[0] ); } void timeChrono() { DateTime now = RTC.now(); DateTime isNow (now.unixtime() + 5572 * 86400L + 26980); // set the cursor to column 0, line 1 RGBLCDShield.setCursor(0, 1); if ( isChorno == false ) { isChorno = true; RGBLCDShield.print(isNow.year(), DEC); RGBLCDShield.print('/'); RGBLCDShield.print(isNow.month(), DEC); RGBLCDShield.print('/'); RGBLCDShield.print(isNow.day(), DEC); RGBLCDShield.print(' '); RGBLCDShield.print(' '); } else if ( isChorno == true ) { isChorno = false; RGBLCDShield.print(isNow.hour(), DEC); RGBLCDShield.print(':'); RGBLCDShield.print(isNow.minute(), DEC); RGBLCDShield.print(':'); RGBLCDShield.print(isNow.second(), DEC); RGBLCDShield.print(' '); RGBLCDShield.print(' '); } }
Don Luc
Project #3 – LCD Shield – Mk2
1 X ChronoDot
1 X ProtoScrewShield
1 X Breadboard
4 X Jumper Wires Premium 3″ M/M
1 X CR1632
1 X Project #3 – LED Shield – Mk1
LCDShieldMk2.2.ino
// ***** Don Luc ***** // Software Version Information // 2.2 // include the library code: #include <Wire.h> #include <Adafruit_MCP23017.h> #include <Adafruit_RGBLCDShield.h> Adafruit_RGBLCDShield RGBLCDShield = Adafruit_RGBLCDShield(); // These #defines make it easy to set the backlight color #define OFF 0x0 #define RED 0x1 #define YELLOW 0x3 #define GREEN 0x2 #define TEAL 0x6 #define BLUE 0x4 #define VIOLET 0x5 #define WHITE 0x7 uint8_t i = 0; void loop() { timeChrono(); uint8_t momentaryButton = RGBLCDShield.readButtons(); if ( momentaryButton ) { RGBLCDShield.clear(); RGBLCDShield.setCursor(0,0); if ( momentaryButton & BUTTON_UP ) { RGBLCDShield.print("GREEN - UP "); RGBLCDShield.setBacklight(GREEN); } if ( momentaryButton & BUTTON_DOWN ) { RGBLCDShield.print("RED - DOWN "); RGBLCDShield.setBacklight(RED); } if ( momentaryButton & BUTTON_LEFT ) { RGBLCDShield.print("BLUE - LEFT "); RGBLCDShield.setBacklight(BLUE); } if ( momentaryButton & BUTTON_RIGHT ) { RGBLCDShield.print("YELLOW - RIGHT "); RGBLCDShield.setBacklight(YELLOW); } if ( momentaryButton & BUTTON_SELECT ) { RGBLCDShield.print("OFF "); RGBLCDShield.setBacklight(OFF); } } delay(1000); }
setup.ino
void setup() { // set up the LCD's number of columns and rows: RGBLCDShield.begin(16, 2); RGBLCDShield.print("Don Luc!!!"); RGBLCDShield.setBacklight(VIOLET); // ChronoDot setupChrono(); }
ChronoDot.ino
void setupChrono() { // clear /EOSC bit // Sometimes necessary to ensure that the clock // keeps running on just battery power. Wire.beginTransmission(0x68); // address DS3231 Wire.write(0x0E); // select register Wire.write(0b00011100); // write register bitmap, bit 7 is /EOSC Wire.endTransmission(); } void timeChrono() { // set the cursor to column 0, line 1 RGBLCDShield.setCursor(0, 1); // send request to receive data starting at register 0 Wire.beginTransmission(0x68); // 0x68 is DS3231 device address Wire.write((byte)0); // start at register 0 Wire.endTransmission(); Wire.requestFrom(0x68, 3); // request three bytes (seconds, minutes, hours) while(Wire.available()) { int seconds = Wire.read(); // get seconds int minutes = Wire.read(); // get minutes int hours = Wire.read(); // get hours seconds = (((seconds & 0b11110000)>>4)*10 + (seconds & 0b00001111)); // convert BCD to decimal minutes = (((minutes & 0b11110000)>>4)*10 + (minutes & 0b00001111)); // convert BCD to decimal hours = (((hours & 0b00100000)>>5)*20 + ((hours & 0b00010000)>>4)*10 + (hours & 0b00001111)); // convert BCD to decimal (assume 24 hour mode) // print the number of seconds since reset: RGBLCDShield.print(hours); RGBLCDShield.print(":"); RGBLCDShield.print(minutes); RGBLCDShield.print(":"); RGBLCDShield.print(seconds); } }
Don Luc