Dzień 12 Przekaźniki

Dzień 12 Przekaźniki
Photo by Angeles Pérez / Unsplash

Przekaźnik srd-05vdc-sl-c

Moduł wyposażony w przekaźnik JQC-3FF-S-Z z cewką zasilaną napięciem 5 V bez optycznej izolacji wejścia. Układ pozwala na sterowanie elementami wykonawczymi przy pomocy portów mikrokontrolera lub dowolnego zestawu uruchomieniowego. Pracuje z napięciem do 250 V.

Maksymalny prąd NO NC
https://botland.com.pl/przekazniki-przekazniki-arduino/8228-modul-przekaznika-iduino-1-kanal-styki-10a250vac-cewka-5v-5903351241229.html?cd=18298825651&ad=&kd=&gad_source=1&gclid=Cj0KCQiAire5BhCNARIsAM53K1jmk7C3vAuLn-I5i8a9rXGHWrCbRvOC7tlZFiJ465ffW0XYRNSVtcIaAkjNEALw_wcB

Można pobrać dokumentację

Zadanko:

Zaprojektować eksperyment jak przetestować działanie NO NC

Jak działa elektromagnes? -> Sprawdzić

Zestawy RFID, karty NFC

Za 2 tygodnie sami będziemy robić swój projekt

Zasilacz przetwornica z 230V na 5V

Silniki DC RS-380SH-4528 RN575902 sterowane napięciem. Im mniejsze napięcie tym wolniej się kręci.

Draw.io do tworzenia schematów

Tworzenia schematu ideowego do zadania

Wgrywanie bootloaderów, po to są kombinacje przycisków do resetowania.

Złącza śrubowe

Gimbale wyskoprężne silniki. Unikanie drgania. Od razu wchodzą na pełne obroty. Systemy do stabilizacji. Silniki krokowe

Warsztaty CNC tworzenie grafik wektorowych

ChatGPT

Prompt design - prompt krótki i treściwy. Trzeba myśleć problemowo

CEO Nvidia - umieć rozwiązywać problemy, a nie umieć kodować.

Produkcja nowych chipów poprzez AI trwa tygodnie, a nie 5 lat.

SRM - małe elektrownie atomowe. Walka o energię dla AI.

ChatGPT pobierał energię 3 razy więcej niż Dania.

Zadańsko 1:

Z użyciem ChataGPT

Serwer asynchroniczny

ChatGPT

OPUS

LAMA

Copilot

Prosić o opis schematu

Rozwiązanie:

Zbuduj serwer na ESP32 hostujący stronę internetową. Strona internetowa ma mieć czarne tło. Strona internetowa ma wyświetlać informację o aktualnej temperaturze odczytanej na czujniku DHT11 na środku strony bez konieczności odświeżania strony. Strona internetowa ma posiadać przycisk do załączania silnika DC. Proszę o opis schematu z powyższego opisu.

ChatGPT powiedział:

ChatGPT

Aby zrealizować projekt serwera na ESP32 hostującego stronę internetową z wyświetlaniem informacji o temperaturze oraz sterowaniem silnikiem DC, należy połączyć kilka elementów: mikrokontroler ESP32, czujnik DHT11, silnik DC oraz stworzyć odpowiednią stronę WWW. Poniżej przedstawiam szczegółowy opis schematu oraz wymaganych komponentów.

Wymagane komponenty:

  1. ESP32 – mikrokontroler, który będzie pełnił rolę serwera i łączył się z siecią Wi-Fi.
  2. Czujnik DHT11 – czujnik temperatury i wilgotności, który będziemy podłączać do ESP32.
  3. Silnik DC – mały silnik prądu stałego, który będzie włączany i wyłączany za pomocą przycisku na stronie WWW.
  4. Tranzystor (np. NPN 2N2222) – do sterowania silnikiem DC, ponieważ ESP32 nie jest w stanie dostarczyć wystarczającej mocy do bezpośredniego zasilania silnika.
  5. Dioda zabezpieczająca (np. 1N4007) – dla ochrony przed przepięciami indukowanymi przez silnik.
  6. Zasilanie – ESP32 wymaga 3.3V, a silnik DC najczęściej 5V lub 9V, w zależności od jego specyfikacji.
  7. Rezystory – do ograniczania prądu dla tranzystora.
  8. Przycisk – fizyczny przycisk na płytce, który będzie zintegrowany z kodem i wywołać akcję na stronie WWW.

Schemat połączeń:

1. Podłączenie DHT11 do ESP32:

  • VCC czujnika DHT11 do pinu 3.3V na ESP32.
  • GND czujnika DHT11 do pinu GND na ESP32.
  • DATA czujnika DHT11 do jednego z pinów cyfrowych na ESP32 (np. GPIO 4). Można użyć rezystora 10kΩ między pinem DATA a 3.3V, aby zapewnić stabilne działanie czujnika.

2. Podłączenie silnika DC do ESP32:

  • Silnik DC zasilany jest z zewnętrznego źródła (np. 5V).
  • Zasilanie silnika (np. 5V) podłączamy do C (kolektor) tranzystora NPN.
  • Emiter tranzystora podłączamy do masy.
  • Baza tranzystora podłączona do pinu cyfrowego ESP32 (np. GPIO 12) przez rezystor 1kΩ.
  • Silnik DC podłączony jest do tranzystora na wyjściu kolektora.
  • Dioda zabezpieczająca podłączona równolegle do silnika (katoda do zasilania, anoda do tranzystora), aby chronić przed przepięciami.

3. Podłączenie przycisku do ESP32:

  • Jeden styk przycisku podłączony do GPIO 13 (można użyć innego pinu cyfrowego).
  • Drugi styk przycisku podłączony do GND.
  • Konfiguracja przycisku w kodzie zapewnia detekcję jego stanu (naciśnięcie/zwolnienie) i przełącza stan silnika.

4. Podłączenie zasilania:

  • ESP32 podłączone do zasilania 3.3V, zazwyczaj za pomocą portu USB lub stabilizatora 3.3V.
  • Silnik DC wymaga zewnętrznego zasilacza 5V lub 9V (w zależności od modelu silnika).

Opis działania serwera i strony WWW:

  1. Serwer WWW na ESP32: ESP32 będzie pełnił rolę serwera, który hostuje stronę HTML. Strona będzie wykorzystywała JavaScript do pobierania aktualnej temperatury z czujnika DHT11 bez konieczności odświeżania strony (asynchronicznie). Informacje o temperaturze będą wyświetlane na stronie.
  2. Frontend (HTML, CSS, JavaScript):
    • Strona będzie miała czarne tło, a tekst na stronie będzie wyświetlany w kontrastującym kolorze (np. białym).
    • JavaScript będzie okresowo (np. co 5 sekund) wysyłał zapytanie do ESP32 o aktualną temperaturę z czujnika DHT11.
    • Na stronie będzie również przycisk, który po naciśnięciu wyśle sygnał do ESP32, aby włączyć lub wyłączyć silnik DC.
  3. Backend (ESP32 - Arduino IDE):
    • ESP32 zainicjuje połączenie z siecią Wi-Fi.
    • Stworzy serwer WWW, który będzie serwować stronę HTML.
    • Serwer będzie obsługiwał zapytania AJAX z frontendu, aby zwrócić aktualną temperaturę.
    • Kiedy przycisk na stronie zostanie naciśnięty, ESP32 włączy lub wyłączy silnik DC.

Przykładowy kod w Arduino IDE:

cppSkopiuj kod#include <WiFi.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>

// Definicje pinów
#define DHTPIN 4
#define DHTTYPE DHT11
#define MOTORPIN 12
#define BUTTONPIN 13

DHT dht(DHTPIN, DHTTYPE)
;
WiFiServer server(80);

bool motorState = false;

void setup() {
Serial.begin(115200);
dht.begin();

// Ustawienia pinu silnika i przycisku
pinMode
(MOTORPIN, OUTPUT);
pinMode(BUTTONPIN, INPUT_PULLUP);

// Łączenie z Wi-Fi
WiFi.begin("SSID", "PASSWORD"
);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");

server.begin();
}

void loop() {
WiFiClient client = server.available();
if (client) {
String request = client.readStringUntil('\r');
client.flush();

// Obsługa zapytań
if (request.indexOf("/temperature") != -1
) {
float temperature = dht.readTemperature();
String htmlResponse = "Temperature: " + String(temperature) + "°C";
client.println(htmlResponse);
} else if (request.indexOf("/toggle_motor") != -1) {
motorState = !motorState;
digitalWrite(MOTORPIN, motorState ? HIGH : LOW);
client.println("Motor state toggled");
} else {
String htmlPage = "<html><body style='background-color:black;color:white;text-align:center;'>"
"<h1>ESP32 Motor Control</h1>"
"<button onclick='toggleMotor()'>Toggle Motor</button>"
"<script>"
"function toggleMotor() {"
" fetch('/toggle_motor');"
"}"
"setInterval(() => {"
" fetch('/temperature').then(response => response.text()).then(text => {"
" document.getElementById('temp').innerText = text;"
" });"
"}, 5000);"
"</script>"
"<h2 id='temp'>Loading temperature...</h2>"
"</body></html>"
;
client.println(htmlPage);
}
}
}

Podsumowanie:

  • Schemat połączeń to ESP32 z czujnikiem DHT11 i silnikiem DC. Silnik jest sterowany przez tranzystor.
  • Strona internetowa wyświetla temperaturę i umożliwia załączenie/wyłączenie silnika.
  • Wszystko to działa na ESP32, który hostuje stronę internetową i komunikuje się z urządzeniami zewnętrznymi.

Instalujemy bibliotekę. Na bazie danej biblioteki, chcemy uzyskać kod od ChataGPT. Musimy mu podać bibliotkę z której ma skorzystać.


Po co dodajesz Adafruit_Sensor.h?

ChatGPT powiedział:

ChatGPT

Masz rację, dodanie nagłówka Adafruit_Sensor.h do tego projektu nie jest konieczne, ponieważ czujnik DHT11 nie jest obsługiwany przez bibliotekę Adafruit Sensor. Ta biblioteka jest używana dla czujników, które implementują standard Adafruit Unified Sensor, jak np. czujniki BME280, BMP180, czy TCS3200, ale DHT11 używa swojej własnej biblioteki do komunikacji.

W związku z tym, należy usunąć Adafruit_Sensor.h i użyć tylko odpowiedniej biblioteki do obsługi czujnika DHT11, czyli DHT.h. Oto poprawiona wersja kodu:

Poprawiona wersja kodu:

cppSkopiuj kod#include <WiFi.h>
#include <DHT.h>

// Definicje pinów
#define DHTPIN 4 // Pin, do którego podłączony jest DHT11
#define DHTTYPE DHT11 // Typ czujnika DHT11
#define MOTORPIN 12 // Pin do sterowania silnikiem
#define BUTTONPIN 13 // Pin do przycisku

DHT dht(DHTPIN, DHTTYPE); // Inicjalizacja czujnika DHT11
WiFiServer server(80); // Serwer WWW nasłuchujący na porcie 80

bool motorState = false; // Zmienna do przechowywania stanu silnika

void setup()
{
Serial.begin(115200); // Rozpoczęcie komunikacji przez port szeregowy
dht.begin(); // Rozpoczęcie działania czujnika DHT11

pinMode(MOTORPIN, OUTPUT); // Ustawienie pinu silnika jako wyjściowy
pinMode(BUTTONPIN, INPUT_PULLUP); // Ustawienie pinu przycisku jako wejściowy z wewnętrznym rezystorem

// Łączenie z Wi-Fi
WiFi.begin("SSID", "PASSWORD"); // Wprowadź dane swojej sieci Wi-Fi
while (WiFi.status
() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");

server.begin(); // Rozpoczęcie działania serwera
}

void loop() {
WiFiClient client = server.available(); // Sprawdzenie, czy klient jest dostępny
if
(client) {
String request = client.readStringUntil('\r'); // Odczytanie zapytania HTTP od klienta
client.flush
();

// Obsługa zapytania o temperaturę
if (request.indexOf("/temperature") != -1
) {
float temperature = dht.readTemperature(); // Odczyt temperatury z DHT11
String htmlResponse = "Temperature: " + String(temperature) + "°C"
;
client.println(htmlResponse);
}
// Obsługa zapytania o włączenie/wyłączenie silnika
else if (request.indexOf("/toggle_motor") != -1
) {
motorState = !motorState; // Zmiana stanu silnika
digitalWrite(MOTORPIN, motorState ? HIGH : LOW); // Włącz lub wyłącz silnik
client.println("Motor state toggled"
);
}
// Strona główna
else
{
String htmlPage = "<html><body style='background-color:black;color:white;text-align:center;'>"
"<h1>ESP32 Motor Control</h1>"
"<button onclick='toggleMotor()'>Toggle Motor</button>"
"<script>"
"function toggleMotor() {"
" fetch('/toggle_motor');" // Wysłanie żądania do zmiany stanu silnika
"}"
"setInterval(() => {"
" fetch('/temperature').then(response => response.text()).then(text => {"
" document.getElementById('temp').innerText = text;" // Aktualizacja temperatury na stronie
" });"
"}, 5000);"
"</script>"
"<h2 id='temp'>Loading temperature...</h2>"
"</body></html>"
;
client.println(htmlPage); // Wysłanie HTML do przeglądarki
}
}
}

Wyjaśnienie zmian:

  • Usunięto bibliotekę Adafruit_Sensor.h, ponieważ nie jest potrzebna do obsługi czujnika DHT11. Wystarczy sama biblioteka DHT.h, która zapewnia odpowiednią funkcjonalność.
  • Funkcja dht.readTemperature() została zachowana i działa bez problemów, ponieważ czujnik DHT11 jest bezpośrednio obsługiwany przez bibliotekę DHT.h.

Dalsze poprawki:

  • Zainstalowanie biblioteki DHT: W Arduino IDE należy upewnić się, że masz zainstalowaną bibliotekę DHT sensor library (można ją znaleźć w menedżerze bibliotek Arduino IDE).
    • W Arduino IDE wybierz Sketch -> Include Library -> Manage Libraries.
    • Wyszukaj „DHT sensor library” autorstwa Adafruit i zainstaluj ją.

Dzięki tym poprawkom kod będzie działał poprawnie z czujnikiem DHT11, nie będzie wymagał niepotrzebnej biblioteki Adafruit_Sensor.h, a serwer na ESP32 będzie obsługiwał zarówno wyświetlanie temperatury, jak i sterowanie silnikiem DC przez stronę WWW.

W ChatGPT dodać swoją bibliotekę i niech Chat ją sprawdzi

Zrobić zadanie na WOKWI. Jest plugin do VS Code. Kompilować w nieskończoność. Trzeba się zalogować lub zapisywać link z paska adresu.

Będą zakładane konto do ThinksBoarda. Będzie można zczytywać zdarzenia i dodawać dane.