Sunday, 7 August 2016

JOTA 2016 Bike Light.

The project this year is a bike light.

The project uses previously purchased bezels,

The original circuit was a transistor oscillator driving 3 LEDs from a 9v Battery.

Like all things, I can resist making the programmable.

The 2016 version uses an ATTiny85 microprocessor based module based on a Digispark variant,
http://digistump.com/products/1

It contains 4 ultrabright red LEDs. The flashing of the LEDs is programmed on the microcontroller.

The JOTA version is from http://www.banggood.com/ATTINY85-Mini-Usb-MCU-Development-Board-For-Arduino-p-971122.html

This board is not shipped with a boot loader. A programing board with pogo pins will be used to pre-program each board with the correct firmware and fuse settings.

The hex file which contains the USB boot loader and the bike light program can be downloaded from here.

Fuse settings are:  efuse:0xfe hfuse:0x5f lfuse:0xf1
These settings disable the reset pin functionality in order to obtain 4 outputs for the LEDs

The Arduino programing environment, along with the digispark hardware add-on to the IDE is used to program the device.

This link has instructions for setting up the development environment.
 https://digistump.com/wiki/digispark/tutorials/connecting

There are additional unused holes on the PCB to accommodate different style ATTiny85 modules available. Care needs to be taken during assembly to use the correct holes for the modules purchased.

There is also a row of 4 holes providing the option of adding a grove style header for additional inputs and outputs.






Source Code: (Draft) To have morse added for JOTA weekend.

#define LED1 0
#define LED2 1
#define LED3 2
#define LED4 5

// Digispark ATTiny85


void setup() {
  // put your setup code here, to run once:
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  flash(LED1, 500);
  flash(LED2, 500);
  flash(LED3, 500);
  flash(LED4, 500);

  flicker(LED1, 100, 4);
  flicker(LED2, 100, 4);
  flicker(LED3, 100, 4);
  flicker(LED4, 100, 4);

}

void flash(int pin, int wait)
{
  digitalWrite(pin, HIGH);
  delay(wait);
  digitalWrite(pin, LOW);
}

void flicker(int pin, int wait, int times)
{
  int i;
  for (i = 0; i <= times; i++) {
    digitalWrite(pin, HIGH);
    delay(wait);
    digitalWrite(pin, LOW);
    delay(wait);
  }
}



Post a Comment