BrainBox Arduino: A ‘tough’ Arduino with screw terminals writes:

Have you read the BrainBox Arduino article in the latest edition of Elektor magazine? BrainBox Arduino is a rugged version of the Arduino Leonardo. Thanks to its sturdy screw terminals, a number of different power supply options, an on-board buzzer and a motor-driver IC that connects directly to motors, there is usually no need for breadboards, extra ICs or shields in most applications.

BrainBox Arduino: A ‘tough’ Arduino with screw terminals – [Link]

Arduino-Based Two-Way Pager

This Arduino-based pager by  Mike Schaus will allow you to send and receive real SMS text messages. This messaging device has its own SIM card and phone number.

In order to build this project you need the following parts:

And you will need to use this software to run the project: Hologram Data Router.

This project was made possible as part of Hologram’s Hacker-In-Residence program, The Hologram Global SIM Card allows you to connect you IoT device everywhere. Paired with a powerful device management platform and API. It provides a cellular data service that works with any device that accepts a SIM card. In addition it is totally inexpensive.

GSM shield, the Hologram things, and Arduino stacked on top of each other made a good combination to build such a project. For powering the project, Mike had used a 9V battery as an option, and still, powering from USB is possible.

Mike had designed this project so it could be used by children instead of a real cell phone, or it could be used as an “SOS” button for someone working alone outdoors or even exercising.

Check this video to know how this project works:

The amazing thing about Adafruit LCD shield that it only uses 2 pins of Arduino since it works over the I2C bus, which results with many places left for future features.

This is the schematics of the project: It is super easy, the wires mean putting the pieces on top of each other.

And here is the Arduino code used:

#include <GSM.h>

#define PINNUMBER ""

// include the LCD library code:
#include <Wire.h>
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>

// The shield uses the I2C SCL and SDA pins. On classic Arduinos
// this is Analog 4 and 5 so you can't use those for analogRead() anymore
// However, you can connect other I2C sensors to the I2C bus and share
// the I2C bus.
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();

// These #defines make it easy to set the backlight color
#define OFF 0x0
#define ON 0x1

// make the arrow special character on the LCD
const byte arrow[8] =
 B00000, B00000, B01000, B01100, B01110, B01100, B01000, B00000

// initialize the GSM library instance
GSM gsmAccess(false); // include a 'true' parameter for debug enabled
GSM_SMS sms;

// char array of the telephone number to send SMS
// change the number 12125551212 to a number
// you have access to
char remoteNumber[20]= "12125551212";

// Array to hold the number a SMS is retreived from
char senderNumber[20];

// char array of the possible outgoing messages to choose from the menu
char* responses[]={"Mike=Awesome!", "Yes", "No", "Howdy!"};
//#define NUMRESPONSES 4 // if someone knows how to calculate this instead, I'm all ears
#define NUMRESPONSES (sizeof(responses)/sizeof(char *)) // thanks to Steve Kemp's comment!

int position=-1; // this way the first button press will always show first option of the menu

int inByte = 0; // incoming serial byte for keyboard interface

boolean backlight = true; // track backlight status for toggling

unsigned long previousMillis = 0; // will store last time messages were checked
#define CHECKINTERVAL 1500 // how often to check for text messages

void setup() {
  // put your setup code here, to run once:

  // initialize serial communications
  Serial.println(F("SMS Message Sender -- starting up..."));

  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);

  // Print a message to the LCD
  lcd.print(F("Hello, Hologram!"));
  lcd.setCursor(0, 1);
  lcd.print(F("Starting up..."));

  // set up the arrow character for display
  lcd.createChar(0, arrow);

  // connection state
  boolean notConnected = true;

  // Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
    if(gsmAccess.begin(PINNUMBER)==GSM_READY) {
      notConnected = false;
      Serial.println(F("GSM is connected because you are so awesome"));
      Serial.println(F("Waiting for messages, or send with \"s\""));


      Serial.println(F("Not connected"));
      lcd.print(F("Not connected"));

// this is the menu system function
void showResponses() {
//  Serial.println(position); // only for debugging menu system

  // make sure cursor position is legal
  if (position<0) position=0;
  if (position>NUMRESPONSES-1) position = NUMRESPONSES-1;

  // write current selection and next option if there is another option
  lcd.write(0); //arrow character
  if (position < NUMRESPONSES-1) {
    lcd.print(" ");

void homeScreen() {
  lcd.print("SMS Messenger!");
  lcd.print("Ready; up/dn snd");

  position=-1; //reset response selection

void receiveSMS(){
  char c;

  // If there are any SMSs available()
  if (sms.available()) {
    Serial.println("Message received from:");

    // Get remote number
    sms.remoteNumber(senderNumber, 20);

    backlight = true;

    // An example of message disposal
    // Any messages starting with # should be discarded
    if (sms.peek() == '#') {
      Serial.println("Discarded SMS");

    // Read message bytes and print them
    // because only returns one character at a time
    int i=0;
    while (c = {
      if (i==17) lcd.setCursor(0, 1); // move to next line if needed
      if (i<33) lcd.print(c); // don't try to print more than 32 chars just in case

    Serial.println("\nEND OF MESSAGE");

    // Delete message from modem memory
    Serial.println("MESSAGE DELETED");

    // wait for right button to acknowlege before letting program continue
    boolean acknowledged = false;
    while(!acknowledged) {
      uint8_t buttons = lcd.readButtons();
      if (buttons & BUTTON_RIGHT) acknowledged = true;
      delay(50); //short delay for troubleshooting -- without this it behaves strangely
    delay(400); // prevent multiple presses in a row

// function to show message options in the serial monitor
void printResponseOptions(){
  for(int i=0; i<NUMRESPONSES; i++){

void sendSMS(const char* txtMsg){

  Serial.print("Message to mobile number: ");

  // print sms text info

  // send the message
  // next, add a signature to the chosen message
  sms.print(" --Be sure to connect with me on my blog");
  // call endSMS function to finish sending; it will return 1 if successful
  if (sms.endSMS()==1) {
  else {

void loop() {
  // put your main code here, to run repeatedly:

  uint8_t buttons = lcd.readButtons();

  if (buttons) {
    if (buttons & BUTTON_UP) {
      backlight = true;
    if (buttons & BUTTON_DOWN) {
      backlight = true;
    if (buttons & BUTTON_LEFT) {
      backlight = true;
    if (buttons & BUTTON_RIGHT) {
      backlight = !backlight; // toggle the backlight state
      if (backlight) lcd.setBacklight(ON);
      else lcd.setBacklight(OFF);
      homeScreen(); // have to write to screen after turning light off, otherwise it goes blank
    if (buttons & BUTTON_SELECT) {
      // make sure cursor selected position is legal
      if (position<0) position=0;
      backlight = true;
    delay(200); // prevent multiple presses in a row

  // this is for serial interface only, not related to LCD and buttons
  // send a message when I type "s" in serial monitor
  // then wait for my selection of the response number
  if (Serial.available() > 0) {
    inByte =; // get incoming byte
    if (inByte == 's') {

      while (Serial.available() > 0) {  // clear the keyboard buffer just in case
        char junk =;
      while (Serial.available() == 0) ;  // Wait here until input buffer has a character
      inByte = Serial.parseInt();
      // would want to check for valid choice here to be more robust

  // check for new messages only once every few seconds to keep interface more responsive
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= CHECKINTERVAL) {
    previousMillis = currentMillis;
    receiveSMS(); // takes about 26ms when there are no messages


More details about this project are available on and Mike’s own blog post. You can learn more about his projects on the same blog.

IkaScope – a new wireless oscilloscope probe launched “IkaScope” a new wireless oscilloscope probe that is able to make measurements directly on your mobile phone or your laptop. IkaScope transfers measured signals over high speed wifi connection and it will remember your home or office access points. It will work with iOS, Android and Windows devices (OSx will also be supported).


  • Input range 10 mV/div. → 10 V/divMaximum input voltage 80 Vpp
  • Bandwidth 25 MHz
  • Timebase 100 ns/div → 10 s/div
  • Input impedance 1MΩ
  • Input Coupling AC, DC, GND
  • Trigger Rising or falling slopes
  • Digital specifications
  • Sampling rate 200 MSPS
  • Resolution 8-bits
  • Buffer 4K pts (4 * 1K Pts)1

IkaScope is a wireless oscilloscope probe, all contained in an ergonomic stylus. It uses a wifi connection to transfer signals to be displayed on any connected screen (Laptop, Smart-phone, Tablet or Desktop Computer). It’s equipped with a battery that can be recharged via any USB port. Being battery operated, IkaScope always provides 4000V+ galvanic isolation from power mains (even when being recharged).

IkaScope – a new wireless oscilloscope probe – [Link]

Wembi – Closed Loop Motorupgrade for 3D Printer

TeamVenture-Bit tipped us with their kickstarter campaign. It’s about a closed loop motor upgrade kit that will enable your 3D printer to print faster, silently and more consistently. Check it out.

Boasting an advanced PID compensation system that detects issues while your 3D printer or other CNC based machine is moving,

Wembi readjusts itself to eliminate printing problems and help you get the perfect prints fast!

Wembi – Closed Loop Motorupgrade for 3D Printer – [Link]

Wide range of Hygrometers Compared

robert @ has a detailed article comparing the most common Humidity sensors. He writes:

Previous experiments looked at comparing a set of six Aosong DHT22/AM2302 and compared the Aosong DHT22/AM2302 with the Aosong DHT11 and Sensirion SHT71. Here I have added five new devices meaning this test now covers most commonly available low-cost digital hygrometers. This page will present only new results. For details of how the experiment works, please refer to the previous write-ups.

Wide range of Hygrometers Compared – [Link]

64 Key Infrared Remote Controller using PT2222M – NEC Code

64 channels Infra-Red Remote Transmitter circuit build around PT2222M IC, The IC is pin to pin compatible with NEC uPD6122 respectively, the remote is capable of controlling 64 functions keys and 3 double keys. The PT2222M Infra-red remote control transmission ICs using the NEC transmission format that is ideally suited for TVs, DVD Players, Audio Equipment, Air Condition, etc. By combining external diode and resistors, maximum of 65536 custom codes can be specified. The NEC transmission format consists of leader codes, custom codes (16 Bits), and data codes (16 Bits). It can be used for various systems through decoding by a microcontroller.


  • Low Voltage 2V To 3.3V
  • Low Current dissipation: 1uA Max (Standby)
  • Custom Codes: 65536 (Set by optional provided diodes and resistors)
  • 64 Codes (Single Input) , 3 Codes ( Double Input) , Expandable up to 128 Codes through J1 Jumper

64 Key Infrared Remote Controller using PT2222M – NEC Code – [Link]

AS7221, An IoT Smart Lighting Manager

ams AG, a multinational semiconductor manufacturer and provider of high performance sensors and analog ICs, had announced the AS7221, an integrated white-tunable smart lighting manager that can be controlled through its network connection by means of simple text-based commands.

AS7221 Block Diagram

AS7221 is a networking-enabled IoT Smart Lighting Manager with embedded tri-stimulus color sensing for direct CIE color point mapping and control. IoT luminaire control is through a network connection, or by direct connection to 0-10V dimmers, with control outputs that include direct PWM to LED drivers and analog 0-10V to dimming ballasts. A simple text-based Smart Lighting Command Set and serial UART interface, enable easy integration to standard network clients.

Key features of AS7221:

  • Calibrated XYZ tri-stimulus color sensing for direct translation to CIE 1931/1976 standard observer color maps
  • Autonomous color point and lumen output adjustment resulting in automatic spectral and lumen maintenance
  • Simple UART interface for connection to network hardware clients for protocols such as Bluetooth, ZigBee and WiFi
  • Smart Lighting Command Set (SLCS) uses simple text-based commands to control and configure a wide variety of functions
  • Directly interfaces to 0-10V dimmer controls and standard occupancy sensors
  • Built-in PWM generator to dim LED lamps and luminaires
  • 12-bit resolution for precise dimming down to 1%
  • 0-10V analog output for control of conventional dimming ballasts in a current steering design
  • 20-pin LGA package 4.5mm x 4.7mm x 2.5mm with integrated aperture

“The next generation of lighting will be defined by three key characteristics: controllability, adaptation and connected architectures,” said Tom Griffiths, Senior Marketing Manager at ams. “Our new family of smart lighting managers meet those criteria. With this latest entry, we are addressing the luminaire manufacturers’ critical time-to-market challenge for developing and deploying a spectrally tunable luminaire that is cost-effective, accurate, and which smoothly integrates into the Internet of Things”.

The AS7221 is the first extension to ams’s recently announced Cognitive Lighting™ smart lighting manager family. The compact AS7221 will be available in a 5x5mm LGA package, for flexible integration into both luminaires and larger replacement lamps.

There are main domains of AS7221 applications, some of them are:

  • Smart home and smart building
  • Variable CCT general lighting industrial lighting
  • Retail and hospitality lighting with white-color tuning
  • LED tro ers, panel and downlights
  • LED replacement lamps (LED bulbs)
AS7221 Functional Diagram

Pricing for the AS7221 Spectral Tuning IoT Smart Lighting Manager is set at $3.13 in quantities of 10,000 pieces, and is available in production volumes now.

You can find AS7221 datasheet here.

JeVois, The Open-Source Smart Vision Camera

JeVois, which can be translated from French as: I see, is an open-source quad-core camera that can be connected easily with your project whether you are using Arduino, Raspberry Pi or just running it on your PC. JeVois contains a video sensor, quad-core CPU, USB video and a serial port in only 1.7 cubic inches. To start working with your JeVois you only need to insert a microSD card loaded with the provided open-source machine vision algorithms and then connecting it to your computer. It will work immediately just by opening a camera software.

The process is as follows: video captured by the camera sensor, processed on JeVois processor, and results are sent over USB to the host computer or to the micro controller.

On your computer, you can use any camera software to see the results, also you can check different vision algorithms by selecting different resolutions and frame rates.

It has the following software and hardware frameworks:

“For ease of programming and configuration, all of the operating system, core JeVois software, and any necessary data files are stored on a single high-speed Micro-SD card that can easily be removed and plugged into a desktop or laptop computer.  The JeVois software framework combines custom Linux kernel drivers for camera sensor and for USB output, written in C, and a custom high-level vision processing framework, written in C++-17. “

Easy to integrate  with other open-source libraries, including tiny-dnn, OpenCV, boost, zBar, Eigen, turbojpeg, etc.  This framework is scalable since the operating system infrastructure is built using the buildroot framework where adding and using different libraries is easy. New vision modules can be added to the core of JeVois thanks to the fact the core software is managed by cmake. Thus, you can customize the vision algorithm you would like to run your JeVois.

In addition, it is easy to use, for example only 4 Wires are needed to connect it with Arduino: 5 or 3.3 V, GND, Tx and Rx!

JeVois is now live in a Kickstarter Campaign, check this video for better understanding:

For more information about the specifications and technical details, check the campaign page. You can pre-order your JeVois now for $45, there are still 20 days to go.

JeVois started as an educational project, to encourage the study of machine vision, computational neuroscience, and machine learning as part of introductory programming and robotics courses at all levels (from K-12 to Ph.D.). It is funded by Science Foundation (NSF) and the Defense Advanced Research Projects Agency (DARPA).

If you are interested in developing the core of JeVois check the documentation provided here.

Constant Current Laser Diode Driver Circuit Using OPA2350 OpAmp

The voltage-controlled current source circuit can be used to drive a constant current into a signal or pump laser diode. This simple linear driver provides a cleaner drive current into a laser diode than switching PWM drivers. The basic circuit is that of a Howland current pump with a current booster (Q1) on the output of a R-R CMOS OPA2350 op amp (U1). Laser diode current is sensed by differentially measuring the voltage drop across a shunt resistor (RSHUNT) in series with the laser diode. The output current is controlled by the input voltage (VIN) that comes from Trim pot PR1.


  • Supply 3,3V DC
  • Load Up to 300mA
  • PR1 Trimpot Current Adjust

Constant Current Laser Diode Driver Circuit Using OPA2350 OpAmp – [Link]


How to Set Up an Ultrasonic Range Finder on an Arduino has a new tutorial on how to measure distance using Arduino and an ultrasonic sensor.

Ultrasonic range finders are fun little modules that measure distance. You can use them to find the precise distance to an object, or also just to detect when something is within range of the sensor (like a motion detector). Ultrasonic range finders are ideal for projects involving robotic navigation, object avoidance, and home security. Because they use sound to measure distance, they work just as well in the dark as they do in the light. The ultrasonic range finder we will be using in this tutorial is the HC-SR04. The HC-SR04 can measure distances from 2 cm to 4oo cm with an accuracy of ±3 mm.

How to Set Up an Ultrasonic Range Finder on an Arduino – [Link]