INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Auf SD-Karte registrierende Waage
05.02.2013, 22:18 (Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2013 18:36 von Apus_Apus.)
Beitrag #9
RE: Auf SD-Karte registrierende Waage
Hallo,
um mich meinem Ziel ein weiteres Stück zu nähern, versuche ich mit den Informationen die zu der Waage zu finden sind zurechtzukommen.
   
Bevor ich damit anfange, wollte ich schon mal wissen, ob außer den Files im File-1357318777.zip noch weitere Sketches benötigt werden.

Mein Arduino UNO - Set hat auch ein LCD Keypad.
Das entspricht nicht dem LCD-Display, das in den Bildern zur Waage gezeigt wird.
   

   
Einen solchen Aufbau, hat es somit schon einmal gegeben.
Muss ich nun aus den LIBs die Pinbelegung der Hardware selbst heraus suchen, oder gibt es dazu auch einen "SCHALTPLAN"?
Bevor ich es mit dem Keypad versuche, werde ich vorher ein identisches Display besorgen.
Um es einfacher zu machen, falls sich meinen Fragen jemand annehmen will, kopiere ich auch schon die Codes aus dem Zip-File hier hinein.
Im Hx711 Ordner stehen
examples ; Hx711.ccp & Hx711.h

Code:
/*
* Hx711.cpp
*
*  Created on: Oct 31, 2012
*      Author: agu
*/

#include "Hx711.h"

Hx711::Hx711(uint8_t pin_dout, uint8_t pin_slk) :
        _pin_dout(pin_dout), _pin_slk(pin_slk)
{
    pinMode(_pin_slk, OUTPUT);
    pinMode(_pin_dout, INPUT);

    digitalWrite(_pin_slk, HIGH);
    delayMicroseconds(100);
    digitalWrite(_pin_slk, LOW);

    averageValue();
    this->setOffset(averageValue());
    this->setScale();
}

Hx711::~Hx711()
{

}

long Hx711::averageValue(byte times)
{
    long sum = 0;
    for (byte i = 0; i < times; i++)
    {
        sum += getValue();
    }

    return sum / times;
}

long Hx711::getValue()
{
    byte data[3];

    while (digitalRead(_pin_dout))
        ;

    for (byte j = 0; j < 3; j++)
    {
        for (byte i = 0; i < 8; i++)
        {
            digitalWrite(_pin_slk, HIGH);
            bitWrite(data[2 - j], 7 - i, digitalRead(_pin_dout));
            digitalWrite(_pin_slk, LOW);
        }
    }

    digitalWrite(_pin_slk, HIGH);
    digitalWrite(_pin_slk, LOW);

    return ((long) data[2] << 16) | ((long) data[1] << 8) | (long) data[0];
}

void Hx711::setOffset(long offset)
{
    _offset = offset;
}

void Hx711::setScale(float scale)
{
    _scale = scale;
}

float Hx711::getGram()
{
    long val = (averageValue() - _offset);
    return (float) val / _scale;
}

zweiter Code:

Code:
#ifndef HX711_H_
#define HX711_H_

#include "Arduino.h"

class Hx711
{
public:
    Hx711(uint8_t pin_din, uint8_t pin_slk);
    virtual ~Hx711();
    long getValue();
    long averageValue(byte times = 32);
    void setOffset(long offset);
    void setScale(float scale = 742.f);
    float getGram();

private:
    const uint8_t _pin_dout;
    const uint8_t _pin_slk;
    long _offset;
    float _scale;
};

#endif /* HX711_H_ */

in Examples stehen LiquidCrystalScale und SerialScale beide als *ino

Code:
/* sample for digital weight scale of hx711, display with a HD44780 liquid crtstal monitor
*
* hardware design: syyyd
* available at http://syyyd.taobao.com
*
* library design: Weihong Guan (@aguegu)
* http://aguegu.net
*
* library host on
* https://github.com/aguegu/Arduino
*/

// Hx711.DOUT - pin #A1
// Hx711.SCK - pin #A0

// LCD.RS - pin 12
// LCD.En - pin 11
// LCD.D4 - pin 5
// LCD.D5 - pin 4
// LCD.D6 - pin 3
// LCD.D7 - pin 2

#include <LiquidCrystal.h>
#include <Hx711.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Hx711 scale(A1, A0);

void setup() {

  lcd.begin(16, 2);

}

void loop() {

  lcd.setCursor(0, 0);
  lcd.print(scale.getGram(), 1);
  lcd.print(" g");
  lcd.print("       ");

  delay(200);
}

Code:
/* sample for digital weight scale of hx711, display with a HD44780 liquid crtstal monitor
*
* hardware design: syyyd
* available at http://syyyd.taobao.com
*
* library design: Weihong Guan (@aguegu)
* http://aguegu.net
*
* library host on
* https://github.com/aguegu/Arduino
*/

// Hx711.DOUT - pin 9
// Hx711.SCK - pin 10


#include <Hx711.h>


Hx711 scale(9,10);

void setup() {
  Serial.begin(9600);
  scale.setScale(705.0f);
}

void loop() {

  double weigth = scale.getGram();
  
  Serial.println(weigth,1);


  delay(200);
}

Meine konkrete Frage: Reicht das an Informationen um die Waage zum Laufen (....Wiegen.....) zu bringen?

Bevor ich versuchen kann die PIN Belegung an das LCD Keypad anzupassen wenn es nötig und möglich ist, hätte ich gerne gewusst ob mir noch andere Informationen fehlen.

Gruß, Apus²


8.05.2013
ich habe mir die beiden letzten ino -Codes noch mal angesehen. Vermutlich brauche ich davon nur einen.
Es hängt davon ab, wie ich das LCD Display anschließe.
Kann mir das vielleicht doch jemand erklären, bevor ich es selbst heraus finde?

Gruß, Apus²
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.02.2013, 18:24 (Dieser Beitrag wurde zuletzt bearbeitet: 11.02.2013 22:25 von Apus_Apus.)
Beitrag #10
Auf SD-Karte registrierende Waage
Inzwischen habe ich auch meine „Anfänger-Fehler“ erkannt.
Wie es besser gemacht wird, habe ich auf einer PDF -Seite zusammengefasst.
Wer mit mehr "Wissen" da mal drüber schauen mag, schreibt mir vielleicht eine PN. (?)

Den Key-Test bekomme ich inzwischen zum Laufen.

für
Arduino UNO R3
Arduino Duemilanove
Arduino MEGA 2560

Auch von vier DS18B20 Sensoren, kann ich mir mit einem anderen Sketch die diese Daten auf dem PC-Monitor anschauen.

Code:
ROM = 28 FD 48 CA 3 0 0 37
  Chip = DS18B20
  Data = 1 33 1 4B 46 7F FF D 10 8  CRC=8
  Temperature = 19.19 Celsius, 66.54 Fahrenheit
ROM = 28 13 50 CA 3 0 0 4F
  Chip = DS18B20
  Data = 1 38 1 4B 46 7F FF 8 10 18  CRC=18
  Temperature = 19.50 Celsius, 67.10 Fahrenheit
ROM = 28 17 88 AA 3 0 0 63
  Chip = DS18B20
  Data = 1 38 1 4B 46 7F FF 8 10 18  CRC=18
  Temperature = 19.50 Celsius, 67.10 Fahrenheit
ROM = 28 CF 1E CA 3 0 0 BD
  Chip = DS18B20
  Data = 1 36 1 4B 46 7F FF A 10 30  CRC=30
  Temperature = 19.37 Celsius, 66.87 Fahrenheit
No more addresses.
Jetzt versuche ich sie auch auf dem Keypad - Display zu zeigen.


Der Sketch-Code zur Apus² - Waage lässt sich kompilieren, nur das empfohlene Keypad -Shield,
hat vorbelegte PINS, die nicht zum Waage-Code passen. Auch mit der PIN - Änderung, kann ich den Sketch down laden.

Aber wenn ich den Code bei laufendem Key-Test lade, sehe ich nur dann danach an der Stelle an der im Display,
die Messwerte erscheinen sollen, lebhaft verschiedene Zeichen im Wechsel. Nach dem RESET sehe ich das dann nicht mehr.

Momentan ist mir noch ein Rätsel, wo ich im Code den Fehler suchen soll.
Hier habe ich den (nur für die PINS geänderten) Code abgelegt, falls auch mal jemand rein schauen mag. (?)
So ist der Sketch mit den libs in meiner LIBRARY abgelegt.
[strike]https://dl.dropbox.com/u/87871427/Hx711.zip[/strike]

EDIT: Extern verlinkte Datei entfernt und als Anhang gespeichert

.zip  Hx711.zip (Größe: 3,48 KB / Downloads: 250)
Gruß, Apus²

Weil die originale Zip-Datei genau so heißt, habe ich eben mal nachgeschaut. Es sind die geänderten Dateien enthalten. Danke!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2013, 19:32 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2013 22:57 von Apus_Apus.)
Beitrag #11
Smile RE: Auf SD-Karte registrierende Waage
    @ alle Interessierte .....

inzwischen habe ich einige Hürden genommen.

Einen Test-Sketch für das Keypad-Shield bekam ich zum Laufen.

Mit einem weiteren Sketch, kann ich inzwischen am Serial Monitor die Daten und Temperaturwerte der DS18B20 Sensoren auslesen.

z. B.:
Code:
ROM = 28 FD 48 CA 3 0 0 37
  Chip = DS18B20
  Data = 1 52 1 4B 46 7F FF E 10 FF  CRC=FF
  Temperature = 21.12 Celsius, 70.02 Fahrenheit
ROM = 28 13 50 CA 3 0 0 4F
  Chip = DS18B20
  Data = 1 54 1 4B 46 7F FF C 10 FD  CRC=FD
  Temperature = 21.25 Celsius, 70.25 Fahrenheit
ROM = 28 17 88 AA 3 0 0 63
  Chip = DS18B20
  Data = 1 2C 1 4B 46 7F FF 4 10 14  CRC=14
  Temperature = 18.75 Celsius, 65.75 Fahrenheit
ROM = 28 CF 1E CA 3 0 0 BD
  Chip = DS18B20
  Data = 1 56 1 4B 46 7F FF A 10 D1  CRC=D1
  Temperature = 21.37 Celsius, 70.47 Fahrenheit
No more addresses.

Die Waage kann inzwischen wiegen. Smile
Meine Vermutung, dass ich mit dem originalen Code und einem einfachen Display nicht in die Problem gelaufen wäre hat sich mir bestätigt.

Ich freue mich natürlich es selbst herausgefunden zu haben, aber diese Freude hätte ich aber gerne auch jemandem gegönnt. Angel

Der Grund war die abweichende PIN-Belegung beim Keypad - Shield.
Im originalen Sketch steht:

Code:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Hx711 scale(A1, A0);

Für ein LCD Keypad Shield müssen die Zeilen so abgeändert werden:
Code:
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
Hx711 scale(A2, A1);

Hier ist auch die Legende zu den PINS
Code:
// #A1 & #A0 is shiftet, #A0 is used for the key function
// for the cable of "scale one", the used coulors
// Hx711.SCK    - pin #A1   >>  weiss  
// Hx711.DOUT  - pin #A2   >>  orange  
// Hx711 Vcc        PIN 5V    >>  red    
// Hx711 GND      PIN GND  >>  brown

// LCD.RS - pin 8
// LCD.En - pin 9
// the order and numbers of these pins are changed too.
// LCD.D4 - pin 4
// LCD.D5 - pin 5
// LCD.D6 - pin 6
// LCD.D7 - pin 7

Mit diesen Änderungen funktioniert die Waage und erstaunlich gut.
Unbelastet wird beim Einschalten die Waage "genullt".
Mit Reset ist deshalb ein Tara und Zuwiegen möglich.
Die Abweichungen sind kleiner als 1,5 % FS
Das werde ich aber noch korrigieren und verbessern.
Belatungen bis 4000gr, zeigen danach keine Nullpunktänderung.
======================================
Inzwischen habe ich auch die RTC auf dem SD-Karte Memoire - Shield aktiviert.
Über den Seriellen Monitor im Arduino IDE kann ich sie mit einem Sketch stellen
und auch Zeit und Datum anzeigen.

Auf dem Arduino Mega läuft das Sketch allerdings nicht. HuhHuh

Dafür auf dem Arduino UNO R3 sofort.Big Grin

Die Anzeige der Uhrzeit habe ich selbst um die Anzeige des Datums erweitert.

Mit den Ergebnissen bin ich für heute erst mal zufrieden.Smile

Wer Interesse an diesen RTC - Sketches mit der Einstellmöglichkeit hat, kann sich hier melden.

Gruß, Apus²
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.02.2013, 19:02 (Dieser Beitrag wurde zuletzt bearbeitet: 19.02.2013 15:41 von Apus_Apus.)
Beitrag #12
RE: Auf SD-Karte registrierende Waage
Heute habe ich den Keypad-Test für meine Zwecke umgeschrieben.
Ich kann damit den Wiegevorgang, den ich erfassen will, zum Testen der Datenspeicherung simulieren. Idea
Mit den Tasten "UP" und "DOWN" kann ich maximal 2 x hintereinander 45 addieren und auch 2 x 40 vom WERT wieder abziehen, so das sich die Summe nur mit einem einzelnen Wechsel "UP-DOWN" stetig um 5 erhöht. Die Werte sind erst mal nur für den Test festgelegt.

Jetzt suche ich zu dem Snootlabs Memoire Shield eindeutige technische Informationen, damit ich in der Kombination von Arduino UNO R3 , dem Snootlabs Memoire Shield und dem Keypad Shield nicht wieder PIN - Probleme bekomme.
Wenn es dazu schon Fritzing-Files gibt, wäre ideal, PDF ist auch ok.

PIN A1 und A2 werden von mir schon für die Waage gebraucht.

Gruß, Apus²

Inzwischen habe ich mich schon mal selbst auf die Suche gemacht:

A0 ist für die KEYs belegt
A1 & A2 durch die Waage
A3 ............ noch frei
A4 und A5 vom SD Shield mit der RTC

13, /SCK....{ Clock............} werden bei beiden Shields für SPI genutzt
12, /MISO..{ Data Input.....} .................."
11, /MOSI~{ Data Output...} .................."
10, / SS ~..{ Selct Device...} .................."

// info hierzu ist da zu lesen:
// http://www.pjrc.com/teensy/td_libs_SPI.html

9 ~ werden vom SD-Shield benutzt. [> ......... da hängt mit R1 = 68 Ohm nur eine Diode dran.]
8,9, 4,5,6,7 sind vom Display belegt.
Ich habe seit heute noch einen Schaltplan und deshalb hinzugefügt.
Weiß es jemand genauer, ob da schon Konflikte zusehen sind?
Gibt es hierzu noch bessere Informationen ?
           
.pdf  Schéma Mémoire.pdf (Größe: 43,72 KB / Downloads: 183)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.02.2013, 08:42 (Dieser Beitrag wurde zuletzt bearbeitet: 22.02.2013 08:48 von Apus_Apus.)
Beitrag #13
RE: Auf SD-Karte registrierende Waage
Zwischenbericht.

Für "Arduino - Könner" ist das sicher keine große Sache, was ich da mache.
Inzwischen habe ich den mechanischen Einbau der Alu-Wanne mit dem Biegebalken-Sensor in meinen Kasten gelöst.
   
Es lässt sich damit nun ohne Probleme wiegen.

Das SD-Logger-Shield ist noch nicht integriert.
Damit ich schon mal eine Messung notieren kann habe ich die Ausgabe auf dem PC Monitor alternativ eingebunden.
   
   

Schade ist, dass ich so wenig Resonaz habe.
Durch die vielen Waage-Bau-Versuche im Internet aus der Vergangenheit, hatte ich mir mehr Interesse und Hilfe versprochen.
Gerade als NEWBIE mit Arduino, kann ich jeden guten Tipp gebrauchen.Idea
Besonders jetzt, da ich nun auch endlich das SD-Shield einsetzen möchte (muss).Huh

Guß, APUS² Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.02.2013, 17:32 (Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2013 08:06 von Apus_Apus.)
Beitrag #14
Smile RE: Auf SD-Karte registrierende Waage
Thema Apus²-Waage

Mit der Hoffnung, dass sich doch noch jemand findet und bereit ist einen hilfreichen Tipp zu liefern, schreibe ich welche kleine Hürde ich heute genommen habe.

Ich kann inzwischen mit einem Sketch die SD-Karte testen.
Der dazugehörige Dialog erscheint dann auf dem Serial-PC-Monitor
und sieht dann so aus:

Code:
Initializing SD card...
Card type: SDHC

Volume type is FAT32

Volume size (bytes): 3956801536
Volume size (Kbytes): 3864064
Volume size (Mbytes): 3773

Files found on the card (name, date and size in bytes):
DATALOG.TXT   2000-01-01 01:00:00 264

Passend dazu habe ich auch einen Logger-Test ausprobiert.

Der Serielle_Monitor Dialog sah so aus:

Code:
Initializing SD card...card initialized.
1023,495,1023
1023,511,1023
1023,531,1023
1023,547,1023
1023,559,1023
1023,582,1023
144,527,1023
144,511,1023
144,484,1023
144,471,1023
144,449,1023
1023,497,

Diese Daten fand ich dann auch im Daten-File. DATALOG.TXT

Dieses Testsketch fragt alle 500ms A0, A1, A2 ab und speichert die Daten.
Der erste Wert von A0 zeigt mit 144 dass die "UP-Taste" vom Keypad Shield gedrückt wurde.

Jetzt muss ich es nur anpassen und noch mit den anderen Sketchen kombinieren:Huh

Die Waage-Gewichte und die RTC Daten gemeinsam in dem Daten-File zu speichern ist das nächste zu lösende Problem.
Theoretisch habe ich zwar schon gelesen, dass .....................................

void setup() und void loop() nur einmal vorkommen dürfen,

void wiegen() , void loop wiegen()

und
void dataSpeichern , void loop dataspeichern .............. quasi Subsketche sind, nur wie das im Mainsketch angeordnet sein muss, ist mir immer noch nicht fehlerfrei verständlich.

Mögliche Beispiele waren mir noch zu komplex und für mein erstes Verstehen noch ungeeignet.

An diesem Punkt, würde ich Hilfe sehr gerne annehmen.

Gruß, Apus²Smile

So sieht das Ergebnis eines Wiege - Tests aus, wenn ich die Werte nach Exel übertrage.
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.02.2013, 10:24 (Dieser Beitrag wurde zuletzt bearbeitet: 28.02.2013 11:13 von Apus_Apus.)
Beitrag #15
RE: Auf SD-Karte registrierende Waage
(04.02.2013 11:14)PLAY-ZONE schrieb:  Hallo Apus_Apus,

zu deinem Display: Das scheint ein "normales" LCD zu sein, welches mit der Arduino LCD-Library angesprochen werden kann (das von deinem LCD verwendete Chipset KS0066U ist mit dem HD44780 kompatibel).

Hier ein Tutorial dazu: http://arduino.cc/en/Tutorial/LiquidCrystal

Danke, gestern habe ich mich nochmal daran versucht.
Ich habe konsequent die PIN-Belegung die auch das Keypad-Shield benutzt übernommen.

// LCD.RS - pin 8
// LCD.En - pin 9
// LCD.D4 - pin 4
// LCD.D5 - pin 5
// LCD.D6 - pin 6
// LCD.D7 - pin 7

// LCD.RW - GND

//LCD A/K = VDD/VSS

[attachment=72]

Diese Displays benötigen bei Tageslicht keine Beleuchtung.

   

Gruß, Apus²


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.02.2013, 14:42 (Dieser Beitrag wurde zuletzt bearbeitet: 01.03.2013 09:27 von Apus_Apus.)
Beitrag #16
RE: Auf SD-Karte registrierende Waage
Weil ich nicht weiß, wie lange ich noch brauche um den Sketch vollständig zu programmieren. Habe ich vorsorglich auch eine zweite Waage bestellt.

Den Kasten mit der Waage muss ich komplett vorbereiten, dann sind damit Wiegetest bei Programmänderungen zu umständlich. Mit der zweiten Waage habe ich es einfacher.

Sie bekam ich heute und konnte sie gleich zusammen mit den DV16400 testen.
Erfreulich ist, das nun beide Waagen ohne weitere Korrektur für beide Batterien das korrekte Gewicht anzeigen.

   

Die neue Waage ist oben am Arduino Mega angeschlossen.
Links ist die eine Batterie auf dem Biegebalken zu sehen.

Die Waage im Kasten ist unten im Bild am Adruino 2009 angeschlossen.
Die Batterien haben eine Gewichtsdifferenz von 0,7 Gramm.

Diese Waage ist eine erstaunlich präzise Konstruktion. Wink

Gruß, Apus²

   
Weil ich zu dem DISPLAY keine Angaben fand aus denen hervorgeht, wie die Corsor-Position zu bestimmen ist, habe ich es mit einem Sketch ausprobiert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste