Friday, August 2, 2013

Burning bootloader - Part 2

Well, I had some problems recording the UNO bootloader on the first experiences, and got stuck with 2 chips "bricked", now that I have some spare time, got back to them and found a shield/guide of how auto-recording the chips, and how to recover them, the code is here and the way to connect the pins of the chip which you want to burn, are here:
  • Pin 1 to digital 10 - Blue 
  • Pin 7 to 5V - Red 
  • Pin 8 to Ground - Black 
  • Pin 9 to digital 9 - Gray 
  • Pin 17 to digital 11 - Brown 
  • Pin 18 to digital 12 - Orange 
  • Pin 19 to digital 13 - Yellow 
  • Pin 20 to +5V - Red 
  • Pin 22 to Ground - Black 
The configuration is an arduino board and a breadboard with the chip which needs to be recorded/the "bricked" one. After connecting the pins to the second board (as described) you should upload the code to the arduino, select:
"Tools-> Programmer->Arduino as ISP"
 and "Tools->Board->Arduino Uno" proceed as in the picture:
It worked for me and I "unbricked" the chips, you can see the entire article here.
This procedure will work on ATmega328P-PU and ATmega328P-PN, for the ATmega328-PU you will have to use the following workaround:
Workaround for ATmega328-PU:
 
In your Arduino folder, find the subfolder: ..\hardware\tools\avr\etc
Make a backup copy of the file: avrdude.conf
  1. Open the file avrdude.conf in a text editor
  2. Search for: 0x1e 0x95 0x0F (this is the ATmega328P signature)
  3. Replace it with: 0x1e 0x95 0x14 (this is the ATmega328 signature)
  4. Save the file 
  5. Proceed as described previously 
  6. Restore the avrdude.conf to it's original settings

The standalone project is here, hope someday to have time and € to do one, for myself!

Update on the 12 February 2015: Gave up on standalone project, because it does not use the optiboot code and does not work very well, or not at all. I will build a shield to burn the UNO's using things explained within this article. Also updated the code link to a 2011 routine, instead of the 2009.
Update on the 13 February 2015: Gave up of the updated 2011 routine, didn't work for the ATmega328P-PN, back to the fine 2009.

Monday, July 1, 2013

Soil moist monitor/manager and logger!

The 'what if' problem...
This project started with a LED, a moist probe and an arduino. Then I thought "what if" adding another probe? After that, "what if" adding an SD shield to log the values? 
When done, "what if"... You understand what I mean, I'm sure. 


So this ended up in a complex system as described:


- 3 Moisture probes, (max) which can be grounded (with a jumper or so) this way you can use from 1 to 3 probes as you need them. (as the one you can see in the picture)

- 3 Solenoid outputs, which will set up the watering of each probe plant (solenoid 1 will open if soil moisture probe 1 alerts for a thirsty plant.)
- 1 Digital thermometer, to log temperature.
- 1 LED.
- 1 Press button.
- 1 RTC (pointless to have a logger without date/time).
- 1 SD shield and card to retain system data.
- 1 arduino board or a DIY arduino board.
My self made board design can be viewed in the picture:
 Now, the most important, how does all this works?
You use as many probes as you want, with a maximum of 3, and connect all the devices, the system boots up, and the led will give you information about the moist:
- 2 blinks - too wet... :(
- 1 blink - GREAT! 
- Fading - too dry.

In the last state, the output pin for the solenoid will turn HIGH and open a TIP120 or a relay circuit (not done yet) to open the solenoid and then water the plant.
The time of each reading is 15 minutes, which changes to 2 minutes when a plant is dry and the solenoid opens, to assure a more accurate watering.
There is also a press button for knowing the water needs at any time, once pressed, 1 second or so later the LED gives you the information needed, not written to console nor SD card.
The logger has a format like this:

Initializing SD card... Warming up!! Starting!!!
Date    Time    Temperature    Pb1    Pb2    Pb3    V1    V2    V3    Ws1    Ws2    Ws3
2013-07-01    20:41:59    24.50    81.64    76.27    76.56     4.08     3.81     3.83    0    0    0   

 
It can be worked out in a spreadsheet or any program that deals with this kind of data, (separated by tabs). A file is created EACH month with a name like "201306.csv" which stands for the year and the month. V1, 2 and 3 are the voltage values read by arduino and Ws1, 2 and 3 are the watering status, a boolean value which is 0 or 1 depending of the watering status, 1 when watering.
I hope You enjoy this, (as I wrote, I have many flavors of this, with several combinations) now go monitor your plants, mine have never been so pretty since I started this, and though I don't have the solenoids working, the LED indications are usefull enough to get them awesome!
The code.The prototype configuration on the picture:
Used this SD library and this RTC library.      

Thursday, May 9, 2013

Burning an arduino bootloader (optiboot)

I got a few samples from Maxim (thank you Maxim) but they came "clean" without the optiboot or anything like that, so I had to burn it down. I used the minimal circuit which can be found on the picture on the right, and here is the procedure:
To burn the bootloader, follow these steps:
  1. Download this hardware configuration archive: Breadboard.zip
  2. Download the latest Optiboot library. 
  3. Create a "hardware" sub-folder in your Arduino sketchbook folder (whose location you can find in the Arduino preferences dialog). If you've previously installed support for additional hardware configuration, you may already have a "hardware" folder in your sketchbook.
  4. Move the "breadboard" folder from the zip archive to the "hardware" sub-folder of your Arduino sketchbook. If you don't have a "breadboard" folder there, create one, an put the file in it.
  5. Restart the Arduino software.
  6. You should see "ATmega328 on a breadboard (8 MHz internal clock)" in the Tools > Board menu.
  7. Upload the ArduinoISP sketch onto your Arduino board. (You'll need to select the board and serial port from the Tools menu that correspond to your board.)You'll find this under "examples".
  8. Wire up the Arduino board and micro-controller as shown in the diagram to the right.
  9. Select "ATmega328 on a breadboard (8 MHz internal clock)" from the Tools > Board menu. 
  10. Under  the optiboot directory, execute the command avrdude -P /dev/ttyACM0 -b 19200 -c avrisp -p m328p -u -U flash:w:"optiboot_atmega328.hex" :i -F
  11. After finished, use: avrdude -p atmega328P -c avrisp -P /dev/ttyACM0 -b 19200 -u -U efuse:w:0x05:m -U hfuse:w:0xDA:m -U lfuse:w:0xFF:m -U lock:w:0x0F:m -F
    otherwise the boot will be recorded/burned, but the chip will not accept uploads.


For ATmega328-PU:
If you try to bootload an ATmega328-PU, you’ll get a message something along the lines of:
avrdude: Device signature = 0x1e9514
avrdude: Expected signature for ATMEGA328P is 1E 95 0F
Double check chip, or use -F to override this check.

You could also get a more colourful version:
avrdude: Yikes! Invalid device signature.

The way to work around this is to “trick” the IDE into believing your 328-PU is in fact a 328P-PU. Disclaimer: I have tested this myself and it works – no guarantees however that you won’t have unforeseen consequences.

Workaround:
In your Arduino folder, find the subfolder: ..\hardware\tools\avr\etc
Make a backup copy of the file: avrdude.conf
  1. Open the file avrdude.conf in a text editor
  2. Search for: 0x1e 0x95 0x0F (this is the ATmega328P signature)
  3. Replace it with: 0x1e 0x95 0x14 (this is the ATmega328 signature)
  4. Save the file 
  5. Proceed as described previously (and use lock:w:0x0F:m)
  6. Restore the avrdude.conf to it's original settings
Good Luck!! Good burnings!

Wednesday, May 8, 2013

RTC shield, I²C, Arduino compatible, DIY

Hi! I'm back, again with arduino and a new shield, once more a DIY shield. 
So, let's start! The picture on the right is the circuit used to build the shield (I want to thank my friend Nuno Portela, who grabed this, and converted to eagle schematic, printing and driling the circuit afterwards).
The schematic on the left is the proposed circuit, which was then printed. All the components are easy to find, so the final result is almost inexpensive.
I've attached also a picture of the final result, 2 boards with cr2032 button cells. 
Concerning the code, I couldn't find where I got mine, so I'm posting it here.
Enjoy!

Saturday, April 27, 2013

Arduino DIY SD shield

Well... I got tired of having the arduino connected to the PC to have a logger, so did some search and ended up with this shield, it uses a micro SD card to SD converter, which is soldered to the board as you can see on picture, the components are easy to find, and they are used to low down voltage from the arduino pins (5V) to something near the 3.3V which is the correct voltage of the SD card. The red cross in the picture means you have to interrupt the circuit on those points, otherwise you would be short-circuiting the resistor. The numbers on the right (10,11,GND,3.3V,13,X,12) are the pins in the arduino board, 3.3V and GND I suppose you know what that means, and X is not connected and is used to align the plug, avoiding upside-down connections.
You can see on the left the final look, without the microSD card adapter:
And on the right side, the final look, already with the adapter soldered.

Enjoy!

 



Spoiler alert: DO NOT try to connect the card directly to arduino pins, without this voltage divider, you will damage the card!

Based on this shematic.

Test file here and another one here.

Monday, February 18, 2013

Virtual candle (candleuíno) with arduino

Hello! I'm back, after a (more) troubled life period, but still here.
This time I developed something more romantic, something I was looking for a long time now.
What you will need:
  • Arduino
  • A led (clear orange or clear yellow)
  • Resistor for the LED (220 Ohm would be fine)
  • An LDR
  • Resistor for the LDR (10kOhm or 1kOhm would be fine, depends the darkness you want to be triggered)
  • Hot glue stick
  • Paper
  • A wooden box
First you connect the led and resistor as you can see in the picture, you may use any digital pin as long as you change the code to output to it BUT it must be a PWM compatible pin. 
Then you do the same with the LDR, as in the picture, using Analog 0.
Now you have to take care of the LED, it must produce a diffuse light, or it wil be worthless.
So, I used a stick of glue, cut it in about 1 cm, made a hole in it to fit the LED, and inserted it as you can see in the picture below.

I made the circuit and then uploaded to an arduino and hardwired it into a box. The resulting effect is the one in the video. Candle Vídeo
The original project can be found on this page, is slightly different from mine, but it's where I took most of the idea: ledhacker 
Now a picture of the final result:
 









And finally the code.