Thursday, June 27, 2019
This blog has moved...
Go to http://www.thetoadoftruth.net/blog/ for more blaming of propellerheads....
Tuesday, January 15, 2019
Arduinos and SD cards
If you require an SD card interface for your Arduino project I highly recommend purchasing an Arduino with one built-in. It took three attempts to get an SD card interface added to my basic Arduino Mega:
- A very cheap generic (“LC Studio”) break out module that seemed to work intermittently at best;
- A cheap shield (linksprite SD Card Shield v1.0b) - not compatible with the Mega (it does not state this on the packaging but if you search the documentation on their website it clearly states this, I should have done my research first);
- And finally, a not so cheap Ethernet plus SD card shield (Freetronics) that worked without a hitch.
Saturday, January 05, 2019
2019 Birding Targets (updated)
In no particular order, my 2019 targets are:
- Wedge-tailed Shearwater (unsure how I have avoided this one)
- Sooty Tern
Eurasian Curlew (simply because there is one nearby)Sanderling- Malleefowl
- Black-eared Cuckoo
- Southern Scrub-robin
- Gilbert’s Whistler
- Australian Owlet-nightjar
- Australian Little Bittern (Herdsman Lake looking good)
- Barn Swallow (suspect I will need to upgrade my ID skills a bit for this)
- Shy Heathwren
- Rufous Fieldwren
Thursday, January 03, 2019
2019 Birding Targets
- Wedge-tailed Shearwater (unsure how I have avoided this one)
- Eurasian Curlew (simply because there is one nearby)
- Sanderling
- Malleefowl
- Black-eared Cuckoo
- Southern Scrub-robin
- Gilbert’s Whistler
Wednesday, January 02, 2019
New Year, New Kit
I’ve finally updated my iPad from an original iPad Mini (64GB) to a new iPad 6th Generation (128GB). The old iPad Mini was struggling with software updates and would not run the latest iOS. I’ve paired the new iPad with a Logitech Slim Folio iPad Keyboard Case.
This blog post was created on the new kit. I’ll post updates and reviews as I go.
This blog post was created on the new kit. I’ll post updates and reviews as I go.
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.
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);
}
// 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);
}
// 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
#include
#include
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);
}
Saturday, May 05, 2018
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
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...
Wednesday, August 16, 2017
Mini Punch-List
Current list of things to sort on my 1975 Mini Clubman:
- Speedometer - currently not working, have a second 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.
Sunday, June 25, 2017
Planes I have flown in (updated to include Saab 340)
- Fokker 100 (Alliance Airlines, Network Aviation);
- Boeing 737-400 (Qantas/QantasLink);
- Boeing 737-800 (Qantas, Virgin Australia);
- British Aerospace 146 (QantasLink);
- Boeing 717-200 (QantasLink);
- Embraer E-Jets E-190 (Virgin Australia);
- Embraer EMB 120 Brasilia (Network Aviation);
- Fokker F70LR (Network Aviation);
- Airbus A320 (Virgin Australia);
- Saab 340 (Regional Express Airlines).
Subscribe to:
Posts (Atom)





