Firmware do rolet dla silniczka krokowego

Post Reply
User avatar
michael
Posts: 878
Joined: Wed Nov 09, 2016 8:00 am
Location: Wojkowice

Thu May 09, 2019 6:19 am

Hej,
czy ktoś pomógłby mi przygotować soft do rolet dla silniczka krokowego 28BYJ-48 dla WeMos D1 Mini?
Dokumentacja i przykładowy kod tutaj -> http://eeshop.unl.edu/pdf/Stepper+Driver.pdf

Filmik gdzie fajnie jest to opisane -> https://www.youtube.com/watch?v=avrdDZD7qEQ
Kabel ucięty na miarę zawsze jest za krótki...
woytas1
Posts: 22
Joined: Tue Oct 02, 2018 10:34 pm
Location: Krosno

Thu May 09, 2019 4:38 pm

Zastanawiam się nad tymi silnikami tylko 12V.Nie wiem tylko ,czy nie będą za wolne do rolet dzień - noc.Za serce użyłbym Nodemceu V3 i dodatkowo przyciski do manualnego sterowania + czujnik temperatury.Fajnie by było sterować dwoma silnikami z jednego nodemceu.Dołączam się do prośby poprzednika.
User avatar
wojtas567
Posts: 1647
Joined: Sun Apr 03, 2016 7:16 pm
Location: Olsztyn

Thu May 09, 2019 6:21 pm

U mnie pracują te silniczki 5V z roletami wewnętrznymi i dają radę nawet z roletą o szerokości 170cm :)
Co do softu to za bardzo się nie wysilałem zresztą jak to tworzyłem to moja wiedza była jeszcze słaba w tej materii :) ale z racji, że działają już od wakacji praktycznie bezawaryjnie to nic nie ruszam z kodem.
Te silniczki mają jedną baardzo ważną zaletę - są bardzo ciche, chodzą faktycznie wolno bo u mnie całkowite odsłonięcie / zasłonięcie okna trwa ok 100 sekund ale to naprawdę nie jest problemem.
Aha nie mam też krańcówki i czasem niestety muszę zrobić małą poprawkę co do punktu startowego.
Pozdrawiam
Wojtek
User avatar
Vallhalen
Posts: 121
Joined: Mon Dec 10, 2018 9:25 am
Location: Rumia
Contact:

Thu May 09, 2019 7:41 pm

Zawsze żywo zainteresowany se posledze ;) jak to mówią madki - przycupnę ;)
Zawsze pozytywny :)
Trochę Shelly + Supla + Tradfri z Ikea z żarówkami + google home.
Arek.kandula
Posts: 227
Joined: Mon Dec 24, 2018 8:52 am

Thu May 09, 2019 8:19 pm

A jak zasilacze te silnik do rolet macie zasilanie wyprowadzone przy oknie czy z baterią jakąś
User avatar
wojtas567
Posts: 1647
Joined: Sun Apr 03, 2016 7:16 pm
Location: Olsztyn

Thu May 09, 2019 8:43 pm

Arek.kandula wrote:
Thu May 09, 2019 8:19 pm
A jak zasilacze te silnik do rolet macie zasilanie wyprowadzone przy oknie czy z baterią jakąś
A tu jest największy problem bo chyba nikt tam nie ma zasilania, bateria nie wchodzi w grę bo na długo nie wystarczy.
Gdzieś w sieci widziałem koleś położył białe listwy te zamykane.
Pozdrawiam
Wojtek
User avatar
michael
Posts: 878
Joined: Wed Nov 09, 2016 8:00 am
Location: Wojkowice

Fri May 10, 2019 5:30 am

wojtas567 wrote:
Thu May 09, 2019 6:21 pm
U mnie pracują te silniczki 5V z roletami wewnętrznymi i dają radę nawet z roletą o szerokości 170cm :)
Co do softu to za bardzo się nie wysilałem zresztą jak to tworzyłem to moja wiedza była jeszcze słaba w tej materii :) ale z racji, że działają już od wakacji praktycznie bezawaryjnie to nic nie ruszam z kodem.
Te silniczki mają jedną baardzo ważną zaletę - są bardzo ciche, chodzą faktycznie wolno bo u mnie całkowite odsłonięcie / zasłonięcie okna trwa ok 100 sekund ale to naprawdę nie jest problemem.
Aha nie mam też krańcówki i czasem niestety muszę zrobić małą poprawkę co do punktu startowego.
Podzielisz się kodem? :P
Kabel ucięty na miarę zawsze jest za krótki...
User avatar
wojtas567
Posts: 1647
Joined: Sun Apr 03, 2016 7:16 pm
Location: Olsztyn

Fri May 10, 2019 8:20 am

Podzielę :)
kod nie jest idealny ale z racji, że działa bezawaryjnie od wakacji to go nie zmieniam.
Początkowo chciałem zrobić 3 rolety na jednym ESP i jakieś małe Nano lub podobny ale uznałem, że wyjdą mi za długie przewody do silników.
Zworka pinów ma taką zaletę, że jak trzeba zmienić kierunek obrotów silnika to wystarczy zamienić przewody.
Nie wiem czy jest możliwość połączenia tych sygnałów w inny sposób, jeżeli ktoś ma pomysł chętnie przetestuję :)
Nie podłączałem DS czy DHT więc nie wiem czy działają

Skorzystałem z tego projektu https://www.thingiverse.com/thing:2392856
zgrabniejsza jest ta konstrukcja https://www.thingiverse.com/thing:2065722 i przy małych roletach powinna sobie poradzić u mnie nie wytrzymała przekładnia w silniku na najdłuższej rolecie.

Code: Select all

/**
 * 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 switch_1_pin = 1;                     // sterowanie silnikiem
int switch_2_pin = 3;                     // połączyć zworą z 4 i 5

Stepper_28BYJ_48 stepper(13,12,14,16);    // wyjście silnika

// Setup Supla connection
const char* ssid     = "wifi";
const char* password = "haslo";


// 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);
  SuplaDevice.setName("Roleta");                       // 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)

  pinMode(switch_1_pin,INPUT_PULLUP);
  pinMode(switch_2_pin,INPUT_PULLUP);


   // 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(4,         // 0 roleta dwa przekaźniki  
                                     5, true);  //  
  SuplaDevice.addSensorNO(2);                   // 1 czujnik krańcowy  Call SuplaDevice.addSensorNO(A0, true)
  SuplaDevice.addDS18B20Thermometer();          // 2 rssi
  SuplaDevice.addDS18B20Thermometer();          // 3 zasilanie


  SuplaDevice.begin(GUID,                       // Global Unique Identifier
                    mac,                        // Ethernet MAC address
                    "svr1.supla.org",           // SUPLA server address
                    1234,                       // Location ID
                    "abcd");                    // Location Password

  SuplaDevice.setName("roleta salon");          // 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() {
  
      if ( digitalRead(switch_1_pin) == LOW ) {
                stepper.step(-1);
        }

      if ( digitalRead(switch_2_pin) == LOW ) {
                stepper.step(1);
        }
 }
 
Last edited by wojtas567 on Thu May 16, 2019 11:40 am, edited 1 time in total.
Pozdrawiam
Wojtek
User avatar
michael
Posts: 878
Joined: Wed Nov 09, 2016 8:00 am
Location: Wojkowice

Fri May 10, 2019 8:35 am

Dziękuję Ci bardzo dobry człowieku :D
Kabel ucięty na miarę zawsze jest za krótki...
User avatar
michael
Posts: 878
Joined: Wed Nov 09, 2016 8:00 am
Location: Wojkowice

Fri May 10, 2019 12:02 pm

wojtas567 wrote:
Fri May 10, 2019 8:20 am
Zworka pinów ma taką zaletę, że jak trzeba zmienić kierunek obrotów silnika to wystarczy zamienić przewody.
Nie wiem czy jest możliwość połączenia tych sygnałów w inny sposób, jeżeli ktoś ma pomysł chętnie przetestuję :)
Mógłbyś jeszcze zrobić zdjęcie tych połączeń? Albo narysować jak masz to pospinane dokładnie?
Raz, że będzie to dla innych, a sam też nie wiem czy do końca zrozumiałem jak to ma wyglądać :D
Kabel ucięty na miarę zawsze jest za krótki...
Post Reply