The instructions I have posted here are pretty much the same as instructions given by the incredibly awesome High-Low Tech Tutorial. I posted my version of the instructions here because I plan to make a couple of upcoming projects using ATtiny chips and figured I would show my process.
Remove these ads by
Signing UpStep 1: Go get stuff
- Arduino
- Breadboard
- ATtiny85 (or ATtiny45)
- 10uF 16V electrolytic capacitor
- 220ohm 1/4 watt resistor
- LED
- solid core hookup wire












































Visit Our Store »
Go Pro Today »




// Must include for servos to work
#include
// Elements is the amount of numbers you want to dedicate to the running average
// Increase the number for a slower reaction
#define elements 5
// Variables for loops
int i = 0;
int j = 0;
// The Analog Pins - C:Centre R:Right L:Left U:Up
int pinC = 1;
int pinR = 2;
int pinL = 3;
int pinU = 7;
// Variables to store the data from the photo-resisitors
int analogValueC;
int analogValueL;
int analogValueR;
int analogValueU;
// The change in position from the last reading
float posX = 0;
float posY = 0;
// The running average readings
// - Each element is made up of the difference between opposite photorestors
int x[elements], y[elements];
// Servos - X is rotation/spin, Y is the tilt servo
Servo servoX;
Servo servoY;
// Common servo setup values
int minPulse = 600; // minimum servo position, us (microseconds)
int maxPulse = 2400; // maximum servo position, us
void setup() {
// Turn on the pins, program doesn't work without it *shrug*
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
delay (200);
// Attach each Servo object to a digital pwm pin
servoY.attach(6, minPulse, maxPulse);
servoX.attach(5, minPulse, maxPulse);
delay(200);
// Sanity check!
servoX.write(90);
servoY.write(90);
// Start all the running average values to zero
for(i=0;i x[i] = 0;
y[i] = 0;
}
// Serial - good for troubleshooting
Serial.begin(9600);
delay(200);
}
void loop() {
// This will help to balance the values so the sun tracker doesn't Jump around
// during high contrast situations
int normal = (analogRead(pinC)/50);
// Read the photorestors
analogValueC = (analogRead(pinC)/normal);
analogValueL = (analogRead(pinL)/normal);
analogValueR = (analogRead(pinR)/normal);
analogValueU = (analogRead(pinU)/normal);
analogValueD = (analogRead(pinD)/normal);
// Check if the Centre photorestor is the brightest, if it is then set the change to zero
if((analogValueC <= analogValueL)||(analogValueC <= analogValueR)){
// Value is positive: go right, negative: go left
x[i] = analogValueR - analogValueL;
} else {
x[i] = 0;
}
if((analogValueC <= analogValueU)||(analogValueC <= analogValueD)){
y[i] = analogValueU - analogValueD;
} else {
y[i] = 0;
}
// The change in position is the average of all the elements
int totalX = 0;
int totalY = 0;
for(j=0;j totalX+=x[j];
totalY+=y[j];
}
posX = totalX/elements;
posY = totalY/elements;
// Send the values through the serial when it has gone through all the elements
if(i==0)avgDisplay();
//if(i==0)rtDisplay();
// Change the position of the tracker towards the light
simpleChangePos();
// Increment I through 0 to number of elements
i++;
i = i%elements;
delay(301);
}
// Class will display a cross on the serial monitor showing real time values of the resistors
void rtDisplay(){
Serial.print(" ");
Serial.println(analogValueU);
Serial.println(" /\\");
Serial.print(analogValueL);
Serial.print(" <= ");
Serial.print(analogValueC);
Serial.print(" => ");
Serial.println(analogValueR);
Serial.println(" \\/");
Serial.print(" ");
Serial.println(analogValueD);
Serial.println();
Serial.println();
}
// Class will display the change in position
void avgDisplay(){
Serial.print(" ");
if(posY>0){
Serial.println(posY);
Serial.println(servoY.read());
} else {
Serial.println(" ");
}
Serial.println(" /\\");
if(posX>0){
Serial.print(posX);
Serial.println(servoX.read());
} else {
Serial.print(" ");
}
Serial.print(" <= ");
if((posX==0)&&(posY==0)){
Serial.print("C");
} else {
Serial.print(" - ");
}
Serial.print(" => ");
if(posX<0){
Serial.println(-posX);
Serial.println(servoX.read());
} else {
Serial.println(" ");
}
Serial.println(" \\/");
Serial.print(" ");
if(posY<0){
Serial.println(-posY);
Serial.println(servoY.read());
} else {
Serial.println(" ");
}
Serial.println();
Serial.println();
}
// Named so, because I am planning on making a more complicated verson
void simpleChangePos(){
// Variables to store the current position of the servos
int readX = servoX.read();
int readY = servoY.read();
// If there is a change:
if(posX!=0){
// If the servo is going to change position past its range of motion
if((readX+posX)>180){
if(readX!=180){
servoX.write(180);
}
} else if((readX+posX)<0){
if(readX!=0){
servoX.write(0);
}
} else {
// If the change is a non-zero and not past the servo's limit, change the position
servoX.write((readX+posX));
}
delay(15);
}
if(posY!=0){
if((readY+posY)>180){
if(readY!=180){
servoY.write(180);
}
} else if((readY+posY)<0){
if(readY!=0){
servoY.write(0);
}
} else {
servoY.write((readY+posY));
}
delay(15);
}
}
If anyone got any ideas how to solve it pls let me know : )
Can you program one to blink an LED? If so, the problem is probably with some of the commands you are calling (presumably the servo code). You will need to figure out some alternative way of writing the code, or to modify the library to work with the chip.
Check it out:
https://www.youtube.com/watch?v=DebJ1s5I3QM
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
When I connect the LED, nothin. :-(
I have ATTINY85-20PU
Arduino UNO R3
Board is set to ATTINY 85 (external 20 MHz Clock)
Programmer as Arduino as ISP
Tried Upload and Upload using Programmer
I was able to get the Burn Bootloader to run once with the proper error messages. Nothing else seems to be going as it should.
Binary sketch size: 834 bytes (of a 8,192 byte maximum)
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
And sorry if my english is not very good.
Tried to do this with Mega 2560 board and Attiny85v-10pu via ICSP pins (wired correct- double cheked!). Using Arduino 1.0.3 softw. and ATtiny master.zip (hosted by GitHub).
But got this when I click to burn the bootloader:
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85 avrdude: Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check.
When trying upload Blink sketch, got the same message. :(
Please help!
This looked like such a cool project. But I am running into an issue that I can't figure out. I get the expected error once and then it says:
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
When I connect the LED, nothin. :-(
I tried a different ATTiny85 and get the same thing. I have checked and rechecked the connections three times.
1) Each time you unplug the USB, when you re-connect the USB/Arduino back into your PC, FIRST remove the capacitor...
2) once the computer recognizes the Arduino (2-seconds wait) then replace the capacitor.
3) this was a problem once but then it didn't reoccur...kinda glitchy ;( maybe just my janky setup.
I'm running Windows, Duemilanove to ATTiny85. I got it to work on 1.03 and 1.01. THANKS for this lovely tutorial!! so many projects to do now...
Also, can anyone tell me why the SPI library does not work on Attiny?... I found some code on gethub to get around this but... Can anyone point me to a good reference material for programming that might answer these strange truths that I am oblivious to. My background is Mechanical Engineering and Arduino.
thank yoU!
marC:)
I have:
Windows 7
Arduino1.0.1
an Arduino UNO REV 2
and I want to use a "standard" ATtiny45(no v)
What htz do a pic
Maybe there is a hardware solution or some sort of hack. I don't really know enough about these LCDs to help you.
http://www.instructables.com/id/Hookup-a-16-pin-HD44780-LCD-to-an-Arduino-in-6-sec/
I've tried everything to get this to work. I've tried both arduino 1.0 and 022 along with a capacitor and not, nothing ever works and I always get this when I click
to burn the bootloader:
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
Then I get this every time I go to upload sketch:
avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x64
avrdude: stk500_cmd(): protocol error
hope this helps,
Jacob
I am not certain why you are getting the second error. From my experience I have found that many ATTiny cores may not work with Arduino 1.0.
What version Arduino are you using?
http://search.digikey.com/scripts/dksearch/dksus.dll?KeywordSearch&site=US&keywords=ATTINY85V-10PU-ND
Did you change the pin numbers from 13 to 0 in the blink example?
I wonder if my chip is just bad but that seems unlikely.
I have tried it with and without the capacitor and both ended with the result above.
Thanks for any help