• Ready for the party!

    Christoph Tack08/30/2018 at 19:12 0 comments

    10 pieces ready
    10 of the 20 pieces ready

    20 pieces have been made.  10 of these are shown in the picture above.  All of them have been hand soldered.  

    After soldering, the units underwent a functional test.  For that a custom application is uploaded to the units, which reads the sensor, lights the LEDs and verifies if the button functions correctly.

    After that, the final application has been uploaded.

  • Programming the application

    Christoph Tack06/19/2018 at 19:25 0 comments

    Charlieplexing LEDs

    The Sparkfun library was taken as a start.  The memory footprint has been reduced.  Functionality has been added to operate the LED array in single LED mode.

    Temperature/humidity sensor

    The sensor powerline has been connected to a GPIO.  Experience with the Aiakos project learned me that it's the easiest way to save power when the sensor is not in use.

    The 100ohm series resistors in the SCL & SDA lines are needed to make in-circuit-programming possible.

    R7 together with C2 forms an RC-filter to stabilize the supply voltage for the temperature sensor.

    Supply voltage sensor

    The internal bandgap reference of the ATTINY is used here to measure the supply voltage.  If it's lower than 2.5V, the temperature & humidity LEDs will be on for a short time.  

    Sleep mode

    As it's a battery powered device that should have a long lifetime, most of the time is spent in sleep mode.  The deepest sleep mode is used, which results in a sleep current of close to 100nA for this device.

    Operating mode

    Showing temperature & humidity isn't very complicated.  A simple state machine takes care of the program flow.

  • Debug interface

    Christoph Tack06/10/2018 at 12:59 0 comments

    A simple debug interface is useful in any MCU project.  Unluckily, the ATtiny doesn't provide one by default.  

    Serial communication would be most suitable.  This communication however isn't very forgiving about large baudrate offsets.  As we're using the internal oscillator, which has quite some frequency tolerance by default, we should check this.

    The program "checkInternalRcOsc" outputs a close to 10KHz waveform on OC0A (pin 5).  Using a frequency counter, we can tune OSCCAL so that the output waveform frequency is closer to 10KHz.

    The default frequency on my device was 10.16KHz.  After tuning, it's 10.02KHz.  More than accurate enough for UART communication.

    The SoftwareSerial-library can be used to configure the unused pin 10 (PA3) as TX-output.

  • Bringing your board to life

    Christoph Tack06/08/2018 at 19:43 0 comments

    Software stack

    Why write all the code from scratch if we can make use of the well documented Arduino core?  There are libraries to read from I²C devices, libraries for serial communication, timer libraries, ...

    The ATTINY series has been added to the list of supported devices.  You can find the github repository here.  Follow the instructions to install the library.

    Details about the ATTINY84 Arduino implementation (pin mappings etc.) can be found here.  Remark that the "clockwise pin mapping" is used.

    Blinky

    What "Hello world" is to software, is "Blinky" to firmware.  Let's get started:

    • Open Arduino IDE
    • Copy the following code to the IDE
      const byte LED_PIN=10;
      
      // the setup function runs once when you press reset or power the board
      void setup() {
        // initialize digital pin LED_BUILTIN as an output.
        pinMode(LED_PIN, OUTPUT);
      }
      
      // the loop function runs over and over again forever
      void loop() {
        digitalWrite(LED_PIN, HIGH);   // turn the LED on (HIGH is the voltage level)
        delay(1000);                       // wait for a second
        digitalWrite(LED_PIN, LOW);    // turn the LED off by making the voltage LOW
        delay(1000);                       // wait for a second
      }
    •  Select the correct board
      • Board: "ATtiny24/44/84"
      • Pin Mapping: Clockwise (like damellis core)
      • Chip: "ATtiny84"
      • Clock: "8MHz (internal)"
      • Save EEPROM: "EEPROM retained"
      • LTO : "disabled"
      • BOD : "BOD disabled"
      • Programmer : Select your programmer, "AVRISP MkII" in my case
    • "Burn Bootloader" to program the fuse settings
    • Upload your code

  • T & RH sensor

    Christoph Tack06/03/2018 at 20:02 0 comments

    Temperature & relative humidity are key factors for climate control.  That temperature is important, is evident, but how does relative humidity influence people's comfort in a room?  Let's give an example: While increasing the relative humidity and keeping the temperature constant, most people will perceive this as "it's getting hotter".  This is due to the fact that the human sweat, to cool the body, evaporates less easily when the relative humidity increases.  As a result, the human body doesn't cool so efficiently and people will feel hot.

    Relative humidity

    Extensive research has been done in the past to determine what temperature and relative humidity values people feel as comfortable.  According to Wikipedia, relative humidity values should be between 50 & 60% ideally.  30-70% is acceptable.

    Temperature

    Wikipedia has an article related to room temperature: "The World Health Organisation's standard for comfortable warmth is 18 °C (64 °F) for normal, healthy adults who are appropriately dressed."  To be honest, that's rather cold, so it will be shown in red on this gadget.  The maximum temperature is determined by the number of LEDs available.

    Sensor

    In this project the SI7021 will be used as I had plenty of these lying around.  If you're interested in a comparison of RH&T-sensors.  You can have a look here.

    Firmware

    The SI7021 has been implemented and tested on a STM32F103 Nucleo for ease of debugging.

  • Programming connector

    Christoph Tack05/31/2018 at 20:08 0 comments

    Choice

    There was a need for a programming connection to the devices.  The REDFIT IDC SKEDD has been chosen to that purpose.

    • It can be attached to the existing AVRISP MkII programmer
    • It's easy to attach & detach during debugging and "production"-programming.
    • It doesn't need a mating connector on the devices.  So it saves the cost of a connector on every device.

    Alternatives are : using push pogo-pins (which need some custom fixture), or using edge mounted DB9-connectors, which don't provide reliable connections.

    Mounting to the IDC

    To mount the SKEDD to the IDC, special tooling is "needed".  A cheaper way of mounting these connectors goes as follows:

    • Open the SKEDD and slide the IDC cable through
    • Make a stack of three devices (such as this konijntje-thermo-humi) and align them.
    • Mount the SKEDD connector on top of the stack of PCBs.  By using three PCBs, the plastic alignment pins of the SKEDD will no longer protrude on bottom side.  
    • Squeeze the SKEDD with the PCB-stack on a mini vise.
    • Use a multimeter to check the electrical connections of your mounted SKEDD connector to the IDC cable.
    Mounted SKEDD
    AVRISP MkII with mounted SKEDD connector