A credit card sized Ethernet Arduino compatable controller board

Picture of A credit card sized Ethernet Arduino compatable controller board
I love the Arduino as a simple and accessible controller platform for many varied projects.  A few months ago, a purchased an Ethernet shield for my Arduino controller to work on some projects with a mate of mine - it was a massive hit - for the first time, I could control my projects remotely using simple software.

That got me thinking - The Arduino costs about $30AUD, and the Ethernet board cost about $30AUD as well.  That is a lot of money - Could I make a simple, dedicated remote controller for much cheaper?   Why Yes I could.   Could I make it the size of a credit card?  Why Yes - I could!!

This project is my simple Arduino compatible controller that has embedded Ethernet, and the capacity to drive some extra I/O lines for projects, such as a Remote thermometer, a Remotely accessible Fridge controller, and a Remote Humidity sensor.  I have to say from the start that I didn't write all of the software, my mate Mikal did that - but this instructable is about making your own controller board!

Lets start!
Remove these adsRemove these ads by Signing Up

Step 1: Here is the Schematic Diagram

Picture of Here is the Schematic Diagram
For the curious, this is the schematic diagram of my simple Ethernet board.

As you can see, there are a number of exposed header connectors that can be used to connect peripheral devices to.

The board is powered with a supply of between 7 and 12v.  It contains voltage regulators to provide +5v and +3.3v for the Ethernet controller.

There is also a 4 position DIP switch that can be used to allow programmed functions to be modified.  A failing of the standard Arduino Ethernet library is that the IP address for the board has to be set in code.   Using the DIP switch, a block of addresses can be selected from as required.  You can make 16 boards, and have each board automatically select a different address  based on the switch setting.  This is *really* handy when you have deployed 10 sensors around the house.  All you need to do is set a switch and then they are configured.

The pinouts of the I/O connectors are;

I/O1 - 1 - PD5  (Arduino Pin 5)
I/O1 - 2 - PD6  (Arduino Pin 6 +pullup to +5v) - Used to connect a DS1820 Temperature sensor.
I/O1 - 3 - PD7  (Arduino Pin 7)
I/O1 - 4 - PD8  (Arduino Pin 8)
I/O1 - 5 - GND
I/O2 - 1 - +5v
I/O2 - 2 - GND
I/O2 - 3 - PD4 (Arduino Pin 4)
I/O2 - 4 - PC0 (Arduino Analog 0)
I/O2 - 5 - PD3 (Arduino Pin 5)
I/O2 - 6 - PC1 (Arduino Analog 1)
I/O2 - 7 - PC2 (Arduino Analog 2)
I/O2 - 8 - PC3 (Arduino Analog 3)
I/O2 - 9 - PC4 (Arduino Analog 4)
I/O2 - 10 - PC5 (Arduino Analog 5)

Lucif3r9455 days ago

Interesting... I assume the atmega chip is just serving as an "arduino", and can be skipped if you want to attach this to an existing arduino?

julianiii1 year ago
Hello everybody . i'm trying to do the project but no sucess , can u help me ? i connected everything like in the schematic , i dont know how to trace where is my problem ,help me thnx.
drj113 (author)  julianiii1 year ago
What software are you using?
enc28j60 library . Should i conn the 74ls08 vcc and gnd. maybe is my rj45 problem ?
drj113 (author)  julianiii1 year ago
The VCC and Ground should be connected.

The Rj45 needs to have magnetics as well. Does yours?

hungrygeek drj1136 months ago
Could you explain why are the magnetics needed??
thnx for the help i had problem with rj45 and ferrite bead thnx i love this project thnx :):):):)
drj113 (author)  julianiii1 year ago
The ferite is not super important - it just reduces noise on the supply rail
Yes i cute a rj45 from an old ethershield and it works fine THNX
drj113 (author)  julianiii1 year ago
alv0018 months ago
With the Eagle 6 I try to open the Arduino-Ethernet.sch and Arduino-Ethernet.brd files from archyve, but fails ( Maybe you have a newer version of the files?
drj113 (author)  alv0018 months ago

Thanks for your message. All of my projects are developed in KiCad, not Eagle. I do not use Eagle, as it is not open source, nor is it free to use.

I do understand that they have a hobyist licence, but its size limitations are useless, and I sell products that I design with it anyway, so I can't use it even if I wanted to.

Acidjazz549 months ago
OP, great instructable and thank you. So I purchased the components over a year ago and finally got around to assembling the boards. The issue I'm having is I can't get the board to take the bootloader. I've followed the comments and have ensured that the board is the Duemilanove and I'm using w/Arduino as ISP but I'm still getting the following error.

avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

One thing I noticed is the FTDI cable I bought shows up as a USB serial com port, this is what I want correct? Any insight or troubleshooting ideas would be greatly appreciated.
So I just tried optiboot and get the same getsync() error but no protocol error.
So I got everything programmed. I ended up using the following instructions to burn the bootloader and it worked great. Now I'm just trying to get it on the network.
drj113 (author)  Acidjazz549 months ago
One possibility is that you may not have the Arduino bootloader installed in the chip.

Here is a link to a great page that describes whet you need to do:
Acidjazz54 drj1139 months ago
Thanks for the link. I got the bootloader on it now using an AVR dragon but I forgot to set my fuse bits etc. When it was done I tried uploading a basic sketch using the FTDI cable and still no luck. The board is at work so tomorrow I'm going to try setting the fuse bits, etc and see if I can then upload using the FTDI cable. I'll let you know what happens. Thanks again.
WebScript10 months ago
Sorry that I am writing new comment, but I can not reply beacuse I don´t see captcha. Can I use ATMega328P-PU or it does not matter what I will buy? (ATMega328, ATMega328P, ATMEGA328P-PU)
Thank you
drj113 (author)  WebScript10 months ago
The specific AtMega328 doesn't matter - you will have to be careful to reconfigure the Arduino IDE to be able to program it though as the devices have a diferent signature.

WebScript10 months ago
Is this suitable?
And this?
Thank you.
drj113 (author)  WebScript10 months ago
I believe so
Jeanot131411 months ago
Nice work!! Very inspiring.. I made some test on the same schematic and the Ping and a "Hello" on browser are working. But when i make a bigger HTML page, it hardly work. I replaced the ferrite by a wire.. do you think it can be the reason? Like small package like a PING succeed but bigger HTML don't?
nwo11 year ago
Hello! I'm super excited at this project, however is it possible for you to distribute the eagle file for this project? It would be great if you can kindly release it =]
prismspecs1 year ago
great guide. what was the total build cost for the ethernet board?
drj113 (author)  prismspecs1 year ago
When I wriote it, the board was cost effective to make, now I would just get a Raspberry PI.
Ilruz drj1131 year ago
If you are lucky enough to get one. I've ordered mine more than one month ago ... they said it was "in stock". Sigh.
drj113 (author)  Ilruz1 year ago
Yea, Shipping is a bit tricky, I have been waiting for two more for a while now. But the Pi is an amazing board.
jennitha1 year ago
Hi I have a question about how to program the arduino ethernet.
What software is needed and how to place the cable ftdi
ROADTECK1 year ago
Never mind, once I got on my mac it worked. thanx for the info!!
ROADTECK1 year ago
when i download this PDE file it turns out to be a tmp file that i cant read. Where is the code?im having trouble posting sensor data with my sketch and wanna see how u did it. Thanx so much for this instructable. ur the man
I did the project, and it works fine for about 1 min, and then it disconnects, I think the ferrite bead is the problem, could it be?
Great project btw! many thx!!
drj113 (author)  troyka_44841 year ago

Thats cool - but frustrating that your project isn't working well.

The ferrite bead is used for suppression, so it is unlikely to be the problem.

The most likely issue is either (1) something else on the network with the same IP or MAC, or (2) the regulators overheating because the supply voltage is too high.

What supply are you using - I tested mine with a 9v power supply.

thx for the quick reply!

I have no problem with IP or MAC address.

I think the supply voltage is the problem, I am using a 12v battery for supply, and the 5v regulator is overheating, so this might be the problem.
I'll give it a try later today by using a 5v supply.

as for the ferrite, will the project work with-out it?or are there any replacement for it? because i can't find ferrite in the local electronic store.

drj113 (author)  troyka_44841 year ago
Excelent that you solved it - in reflection, 150mA was a bit of a stretch for a component that was designed for 100.....I have learnt so much since then.. ;-) Take care, Doug
Ok, I fixed the problem, it was the 5v voltage regulator, I replaced it with an LM7805 voltage regulator, and I did a : ping -t

Reply from bytes=32 time=1ms TTL=64

I am getting reply since 1h 30 min!

btw I replaced the ferrite with a wire.

great project! many thx!!
bing901 year ago
drj113 (author)  bing901 year ago
This board looks like an Dumaelove with an AtMega328

The project was last used with the Arduino 0022 IDE version - I have not tested it with the latest - It probably needs a refresh to work, as it is over 12 months old.
bing90 drj1131 year ago
Is there Rx and Tx pins???
Can I use some pins as Rx and Tx???
I need to transmit signal from Serial port.
gentry bing901 year ago
Rx and Tx

Yes. Rx and Tx are brought out for the FTDI cable (connector P1, pins 2 and 3). Note that they are labelled the opposite of the names on the ATMega (which, coincidentally, are on pins 2 and 3 of the ATMega).

Rx and Tx have handy indicator LEDs D3 and D4, but you should raise the values for R13 and R14, especially if you need reliable serial communications.

I found that the ATMega chip was not programmable in situ with either of the FTDI cables I have (i.e., without removing the chip, programming it in an Arduino, and putting it back). Swapping the 270 Ω resistors (R13 and R14) for at least 330 Ω made it work, so I just went ahead with 470 Ω to be a little safer. The barely noticeable loss of brightness is well worth the increased programming reliability.

Choice of board type with Arduino 1.0.1 IDE
The kind of board you should tell Arduino you have depends on the ATMega chip and bootloader you choose.  This board is similar to a Duemilanove, or a boarduino.  I found to be helpful in understanding this, and one way to burn a bootloader is this:

In order to get the most space for the '168 chips I have lying around, I went a different route, burned an optiboot bootloader onto my ATMega 168s, and then added an entry for a fake "Uno168" to "boards.txt" within the Arduino hardware directory (on the Mac, it's at /Applications/  If you're using a '328, you can just choose "Uno".  Anyway, here's my addition to boards.txt for a '168 with optiboot: Uno w/ ATmega168

BTW, I just completely copied the upload maximum size from another entry -- it's probably too conservative but I haven't needed to bump it up yet.

Good Luck!

drj113 (author)  gentry1 year ago
Hi Gentry,

Thanks for the heads up with the resistor size on the TX/RX LEDs - I was confused about why the board would program fine with my Cable, but not with Mikals :-)


Get More Out of Instructables

Already have an Account?


PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!