Friday, December 21, 2018

Finch Update


Breeding season so far:
  • 3 x Red-billed Firefinches (suspect 1 male and 2 females);
  • 6 x Double-barred Finches (at least);
  • 3 x Painted Finches;
  • Plus the usual assortment of Zebra Finches.

Thursday, September 13, 2018

Rebble?

Just found this:

http://rebble.io

Is there life left in my Pebble smartwatches still?

Edit: Maybe not.  Sadly, the hardware seems to be failing.  I'm seeing lots of intermittent issues with the LCD screen.

Sunday, August 26, 2018

[Part 7] Arduino Data Logger

// ------------------------------------------------------------------------------------------------------------------------------------------------
// Project:   DataLogger
// Version:   0.4
// Date:      26 August 2018
// Author:    Greg Howell <gjhmac@gmail.com>
// ------------------------------------------------------------------------------------------------------------------------------------------------
// Version    Date              Comments
// 0.4        26 August 2018    Modified code to only log to the SD card if the new value is different to the old value
// 0.3        30 June 2018      Added debugging and diagnostics on serial port, sped up ADC for analogue read (128kHz -> 1MHz), fixed "A REF"
// 0.2        26 April 2018     Addition of switch to enable/disable logging to SD card and LED to indicate logging status
// 0.1        17 February 2018  Initial Development
//
// ------------------------------------------------------------------------------------------------------------------------------------------------
// Description:
//  - Logs analog0 value to a text file on the SD card along with date/time stamp in CSV format
//  - Maintains date/time via DS1302 Real Time Clock
//  - Builds with Arduino 1.8.5
// ------------------------------------------------------------------------------------------------------------------------------------------------

// #includes
#include <SPI.h>    // Serial Peripheral Interface
#include <SD.h>     // SD Cards
#include <DS1302.h> // DS1302 RTC

const int chipSelect = 4;
const int buttonPin = 5;  // Pin 5 is the button to enable/disable logging (digital input)
const int ledPin =  6;    // Pin 6 is the LED indicate logging status (digital output)

const byte PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
const byte PS_16 = (1 << ADPS2);

int buttonState = 0;      // initialise button state to off
int oldsensor;            // variable to store the previous sensor value (used in loop())

// Init the DS1302
// Pin 2 = RST
// Pin 3 = DAT
// Pin 4 = CLK
DS1302 rtc(2, 3, 4);
// ------------------------------------------------------------------------------------------------------------------------------------------------
// setup()
// ------------------------------------------------------------------------------------------------------------------------------------------------
void setup() {

  ADCSRA &= ~PS_128;  // remove prescale of 128
  ADCSRA |= PS_16;    // add prescale of 16 (1MHz)

  analogReference(EXTERNAL);  // Analogue reference set to "A REF" pin

  pinMode(buttonPin, INPUT);  // Initialize the pushbutton pin as an input
  pinMode(ledPin, OUTPUT);    // Initialize the LED pin as an output

  rtc.halt(false);            // Set the clock to run-mode
  rtc.writeProtect(false);    // and disable the write protection

  Serial.begin(9600);

  // Use following lines once to set clock if battery fails (modify to suit)
  //rtc.setDOW(SUNDAY); // Set Day-of-Week to FRIDAY
  //rtc.setTime(21, 50, 0); // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(26, 8, 2018); // Set the date to August 6th, 2010

  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // Print current system date from RTC at start up
  Serial.print("System date: ");
  Serial.println(String(rtc.getDateStr()) + "," + String(rtc.getTimeStr()));

  Serial.print("Initializing SD card...");

  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    while (1);
  }
  Serial.println("card initialized.");
}
// ------------------------------------------------------------------------------------------------------------------------------------------------
// loop()
// ------------------------------------------------------------------------------------------------------------------------------------------------
void loop() {
  String dataString = "";                 // make a string for assembling the data to log
  int sensor = analogRead(A0);            // read analogue
  dataString += String(sensor);           // construct string with analogue signal
  buttonState = digitalRead(buttonPin);   // read button state

  // Logging enabled
  if (buttonState == HIGH) {
    File dataFile = SD.open("datalog.txt", FILE_WRITE);

    // if the file is available, write to it
    if (dataFile) {

      // if the new data is different to the old data write it to file
      if (sensor != oldsensor) {
        // Write data to serial output
        Serial.println(String(rtc.getDateStr()) + "," + String(rtc.getTimeStr()) + "," + dataString);
        Serial.println(String(sensor) + "," + String(oldsensor));
        // Write data to SD card
        dataFile.println(String(rtc.getDateStr()) + "," + String(rtc.getTimeStr()) + "," + dataString);
        dataFile.close();
      }
      else {
        dataFile.close();
      }
    // set logging LED to high
    digitalWrite(ledPin, HIGH);
  }
  // if the file isn't open, print an error
  else {
    digitalWrite(ledPin, LOW);
    Serial.println("error opening datalog.txt");
  }
}
  // Logging disabled
  else {
    // set logging LED to low
    digitalWrite(ledPin, LOW);
  }
  // set the old sensor value to the current sensor value (read at top of loop())
  oldsensor = sensor;
  // Wait before repeating :)
  delay (500);
}

Saturday, July 07, 2018

[Part 6] Arduino Data Logger

// ------------------------------------------------------------------------------------------------------------------------------------------------
// Project:   DataLogger
// Version:   0.3
// Date:      30 June 2018
// Author:    Greg Howell
// ------------------------------------------------------------------------------------------------------------------------------------------------
// Version    Date              Comments
// 0.3        30 June 2018      Added debugging and diagnostics on serial port, sped up ADC for analogue read (128kHz -> 1MHz), fixed "A REF"
// 0.2        26 April 2018     Addition of switch to enable/disable logging to SD card and LED to indicate logging status
// 0.1        17 February 2018  Initial Development
//
// ------------------------------------------------------------------------------------------------------------------------------------------------
// Description:
//  - Logs analog0 value to a text file on the SD card along with date/time stamp in CSV format
//  - Maintains date/time via DS1302 Real Time Clock
//  - Builds with Arduino 1.8.5
// ------------------------------------------------------------------------------------------------------------------------------------------------

// #includes
#include    // Serial Peripheral Interface
#include     // SD Cards
#include // DS1302 RTC

const int chipSelect = 4;
const int buttonPin = 5;  // Pin 5 is the button to enable/disable logging (digital input)
const int ledPin =  6;    // Pin 6 is the LED indicate logging status (digital output)

const byte PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
const byte PS_16 = (1 << ADPS2);

int buttonState = 0;      // initialise button state to off

// Init the DS1302
// Pin 2 = RST
// Pin 3 = DAT
// Pin 4 = CLK
DS1302 rtc(2, 3, 4);
// ------------------------------------------------------------------------------------------------------------------------------------------------
// setup()
// ------------------------------------------------------------------------------------------------------------------------------------------------
void setup() {
  
  ADCSRA &= ~PS_128;  // remove prescale of 128
  ADCSRA |= PS_16;    // add prescale of 16 (1MHz)

  analogReference(EXTERNAL);  // Analogue reference set to "A REF" pin
  
  pinMode(buttonPin, INPUT);  // Initialize the pushbutton pin as an input
  pinMode(ledPin, OUTPUT);    // Initialize the LED pin as an output

  rtc.halt(false);            // Set the clock to run-mode
  rtc.writeProtect(false);    // and disable the write protection

  Serial.begin(9600);

  // Use following lines once to set clock if battery fails (modify to suit)
  //rtc.setDOW(THURSDAY); // Set Day-of-Week to FRIDAY
  //rtc.setTime(15, 50, 0); // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(26, 4, 2018); // Set the date to August 6th, 2010

  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // Print current system date from RTC at start up
  Serial.print("System date: ");
  Serial.println(String(rtc.getDateStr()) + "," + String(rtc.getTimeStr()));

  Serial.print("Initializing SD card...");

  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    while (1);
  }
  Serial.println("card initialized.");
}
// ------------------------------------------------------------------------------------------------------------------------------------------------
// loop()
// ------------------------------------------------------------------------------------------------------------------------------------------------
void loop() {
  String dataString = "";                 // make a string for assembling the data to log
  int sensor = analogRead(A0);            // read analogue
  dataString += String(sensor);           // construct string with analogue signal
  buttonState = digitalRead(buttonPin);   // read button state

  // Logging enabled
  if (buttonState == HIGH) {
    File dataFile = SD.open("datalog.txt", FILE_WRITE);

    // if the file is available, write to it:
    if (dataFile) {
      // Write data to serial output
      Serial.println(String(rtc.getDateStr()) + "," + String(rtc.getTimeStr()) + "," + dataString);
      // Write data to SD card
      dataFile.println(String(rtc.getDateStr()) + "," + String(rtc.getTimeStr()) + "," + dataString);
      dataFile.close();
      digitalWrite(ledPin, HIGH);
    }
    // if the file isn't open, pop up an error:
    else {
      digitalWrite(ledPin, LOW);
      Serial.println("error opening datalog.txt");
    }
  }
  // Logging disabled
  else {
    digitalWrite(ledPin, LOW);
  }

  // Wait before repeating :)
  delay (200);
}

[Part 5] Arduino Data Logger

Connected "A REF" pin to 5VDC power supply.



[Part 4] Arduino Data Logger

Now with added 500mA fuse.


Saturday, April 28, 2018

[Part 2] Arduino Data Logger


  • For the external plug pack I selected the POWERTRAN MB8968B from Altronics.  Input is 100-240VAC @ 50-60Hz/0.8A, output is 24VDC @ 1A.
  • To produce the 5VDC (from the 24VDC) for the Arduino I selected the Z6334 DC-DC Buck Module from Altronics.  Input is 3-40VDC, output 1.5-35VDC @ 3A maximum (adjusted to provide a 5VDC output).
  • To maintain the date and time while the logger is powered off I selected the DS1302 based Real Time Clock Module from Altronics.  Reports online indicate that the DS1302 chip can be unreliable (as opposed to the DS1307) but I have had no issues with the one I purchased.
  • The Arduino I selected was one I had already, the Freetronics EtherTen.  The on-board MicroSD slot was the main reason I decided to use this, I didn't require the Ethernet port.

Thursday, April 26, 2018

[Part 1] Arduino Data Logger

This is the first post in a series in which I'll document the development of an Arduino-based data logger. The requirements for this data logger are:
  • Data to be logged is a 4-20mA current loop signal (2-wire) from a sensor (using 4-20mA for analogue measurement is an industrial automation standard);
  • Sensor requires a 24VDC supply (I'll be using a 240VAC-to-24VDC transformer plug pack to provide the 24VDC so there will be no mains supply work required);
  • Whole system to be contained in a box that can be sealed up and made "weather-proof".

Saturday, January 27, 2018

Minitrix British N-Gauge Class 42 Warship

N206
Class 42 Warship (D82 "Hermes") Bo-Bo Diesel

Minitrix British N-Gauge Class 27

N204
Class 27 (D5379) Bo-Bo Diesel
N212
Class 27 (27014) Bo-Bo Diesel


Sunday, January 21, 2018

SM Bus Controller Driver for Lenovo ThinkPad X220i

If you are installing Windows on a Lenovo ThinkPad X220i and wondering (like me) why the Lenovo drivers don't seem to work for the SM Bus Controller, have a look at the following link.  In case you are wondering, the SM Controller is a motherboard chipset that monitors temperatures and voltages (SM = "System Management").

Saturday, January 20, 2018

Mini Punch-List (updated)

Current list of things to sort on my 1975 Mini Clubman:
  • Speedometer - currently not working, have a second one (and now a third one) but not much luck so far;
  • Windscreen wipers - currently not working, now have a working set in the shed to try;
  • Doors - rusty and in a state of disrepair, newer rust free doors require stripping, preparing, painting and fitting;
  • Numerous small body repairs - usual stuff for a 42 year old car.
  • Clutch hydraulics are non-functional...