wrobel111 pisze: ↑sob wrz 28, 2019 3:01 pm Na podstawie kodu który udostępnił kolega wojtas567 udało mi się stworzyć soft dla dwóch rolet wykorzystujących silniczki krokowe i uln-y. Wyjścia IN1-IN4 są wspólne dla obu silników, wybór pomiędzy nimi jest po przez odcięcie im masy zasilającej z wykorzystaniem tranzystora npn.
Kod: Zaznacz cały
/** * Supla.org NodeMCU WiFi minimal example * Author: Programistyk - Kamil Kaminski <kamil@programistyk.pl> * * This example shows how to configure SuplaDevice for building for NodeMCU within Arduino IDE */ #include <srpc.h> #include <log.h> #include <eh.h> #include <proto.h> #include <IEEE754tools.h> // We define our own ethernet layer #define SUPLADEVICE_CPP #include <SuplaDevice.h> #include <lck.h> #include <WiFiClient.h> #include <ESP8266WiFiType.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiScan.h> #include <ESP8266WiFiMulti.h> #include <WiFiServer.h> #include <ESP8266WiFiGeneric.h> #include <WiFiClientSecure.h> #include <ESP8266WiFiAP.h> #include <ESP8266WiFiSTA.h> #include <WiFiUdp.h> #include "Stepper_28BYJ_48.h" extern "C" { #include "user_interface.h" } WiFiClient client; ADC_MODE(ADC_VCC); int relay_1_pin = 1; // Tx int relay_2_pin = 3; // Rx int relay_3_pin = 2; // D4 int relay_4_pin = 4; // D2 int stepper_1_pin = 15; // D8 int stepper_2_pin = 5; // D1 Stepper_28BYJ_48 stepper(13,12,14,16); // wyjście silnika (D7,D6,D5,D0) // Setup Supla connection const char* ssid = "abc"; const char* password = "123"; // DS18B20 Sensor read implementation double get_temperature(int channelNumber, double last_val) { double t = -275; switch(channelNumber) { case 2: t = WiFi.RSSI(); break; case 3: t = ESP.getVcc() / 1000.0; break; }; return t; } void setup() { Serial.begin(115200); delay(10); pinMode(stepper_1_pin, OUTPUT); pinMode(stepper_2_pin, OUTPUT); SuplaDevice.setName("Roleta x2"); // zmiana nazwy mdułu w supla // wifi_station_set_hostname("Roleta"); // lub tak jeżeli górna nie zadziała WiFi.softAPdisconnect(true); // wyłączenie rozgłaszania sieci ESP // WiFi.setOutputPower(10); //Ograniczanie mocy wyjściowej (0 - 20.5) // Replace the falowing GUID uint8_t mac[WL_MAC_ADDR_LENGTH]; WiFi.macAddress(mac); char GUID[SUPLA_GUID_SIZE] = {0x20,0x19,0x05,0x10, mac[WL_MAC_ADDR_LENGTH - 6], mac[WL_MAC_ADDR_LENGTH - 5], mac[WL_MAC_ADDR_LENGTH - 4], mac[WL_MAC_ADDR_LENGTH - 3], mac[WL_MAC_ADDR_LENGTH - 2], mac[WL_MAC_ADDR_LENGTH - 1], 0x02,0x12,0x34,0x56,0x78,0x90}; // lub pobieramy identyfikator urządzenia ze strony https://www.supla.org/arduino/get-guid i wprowadzamy wiersz wyżej /* * Having your device already registered at cloud.supla.org, * you want to change CHANNEL sequence or remove any of them, * then you must also remove the device itself from cloud.supla.org. * Otherwise you will get "Channel conflict!" error. */ SuplaDevice.addRollerShutterRelays(relay_1_pin , // 0 - roleta - dwa przekaźniki relay_2_pin , true); // SuplaDevice.addRollerShutterRelays(relay_3_pin , // 1 - roleta - dwa przekaźniki relay_4_pin , true); // SuplaDevice.addDS18B20Thermometer(); // 2 - rssi SuplaDevice.addDS18B20Thermometer(); // 3 - zasilanie SuplaDevice.begin(GUID, // Global Unique Identifier mac, // Ethernet MAC address "xxx", // SUPLA server address 123, // Location ID "xyz"); // Location Password SuplaDevice.setName("rolety sypialnia"); // zmiana nazwy mdułu w supla } void loop() { SuplaDevice.iterate(); Roletka(); } // Supla.org ethernet layer int supla_arduino_tcp_read(void *buf, int count) { _supla_int_t size = client.available(); if ( size > 0 ) { if ( size > count ) size = count; return client.read((uint8_t *)buf, size); }; return -1; }; int supla_arduino_tcp_write(void *buf, int count) { return client.write((const uint8_t *)buf, count); }; bool supla_arduino_svr_connect(const char *server, int port) { return client.connect(server, 2015); } bool supla_arduino_svr_connected(void) { return client.connected(); } void supla_arduino_svr_disconnect(void) { client.stop(); } void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) { // Serial.println("WiFi init"); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); // Serial.print("."); } Serial.print("\nlocalIP: "); Serial.println(WiFi.localIP()); Serial.print("subnetMask: "); Serial.println(WiFi.subnetMask()); Serial.print("gatewayIP: "); Serial.println(WiFi.gatewayIP()); } SuplaDeviceCallbacks supla_arduino_get_callbacks(void) { SuplaDeviceCallbacks cb; cb.tcp_read = &supla_arduino_tcp_read; cb.tcp_write = &supla_arduino_tcp_write; cb.eth_setup = &supla_arduino_eth_setup; cb.svr_connected = &supla_arduino_svr_connected; cb.svr_connect = &supla_arduino_svr_connect; cb.svr_disconnect = &supla_arduino_svr_disconnect; cb.get_temperature = &get_temperature; cb.get_temperature_and_humidity = NULL; cb.get_rgbw_value = NULL; cb.set_rgbw_value = NULL; return cb; } void Roletka() { int roleta_1 = 0; int roleta_2 = 0; if ( digitalRead(relay_1_pin) == LOW ) { stepper.step(-1); roleta_1 = 1; } if ( digitalRead(relay_2_pin ) == LOW ) { stepper.step(1); roleta_1 = 1; } if ( digitalRead(relay_3_pin) == LOW ) { stepper.step(-1); roleta_2 = 1; } if ( digitalRead(relay_4_pin ) == LOW ) { stepper.step(1); roleta_2 = 1; } if (roleta_1 && roleta_2) { //Potrzebne by obie mogły się kręcić naraz digitalWrite(stepper_1_pin, HIGH); digitalWrite(stepper_2_pin, HIGH); } else if (roleta_1 && !(roleta_2)) { digitalWrite(stepper_1_pin, HIGH); digitalWrite(stepper_2_pin, LOW); } else if (roleta_2 && !(roleta_1)) { digitalWrite(stepper_1_pin, LOW); digitalWrite(stepper_2_pin, HIGH); } }
Firmware do rolet dla silniczka krokowego
Czy ktoś mógłby podpowiedzieć jak użyć takiego tranzystora do wysterowania 2 silników? Autor tej wypowiedzi chyba już nie zagląda na nasze forum.
lukosław pisze: ↑śr sty 20, 2021 3:45 pm Czy ktoś mógłby podpowiedzieć jak użyć takiego tranzystora do wysterowania 2 silników? Autor tej wypowiedzi chyba już nie zagląda na nasze forum.
wrobel111 pisze: ↑sob wrz 28, 2019 3:01 pm Na podstawie kodu który udostępnił kolega wojtas567 udało mi się stworzyć soft dla dwóch rolet wykorzystujących silniczki krokowe i uln-y. Wyjścia IN1-IN4 są wspólne dla obu silników, wybór pomiędzy nimi jest po przez odcięcie im masy zasilającej z wykorzystaniem tranzystora npn.
Kod: Zaznacz cały
/** * Supla.org NodeMCU WiFi minimal example * Author: Programistyk - Kamil Kaminski <kamil@programistyk.pl> * * This example shows how to configure SuplaDevice for building for NodeMCU within Arduino IDE */ #include <srpc.h> #include <log.h> #include <eh.h> #include <proto.h> #include <IEEE754tools.h> // We define our own ethernet layer #define SUPLADEVICE_CPP #include <SuplaDevice.h> #include <lck.h> #include <WiFiClient.h> #include <ESP8266WiFiType.h> #include <ESP8266WiFi.h> #include <ESP8266WiFiScan.h> #include <ESP8266WiFiMulti.h> #include <WiFiServer.h> #include <ESP8266WiFiGeneric.h> #include <WiFiClientSecure.h> #include <ESP8266WiFiAP.h> #include <ESP8266WiFiSTA.h> #include <WiFiUdp.h> #include "Stepper_28BYJ_48.h" extern "C" { #include "user_interface.h" } WiFiClient client; ADC_MODE(ADC_VCC); int relay_1_pin = 1; // Tx int relay_2_pin = 3; // Rx int relay_3_pin = 2; // D4 int relay_4_pin = 4; // D2 int stepper_1_pin = 15; // D8 int stepper_2_pin = 5; // D1 Stepper_28BYJ_48 stepper(13,12,14,16); // wyjście silnika (D7,D6,D5,D0) // Setup Supla connection const char* ssid = "abc"; const char* password = "123"; // DS18B20 Sensor read implementation double get_temperature(int channelNumber, double last_val) { double t = -275; switch(channelNumber) { case 2: t = WiFi.RSSI(); break; case 3: t = ESP.getVcc() / 1000.0; break; }; return t; } void setup() { Serial.begin(115200); delay(10); pinMode(stepper_1_pin, OUTPUT); pinMode(stepper_2_pin, OUTPUT); SuplaDevice.setName("Roleta x2"); // zmiana nazwy mdułu w supla // wifi_station_set_hostname("Roleta"); // lub tak jeżeli górna nie zadziała WiFi.softAPdisconnect(true); // wyłączenie rozgłaszania sieci ESP // WiFi.setOutputPower(10); //Ograniczanie mocy wyjściowej (0 - 20.5) // Replace the falowing GUID uint8_t mac[WL_MAC_ADDR_LENGTH]; WiFi.macAddress(mac); char GUID[SUPLA_GUID_SIZE] = {0x20,0x19,0x05,0x10, mac[WL_MAC_ADDR_LENGTH - 6], mac[WL_MAC_ADDR_LENGTH - 5], mac[WL_MAC_ADDR_LENGTH - 4], mac[WL_MAC_ADDR_LENGTH - 3], mac[WL_MAC_ADDR_LENGTH - 2], mac[WL_MAC_ADDR_LENGTH - 1], 0x02,0x12,0x34,0x56,0x78,0x90}; // lub pobieramy identyfikator urządzenia ze strony https://www.supla.org/arduino/get-guid i wprowadzamy wiersz wyżej /* * Having your device already registered at cloud.supla.org, * you want to change CHANNEL sequence or remove any of them, * then you must also remove the device itself from cloud.supla.org. * Otherwise you will get "Channel conflict!" error. */ SuplaDevice.addRollerShutterRelays(relay_1_pin , // 0 - roleta - dwa przekaźniki relay_2_pin , true); // SuplaDevice.addRollerShutterRelays(relay_3_pin , // 1 - roleta - dwa przekaźniki relay_4_pin , true); // SuplaDevice.addDS18B20Thermometer(); // 2 - rssi SuplaDevice.addDS18B20Thermometer(); // 3 - zasilanie SuplaDevice.begin(GUID, // Global Unique Identifier mac, // Ethernet MAC address "xxx", // SUPLA server address 123, // Location ID "xyz"); // Location Password SuplaDevice.setName("rolety sypialnia"); // zmiana nazwy mdułu w supla } void loop() { SuplaDevice.iterate(); Roletka(); } // Supla.org ethernet layer int supla_arduino_tcp_read(void *buf, int count) { _supla_int_t size = client.available(); if ( size > 0 ) { if ( size > count ) size = count; return client.read((uint8_t *)buf, size); }; return -1; }; int supla_arduino_tcp_write(void *buf, int count) { return client.write((const uint8_t *)buf, count); }; bool supla_arduino_svr_connect(const char *server, int port) { return client.connect(server, 2015); } bool supla_arduino_svr_connected(void) { return client.connected(); } void supla_arduino_svr_disconnect(void) { client.stop(); } void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) { // Serial.println("WiFi init"); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); // Serial.print("."); } Serial.print("\nlocalIP: "); Serial.println(WiFi.localIP()); Serial.print("subnetMask: "); Serial.println(WiFi.subnetMask()); Serial.print("gatewayIP: "); Serial.println(WiFi.gatewayIP()); } SuplaDeviceCallbacks supla_arduino_get_callbacks(void) { SuplaDeviceCallbacks cb; cb.tcp_read = &supla_arduino_tcp_read; cb.tcp_write = &supla_arduino_tcp_write; cb.eth_setup = &supla_arduino_eth_setup; cb.svr_connected = &supla_arduino_svr_connected; cb.svr_connect = &supla_arduino_svr_connect; cb.svr_disconnect = &supla_arduino_svr_disconnect; cb.get_temperature = &get_temperature; cb.get_temperature_and_humidity = NULL; cb.get_rgbw_value = NULL; cb.set_rgbw_value = NULL; return cb; } void Roletka() { int roleta_1 = 0; int roleta_2 = 0; if ( digitalRead(relay_1_pin) == LOW ) { stepper.step(-1); roleta_1 = 1; } if ( digitalRead(relay_2_pin ) == LOW ) { stepper.step(1); roleta_1 = 1; } if ( digitalRead(relay_3_pin) == LOW ) { stepper.step(-1); roleta_2 = 1; } if ( digitalRead(relay_4_pin ) == LOW ) { stepper.step(1); roleta_2 = 1; } if (roleta_1 && roleta_2) { //Potrzebne by obie mogły się kręcić naraz digitalWrite(stepper_1_pin, HIGH); digitalWrite(stepper_2_pin, HIGH); } else if (roleta_1 && !(roleta_2)) { digitalWrite(stepper_1_pin, HIGH); digitalWrite(stepper_2_pin, LOW); } else if (roleta_2 && !(roleta_1)) { digitalWrite(stepper_1_pin, LOW); digitalWrite(stepper_2_pin, HIGH); } }
looking at the code I can only imagine something like this
To ja mam pytanie z całkiem innej beczki.
Mam od kilki dni drukarę 3D i zacząłem zabawę z drukiem.
Wydrukowałem obudowę do 28BYJ-48 5V, i na próbę założyłem łańcuszek od 60cm rolety na rolkę, coby spróbować nią ruszyć. Ni cholery to to nie ma siły. Wystarczy palcami lekko złapać i da się zatrzymać go podczas obrotu. To normalne czy mam jakieś chińskie dziadostwo?
Mam od kilki dni drukarę 3D i zacząłem zabawę z drukiem.
Wydrukowałem obudowę do 28BYJ-48 5V, i na próbę założyłem łańcuszek od 60cm rolety na rolkę, coby spróbować nią ruszyć. Ni cholery to to nie ma siły. Wystarczy palcami lekko złapać i da się zatrzymać go podczas obrotu. To normalne czy mam jakieś chińskie dziadostwo?
Ja zastosowałem silniki krokowe na 12V, gabarytowo takie same jak te na 5V, u mnie kręcą one roletą bezpośrednio.Albert pisze: ↑sob sty 30, 2021 9:37 am To ja mam pytanie z całkiem innej beczki.
Mam od kilki dni drukarę 3D i zacząłem zabawę z drukiem.
Wydrukowałem obudowę do 28BYJ-48 5V, i na próbę założyłem łańcuszek od 60cm rolety na rolkę, coby spróbować nią ruszyć. Ni cholery to to nie ma siły. Wystarczy palcami lekko złapać i da się zatrzymać go podczas obrotu. To normalne czy mam jakieś chińskie dziadostwo?
Pany powiedzcie mi czy te silniczki 28BYJ-48 5V czy nawet 12V dają radę podnosić Wam jakiekolwiek rolety? Ja kupiłem teraz 12V bo 5V nie daje rady czymkolwiek kręcić.. Lekko w palcach przytrzymuję i już w środku przeskakuje. Nie ma mowy o podniesieniu jakiejkolwiek rolety (mam rzymskie).
Zrobiłem mechanizm testowy na serwie MG996R i ono daje radę spokojnie kręcić roletą 180cm, ale jest głośne i nie mam żadnej obudowy na to, żeby wydrukować i żeby jakoś wyglądało..
Zrobiłem mechanizm testowy na serwie MG996R i ono daje radę spokojnie kręcić roletą 180cm, ale jest głośne i nie mam żadnej obudowy na to, żeby wydrukować i żeby jakoś wyglądało..
U mnie silniczki 12V działają z roletami Ikea Tupplur, żeby nie skłamać spokojnie rok bez problemów.
https://youtu.be/UyzmI-T53aU
jest może gotowy bin do 2 rolet walcze z arduino i wywala mi błedyC:\Users\Marcin\AppData\Local\Temp\arduino_modified_sketch_424317\roleta.ino:9:18: fatal error: srpc.h: No such file or directory
#include <srpc.h>
^
compilation terminated.
exit status 1
Błąd kompilacji dla płytki Generic ESP8266 Module.
w użyciu: supla, nettemp...