Projekt wykonany w ramach koła naukowego informatyki stosowanej Państwowej Akademii Nauk Stosowanych im. Ignacego Mościckiego w Ciechanowie.

Urządzenia programowane w środowisku Arduino IDE.
Założenia:
- Odczyt odległości badanego przedmiotu od czujnika
- Przekazanie odczytanej wartości do drugiego urządzenia za pomocą sieci WiFi.
- Wyświetlenie odczytanej wartości na podłączonym wyświetlaczu OLED.
Urządzenie 1

NodeMCU V3 z podłączonym ultradźwiękowym czujnikiem odległości HC-SR04 łączy się przez sieć WiFi z AP (urządzenie 2). Wysyła za pomocą protokołu HTTP obliczoną odległość na podstawie odczytów z czujnika.
Obliczenie odległości odbywa się za pomocą wyrażenia: odleglosc=(czas*.0343)/2;
czas
to czas w mili sekundach w jakim fala dźwiękowa pokonuje drogę z czujnika do przeszkody i z powrotem..0343
to prędkość dźwięku cm/μs (około 340 metrów na sekundę)- /2 to dzielenie przez dwa, ponieważ fala dźwiękowa pokonuje drogę z czujnika do przeszkody i z powrotem.
Kod urządzenia:
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#define echoPin D7
#define trigPin D6
const char* ssid = "ESP8266_AP";
const char* password = "PANS2025";
const char* serverIP = "192.168.4.1"; // IP AP
WiFiClient client;
HTTPClient http;
void callback(char* topic, byte* payload, unsigned int length) {}
void setup() {
pinMode(trigPin, OUTPUT);//Pin syhnału wyjściowego
pinMode(echoPin, INPUT);//Pin syhnału wejściowego
delay(10);
Serial.begin(115200);
Serial.println();
Serial.print("Łączenie do: "); Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(""); Serial.println("WiFi OK !");
Serial.println("IP: "); Serial.println(WiFi.localIP());
}
void loop()
{
long lastMsg = 0; char msg[50]; int odl=0;
long czas, odleglosc;
digitalWrite (trigPin, HIGH);
delayMicroseconds(10);
digitalWrite (trigPin, LOW);
czas = pulseIn(echoPin, HIGH);
odleglosc = (czas*.0343) / 2;
//Serial.println(odleglosc);//debug czy odleglosc prawidlowa
delay(1000);//odczyt co 1 sek
if (WiFi.status() == WL_CONNECTED) {
String url = "http://" + String(serverIP) + "/data?value=" + String(odleglosc);
http.begin(client, url);
int httpCode = http.GET();
//if (httpCode == 200) {
// Serial.println("Wysłano dane!");//debug czy komunikacja po http
//}
http.end();
}
}
Urządzenie 2

Wemos D1 mini z podłączonym wyświetlaczem OLED SSD1306 z modułem WiFi pracującym w trybie AP. Odbiera wartości odczytane z urządzenia 1 i wyświetla je. Na potrzeby prezentacji na biurku maksymalna wyświetlana wartość to 50cm, powyżej tej wartości na wyświetlaczu pojawia się napis MAX
.
Kod urządzenia:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
#define OLED_RESET -1 // Reset not connected
Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT, &Wire, OLED_RESET);
const char* ssid = "ESP8266_AP";
const char* password = "PANS2025";
ESP8266WebServer server(80);
String receivedValue;
void handleData() {
if (server.hasArg("value")) {
receivedValue = server.arg("value");
//Serial.print("Odebrana wartość: "); debug
//Serial.println(receivedValue);
int value = receivedValue.toInt();
// Wyświetlenie na OLED
display.clearDisplay();
display.setTextSize(2.5);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,15);
display.print("Dystans:");
display.setCursor(0,35);
if (value <= 50){
display.print(receivedValue + " cm");
}
else {
display.print("MAX");
}
display.display();
}
server.send(200, "text/plain", "OK");
}
void setup() {
Serial.begin(115200);
WiFi.softAP(ssid, password);
Serial.println("Access Point uruchomiony!");
Serial.print("IP: ");
Serial.println(WiFi.softAPIP());
// OLED inicjalizacja
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Błąd OLED!"));
while (true);
}
display.display();
delay(500);
display.clearDisplay();
server.on("/data", HTTP_GET, handleData);
server.begin();
}
void loop() {
server.handleClient();
}
Obudowy do urządzeń zostały wykonane w technologii druku 3D, wg projektów ogólnodostępnych oraz opracowania własnego.
- Wspornik sensora HC-SR04 do pobrania z Thingsverse lub bezpośrednio.
- Obudowa NodeMCU do pobrania z MakerWorld lub bezpośrednio.
- Obudowa Wemos D1 mini oraz OLED do pobrania z MakerWorld lub bezpośrednio.
- Sześcian podstawy – prosty projekt własny.
Koniec 🙂
Jeżeli pomogłem to ,a będę miał więcej energii na pisanie kolejnych ciekawych wpisów.