Show Posts
Pages: [1]
1  Using Arduino / Sensors / Re: RHT03 Sensor & LS20031 GPS Receiver Trouble on: December 13, 2012, 02:05:53 pm
Hi,

thanks for your reply.
i drew a rough circuit diagramm (i`m pretty new to electronics and hope you can read it)
and added the Sharp Optical Dust Sensor (https://www.sparkfun.com/products/9689)
which also should be part of my logger. All sensors work perfectly fine standalone.

- The GPS draws about 26mA current max.
- The wires connecting the humidity sensor to the arduino are roughly 80cm/31.5inches long (for 2/3 of the distance i use this ribbon cable https://www.sparkfun.com/products/10647) - same with GPS and Dust Sensor.
- I did not add the capacitor and the pull-up resistor to the humidity sensor - i thought it is not neccesary since the sensor works
fine standalone without them. I should add them.

Any other suggestions?

thanks a lot for helping
2  Using Arduino / Sensors / RHT03 Sensor & LS20031 GPS Receiver Trouble on: December 13, 2012, 07:17:00 am
Hello there,

I am building a gps-data-logger which records temperature & humidity.
I am using the RHT03 Temperature & Humidity Sensor (5V / https://www.sparkfun.com/products/10167) and the 66 Channel LS20031 GPS 10Hz Receiver (3.3V / https://www.sparkfun.com/products/8975).

The RHT03 sensor output is corrupted when both components are powered, lots of check sum errors and ACK time outs (i am using this library https://github.com/ringerc/Arduino-DHT22/tree/f1c5b3ab1e6f274ec66ecee09df729224af1cf7d) and no proper values. When i unplug the gps receiver the RHT03-readings suddenly turn good, wenn I power the gps on again the readings turn bad again. RHT03 runs on 5V, GPS Module runs on 3.3V, both share GND.

Any suggestions how to run the GPS-Module and the RHT03 simultaneously and get good readings from the RHT03?

I work with Arduino 1.0.2 (on osx 10.6.8) and an Arduino Uno SMD.
Thanks in advance for any suggestions & answers

cheers, simon

EDIT: I wired the GPS module as descripted here (http://www.sparkfun.com/tutorials/176) so RX pin of the module is not connected to the Arduino
3  Using Arduino / Programming Questions / Re: PROGMEM question - dynamic pgm_read_word() on: January 23, 2012, 03:54:48 pm
Hey PaulS,

thanks for your reply.

Quote
string_table_01 and string_table_02 are names. The compiler translates them to addresses that are actually passed to the pgm_read_word function.

Is it possible to change the addresses, that are passed to the »pgm_read_word«-function?

My knowledge in c is poor so please excuse silly questions  smiley-sad

simon
4  Using Arduino / Programming Questions / PROGMEM question - dynamic pgm_read_word() on: January 23, 2012, 03:22:09 pm
Hi there,

first the slightly modified PROGMEM-Example from www.arduino.cc for better understanding my problem

Code:
#include <avr/pgmspace.h>
prog_char string_01_0[] PROGMEM = "String 1 0";   // "String 0" etc are strings to store - change to suit.
prog_char string_01_1[] PROGMEM = "String 1 1";
prog_char string_01_2[] PROGMEM = "String 1 2";
prog_char string_01_3[] PROGMEM = "String 1 3";
prog_char string_01_4[] PROGMEM = "String 1 4";
prog_char string_01_5[] PROGMEM = "String 1 5";

prog_char string_02_0[] PROGMEM = "String 2 0";  
prog_char string_02_1[] PROGMEM = "String 2 1";
prog_char string_02_2[] PROGMEM = "String 2 2";
prog_char string_02_3[] PROGMEM = "String 2 3";
prog_char string_02_4[] PROGMEM = "String 2 4";
prog_char string_02_5[] PROGMEM = "String 2 5";

// Then set up a table to refer to your strings.

PROGMEM const char *string_table_01[] =   // change "string_table" name to suit
{  
  string_01_0,
  string_01_1,
  string_01_2,
  string_01_3,
  string_01_4,
  string_01_5 };
  
  PROGMEM const char *string_table_02[] =   // change "string_table" name to suit
{  
  string_02_0,
  string_02_1,
  string_02_2,
  string_02_3,
  string_02_4,
  string_02_5 };

char buffer[30];    // make sure this is large enough for the largest string it must hold

void setup()  
{
  Serial.begin(9600);
}


void loop()  
{
  for (int i = 0; i < 6; i++)
  {
    strcpy_P(buffer, (char*)pgm_read_word(&(string_table_01[i]))); // Necessary casts and dereferencing, just copy.
    Serial.println( buffer );
    delay( 500 );
  }
}

and now the problem

i want to change »string_table_XX« in »pgm_read_word(string_table_XX)« dynamically.
So that the same »strcpy_P« function reads either from »string_table_01« or from »string_table_02«.

thanks for any replys

simon
5  Using Arduino / Displays / Re: .bmp to .cpp on mac on: January 10, 2012, 05:38:35 am
hey there,

thanks for the tips, i'll give them a try soon, hopefully tomorrow.
I forgot to post this tutorial yesterday -> http://www.ladyada.net/products/thermalprinter/,
they did a library for the printer.

Byte orientation seems to be horizontal.



6  Using Arduino / Displays / .bmp to .cpp on mac on: January 09, 2012, 04:17:39 pm
Hello there,

I'm looking for a way to convert .bmp files to .cpp files on mac.
Something like http://en.radzio.dxp.pl/bitmap_converter/ but for osx.

I'm not working with LCD-Displays but with this thermal printer -> http://www.sparkfun.com/products/10438
and want it to print bitmaps.

thanks for any answers
7  Using Arduino / Networking, Protocols, and Devices / Re: GPS / EM-408 Trouble on: January 09, 2012, 04:11:07 pm
Hello there,

thanks for the replys.
I changed rX and tX and I used NewSoftSerial without tinyGPS which made debugging alot easier.
Works like a charm now.

Thank you very much

zonkzonk
8  Using Arduino / Networking, Protocols, and Devices / Re: GPS / EM-408 Trouble on: January 06, 2012, 07:30:49 am
Hi johnwasser,

thanks for the reply.
I changed the pins, still no data is send to the arduino.
The module should send data immediately after it started up right?

9  Using Arduino / Networking, Protocols, and Devices / GPS / EM-408 Trouble on: January 05, 2012, 01:12:26 pm
Hi there,

I purchased a EM-408 GPS Module (http://www.sparkfun.com/products/8234) and can`t make it working.
Im trying to get it running with an Arduino UNO (ATMEGA 328) and the tinyGPS Library.

The VCC is connected to 3.3V, GND to Ground, RX to Pin 0 and TX to Pin 1.
Enable/Disable is connected to 3.3V through a 4.7K Resistor and should therefore be HIGH
(my knowledge in electrics is very basic).
The Arduino receives no data from the module (RX LED is LOW).

Did anybody experience similar problems with the EM-408?

I found this: http://forum.sparkfun.com/viewtopic.php?t=6623
and this: http://geoffg.net/EM408.html
but couldn`t solve my problem.

heres the Code (its a slightly modified tinyGPS Example and compiles only with Arduino 0022)

Code:
#include <NewSoftSerial.h>
#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of NewSoftSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 0(rx) and 1(tx).
*/

TinyGPS gps;
NewSoftSerial nss(0, 1);

void gpsdump(TinyGPS &gps);
bool feedgps();
void printFloat(double f, int digits = 2);

void setup()
{
  Serial.begin(9600);
  nss.begin(4800);
 
  pinMode(13,OUTPUT);
 
  pinMode(3, OUTPUT);
  digitalWrite(3,HIGH);
 
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS));
  Serial.println();
}

void loop()
{
  bool newdata = false;
  unsigned long start = millis();
digitalWrite(13,HIGH);
Serial.println("no Data");

  // Every 5 seconds we print an update
  while (millis() - start < 5000)
  {
    if (feedgps())
      newdata = true;
  }
 
  if (newdata)
  {
    Serial.println("Acquired Data");
    Serial.println("-------------");
    gpsdump(gps);
    Serial.println("-------------");
    Serial.println();
  }
}

void printFloat(double number, int digits)
{
  // Handle negative numbers
  if (number < 0.0)
  {
     Serial.print('-');
     number = -number;
  }

  // Round correctly so that print(1.999, 2) prints as "2.00"
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)
    rounding /= 10.0;
 
  number += rounding;

  // Extract the integer part of the number and print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  Serial.print(int_part);

  // Print the decimal point, but only if there are digits beyond
  if (digits > 0)
    Serial.print(".");

  // Extract digits from the remainder one at a time
  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint;
  }
}

void gpsdump(TinyGPS &gps)
{
  long lat, lon;
  float flat, flon;
  unsigned long age, date, time, chars;
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned short sentences, failed;

  gps.get_position(&lat, &lon, &age);
  Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");
 
  feedgps(); // If we don't feed the gps during this long routine, we may drop characters and get checksum errors

  gps.f_get_position(&flat, &flon, &age);
  Serial.print("Lat/Long(float): "); printFloat(flat, 5); Serial.print(", "); printFloat(flon, 5);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  feedgps();

  gps.get_datetime(&date, &time, &age);
  Serial.print("Date(ddmmyy): "); Serial.print(date); Serial.print(" Time(hhmmsscc): "); Serial.print(time);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  feedgps();

  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  Serial.print("Date: "); Serial.print(static_cast<int>(month)); Serial.print("/"); Serial.print(static_cast<int>(day)); Serial.print("/"); Serial.print(year);
  Serial.print("  Time: "); Serial.print(static_cast<int>(hour)); Serial.print(":"); Serial.print(static_cast<int>(minute)); Serial.print(":"); Serial.print(static_cast<int>(second)); Serial.print("."); Serial.print(static_cast<int>(hundredths));
  Serial.print("  Fix age: ");  Serial.print(age); Serial.println("ms.");
 
  feedgps();

  Serial.print("Alt(cm): "); Serial.print(gps.altitude()); Serial.print(" Course(10^-2 deg): "); Serial.print(gps.course()); Serial.print(" Speed(10^-2 knots): "); Serial.println(gps.speed());
  Serial.print("Alt(float): "); printFloat(gps.f_altitude()); Serial.print(" Course(float): "); printFloat(gps.f_course()); Serial.println();
  Serial.print("Speed(knots): "); printFloat(gps.f_speed_knots()); Serial.print(" (mph): ");  printFloat(gps.f_speed_mph());
  Serial.print(" (mps): "); printFloat(gps.f_speed_mps()); Serial.print(" (kmph): "); printFloat(gps.f_speed_kmph()); Serial.println();

  feedgps();

  gps.stats(&chars, &sentences, &failed);
  Serial.print("Stats: characters: "); Serial.print(chars); Serial.print(" sentences: "); Serial.print(sentences); Serial.print(" failed checksum: "); Serial.println(failed);
}
 
bool feedgps()
{
  while (nss.available())
  {
    if (gps.encode(nss.read()))
      return true;
  }
  return false;
}

Thanks for any answers

zonkzonk
Pages: [1]