Microcontrollers
Microcontrollers
SparkFun – Triple Axis Accelerometer Breakout – MMA7361
SparkFun: SEN-09652
Description: This is a breakout board for Freescale’s MMA7361L three-axis analog MEMS accelerometer. The sensor requires a very low amount of power and has a g-select input which switches the accelerometer between ±1.5g and ±6g measurement ranges. Other features include a sleep mode, signal conditioning, a 1-pole low pass filter, temperature compensation, self test, and 0g-detect which detects linear freefall. Zero-g offset and sensitivity are factory set and require no external devices.
This breadboard friendly board breaks out every pin of the MMA7361L to a 9-pin, 0.1″ pitch header. The sensor works on power between 2.2 and 3.6VDC (3.3V optimal), and typically consumes just 400µA of current. All three axes have their own analog output.
Features:
- Two selectable measuring ranges (±1.5g, ±6g)
- Breadboard friendly – 0.1″ pitch header
- Low current consumption: 400 µA
- Sleep mode: 3 µA
- Low voltage operation: 2.2 V – 3.6 V
- High sensitivity (800 mV/g at 1.5g)
- Fast turn on time (0.5 ms enable response time)
- Self test for freefall detect diagnosis
- 0g-Detect for freefall protection
- Signal conditioning with low pass filter
- Robust design, high shocks survivability
Dimensions: 0.90 x 0.50″
Don Luc
SparkFun – Triple-Axis Digital-Output Gyro Breakout – ITG-3200
SparkFun: SEN-11977
Description: This is a breakout board for InvenSense’s ITG-3200, a groundbreaking triple-axis, digital output MEMS gyroscope. The ITG-3200 features three 16-bit analog-to-digital converters (ADCs) for digitizing the gyro outputs, a user-selectable internal low-pass filter bandwidth, and a Fast-Mode I2C (400kHz) interface. Additional features include an embedded temperature sensor and a 2% accurate internal oscillator.
The ITG-3200 can be powered at anywhere between 2.1 and 3.6V. For power supply flexibility, the ITG-3200 has a separate VLOGIC reference pin (labeled VIO), in addition to its analog supply pin (VDD) which sets the logic levels of its serial interface. The VLOGIC voltage may be anywhere from 1.71V min to VDD max. For general use, VLOGIC can be tied to VCC. The normal operating current of the sensor is just 6.5mA.
Communication with the ITG-3200 is achieved over a two-wire (I2C) interface. The sensor also features a interrupt output, and an optional clock input. A jumper on the top of the board allows you to easily select the I2C address, by pulling the AD0 pin to either VCC or GND; the board is shipped with this jumper tied to VCC. If you don’t plan on using the CLKIN pin, you can short the jumper on the bottom of the board to tie it to GND.
This breakout board is shipped as shown in the images. Note that there are two unpopulated resistors on the I2C lines, these can be added later by the customer if desired.
Features:
- Digital-output X-, Y-, and Z-Axis angular rate sensors (gyros) on one integrated circuit
- Digitally-programmable low-pass filter
- Low 6.5mA operating current consumption for long battery life
- Wide VDD supply voltage range of 2.1V to 3.6V
- Standby current: 5µA
- Digital-output temperature sensor
- Fast Mode I2C (400kHz) serial interface
- Optional external clock inputs of 32.768kHz or 19.2MHz to synchronize with system clock
- Pins broken out to a breadboard friendly 7-pin 0.1″ pitch header
Dimensions: 0.87 x 0.72″ (22.22 x 18.48mm)
Don Luc
SparkFun – Tri-Axis Gyro Breakout – L3G4200D
SparkFun: SEN-10612
Description: This is a breakout board for the L3G4200D low-power three-axis angular rate sensor. The L3G4200D is a MEMS motion sensor and has a full scale of ±250/±500/±2000 dps and is capable of measuring rates with a user-selectable bandwidth. These work great in gaming and virtual reality input devices, GPS navigation systems and robotics.
Features:
- Three selectable full scales (250/500/2000 dps)
- I2C/SPI digital output interface
- 16 bit-rate value data output
- 8-bit temperature data output
- Wide supply voltage: 2.4 V to 3.6 V
- Low voltage-compatible IOs (1.8 V)
- Embedded power-down and sleep mode
- Embedded temperature sensor
- High shock survivability
Don Luc
SparkFun – XBee Explorer Regulated
SparkFun: WRL-09132
Description: The XBee Explorer Regulated takes care of the 3.3V regulation, signal conditioning, and basic activity indicators (Power, RSSI and DIN/DOUT activity LEDs). It translates the 5V serial signals to 3.3V so that you can connect a 5V (down to 3.3V) system to any XBee module. The board was conveniently designed to mate directly with Arduino Pro boards for wireless bootloading and USB based configuration.
This unit works with all XBee modules including the Series 1 and Series 2.5, standard and Pro versions. Plug an XBee into this breakout and you will have direct access to the serial and programming pins on the XBee unit and will be able to power the XBee with 5V.
This board comes fully populated with 3.3V regulator (16V max input), XBee socket, four status LEDs, and a diode to allow 5V systems to communicate safely with the 3.3V XBees. This board does not include and XBee module. XBee modules sold below.
Don Luc
SparkFun – Breakout Board for XBee Module
SparkFun: BOB-08276
Description: This is a simple breakout board for the popular XBee product from Digi. This board breaks out all 20 pins of the XBee to a 0.1″ standard spacing dual row header. The spacing between 0.1″ headers is 0.5″ making it breadboard DIP friendly. We highly recommend using the female sockets to avoid having to solder the XBee permanently to the breakout board. This is the PCB only. Please order the accompanying 2mm sockets (you’ll need 2!) and 0.1″ headers below.
Don Luc
SparkFun – XBee 1mW Chip Antenna – Series 1 (802.15.4)
SparkFun: WRL-08664
Description: This is the very popular 2.4GHz XBee module from Digi. These modules take the 802.15.4 stack (the basis for Zigbee) and wrap it into a simple to use serial command set. These modules allow a very reliable and simple communication between microcontrollers, computers, systems, really anything with a serial port! Point to point and multi-point networks are supported.
Features:
- 3.3V @ 50mA
- 250kbps Max data rate
- 1mW output (+0dBm)
- 300ft (100m) range
- Built-in antenna
- Fully FCC certified
- 6 10-bit ADC input pins
- 8 digital IO pins
- 128-bit encryption
- Local or over-air configuration
- AT or API command set
Don Luc
SparkFun – Arduino Fio
SparkFun: DEV-10116
Description: The Arduino Funnel I/O (Fio) is a board designed by Shigeru Kobayashi, based on the original design from LilyPad.
Funnel is a toolkit to sketch your idea physically, and consists of software libraries and hardware. By using Funnel, the user can interface to sensors and/or actuators with various programming languages such as ActionScript 3, Processing, and Ruby.
Arduino Fio is compatible with Funnel. It has connections for a Lithium Polymer battery and includes a charge circuit over USB. An XBee socket is available on the bottom of the board. The Fio has been designed to be wirelessly reprogrammable. Checkout our tutorial on wireless bootloading!
Note: The miniUSB connector is used for battery charging only. To bootload new firmware, you will need an external serial connection over an FTDI Basic, FTDI cable, or other serial connection. Check the related products below.
Note: The XBee socket and FTDI connection live on the same TX/RX pins of the ATmega328. You will need to remove the XBee module while reprogramming over serial. We recommend using a wireless bootloader whenever possible to avoid this step.
Note: A portion of this sale is given back to Arduino LLC to help fund continued development of new tools and new IDE features.
Features:
- ATmega328V running at 8MHz
- Arduino Bootloader
- XBee socket
- Lithium Polymer battery compatible
- MCP73831T LiPo Charger
- Reset button
- On/Off Switch
- Status/Charge/RSSI LEDs
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