Show Posts
Pages: 1 ... 23 24 [25] 26
361  Forum 2005-2010 (read only) / Interfacing / Re: Temperature, Humidity, and Pressure Data logger on: December 08, 2010, 09:12:21 pm
For a temperature, humidity and water flow logging and warning system I'm putting together for the turkey farm I work on, I'm going to use the Seeedstudio Mega clone, it's like half the price and brings all the 1280's I/O pins.
362  Forum 2005-2010 (read only) / Interfacing / Re: Temperature, Humidity, and Pressure Data logger on: December 08, 2010, 12:51:30 am
I have yet to get an SD card to work with a simple voltage divider to shift levels.

But, on the GPS/Navigator/environmental monitor thing I'm building I have -
On I2C
- An HMC6352 digital compass
- A DS1307 RTC
- 8 24LC256 EEPROMS

On SPI
- An MPL115A Digital barometer.
- A uM-FPU v3 floating point unit

On the Mega's UARTS

- Serial "0" is for programming and uploading collected data
- Serial 1 is connected to an EM-406 GPS
- Serial 2 is connected to an XBee module
- Serial 3 is connected to one of the "huge" LCD displays with serial backpack that Sparkfun sell

Everything is working fine, except the "keypad" library seems a bit sluggish, I'm going to solve that by adding a separate ATmega328 for the keypad, beeper/key "click", status LEDs.

I've tried all 10 I2C devices on my Duemilenove and it worked fine.
Then I added the 2 SPI devices and it still worked.
I just ran out of I/O pins for everything else!
I2C is a fairly fast serial protocol and SPI is way faster.

If it were me, I'd use a Mega, just for the extra UART's and I/O.
363  Forum 2005-2010 (read only) / Interfacing / Re: Driving a speaker, where's the volume? on: December 07, 2010, 07:21:01 pm
Great! That's exactly what I meant, even if I didn't articulate it very well.
Your speaker will last longer this way.
364  Forum 2005-2010 (read only) / Interfacing / Re: Driving a speaker, where's the volume? on: November 28, 2010, 03:40:15 am
I would use an LM386, if you look at the circuit in application note, there is a capacitor in series with the speaker.

http://www.biltek.tubitak.gov.tr/gelisim/elektronik/dosyalar/6/LM386.pdf
http://www.national.com/mpf/LM/LM386.html

The "cap" is NOT just for filtering, not only does it stop DC bias from destroying your speaker, but stores a bit of energy.

You'll need to put a 10k pot in series between the Arduino pin and the input of the LM386.
If you build the basic '386 circuit, it'll have a gain of 20, with a digital out put into an 8 ohm speaker it'll be pretty loud!

The reason you are getting less volume than you are expecting is that electromechanical speakers do not have the same characteristics as a piezio-electric speaker.
Because it has a coil AND a magnet there is inductance and reluctance to take into account.
The transistor circuit will work a whole lot better if you put an electrolytic cap in series with the speaker, say 250 uf, with the positive side of the cap going to your transistor amp, the negative side to the speaker, the other side of the speaker should go to ground.

Driving it the way you are will burn out the voice coil.
365  Forum 2005-2010 (read only) / Interfacing / Re: i2c crash with 10k [ch937] pullups.. ok with 2.2K [ch937]. ??? on: December 06, 2010, 06:39:05 pm
You should have a 100nf ceramic or greencap on both the input and out put, as well as the 10uf tantalum or electrolytic cap on the output, other wise the regulator will oscillate like a bitch!

Also remember with linear regulators like the LD1117S33CTR, you need to give it enough voltage to "work" with or it will oscillate like a bitch!
366  Forum 2005-2010 (read only) / Interfacing / Re: Melexis SMBus IR Thermometer - NFI on: December 01, 2010, 09:46:20 am
I tried the 4.7K pull up resistors, but that didn't work.
There is another document on the Melexis site, I'll post the address later, it has "preliminary" stamped all over it, but it does look hopeful.
I'm going to have another go at it when I get my Tektronics storage CRO home, I think I'll have more luck.

On thing to bare in mind is SparkFun has an evaluation board for the MLX90614

http://www.sparkfun.com/products/9813

If you have a look at the schematic

http://www.sparkfun.com/datasheets/Sensors/Temperature/ir_eval-v14.pdf

They have just hooked the sensor up to the I2C port, no pull ups!

Unfortunately the link on github is broken, so I've not been able to download their source.

Has anyone found out why using the i2cmaster library prevents the UART working?
As a few people have pointed out, even a simple "Hello World" no longer works on the serial monitor!

The PWM output is going to be a "chicken and egg" problem, you'll have to make it work over I2C to set it up!

As I'm going to use this sensor in my "tricorder" thing, I was going to mount it in a "wand", along with some gas sensors.
My idea is to use a separate ATMEGA in the wand and communicate back to the main unit via serial link.

I already have 10 devices on my I2C bus, an HMC6352 digital compass, a DS1307 RTC and 8 24LC256 EEPROMS, I'll also have a temperature and humidity sensor when it arrives, that'll make 11, 12 if I put my uM-FPU V3 on the I2C bus, but I think I'll keep that on the SPI bus along with my MPL115A.

From what I've read SMB and I2C devices are going to be "difficult" to have on the same bus.
So a dedicated controller in the "wand" seems like a good idea.
I've already ordered a few ATmega328's pre-programmed with the Arduino bootloader, I've found the keypad library a bit "twitchy" when you have a lot of stuff going on.
So I was going give my keypad it's own controller to scan the keys, make the key press "beep" and do some other stuff.

This project is taking on a life of it's own!
I'll have to start documenting it now it has the beginnings of a case.
And before you ask, yes, my Mega still has a few port pins I'm not using, yet.
367  Forum 2005-2010 (read only) / Interfacing / Re: Melexis SMBus IR Thermometer - NFI on: November 30, 2010, 11:23:22 pm
I've tried EVERY bit of code I can find and I can't get squeak out of this sensor!
When I try the i2cmaster library, I can't get any output on the serial monitor.
I'm now trying the code sensorJunky posted and still no output on the serial monitor.
I'm going to have to get the CRO home!
I think I've been spoilt by the other I2C devices I've tried, HMC6352, eeproms, my uM FPU!
368  Forum 2005-2010 (read only) / Interfacing / Re: turn laser on and off using PWM on: November 28, 2010, 06:14:01 am
The pictured 300mW unit probably is real and these days that is relatively "low" powered.
There are plenty of 100mW+ laser articles on Hack A Day.

http://hackaday.com/2009/06/25/blu-ray-laser-keychain/
http://hackaday.com/2009/02/27/laser-lighter/

The guy on Hack A Day that posted video of his Star Trek "Phasor" bursting balloons across the room states his 350mW blue laser diode only draws 450-500mW.

Some of the blue laser diodes from Blue Ray Burners push upwards of 1W!
But I'm not about to take my BDROM burner to bits to complete my RGB laser scanner!
(Yes, I stupidly bought a Blue Ray burner and I'm still the only person I know with one! BUT I can back up 25G or 50G, @ AUS$1/G, sigh)

That idiot Kip Kay from Make had a stupidly dangerous tutorial about putting blue laser diodes in Bic lighter casings AND lighting cigarettes right in front of his face, with no eye protection, but that's Kip Kay for ya!

I just bought a 10mW red laser diode and a 10mW green laser pointer, but I won't be operating that version of my laser "wobbler/scanner" indoors without a low power setting!

So far the most powerful laser diode I have is a 250mW and an older 100mW Infra-red module from laser printers.

The higher resolution the laser printer or bromide/film printer is, the higher the laser diode output is, probably because the scanning mirror is spinning faster.

The Linotronic 4000 dpi film printer I used to work with had a HUGE laser diode module, that one was rated at 500mW and it got really hot, especially when you printed out full A0 film or bromide.

I've used the infra red diodes behind diffusers, turned right down as "night shot" illumination for my Sony camcorder.

The upshot of all this is, they might not be safe or legal, but there a plenty of ridiculously high powered laser diodes and pointers for sale!
369  Forum 2005-2010 (read only) / Interfacing / Re: turn laser on and off using PWM on: November 28, 2010, 03:22:41 am
I have had a laser pointer running @5V for the last 5-6 years , I bridged the switch with solder, that's after I ran it continuously for months with a cloths peg holding the switch "on".
From your photo it looks like mine, I ripped it out of the case and just hooked it up to a 5V supply, switched with the first transistor I found in my junk box.
If it ran on 3 "button" cells you might not have enough current and voltage to get the laser control circuit to "come up".

It's only REALLY cheap laser pointers that don't have the whole feedback circuit from the actual laser diode.

Don't feed current straight into the laser package, if it's got 3 pins it WILL need the feedback circuit, or the device will not last very long.

3V probably isn't enough to power the laser AND it's control circuit, if it had 3 "button" cells that's at least 4.5V, a bit more if they are fresh cells.
370  Forum 2005-2010 (read only) / Interfacing / Re: Driving a mosfet directly - questions on: November 28, 2010, 03:52:36 am
One important thing to remember is that FET's of any kind are voltage controlled devices, Bi-Polar transistors are current controlled devices.

A silicon bi-polar transistor when it comes "on" has a .6V voltage drop across the emitter/collector junction, that's why they get hot, whatever current you draw through the transistor has to dissipate that 0.6V @ whatever current you are pulling through it.
ALL silicone devices have this 0.6V voltage drop.

It's a bummer big germanium power transistors are no longer available.
Germanium devices have a 0.3V drop across them, it's why "crystal" radios usually have an OA-91, it makes them more sensitive.

a FET turns into a piece of wire! :-)
And has a minuscule voltage drop across it.
That's IF you turn it "hard" on.

With a Bipolar transistor like a 2N2222, you can get away with just a resistor on the base, but it will only switch when the voltage hits 0.6V, a better way is to put a voltage divider on the base, calculate the 2 resistor values so you have the base sitting just under 0.6V, then feed the output from your Arduino pin through a resistor into the voltage divider, it will switch much quicker that way.

Remember you can use a transistor for much more than a switch! (I hear told  smiley )
371  Forum 2005-2010 (read only) / Interfacing / Re: DS1307 and LCD on: November 28, 2010, 02:59:41 am
Can you output anything to your LCD?
If you have the Time library, even without setting the CURRENT time you should get something.
This is the sketch I based my code on.


Code:
/*
 * RTC Control v.01
 * by <http://www.combustory.com> John Vaughters
 * Credit to:
 * Maurice Ribble - http://www.glacialwanderer.com/hobbyrobotics for RTC DS1307 code
 *
 * With this code you can set the date/time, retreive the date/time and use the extra memory of an RTC DS1307 chip.  
 * The program also sets all the extra memory space to 0xff.
 * Serial Communication method with the Arduino that utilizes a leading CHAR for each command described below.
 * Commands:
 * T(00-59)(00-59)(00-23)(1-7)(01-31)(01-12)(00-99) - T(sec)(min)(hour)(dayOfWeek)(dayOfMonth)(month)(year) - T Sets the date of the RTC DS1307 Chip.
 * Example to set the time for 02-Feb-09 @ 19:57:11 for the 3 day of the week, use this command - T1157193020209
 * Q(1-2) - (Q1) Memory initialization  (Q2) RTC - Memory Dump
 */

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68  // This is the I2C address


// Global Variables

int command = 0;       // This is the command char, in ascii form, sent from the serial port    
int i;
long previousMillis = 0;        // will store last time Temp was updated
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
byte test;
  
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );
}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );
}

// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers, Probably need to put in checks for valid numbers.
 
void setDateDs1307()                
{

   second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48)); // Use of (byte) type casting and ascii math to achieve result.  
   minute = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   hour  = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   dayOfWeek = (byte) (Serial.read() - 48);
   dayOfMonth = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   month = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   year= (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.send(0x00);
   Wire.send(decToBcd(second));    // 0 to bit 7 starts the clock
   Wire.send(decToBcd(minute));
   Wire.send(decToBcd(hour));      // If you want 12 hour am/pm you need to set
                                   // bit 6 (also need to change readDateDs1307)
   Wire.send(decToBcd(dayOfWeek));
   Wire.send(decToBcd(dayOfMonth));
   Wire.send(decToBcd(month));
   Wire.send(decToBcd(year));
   Wire.endTransmission();
}

// Gets the date and time from the ds1307 and prints result
void getDateDs1307()
{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.send(0x00);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  // A few of these need masks because certain bits are control bits
  second     = bcdToDec(Wire.receive() & 0x7f);
  minute     = bcdToDec(Wire.receive());
  hour       = bcdToDec(Wire.receive() & 0x3f);  // Need to change this if 12 hour am/pm
  dayOfWeek  = bcdToDec(Wire.receive());
  dayOfMonth = bcdToDec(Wire.receive());
  month      = bcdToDec(Wire.receive());
  year       = bcdToDec(Wire.receive());
  
  Serial.print(hour, DEC);
  Serial.print(":");
  Serial.print(minute, DEC);
  Serial.print(":");
  Serial.print(second, DEC);
  Serial.print("  ");
  Serial.print(month, DEC);
  Serial.print("/");
  Serial.print(dayOfMonth, DEC);
  Serial.print("/");
  Serial.print(year, DEC);

}


void setup() {
  Wire.begin();
  Serial.begin(57600);
 
}

void loop() {
     if (Serial.available()) {      // Look for char in serial que and process if found
      command = Serial.read();
      if (command == 84) {      //If command = "T" Set Date
       setDateDs1307();
       getDateDs1307();
       Serial.println(" ");
      }
      else if (command == 81) {      //If command = "Q" RTC1307 Memory Functions
        delay(100);    
        if (Serial.available()) {
         command = Serial.read();
         if (command == 49) {      //If command = "1" RTC1307 Initialize Memory - All Data will be set to 255 (0xff).  Therefore 255 or 0 will be an invalid value.  
          Wire.beginTransmission(DS1307_I2C_ADDRESS); // 255 will be the init value and 0 will be considered an error that occurs when the RTC is in Battery mode.
          Wire.send(0x08); // Set the register pointer to be just past the date/time registers.
         for (i = 1; i <= 27; i++) {
             Wire.send(0xff);
            delay(100);
         }  
         Wire.endTransmission();
         getDateDs1307();
         Serial.println(": RTC1307 Initialized Memory");
         }
         else if (command == 50) {      //If command = "2" RTC1307 Memory Dump
          getDateDs1307();
          Serial.println(": RTC 1307 Dump Begin");
          Wire.beginTransmission(DS1307_I2C_ADDRESS);
          Wire.send(0x00);
          Wire.endTransmission();
          Wire.requestFrom(DS1307_I2C_ADDRESS, 64);
          for (i = 1; i <= 64; i++) {
             test = Wire.receive();
             Serial.print(i);
             Serial.print(":");
             Serial.println(test, DEC);
          }
          Serial.println(" RTC1307 Dump end");
         }
        }  
       }
      Serial.print("Command: ");
      Serial.println(command);     // Echo command CHAR in ascii that was sent
      }
      
      command = 0;                 // reset command
      delay(100);
    }
//*****************************************************The End***********************


After I set the current local time I was able to use this bit of code.
Code:
/*
 * TimeRTC.pde
 * example code illustrating Time library with Real Time Clock.
 *
 */

#include <Time.h>  
#include <Wire.h>  
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t

void setup()  {
  Serial.begin(9600);
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  if(timeStatus()!= timeSet)
     Serial.println("Unable to sync with the RTC");
  else
     Serial.println("RTC has set the system time");      
}

void loop()
{
   digitalClockDisplay();  
   delay(1000);
}

void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year());
  Serial.println();
}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}



Are you sure your Arduino can "see" the RTC?
372  Forum 2005-2010 (read only) / Exhibition / Re: FORTH environment for Arduino on: January 11, 2011, 08:02:52 am
Freak me Lefty!
I have this Mars/Lunar lander obsession, my first attempt, age 12, was all relay logic and bulbs!
Then I went to DTL, after the start of the 70's I built a 6800 system, with front panel LED's and switches, you might know the one, from that issue of "Practical Electronics".
Still at it, always will, till I plant that Australian flag on the Moon/Mars, arduino or not.
373  Forum 2005-2010 (read only) / Exhibition / Re: FORTH environment for Arduino on: January 10, 2011, 10:11:39 am
Lot's of observatories use Forth.
The Arecibo radio telescope and the VLA radio telescope in New Mexico, this is not surprising, Charles Moore worked at the National Radio Astronomy Observatory (NRAO), he was a freelance programmer working mainly on control and data acquisition, which is where Forth really shines.
The contempt that C programmers show Forth (and just about any other language) is amazing!
374  Forum 2005-2010 (read only) / Exhibition / Re: FORTH environment for Arduino on: January 09, 2011, 07:32:56 am
"FORTH never really caught on"!?!?

I guess Adobe NEVER gives any credit to Forth and they should because Postscript IS Forth!
If you ever had an HP programmable calculator, getting into Forth was easy.

Some of my favourite applications are written in Forth, Voyager 1 & 2, the desktop planetarium programme I have running on my Mac (plus!) is a conspicuous example.

375  Forum 2005-2010 (read only) / Exhibition / Re: ArduSpider Sara : a robot project for my daughter on: January 10, 2011, 09:11:27 am
That is so cool!
Great work man!
Pages: 1 ... 23 24 [25] 26