Dzień 12 Przekaźniki
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.
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:
- ESP32 – mikrokontroler, który będzie pełnił rolę serwera i łączył się z siecią Wi-Fi.
- Czujnik DHT11 – czujnik temperatury i wilgotności, który będziemy podłączać do ESP32.
- Silnik DC – mały silnik prądu stałego, który będzie włączany i wyłączany za pomocą przycisku na stronie WWW.
- Tranzystor (np. NPN 2N2222) – do sterowania silnikiem DC, ponieważ ESP32 nie jest w stanie dostarczyć wystarczającej mocy do bezpośredniego zasilania silnika.
- Dioda zabezpieczająca (np. 1N4007) – dla ochrony przed przepięciami indukowanymi przez silnik.
- Zasilanie – ESP32 wymaga 3.3V, a silnik DC najczęściej 5V lub 9V, w zależności od jego specyfikacji.
- Rezystory – do ograniczania prądu dla tranzystora.
- 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:
- 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.
- 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.
- 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
(MOTORPIN, OUTPUT);
pinMode 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
() != WL_CONNECTED) {
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 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
(client) {
if 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 bibliotekaDHT.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ą.
- W Arduino IDE wybierz
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.