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;
czasto czas w mili sekundach w jakim fala dźwiękowa pokonuje drogę z czujnika do przeszkody i z powrotem..0343to 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.
