Showing posts with label arduino. Show all posts
Showing posts with label arduino. Show all posts

17 January, 2014

More cool 3D printers ...

I still didn't finished my Prusa I3 but I can say that I'm almost there - after almost one year now it's just a matter of a few adjustments/regulations and then I'll be able to print my own wissle.

And now, I just decided it, I do want to build one simple 3D scanner. I decided to build one after I saw this KickStarter printer: R-360.

I loved the idea and the size is really cool for small apartments. My bench is already filled up with stuff that my wife wanna throw away, GOSH! I need more room to my stuff! One of the most interesting features are the ability to install one "3D Scanner" kit and a plotter.

I don't like the online service idea - I think that a software like Repetier would be good enough. The online 3D library is awesome tought.

It's sad that they didn't reached their goal - now we will have to dig the web to get the details of this gadget in order to try to bring it into maturity.

KickStarter.com is awesome, I love their projects, I love the idea to invest into gadgets and toys that you like. There is one catch thought, IMHO, they have the tendency to support mostly (again, IMHO!) "professional" projects. IF you don't sell yourself they will not help you with that - even if you do have one awesome idea ...

A while ago I saw another project at KickStarter - the Peachy Printer. One US$ 100 printer. The catch is that this printer is not complete - you will have to spend some money into the resin container.

And the 3D scanner? It's here, the SpinScan. The project is a work in progress but it's super cool.

There is one alternative idea using encoders to point where you want the vertices but I don't know none open source project implementing it. Take a look here for details.

11 March, 2013

Arduino +USB Lipo Charger +5v Booster

So, let's say that you want to use your Arduino board with a LiPo battery. What would you have to do?

WARNING: If you have never used a LiPo battery before, I strongly advise you to read this guide before continuing. This guide will teach you the basic safety precautions required by this kind of battery.

If you do have the money for it OR if you don't fell comfortable working with the steps that I'm writing below, I suggest you buy a board that already has a USB LiPo charger embedded, like an Arduino Fio* - the only practical difference between this board and what I'm presenting here is the more expensive price and the impossibility to use it @ 16Mhz without modifying the board.

Since I'm always concerned with simplicity, I'll only suggest already tested and safe modules. We don't need to reinvent the wheel, do we? This is just a simple Arduino power guide.

Required parts

  1. 1x Arduino board, of course, original or compatible.
  2. 1x Sparkfun's PowerCell v1.3 (the previous version has a flaw on its design that will drain the battery really quick). This module has a quick start guide here.
  3. 1x Micro USB-B cable.
  4. 1x 1S 1P low discharge rate LiPo battery with a JST connector (JST RCY or 2pin Molex too).
  5. 2x 2.54mm angle pin headers.
  6. 2x 2.54mm pin headers.
  7. 2x wires with 2.54mm female headers on both ends, 20cm so so, red and black.
Charger/Booster LiPo, 1S1P Micro USB-B Cable JST RCY Connector 2pin molex

Why use a "low discharge" battery and what the hell is that? The discharge rate is simply how fast a battery can be discharged safely, suffice it to say that we don't need a battery with a high discharge rate (the normal type out there) for devices with low consumption. Our Arduino is a low consumption device (it requires 100ma, tops) so a low discharge rate battery is more appropriate, safer and it will drain slower than a normal battery. If you want to know more about LiPo Batteries, take a look into this link.

Basic Wiring

  1. Make sure that the blink "sketch" is already loaded into your Arduino board. It comes pre-loaded from factory.
  2. To be sure that everything is okay BEFORE we wire our modules, turn the Arduino board on as you normally do. If everything is all right, the led on pin 13 will start to blink and then there's no one to blame later on. Turn off the Arduino board.
  3. Get the 2.54mm angle pins and solder them into the VCC and GND out charge pins (picture 3, top).
  4. Plug the 3.7v LiPo into the small white plastic connector. It fits in only one direction so you don't have to care about it's position (picture 4). This type of connector (JST) breaks easily and it's a real pain to remove after it is connected, so be careful. If you don't have a LiPo with this connector, you will have to solder an adapter like the one in picture 2 (you can grab this connector from any PS3 Dual Shock Battery).
  5. Connect the black wire into the GND out charger's pin. Plug a male 2.54mm pin header into the opposite end of this wire in order to be able to connect it into the Arduino GND female header (picture 5) and then connect it (picture 6).
  6. Connect the red wire into the VCC out charger's pin. Use another 2.54mm header for the red wire end connector and then wait a minute. Review all connections just to be sure that everything is all right. Take a break, review again and, only after that, connect the red connector to the Arduino 5v header (picture 6). I'm serious - you can burn your Arduino just like popcorn and I'm almost sure that you will not like the smell.
  7. If you didn't burnt down the house by now, it's time to connect the USB cable. As soon as you plug the USB cable in, the red led in the charger board will turn on (picture 7).

Picture 1, The 2.54mm header wire plugged with the male pin


Picture 2, The JST Adapter


Picture 3, The JST Adapter connected


Picture 4, LiPo -> charger


Picture 5, LiPo -> charger, out cable connected


Picture 6, LiPo -> charger -> Arduino


Picture 7, LiPo -> charger -> Arduino 5v GND, USB -> charger

This is the basic wiring to power up any Arduino board running at 5v (pictures 8 and 9). It's important to note that we are wiring the charger's output straight into the uC and it's not passing though the internal voltage regulator (the LM whatever LDO). That being said make sure to use only 5v regulated power sources otherwise you will melt your little friend.


Picture 8, LiPo -> charger -> Leonardo Pro 5v GND


Picture 9, LiPo -> charger -> Groovy 5v GND

The booster is also available in a single module, without the LiPo charger:


Picture 10, The 5v booster


Picture 11, LiPo -> booster -> Leonardo Pro 5v GND

    A few notes
  1. There is one implicit worldwide color convention that dictates that red is positive and black is negative (GND).
  2. The multimeter is your friend, use it whenever you can.
  3. Whenever you need to wire up a power source wire up first the GND line, after measuring it with your friend - the multimeter.
  4. Whenever you need to disconnect a power source disconnect first the VCC line.
  5. Always buy spare parts - you never know when you are going to burn something.

Basic Wiring, 3.3v

The Sparkfun's USB LiPo charger/booster used above can be configured to work at 3.3v, you can see how to into its guide, doing so you will be ignoring it's embedded booster circuit. For this scenario it's better to use one simple LiPo charger instead - cheaper and smaller.

Charger 5v Booster Another Charger More Charger
    The wiring here is way simpler:
  1. Connect the LiPo 3.7v and GND into the charges IN+ and IN- respectively.
  2. The same LiPo GND goes to Arduino's GND.
  3. The same LiPo 3.7v goes to Arduino's 3.3v. 3.7v is not equals to 3.3v, I know - the thing is that 3.7v is in the tolerance range that is acceptable by Arduino's 3.3v input.
  4. If I'm consuming power (the board is on doing something) how I'll be sure that I'll be recharging the LiPo? Well, this charger feeds 400ma (tops) to recharge the LiPo and we know that one Arduino uses 100ma (tops), so the math is: 400ma - 100ma > 0. If greater than zero we are okay, we will be charging the LiPo, if lower than zero review your project and remember that a LiPo can't be totally discharged without getting damaged (see the LiPo guide for more details).


Picture 12, I'm out of LiPo chargers right now, I'll post it later ...

    A few 3.3v boards
  1. Arduino Mini 3.3v.
  2. Arduino Fio v2.2 and v3.0.
  3. RBBB variants without crystal.
    More notes
  1. The "booster" module is also called by "step up" circuit, it's a circuit that increases the voltage of it's input. There is another similar kind of circuit that will help you in the opposite case, the "Step Down" circuit, it's a circuit that decreases the voltage of it's input.
  2. Do not use the USB 5v line to power up your 3.3v device. It's normal to have a tolerance range (normally it's between 10%) but 5v is way higher and it will fry your uC, for these cases you will have to use one step down circuit.
  3. The Arduino uC, from factory, operates at 16Mhz. You will have to reconfigure the Arduino fuses in order to make it run at 8Mhz.

Data wiring

At this point you did powered you Arduino however you didn't wired the USB data pins (D- and D+), there's no such pins in the LiPo charger nor in the 5v booster - both modules don't care about these signals. They could have designed these modules taking into account these pins but they didn't. Why? I think they are just assuming that you are only using the USB cable to charge your LiPo or to provide power to your device, not to communicate with your computer (silly assumption).

To enable the USB communication you will need one USB 2.0 header like the one I did here.

continue ...


Picture 13, USB 2.0 pinout - I'll post it later ...

    And more notes:
  1. The USB D- and D+ signals are not interchangeable then you need to follow the correct order of the pins.
  2. Try to use and memorize the correct color code adopted into the USB cables (picture 13, mine is wrong - don't know why they swapped the D- with the D+ wire).

Data wiring, 3.3v

    Aggain, you know, more notes:
  1. The USB D- and D+ signals are 5v signalsthen you will need one level converter into them.

Identifying which power source is been used

Sometimes you will need a way to identify when the device is been powered by the USB or been powered by the LiPo. This is not required but it will help some wireless applications (if you don't need or don't have a clue why an wireless application would require it just wait my next post - when I'll wire a bluetooth module to one LiPo powered Arduino).

The easiest way to identify when the board is been powered by our LiPo is to check the USB 5v presence. You will need one 100k resistor, one wire with 2.54mm headers and one USB 2.0 header.

    Wiring, you will see it's easy
  1. Using the USB header connect the wire into the USB 5v.
  2. Plug the 100k resistor's leg (any leg) at the end of this wire.
  3. Connect the other resistor's leg into the Arduino A5 port.
  4. Compile and upload the sketch below, piece of cake right?
/*
USB 5v –> 100k resistor –> Arduino A5.
Blink when powered by LiPo.
*/
 
#define DEBUG 

// Pin 13 has an LED connected on most Arduino boards.
int led = 13;
// Analog 5 will be used to read the vcc line voltage.
int vcc = A5;

// the setup routine runs once when you press reset:
void setup() {
  Serial.begin( 9600 );
  // initialize the digital pin as an output.
  pinMode( led, OUTPUT );
}

// the loop routine runs over and over again forever:
void loop() {

  int vccA = analogRead( vcc );
  float vccR = vccA / 204.6;

  #ifdef DEBUG
    Serial.print( "VCC Voltage: " );
    Serial.print( vccA );
    Serial.print( " - " );
    Serial.print( vccR );
    Serial.println( "." );
  #endif

  digitalWrite( led, HIGH );   // turn the LED on (HIGH is the voltage level)
  delay( 1000 );               // wait for a second
  if( vccR < 3.3 ) {
    digitalWrite( led, LOW );  // turn the LED off by making the voltage LOW
    delay( 1000 );             // wait for a second
  }
}

204.6? what's that? Take a look into the documentation of the function analogRead and try to figure it out by yourself as a mental exercise.

References

  1. * Arduino Fio v2.2, ATMega328p OR Arduino Fio v3.0, ATMega32u4

No Arduinos Were Harmed in the Production of this Post.

Post not finished, I'm still writing it ...

01 March, 2013

Mechanical Keyboards

What do you think about a guy who's willing to spend US$ 300,00 on a single keyboard key? Yes, a keycap, that little square thing that you press to get chars into your text editor in order to write your marvelous texts (this one excluded, please, my English sucks and I'm shy anyway).

Right now everybody is talking about the Pope's ring, don't know why. Even you, I doubt you haven't heard about it. This dummie ring is just a piece of gold (metal, diamonds, etc), used to adorn one ancient finger. Useless stuff, however, I'm sure that this loveable ring costs more than this stupid keycap ...

Have you ever heard about keycaps that glow in the dark? Better than the ring (I could melt the ring to make some keycaps though).

Don't complain about the keycap and I'll shut my mouth. Who cares anyway?

The thing is that keyboards are awesome devices to start working in the microcontrollers world - they are cheap and I bet they are everywhere in the universe where there is intelligent life. A keyboard is basically a microcontroller tied to a matrix of switches arranged according to your keyboard design. A few switches wired into an array matrix, a few leds, the microcontroller and the software to read the switches, it's as simple as that.

You will see that there are a huge community out there designing and building really cool keyboards. Take a look:

WARNING: the content below is highly addictive for geeks.

GeekHack Forum

Geekhack projects summary

DeskThority Forum

Only three links but the amount of info there is bound to thrill you! Lots of awesome pictures too ...


This ring is only US$ 255 bucks.

I still haven't finished my "USB Devices" tutorial because I bumped into all this keyboard stuff (as I have said: it's addictive!).

Revised on 14/08/2013

29 January, 2013

USB devices

So, do you want to project and build USB devices? Something like one USB scale? one LCD display? or one special type of keyboard? So do I! Lets just say that today it's not that hard - with the proper uC and library you can build simple devices in just one day without much headache (Thanks to all that hard work done by the the open source community!). Welcome to my "online procrastination USB project learning share experience" ...

Don't get too much excited thought, we will just scratch the surface here (that's why I said "simple devices"). If you want to go deep into the USB devices be prepared for some long time reading books, specs and lots and lots of coffee - the USB spec is hard core (IMHO) - actually it is one of the the most complex protocols out there and it will take a while to learn all stuff required to make pro gadgets.

So, Hey Ho, Let's Go! let's see the arsenal that will help you to create your first awesome USB gadget:

uC Library

uC Familyhex SizeUSBLicensing

USBTiny

ATTiny / ATMega+- 1350 bytes1.1 low speedGPL v2 or later

V-USB

AVR+- 1400 bytesFully 1.1 compliant low-speedGPL v2 or commercial

LUFA


Prototype Boards

Teensy 2.0 and Teensy++ 2.0

As far as I can tell the Teensy board was one of the first ATMEL based prototype boards with USB support

Arduino Mega ADK

The Arduino Mega ADK is nothing more than the Google ADK main board without that cute test board (the google ADK sold out in the first month). This board is based in the awesome work done by Oleg.

Arduino Leonardo

Arduino UNO R3

Arduino UNO R2

Arduino UNO R1

Arduino Micro


Platform USB Drivers

lib-usb

libusb-win32


Reference books

  1. Online Book USB in a NutShell
  2. USB Made Simple
V-USB tutorials:
AVR ATtiny USB Tutorial Part 1Awesome tutorial.
AVR ATtiny USB Tutorial Part 2
AVR ATtiny USB Tutorial Part 3
AVR ATtiny USB Tutorial Part 4
V-USB tutorial continued: HID mouse
USB HID keyboard with V-USB
    LUFA tutorials
  1. Arduino USB Keyboard Passthrough
    USBTiny tutorials
HID/USB Keyboard Repeater with Playback Homemade Hardware Keylogger/PHUKD Hybrid Decoding the NZRI data (USB SNIFFER) Ambitious Arduino newb. Any help with USB? SIAM32 USB HC Non-return-to-zero Interesting Keyboard development "evolution": http://forum.colemak.com/viewtopic.php?id=1561 This guy started to develop one keyboard with a full arduino ADK stack and then he figured out that the max34 was kinda under used ... http://hackaday.com/2011/10/06/hardware-based-keyboard-remapping/ http://41j.com/blog/2011/10/a-programmable-keyboard-controller/ Complete keyboard, from scratch! Mechanical Keyboard Guide Mechanical Keyboard Guide https://github.com/tmk/tmk_keyboard/tree/master/keyboard USB Keyboard Sample from PJRC (using push buttons) http://www.pjrc.com/teensy/usb_keyboard.html https://github.com/gimpster/Phantom-Keyboard https://github.com/arjan/ButtonKeyboardProject Generic Keyboard Driver for atmel/avr https://github.com/rhomann/kbupgrade http://hakshop.myshopify.com/collections/gadgets/products/usb-rubber-ducky

This creature is not totally ready yet and, please, fell free to post your comments and suggestions to feed this Tamagotchi ...

01 May, 2012

Low Cost Arduino LCD module, 3 pins

For those who are looking for a ready to use Arduino LCD module here goes my 5 cents to the open source community.

This module was based on the work published on ArduinoShiftRegLCD's site. The original layout has two sides but it can be easily converted into a single side layout just using simple jump wires at the bottom side.

    Parts list:
  1. M74HC595
  2. 1 x 16 pins female header
  3. 2 x 2 pins male headers
  4. 1 x 10k resistor
  5. 1 x 100nF capacitor (104)

top bottom

Project files here (github account required).

Feel free to leave your comment.