Skip to content

Commit e7e5609

Browse files
committed
Waage fertig
1 parent b0790f9 commit e7e5609

2 files changed

Lines changed: 141 additions & 0 deletions

File tree

00Informatik/00Mikrocontroller/Wahlkurs/15Waage/index.html

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ <h2 id="quellen">Quellen</h2>
148148
<h2 id="messprinzip">Messprinzip</h2>
149149
<p>Der Sensor wird an einem Ende fest mit der Bodenplatte verschraubt. Das andere Ende schwebt frei in der Luft. Wird auf dieses Ende ein Gewicht aufgelegt, dann verbiegt sich der Sensor leicht. Die Dehnungsmessstreifen verändern ihren Abstand. Diese Änderung bewirkt eine geringe Änderung des elektrischen Widerstands des Systems.</p>
150150
<h2 id="sketch">Sketch</h2>
151+
<p>Der Sketch verwendet die <strong>HX711_ADC</strong>-Bibliothekt von <strong>Olav Kalthovd</strong>. Sie kann über den Bibliotheksmanager installiert werden.</p>
151152
<pre><code class="language-C++"><span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;HX711_ADC.h&gt;</span></span>
152153

153154
<span class="hljs-comment">/*--------------------------------------------------------------
@@ -202,6 +203,73 @@ <h2 id="sketch">Sketch</h2>
202203
}
203204
}
204205
</code></pre>
206+
<h2 id="glättung-der-messwerte">Glättung der Messwerte</h2>
207+
<p>Um die Messwerte zu glätten, werden</p>
208+
<ul>
209+
<li>alle Werte durch 1000 geteilt.</li>
210+
<li>immer 10 Werte addiert und daraus ein Mittelwert gebildet.</li>
211+
<li>das Ergebnis auf eine ganze Zahl abgerundet.</li>
212+
</ul>
213+
<pre><code class="language-C++">
214+
<span class="hljs-meta">#<span class="hljs-keyword">include</span> <span class="hljs-string">&lt;HX711_ADC.h&gt;</span></span>
215+
216+
<span class="hljs-comment">/*--------------------------------------------------------------
217+
Pin‑Belegung für den HX711
218+
--------------------------------------------------------------*/</span>
219+
<span class="hljs-type">const</span> <span class="hljs-type">int</span> HX711_dout = <span class="hljs-number">4</span>; <span class="hljs-comment">// Datenleitung (DOUT) des HX711, verbunden mit Pin 4 des MCU</span>
220+
<span class="hljs-type">const</span> <span class="hljs-type">int</span> HX711_sck = <span class="hljs-number">5</span>; <span class="hljs-comment">// Taktleitung (SCK) des HX711, verbunden mit Pin 5 des MCU</span>
221+
222+
<span class="hljs-comment">/*--------------------------------------------------------------
223+
Objektinstanz des HX711‑ADC
224+
--------------------------------------------------------------*/</span>
225+
<span class="hljs-function">HX711_ADC <span class="hljs-title">sensor</span><span class="hljs-params">(HX711_dout, HX711_sck)</span></span>;
226+
227+
<span class="hljs-comment">/**
228+
* @brief Initialisiert die serielle Schnittstelle und den HX711,
229+
* führt die Start‑Sequenz inkl. Tara‑Durchführung aus
230+
*/</span>
231+
232+
<span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">setup</span><span class="hljs-params">()</span> </span>{
233+
Serial.<span class="hljs-built_in">begin</span>(<span class="hljs-number">9600</span>); <span class="hljs-comment">// Serielle Kommunikation mit 9600 baud starten</span>
234+
235+
sensor.<span class="hljs-built_in">begin</span>(); <span class="hljs-comment">// HX711‑Modul initialisieren</span>
236+
<span class="hljs-built_in">delay</span>(<span class="hljs-number">500</span>);
237+
<span class="hljs-comment">/*
238+
Sensor wird eingeschaltet und tariert, d.h. auf 0 gesetzt
239+
2000 = Pause zum Stabilisieren
240+
true = Tarierung soll durchgeführt werden.
241+
*/</span>
242+
sensor.<span class="hljs-built_in">start</span>(<span class="hljs-number">2000</span>, <span class="hljs-literal">true</span>);
243+
244+
<span class="hljs-comment">// Prüfen, ob beim Start ein Timeout aufgetreten ist</span>
245+
<span class="hljs-keyword">if</span> (sensor.<span class="hljs-built_in">getTareTimeoutFlag</span>() || sensor.<span class="hljs-built_in">getSignalTimeoutFlag</span>()) {
246+
Serial.<span class="hljs-built_in">println</span>(<span class="hljs-string">&quot;Sensor antwortet nicht, prüfe die Verkabelung und die Pins&quot;</span>);
247+
<span class="hljs-keyword">while</span> (<span class="hljs-literal">true</span>)
248+
; <span class="hljs-comment">// Endlosschleife bei Fehlfunktion</span>
249+
} <span class="hljs-keyword">else</span> {
250+
sensor.<span class="hljs-built_in">setCalFactor</span>(<span class="hljs-number">1.0</span>); <span class="hljs-comment">// Anfangs‑Kalibrierungsfaktor (kann später überschrieben werden)</span>
251+
Serial.<span class="hljs-built_in">println</span>(<span class="hljs-string">&quot;Kalbrierungsfaktor auf 1.0 gesetzt&quot;</span>);
252+
}
253+
}
254+
255+
<span class="hljs-comment">/**
256+
* @brief Hauptschleife: Liest Messwerte aus, gibt sie seriell aus
257+
*/</span>
258+
259+
<span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">loop</span><span class="hljs-params">()</span> </span>{
260+
<span class="hljs-type">float</span> wert = <span class="hljs-number">0.0</span>;
261+
<span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">10</span>; i++) {
262+
<span class="hljs-keyword">while</span> (!sensor.<span class="hljs-built_in">update</span>()) {} <span class="hljs-comment">// Solange keine neuen Daten verfügbar sind: warten</span>
263+
<span class="hljs-type">float</span> w = sensor.<span class="hljs-built_in">getData</span>(); <span class="hljs-comment">// Messwert als Kommazahl</span>
264+
w = w / <span class="hljs-number">1000</span>; <span class="hljs-comment">// Messwert durch 1000 teilen, um Schwankungen zu reduzieren</span>
265+
wert = wert + w; <span class="hljs-comment">// Messwert addieren</span>
266+
<span class="hljs-keyword">while</span> (sensor.<span class="hljs-built_in">update</span>()) {} <span class="hljs-comment">// Solange warten, bis keine Daten mehr verfügbar sind -&gt; Daten werden nur einmal gelesen</span>
267+
}
268+
wert = wert / <span class="hljs-number">10</span>; <span class="hljs-comment">// Mittelwert aus den 10 Messungen</span>
269+
270+
Serial.<span class="hljs-built_in">println</span>((<span class="hljs-type">int</span>)wert); <span class="hljs-comment">// Messwert als ganze Zahl ausgeben</span>
271+
}
272+
</code></pre>
205273
<h2 id="experimente">Experimente</h2>
206274
<ol>
207275
<li>Notiere den Wert, den der Sensor ohne Belastung liefert.</li>

00Informatik/00Mikrocontroller/Wahlkurs/15Waage/index.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ Eine Druckvorlage für eine einfache Waage findest du hier:
1313
Der Sensor wird an einem Ende fest mit der Bodenplatte verschraubt. Das andere Ende schwebt frei in der Luft. Wird auf dieses Ende ein Gewicht aufgelegt, dann verbiegt sich der Sensor leicht. Die Dehnungsmessstreifen verändern ihren Abstand. Diese Änderung bewirkt eine geringe Änderung des elektrischen Widerstands des Systems.
1414

1515
## Sketch
16+
17+
Der Sketch verwendet die **HX711_ADC**-Bibliothekt von **Olav Kalthovd**. Sie kann über den Bibliotheksmanager installiert werden.
18+
1619
```C++
1720
#include <HX711_ADC.h>
1821

@@ -69,6 +72,76 @@ void loop() {
6972
}
7073
```
7174
75+
## Glättung der Messwerte
76+
Um die Messwerte zu glätten, werden
77+
- alle Werte durch 1000 geteilt.
78+
- immer 10 Werte addiert und daraus ein Mittelwert gebildet.
79+
- das Ergebnis auf eine ganze Zahl abgerundet.
80+
81+
82+
```C++
83+
84+
#include <HX711_ADC.h>
85+
86+
/*--------------------------------------------------------------
87+
Pin‑Belegung für den HX711
88+
--------------------------------------------------------------*/
89+
const int HX711_dout = 4; // Datenleitung (DOUT) des HX711, verbunden mit Pin 4 des MCU
90+
const int HX711_sck = 5; // Taktleitung (SCK) des HX711, verbunden mit Pin 5 des MCU
91+
92+
/*--------------------------------------------------------------
93+
Objektinstanz des HX711‑ADC
94+
--------------------------------------------------------------*/
95+
HX711_ADC sensor(HX711_dout, HX711_sck);
96+
97+
/**
98+
* @brief Initialisiert die serielle Schnittstelle und den HX711,
99+
* führt die Start‑Sequenz inkl. Tara‑Durchführung aus
100+
*/
101+
102+
void setup() {
103+
Serial.begin(9600); // Serielle Kommunikation mit 9600 baud starten
104+
105+
sensor.begin(); // HX711‑Modul initialisieren
106+
delay(500);
107+
/*
108+
Sensor wird eingeschaltet und tariert, d.h. auf 0 gesetzt
109+
2000 = Pause zum Stabilisieren
110+
true = Tarierung soll durchgeführt werden.
111+
*/
112+
sensor.start(2000, true);
113+
114+
// Prüfen, ob beim Start ein Timeout aufgetreten ist
115+
if (sensor.getTareTimeoutFlag() || sensor.getSignalTimeoutFlag()) {
116+
Serial.println("Sensor antwortet nicht, prüfe die Verkabelung und die Pins");
117+
while (true)
118+
; // Endlosschleife bei Fehlfunktion
119+
} else {
120+
sensor.setCalFactor(1.0); // Anfangs‑Kalibrierungsfaktor (kann später überschrieben werden)
121+
Serial.println("Kalbrierungsfaktor auf 1.0 gesetzt");
122+
}
123+
}
124+
125+
/**
126+
* @brief Hauptschleife: Liest Messwerte aus, gibt sie seriell aus
127+
*/
128+
129+
void loop() {
130+
float wert = 0.0;
131+
for (int i = 0; i < 10; i++) {
132+
while (!sensor.update()) {} // Solange keine neuen Daten verfügbar sind: warten
133+
float w = sensor.getData(); // Messwert als Kommazahl
134+
w = w / 1000; // Messwert durch 1000 teilen, um Schwankungen zu reduzieren
135+
wert = wert + w; // Messwert addieren
136+
while (sensor.update()) {} // Solange warten, bis keine Daten mehr verfügbar sind -> Daten werden nur einmal gelesen
137+
}
138+
wert = wert / 10; // Mittelwert aus den 10 Messungen
139+
140+
Serial.println((int)wert); // Messwert als ganze Zahl ausgeben
141+
}
142+
```
143+
144+
72145
## Experimente
73146
1. Notiere den Wert, den der Sensor ohne Belastung liefert.
74147
2. Lege anschließend bekannte Gewichte auf den Sensor und notiere ihre Messwerte.

0 commit comments

Comments
 (0)