Skocz do zawartości

szczawiosław

Użytkownicy
  • Zawartość

    173
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

Wszystko napisane przez szczawiosław

  1. Odnośnie ekipy z Białegostoku jeszcze to się rozszaleli https://wm.pb.edu.pl/2019/08/12/sumomasters-z-trzema-medalami/ Przy okazji zdobyli chyba 5 zaproszenie do Japonii.
  2. Trochę czepialstwa: Serio? Miasto wojewódzkie i taki błąd w nazwie? Koniec czepialstwa. No nic tylko gratulować Z zawodów wiem że najlepiej mieć dosłownie drugiego robota ze sobą w częściach zapasowych.
  3. A BLYNK się nie nada? Rozumiem naukę, itp. ale czy jest sens?
  4. Coś takiego fajnie rozwiązało by problem tworzenia korków, nie tylko przy ruszaniu ze świateł. Fajnie to pokazano na tym filmiku Przy takiej autonomii taka sytuacja nie miała by racji bytu.
  5. Tak jak napisałeś, kupić jeden, podpiąć pod dobry miernik albo oscyloskop i sprawdzić pobory w różnych sytuacjach. Da to topie pewien obraz, ale zapewne wszystkiego nie przewidzisz i nie sprawdzisz więc będziesz musiał liczyć się z tym że coś nie zadziała tak jak powinno.
  6. Dobra, to rozwinę wyliczenia bo widać że skróty myślowe są złe. Skoro jest pytanie o 50 modułów więc wynik końcowy to sumaryczne zapotrzebowanie wszystkich modułów. A więc @andi21 abyś dokładnie zrozumiał: x = 50 - ilość modułów y = 5V - napięcie zasilania z = 210mA - pobór minimalny v = 2A - pobór maksymalny I z tego mamy: x*y*z albo x*y*v i kolejno 50*5*0,21 = 52,5[W], oraz 50*5*2 = 500[W]. Jeżeli pomnożysz razy 50 podane przez siebie wyniki uzyskasz to samo @ethanak a pytanie było o potrzebną moc, a nie natężenie A żeby nie było samego offtopu to takiego modułu nawet pojedynczego najprawdopodobniej przez USB nie da się zasilić.
  7. Wg specyfikacji jeden moduł potrzebuje 5V i 210mA z poborem maksymalnym 2A, więc moc potrzebna do pracy mieści się w zakresie od 52,5W do 500W. Nigdy ich nie używałam więc nie wiem jak realne to są dane.
  8. To temat pewnie na całą pracę badawczą, na bank da się to też wyliczyć znając czas gotowania, grubość i skład ciasta oraz ilość i rodzaj farszu.
  9. W sumie nie dziwi mnie że to Japonia https://www.extremetech.com/computing/296022-fujitsu-has-an-employee-dedicated-to-keeping-a-1959-computer-up-and-running
  10. Może krzyczeć o undervoltage ale malina powinna się uruchomić.
  11. Tapatalk jest fajny, szczególnie jak ktoś czyta i udziela się na kilku różnych forach, można mieć wszystkie w jednym miejscu (sam tak używam). Niestety nie wiem jak wygląda sprawa z wstawianiem kodu w posty, itp.
  12. Można bez problemu większego (tylko poziom trudności trochę wysoki) niezależnie od drukarki, pod warunkiem że sam wyedytujesz g-code. Możesz ręcznie ustawić jakąś przerwę w druku, a następnie wyedytować (w sumie to wywalić większość) kod przed tą przerwą i z wyedytowanego pliku puścić dalszy druk.
  13. No Przy okazji dorobiłem obsługę przekaźników do sterowania wentylatorami aby załączały mi się razem z ogniwami i wyłączały z opóźnieniem. Muszę zastanowić się czy mam taka funkcjonalność już jaką chciałem i brać się za budowę komory. No i pozbyć się zmiennych globalnych które są używane w tylko jednej funkcji, a zamiast tego użyć argumentów funkcji, ale to już zależy od tego czy mi się będzie chciało
  14. Głupi błąd którego wcześniej nie zauważyłem. No i regulacja PWM jest teraz płynniejsza.
  15. Znalazłem jeszcze błąd w swoim kodzie. Funkcji abs() automatycznie zmienia float na int. Chciałem mieć amplitudę 1°C, a przez to miałem 2°C. na szczęście jest funkcja fabs() Więc obeszło się bez większych kombinacji.
  16. @ethanak specjalnie tobie: DiffTemp = round((SetTemp - AverageTemp)*10)/10;
  17. Dobra, nie zrozumieliśmy się. Nawiasy zostały po jakiejś funkcji i zapomniałem usunąć, a napisałeś tak że zrozumiałem że te środkowe są zbędne w których znajduje się odejmowanie.
  18. Jest różnica w wyniku dla round((X - Y) * 10), round(X - Y * 10)? Przyjmijmy X = 5, Y = 3,14.
  19. Chcę uzyskać liczbę z dokładnością do jednego miejsca po przecinku. Jeżeli zrobię round(SetTemp - AverageTemp) to uzyskam liczbę całkowitą, dlatego jest round((SetTemp - AverageTemp)*10). Jeżeli zrobił bym round(SetTemp - AverageTemp * 10) to uzyskła bym inny wynik, a bez sensu jest zapisywać SetTemp - AverageTemp do kolejnej zmiennej jeżeli wykorzystuje ją tylko w tym miejscu. Dzięki temu zaokrąglam liczbę nie np. 3,14, a 31,4. Po zaokrągleniu otrzymuje odpowiednio 3 oraz 31. Jeżeli teraz podzielę drugą liczbę przez 10 uzyskam liczbę 3,1 czyli zaokrąglenie do jednego miejsca po przecinku tak jak tego potrzebuję. Jedyny zbędny nawias to ten na przed round i przed ;.
  20. @ethanak nawiasy są ok Mnożę różnicę dwóch temperatur i kolejność wykonywania działań się pojawia. Chyba że bym (SetTemp - AverageTemp) wywalił do kolejnej zmiennej.
  21. Taka że tą liczbę wykorzystuję dodatkowo do sterowania wypełnieniem PWM ledcWrite(ChanelPWM, abs(DiffTemp)*25); I tutaj i tak musiał bym dzielić na 10, albo mnożnik zrobić 0,25. No i łatwiej przy kontroli działania jak wyświetlam DiffTemp nie zastanawiać się czemu jest 20 a nie 2.
  22. @Belferek bez tego na wyjściu uzyskuję liczbę całkowitą, przy dzieleniu mam dokładność do jednego miejsca po przecinku. No i jeszcze muszę trochę kod uporządkować, bo np. ustawianie koloru mogę do funkcji wywalić zamiast ustawiać każdorazowo parametry oddzielnie.
  23. Skończyłem kod sterownika. Na obecną chwilę sterowanie tylko za pomocą VIRTUINO, bo niestety nie mam zasięgu w piwnicy Zastanawiam się nad dodaniem wyświetlacza LCD i kilku przycisków aby można też było podglądać parametry i je zmieniać bez konieczności używania telefonu. Kod programu #include "main.h" Virtuino_ESP_WifiServer virtuino(&server); void setup() { virtuino.DEBUG = true; Serial.begin(115200); sensors.begin(); EEPROM.begin(EEPROM_SIZE); pinMode(Cooling, OUTPUT); pinMode(Warming, OUTPUT); ledcSetup(ChanelPWM, freq, resolution); ledcAttachPin(SignalPWM, ChanelPWM); ReadEEPROM(); digitalWrite(Cooling, LOW); digitalWrite(Warming, LOW); ledcWrite(ChanelPWM, 0); WiFi.mode(WIFI_AP); WiFi.softAP(APssid, APpass); virtuino.password = "1234"; server.begin(); delay(1000); } void loop(void) { Serial.println("------------------------------"); virtuino.run(); SetTemp = virtuino.vMemoryRead(0); Serial.println("Odczytane SetTemp: " + String(SetTemp) + "*C"); if (SetTemp!=SavedTemp) { WriteEEPROM(); FirstStart = 1; } SavedTemp = SetTemp; ReadTemp(); CalcDiffTemp(); SendingValues(); ControlTemp(); delay(2000); } void ReadTemp() { sensors.requestTemperatures(); Temp1 = sensors.getTempC(sensor1); Temp2 = sensors.getTempC(sensor2); Temp3 = sensors.getTempC(sensor3); } void CalcDiffTemp() { AverageTemp = Temp1 * ImportanceTemp1 + Temp2 * ImportanceTemp2 + Temp3 * ImportanceTemp3; DiffTemp = (round((SetTemp - AverageTemp)*10)/10); if (DiffTemp < -0.5F) { digitalWrite(Cooling, HIGH); digitalWrite(Warming, LOW); virtuino.vMemoryWrite(GREEN, -2); virtuino.vMemoryWrite(BLUE, 1); virtuino.vMemoryWrite(RED, -2); } else if (DiffTemp > 0.5F) { digitalWrite(Warming, HIGH); digitalWrite(Cooling, LOW); virtuino.vMemoryWrite(GREEN, -2); virtuino.vMemoryWrite(BLUE, -2); virtuino.vMemoryWrite(RED, 1); } else { digitalWrite(Cooling, LOW); digitalWrite(Warming, LOW); virtuino.vMemoryWrite(GREEN, 1); virtuino.vMemoryWrite(BLUE, -2); virtuino.vMemoryWrite(RED, -2); } } void SendingValues() { Serial.println("Sensor 1: " + String(Temp1) + "*C"); Serial.println("Sensor 2: " + String(Temp2) + "*C"); Serial.println("Sensor 3: " + String(Temp3) + "*C"); Serial.println("SetTemp: " + String(SetTemp) + "*C"); Serial.println("DiffTemp: " + String(abs(DiffTemp)) + "*C"); virtuino.vMemoryWrite(1, Temp1); virtuino.vMemoryWrite(2, Temp2); virtuino.vMemoryWrite(3, Temp3); virtuino.vMemoryWrite(4, AverageTemp); } void ControlTemp() { if (abs(round(DiffTemp)) <= 9) { ledcWrite(ChanelPWM, abs(DiffTemp)*25); } else { ledcWrite(ChanelPWM, 255); } } void WriteEEPROM() { EEPROM.put(0, SetTemp); delay(100); EEPROM.commit(); delay(100); } void ReadEEPROM() { SetTemp = EEPROM.get(0, SetTemp); delay(100); SavedTemp = SetTemp; virtuino.vMemoryWrite(0, SetTemp); Serial.println("EEPROM SetTemp: " + String(SetTemp) + "*C"); Serial.println("EEPROM SavedTemp: " + String(SavedTemp) + "*C"); delay(1000); } I plik nagłówkowy #include <OneWire.h> #include <DallasTemperature.h> #include <EEPROM.h> #include <WiFi.h> #include <WiFiClient.h> #include "Virtuino_ESP_WifiServer.h" void WriteEEPROM(); void ReadEEPROM(); void SendingValues(); void ControlTemp(); void CalcDiffTemp(); void ReadTemp(); #define ONE_WIRE_BUS 15 #define EEPROM_SIZE 4 #define Cooling 32 #define Warming 33 #define SignalPWM 22 #define GREEN 10 #define BLUE 11 #define RED 12 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); String inString = ""; DeviceAddress sensor1 = { 0x28, 0xFF, 0xBE, 0x6E, 0x6E, 0x18, 0x1, 0xB5 }; DeviceAddress sensor2 = { 0x28, 0xFF, 0x79, 0x21, 0x69, 0x18, 0x3, 0x7A }; DeviceAddress sensor3 = { 0x28, 0xFF, 0xD5, 0x17, 0x69, 0x18, 0x3, 0x29 }; char APssid[] = "Komora"; char APpass[] = "Haslo"; WiFiServer server(80); float Temp1; float Temp2; float Temp3; float ImportanceTemp1 = 0.6; float ImportanceTemp2 = 0.2; float ImportanceTemp3 = 0.2; float AverageTemp; float SetTemp; float DiffTemp; float SavedTemp; const int freq = 500; const int ChanelPWM = 0; const int resolution = 8; int FirstStart = 0; Na razie go testuje czy wszystko będzie działać jak należy w rożnych sytuacjach. No i sama aplikacja
×
×
  • Utwórz nowe...