From 74110a2b935aa30ee4d8db200c28f8252e7e5b52 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Wed, 1 Jan 2025 18:10:10 +0100 Subject: [PATCH] Initial commit --- .gitignore | 6 +++ .vscode/extensions.json | 10 +++++ README.md | 62 +++++++++++++++++++++++++++ circuit-diagram/circuit-diagram.spl8 | Bin 0 -> 7252 bytes images/image_1.png | Bin 0 -> 53175 bytes include/README | 39 +++++++++++++++++ lib/README | 46 ++++++++++++++++++++ platformio.ini | 21 +++++++++ src/main.cpp | 50 +++++++++++++++++++++ test/README | 11 +++++ 10 files changed, 245 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 README.md create mode 100644 circuit-diagram/circuit-diagram.spl8 create mode 100644 images/image_1.png create mode 100644 include/README create mode 100644 lib/README create mode 100644 platformio.ini create mode 100644 src/main.cpp create mode 100644 test/README diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8256337 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch +settings-my-ignore.h diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..080e70d --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..137dcf3 --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# Ultraschall-Entfernungsmesser mit OLED-Anzeige + +Dieses Programm misst Entfernungen mit einem HC-SR04-Ultraschallsensor und zeigt die Werte auf einem SH1106 OLED-Display an. Es wurde für den ESP8266 (NodeMCU) entwickelt und nutzt die U8g2-Bibliothek zur Anzeige. + +Ein Projekt zur Visualisierung von Energiedaten von **Tasmota-Messgeräten** mit einem **ESP8266** und einem 1602 LCD. +Das Script fragt periodisch zwei Tasmota-Geräte nach ihrer gemessenen Leistung und zeigt diese auf dem Display an. +Ein einfacher Energie-Monitor. + +## Funktionen + +- Misst Entfernungen in Zentimetern (cm). + +- Zeigt den gemessenen Wert in großer Schrift auf dem OLED-Display an. + +## Hardwareanforderungen + +1. ESP8266 NodeMCU +2. HC-SR04 Ultraschallsensor +3. SH1106 OLED-Display (128x64 Pixel) + +## Anschlüsse + +### SH1106 OLED-Display + +| Sensor-Pin | ESP8266-Pin | +|------------|-------------| +| VCC | 5V | +| GND | GND | +| TRIG | D6 (GPIO12) | +| ECHO | D5 (GPIO14) | + +### HC-SR04 Ultraschallsensor + +| Display-Pin | ESP8266-Pin | +|-------------|-------------| +| VCC | 5V | +| GND | GND | +| SDA | D2 (GPIO4) | +| SCL | D1 (GPIO5) | + + +Projektbild + +## Installation + +1. Bibliotheken installieren: +Stelle sicher, dass die folgende Bibliothek in deinem platformio.ini-Projekt installiert ist: +```cpp +lib_deps = + olikraus/U8g2 @ ^2.34.1 +``` +2. Code hochladen: + - Kopiere den Code aus der Hauptdatei in dein PlatformIO-Projekt. + - Verbinde den ESP8266 mit deinem Computer. + - Lade den Code auf den ESP8266 hoch., + + +## Nutzung + +1. Schließe die Hardware gemäß der oben angegebenen Tabelle an. +2. Starte das Programm. +3. Beobachte die gemessene Entfernung auf dem OLED-Display. \ No newline at end of file diff --git a/circuit-diagram/circuit-diagram.spl8 b/circuit-diagram/circuit-diagram.spl8 new file mode 100644 index 0000000000000000000000000000000000000000..6fd78e8c0b53085666c2b995b8acfe16b7ae534f GIT binary patch literal 7252 zcmbtZ4Nz3q6~3!Pi8@595;}rz93u(-@V8Kj6I^!hA}T))E+~pg*64Qq!4eFmT01_e z&;%ARf(W8SgHfwhW)%OL7|D>BP}X!BGo2x6QnAD)Ok#-EOeJmTIrrVSyqDQ`SGJFN zeD9s}-Z|er_ug~QyE}T>()5(fc`@%>2|Elj4E-MqmziW8DTZ?kF%k>eL>%Nr`1=qv zPr~zKh8`wu#)0H1a6bx#BZy&yN;fz-sN9_ZZ-*>|G*K0TjL8+W5byKsJ^A%Pf)ppg zsc-%gnE0E8nD>Es1z!Of$`u5;*nF@7JPIv?HKx1_rJ1CKK%x<*S0?ij04kHMAhOq5(ep~p(3gDP}V!sH5q zUOW@^N8t`Id(XN*Z_f})L2wOnz|la>MwXGK(E2zs5B^l6QIdYt-n~zEu0NZ4ePIQ; zSo~b~omAiL)t&XMNz18NpW#Pu^`lSnqmTBZf839Lia-xtDB1n!7yHqh{pb_@=x6)U zPxqq_qxxfMBaEADIDe_ae7Ht=KEHN0{{R@+Cf9lr7J8{L8UPo^#>MnJ(d?mvx1 zfD)6CL1W}}$#dyWX0y4Z|4K*5g+LgXI0FTfIfG=*AYRD871FfeGh>6THD`9hk`H4d z17Q%w87OGt3{0FsoRGn~N!FC2o~De0gX0ae93AFB7#KMN1u>K3D2U<=VucJQ6qdaC z#m{rn%Ub>uch?gh8wi6?U{C@c6*O`NM#dnUtPnCdoN(ovE`!awH|L|&+mjMX0%0(Y z$3VeQ&LEUAu=`{@(mZT;QTPfU9@5C*ZF zfr9fngZZ36qL4vp&ffPrX1N<&Sje`kfiQ^V3>1vz3}QKh1R(?C#%ZxV)Blxm zZqoPl-6zhT4}?JkXP{stXAsF5#0VKw-90n<(jN_}HShd-gZbuD@qsXyNKIRCBq|ue z8ALD!DNtXksw;G$8HxR!zxgsE_dWCRBmFmjo4X4aGwmU+aiv=D{4m|0hx1XviExeb ziEKV*L#1aIa#$W&X*Tvhmv;ON{h@rplrAj+xMLi|72E_r6-Ed|L+7g(<}j;F;oETt z+kijH6@`@Q z*YmCwkGdD0INXkh4l*AWbUfBZ9s}RfxK zp_3Sr3~n%k4$C0RN@xh#NMQ_p8qm)X^2_27pkaItRuKg;1pIsuhx{3ghWw&1L~L6P zlTIj{9HE7~|4|21*(D5-;z%2FW)SiK?7FagfXG_Xz|dz4I73O2wOWI$_aBE4;O?A) zrErZ~ZKYPBL9X;+Fd7Wvevpj8uor>`5q%mI?^)t-fUmM6l{>+TjD2B6(1T%AL6ira z|1N@A?8^ZaIw1d{+(Ab{PiMgL7SA?vG)12z$=S}kq#mU&^(^TqPkrO`>YXi1=U&25 zqB&To^oOuKJjHsKel~>u!oi^XKGVB&vn8ZF2p1Qh&Uw8K5h?KB9QB5y5<^W}vj zmrY-N(VkhBRJ;7j8q;H%2;dEif?mEf#ltp|^gL&wU;&lo1u7QejM+9XFQVt%K3cwP z&Hb)5xBfCb7B1)SAeI=54i(yARG{2WvEa%jStJKWhBz7ne>(a}PUCD#Yt?M?leS|! zhR4I>DF=TT1=wQtVgZ%q1sWdWc7Mhow6|B1*S&U$ZtmR8?#+%G zrq7&Q&7NO*$Iafa8|h~DW@cA1`@Ovt%pYm5VE*yG_Wa8f^>0tDgm>NG(@pXH*Q=`F z-D==eP0@b$oEqjYys3u!uVH-f9{Hgj`Qr1)AK%CJpgn9K+Q;^yKdg1I{ocs&Y|8JI zRU7jW{!F7c#RzdjNm53yc^Xs*O=I#3mh$XS@@;{iny}z_L>in9ao070WP@swR5=?sEl|8FgaQ(yjg9V2p*z~#5=sMy?^c)3YgV|b{ z1lj2s2$h1xvSY##Mwd^=kn`B#4II1ZU*KIkREo9y8g)O?N85<>HF$sDf+zme7t9}G G5B?8hLK5fz literal 0 HcmV?d00001 diff --git a/images/image_1.png b/images/image_1.png new file mode 100644 index 0000000000000000000000000000000000000000..45ba161d7c06c4062f4f06bc2e2efc7426760130 GIT binary patch literal 53175 zcmZ5{bzD?I_cscPG)i}abayHtr3iwAbR!Z=t*{~>Al;G@(kV#qf^@^u4ZC#5U3!rv zUY_TD-_QGget+C^=bkw;bIzQ(-#d5aOvKwauZZwz@v*S5h&0qy^sulV0$5nsM^CWt zImV6z#rF?bZ?*MR*_r5RX=ypwIaO6vrKP0>1%&Sf?(Xj9=jWgKHHwOgQkwd0ZEdx+ zwN93_VZq7Cqobqk?d_Y}3uk6zunM{EF0nY^;%jSb z2LqA(7W}ofwRiBcp@D(gKYudd84XeVNF42$O-X2fB8bGySsaOYKn-ENa~}cii&dUlp7NxLq&OcQ~$_2J>9Xf zv7n$J5nB;ZKFHMcgQ4O3y!^apU#!0f3(HE1wzT~H4EFir|HaeOgIwlyTzs6BmF1tc zKLNSFWo4wDojo;qPVy?D?3Y5Lmk@KI5s`U%gIJTPH_{- z3Hc4-=jKfMk;KWy%wXv+AtLzc?9+lOm0fmi==V@g7RHp+6bV`R%gcY{dhUub^-WDp zR3E@8p3lpgYrIW4Dl03STH6J}8dYT(m;xKWmNdld#Fho~>4oT#rt0L?)?xi+u(PwS zP4HvWb8s_V9is+gQn#Yn-*Nok`6`wKIRiP{^Fm_1Z66Sk{m2N8l;$74yY~&2Ez;Jzj=@}u zh1fbNE6Am2w#YjxUYy@-Fq(^cJ;9wvO*uf($~`Qu~6Ef*d^=-}ruA>WtJ6%XTWCm{g)3X$mjy z|1^NyX=o`l&SOXH9q*i=Bg06>v-JE&3`L@CfkEP$ABm7Eoq>{q!n?u~7{ye+d2VMu z3%>{>|Br4gEM_bXl^6P-7Y>j*&Wq|yxJN<8i9PJ$fi;WotekSgE>7z3E(nk&D-I`HG^6_Fvg#eHYj( zzqTw4zsGM#Uvk6_Qz9j)XYs(p6Hm^JUfmf@sOV#nRlpcLaG<+Me zOa|4O)6MJZ?35m_fcv^(Hp9&59s18sj|bov|~0ob&x3s(yz3MUU+qO1G5e|1@}SVCQ{z{l}vJr)8Tq|A8y6?bY6g`IcWPS!xu# z&8Vrp!UWyo`I>97kK6fvv_ut!U&w7)1*!N8b>F(#lT|6G=U=Z&zo-58&ykx>1GDr7 zjch!Tbu7>oWHL?`t0^q0iYs%{pMI584sJD922M`{=o7RIa<*WzrAMw~a%jKWR5f1_ zt!yP^3Txl-Bc}|>9lR;NK~J3)T?E*SC_0;~#h~

E+h-3*o%LC;i?cunV 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 Y0y|Gxc;xdM761SM07*qoM6N<$g0sNLLI3~& literal 0 HcmV?d00001 diff --git a/include/README b/include/README new file mode 100644 index 0000000..194dcd4 --- /dev/null +++ b/include/README @@ -0,0 +1,39 @@ + +This directory is intended for project header files. + +A header file is a file containing C declarations and macro definitions +to be shared between several project source files. You request the use of a +header file in your project source file (C, C++, etc) located in `src` folder +by including it, with the C preprocessing directive `#include'. + +```src/main.c + +#include "header.h" + +int main (void) +{ + ... +} +``` + +Including a header file produces the same results as copying the header file +into each source file that needs it. Such copying would be time-consuming +and error-prone. With a header file, the related declarations appear +in only one place. If they need to be changed, they can be changed in one +place, and programs that include the header file will automatically use the +new version when next recompiled. The header file eliminates the labor of +finding and changing all the copies as well as the risk that a failure to +find one copy will result in inconsistencies within a program. + +In C, the usual convention is to give header files names that end with `.h'. +It is most portable to use only letters, digits, dashes, and underscores in +header file names, and at most one dot. + +Read more about using header files in official GCC documentation: + +* Include Syntax +* Include Operation +* Once-Only Headers +* Computed Includes + +https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/lib/README b/lib/README new file mode 100644 index 0000000..2593a33 --- /dev/null +++ b/lib/README @@ -0,0 +1,46 @@ + +This directory is intended for project specific (private) libraries. +PlatformIO will compile them to static libraries and link into executable file. + +The source code of each library should be placed in an own separate directory +("lib/your_library_name/[here are source files]"). + +For example, see a structure of the following two libraries `Foo` and `Bar`: + +|--lib +| | +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html +| | +| |--Foo +| | |- Foo.c +| | |- Foo.h +| | +| |- README --> THIS FILE +| +|- platformio.ini +|--src + |- main.c + +and a contents of `src/main.c`: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +PlatformIO Library Dependency Finder will find automatically dependent +libraries scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 0000000..b044415 --- /dev/null +++ b/platformio.ini @@ -0,0 +1,21 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:nodemcuv2] +platform = espressif8266 +board = nodemcuv2 +framework = arduino +upload_speed = 115200 +monitor_speed = 115200 +lib_deps = + adafruit/Adafruit SSD1306 @ ^2.5.7 + adafruit/Adafruit GFX Library @ ^1.11.7 + adafruit/Adafruit BusIO @ ^1.14.1 + olikraus/U8g2 @ ^2.34.20 \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..4840050 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,50 @@ +#include + +#define TRIG_PIN 12 +#define ECHO_PIN 14 + +#define SOUND_SPEED 0.034 +#define CM_TO_INCH 0.393701 + +long duration; +int distanceCm; + +// Initialisierung für das Display +U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE); + +void setup() { + Serial.begin(115200); + pinMode(TRIG_PIN, OUTPUT); // TRIG_PIN als Ausgang + pinMode(ECHO_PIN, INPUT); // ECHO_PIN als Eingang + + u8g2.begin(); + u8g2.setFont(u8g2_font_logisoso32_tf); // Große Schriftart +} + +void loop() { + // Ultraschallsensor auslösen + digitalWrite(TRIG_PIN, LOW); + delayMicroseconds(2); + digitalWrite(TRIG_PIN, HIGH); + delayMicroseconds(10); + digitalWrite(TRIG_PIN, LOW); + + // Echo-Zeit messen + duration = pulseIn(ECHO_PIN, HIGH); + + // Distanz berechnen + distanceCm = duration * SOUND_SPEED / 2; + + // Ausgabe im Serial Monitor + Serial.print("Distance (cm): "); + Serial.println(distanceCm); + + // Anzeige auf dem Display + u8g2.clearBuffer(); + u8g2.setCursor(0, 48); // Textposition für große Schrift + u8g2.print(distanceCm); + u8g2.print(" cm"); + u8g2.sendBuffer(); // Buffer an das Display senden + + delay(500); +} diff --git a/test/README b/test/README new file mode 100644 index 0000000..9b1e87b --- /dev/null +++ b/test/README @@ -0,0 +1,11 @@ + +This directory is intended for PlatformIO Test Runner and project tests. + +Unit Testing is a software testing method by which individual units of +source code, sets of one or more MCU program modules together with associated +control data, usage procedures, and operating procedures, are tested to +determine whether they are fit for use. Unit testing finds problems early +in the development cycle. + +More information about PlatformIO Unit Testing: +- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html