Erste Schritte: Uno, Linux und ein paar kleine Probleme...

Hallo an alle,

jetzt habe ich endlich meine Lieferung bekommen und gleich losgelegt.

Für den Fall daß ähnliche Probleme bei anderen Anfängern wie mir auftauchen
will ich kurz berichten. Vielleicht hilft es jemandem.

Hardware: Arduino Uno
Software: Arduino 1.6.3
Laptop: Ubuntu 10.04

Zunächst kein Kontakt über USB. Liegt wohl an der Einstellung "COM1" in
der Datei "preferences.txt".
Kann man manuell editieren(Wenn der Arduino nicht läuft).

"dmesg" sagt mir daß ich ein neues "USB ACM Device" namens "ttyACM0" habe.
Also dieses als "/dev/ttyACM0" in "preferences.txt" eingetragen.

Verbindung jetzt möglich...

Aus den Beispielen "blink" gewählt und hochladen lassen...Fehlermeldung...

eine Datei "/usr/lib/libtinfo.so.5" fehlt.

Ein wenig googeln hilft...locate auf dem Laptop auch.

"ln -s /lib/libncurses.so.5 /usr/lib/libtinfo.so.5" löst das Problem.

Danach problemloses Hochladen von Programmen.
Bisher habe ich einige Beispiele und das LCD-Tutorial von Adafruit
ausprobiert. Super!

Jetzt werde ich mich wohl meinen OneWire Thermocouplemodulen zuwenden.
Ich hoffe dies hilft anderen Anfängern bei Startproblemen.

mfg

Frank

Hallo,
kleines Update von mir.

Habe jetzt die Thermocouple-Module ausprobiert nach den Tutorials von Adafruit.
Klappt bestens mit diesem Tutorial:

Das i2c/SPI LCD Backpack habe ich jetzt auch schon getestet mit den entsprechenden
Beispiel-Sketchen. Eine kleine Stolperfalle lauerte als ich vom 20x2 auf das 16x4 Display
gewechselt habe. Aber kein Problem, hier im Forum findet sich die richtige Antwort darauf:

Das Hauptproblem ist immer die richtigen Suchbegriffe in die Suchfunktion einzugeben...

Momentan probiere ich gerade ein wenig herum. Ich habe das "Multiple"-Beispiel aus der
"DallasTemp" Library mit Code aus dem "HelloWorld_i2c"-Beispiel erweitert um
2 Temperaturen auf dem 20x2 Display anzuzeigen. Klappt jetzt und ich habe auch raus-
gefunden wie man ein "Grad"-Zeichen anzeigt.

Allerdings ist das Dallas-Beispiel für meine Zwecke wohl etwas Overkill. Ich werde die
Sache mal von ganz klein neu anfangen und dann Stück für Stück erweitern.

mfg

Frank

Hallo,

dann will ich mal meinen ersten Versuch zum Thema Ni/CrNi-Thermometer
vorstellen:

Ich hoffe daß die Kommentare ausreichend selbsterkärend sind.

// basiert auf einem sketch von adafruit und mehreren examples
// Display ist ueber i2c backpack von adafruit angeschlossen
#include <OneWire.h>
#include <DallasTemperature.h>

// include the library code:
#include "Wire.h"
#include "LiquidCrystal.h"

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
// das hier habe ich so gelassen
#define TEMPERATURE_PRECISION 9

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress addr;

// Connect via i2c, default address #0 (A0-A2 not jumpered)
LiquidCrystal lcd(0);

void setup(void)
{
  // set up the LCD's number of rows and columns:
  lcd.begin(20, 2);
  // Start up the library
  sensors.begin();
}

void loop(void)
{
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  sensors.requestTemperatures(); // Send the command to get temperatures
  // schreibe die Temperaturen aufs display in zeile 1 und 2
  for (uint8_t s = 0; s < sensors.getDeviceCount(); s++) {
    lcd.setCursor(0, s);
    lcd.print(sensors.getTempCByIndex(s));
    lcd.print(char(223)); lcd.print("C ");
  }
}

Nichts Besonderes aber für mich schon. Jedenfalls funktioniert es.
Als Nächstes werde ich wohl auf 4 Sensoren erweitern und das 16x4 Display
ausprobieren.

mfg

Frank

Hallo,

einige kleine Änderungen am Programm:

/*  basiert auf einem sketch von adafruit und mehreren examples
Display ist ueber i2c backpack angeschlossen
  The circuit:
 * 5V to Arduino 5V pin
 * GND to Arduino GND pin
 * CLK to Analog #5
 * DAT to Analog #4
 */
 
#include <OneWire.h>
#include <DallasTemperature.h>

// include the library code:
#include "Wire.h"
#include "LiquidCrystal.h"

// these constants won't change.  But you can change the size of
// your LCD using them:
const int numRows = 4;
const int numCols = 16;

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
// das hier habe ich so gelassen
#define TEMPERATURE_PRECISION 9

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress addr;

// Connect via i2c, default address #0 (A0-A2 not jumpered)
LiquidCrystal lcd(0);

void setup(void)
{
  // set up the LCD's number of rows and columns:
  lcd.begin(numCols, numRows);
  // Start up the library
  sensors.begin();
}

void loop(void)
{
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  sensors.requestTemperatures(); // Send the command to get temperatures
  // schreibe die Temperaturen aufs display 
  for (uint8_t s = 0; s < sensors.getDeviceCount(); s++) {
    if (s < 2) {
      lcd.setCursor(0, s);  // first 2 linesof 16x4 display
    }
    else {
      lcd.setCursor(-4, s); // lines 3 and 4 of 16x4 display
    }
    lcd.print(sensors.getTempCByIndex(s));
    lcd.print(char(223)); lcd.print("C ");
  }
}

Irgendwie sollte ich noch die Nummer des jeweiligen Sensors
vor der Temperatur einfügen.

mfg

Frank

Hallo,

kurze Meldung nach längerer Pause:

Kleinere Verfeinerungen:

/*  basiert auf einem sketch von adafruit und mehreren examples
Display ist ueber i2c backpack angeschlossen
  The circuit:
 * 5V to Arduino 5V pin
 * GND to Arduino GND pin
 * CLK to Analog #5
 * DAT to Analog #4
 */

#include <OneWire.h>
#include <DallasTemperature.h>

// include the library code:
#include "Wire.h"
#include "LiquidCrystal.h"

// these constants won't change.  But you can change the size of
// your LCD using them:
const int numRows = 4;
const int numCols = 16;

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2
// das hier habe ich so gelassen
#define TEMPERATURE_PRECISION 9

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress addr;

// Connect via i2c, default address #0 (A0-A2 not jumpered)
LiquidCrystal lcd(0);

void setup(void)
{
  // set up the LCD's number of rows and columns:
  lcd.begin(numCols, numRows);
  // Start up the library
  sensors.begin();
}

void loop(void)
{
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  sensors.requestTemperatures(); // Send the command to get temperatures
  // schreibe die Temperaturen aufs display
  for (uint8_t s = 0; s < sensors.getDeviceCount(); s++) {
    if (s < 2) {
      lcd.setCursor(0, s);  // first 2 linesof 16x4 display
    }
    else {
      lcd.setCursor(-4, s); // lines 3 and 4 of 16x4 display
    }
    lcd.print("T"); lcd.print(s + 1); lcd.print(" ");
    lcd.print(sensors.getTempCByIndex(s),1);
    lcd.print(char(223)); lcd.print("C ");
  }
}

Mittlerweile ist der Adafruit RTC/Loggingshield angekommen.
Habe zuerst die Examples für RTC und SD-Card probiert.

Funktioniert alles, muss ich noch sehen wie ich den Examplecode
in mein Programm einbaue. Ich will kein Logging direkt vom
Einschalten sondern wenn ich einen Schalter/Taster drücke.

Ausserdem sollte das Intervall beim Loggen einstellbar sein.

mfg

Frank