Skocz do zawartości

jordanj

Użytkownicy
  • Zawartość

    17
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O jordanj

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna
  • Języki programowania
    Objective-c, Swift

Ostatnio na profilu byli

44 wyświetleń profilu
  1. Ja tego rezystora do płytki nie wlutowałem gdyż nie było w zestawie, a w domu miałem tylko THT. Wobec tego celem uruchomienia mam drucik z rezystorem łączący zasilanie z EN lub to samo za pomocą płytki stykowej (płytka ma strasznie duże opory, ale o tym przy okazji). P.s. Takiej właście podstawku szukam, ale jakoś nie mam szczęścia i nie mogę trafić na aukcjach.
  2. Nie, w tej chwili używam tylko pinów 3V3, GND, EN, IO0, 23, TX i RX. Używam https://botland.com.pl/pl/moduly-wifi/7655-uklad-wifi-bluetooth-ble-esp-wroom-32-smd.html w tej chwili na czymś takim: https://botland.com.pl/pl/przejsciowki-smd-dip/8894-adapter-dla-modulu-wifi-esp-32s.html . Po drugiej nocce walki też pomyślałem, że warto spróbować z gotowym modułem, więc zamówiłem: https://botland.com.pl/pl/moduly-wifi/8893-esp32-wifi-bt-42-platforma-z-modulem-esp-wroom-32-zgodny-z-esp32-devkit.html .
  3. Ja właśnie przylutowałem cały moduł, a nie tylko pamięć tj. testowałem na zupełnie nowym ESP32.
  4. Niestety to nie to. Wylutowałem go i wlutowałem nowiutki z paczki nieotwieranej wcześniej i problem nadal występuje. Na płytce zwarć nigdzie nie ma. Do tego podłączałem go do Arduino IDE na innym Macu i rezultat zupełnie taki sam. Kończą mi się pomysły co może być źle. Ten nowy również flashowałem za pomocą NodeMCU (po nieudanej próbie z Arduino IDE), zakończyło się tak jak z poprzednim tj. wg logu sukces, a naprawdę D Command: esptool.py --port COM23 --baud 115200 --after no_reset write_flash --flash_mode dio 0x00000 D:\Desktop\main.ino.esp32.bin --erase-all esptool.py v2.6 Serial port COM23 Connecting.... Detecting chip type... ESP32 Chip is ESP32D0WDQ5 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None MAC: 3c:71:bf:dc:f9:44 Uploading stub... Running stub... Stub running... Configuring flash size... Auto-detected Flash size: 4MB Erasing flash (this may take a while)... Chip erase completed successfully in 9.0s Compressed 727488 bytes to 406996... Wrote 727488 bytes (406996 compressed) at 0x00000000 in 37.6 seconds (effective 154.9 kbit/s)... Hash of data verified. Leaving... Staying in bootloader. Firmware successfully flashed. Unplug/replug or reset device to switch back to normal boot mode. Po restarcie w konsoli widziałem: rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) flash read err, 1000 ets_main.c 371 ets Jun 8 2016 00:22:57
  5. Cześć, bawię się z ESP32, do wczorajszej nocy wszystko szło OK, ale zaczęły się problemy z uploadowaniem flasha, których nigdy wcześniej nie miałem, a pół nocy Googlania nie przyniosło rezultatu. Otóż, gdy uploaduję za pomocą Arduino IDE (na Mac OS X, jeśli to ma znaczenie) to widzę taki błąd w konsoli: Sketch uses 727370 bytes (55%) of program storage space. Maximum is 1310720 bytes. Global variables use 38448 bytes (11%) of dynamic memory, leaving 289232 bytes for local variables. Maximum is 327680 bytes. esptool.py v2.6 Serial port /dev/cu.usbserial-AM00LYR0 Connecting.... Chip is ESP32D0WDQ5 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None MAC: 3c:71:bf:dd:0b:00 Uploading stub... A fatal error occurred: Invalid head of packet (0x00) A fatal error occurred: Invalid head of packet (0x00) Restart komputera, zamiana gniazda USB i podobne zabiegi z różnych forów nie przyniosły rezultatu. Zmiana baudrate również bez efektu. Wobec tego dokonałem eksportu do pliku .bin i wgrałem flash na komputerze z MS Windows Vista za pomocą Node MCDU. Sama operacja wg logu zakończyła się powodzeniem. Rzeczywistość jest jednak odmienna. Moduł wpada w bootloopa i do konsoli pluje takim logiem: 13:44:49.957 -> rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) 13:44:49.957 -> flash read err, 1000 13:44:49.957 -> ets_main.c 371 Gdy zewrę GPIO 0 z GND to w konsoli pokazuje: 13:45:00.879 -> rst:0x1 (POWERON_RESET),boot:0x3 (DOWNLOAD_BOOT(UART0/UART1/SDIO_REI_REO_V2)) 13:45:00.879 -> waiting for download Czyli niby dobrze, ale nie mogę zrobić upload. Na koniec taka drobna, ale być może bardzo istotna uwaga. Kilka godzin przed wystąpieniem problemy podłączyłem niechcący odwrotnie zasilanie czyli 3V3 do GND i GND do 3V3. W tym czasie miałem tam program, który między innymi wystawiał access point i serwer HTTP. Jakież było moje zdziwienie gdy po poprawnym podłączeniu działał normalnie. Od tego czasu (..., a może wcześniej, ale nie miałem okazji spróbować) nie mogę zaktualizować flasha. Czyżbym go uszkodził w jakiś nietypowy sposób? Jakikolwiek pomysł mile widziany.
  6. Cześć, odkopałem ten wątek gdyż mam podobny problem z LF33, a dokładnie z LF33CV. Na wejściu podaję 5V, przy obciążeniu 0mA na wyjściu mam 3,3V. Gdy układ próbuje wyciągnąć 110mA to napięcie spada do niespełna 3V i uC nie startuje. Używam ESP32. Kondensatory do ESP32 zgodnie z DS tego mikrokontrolera, a kondensator do LF33 na wejściu zgodnie z notą, a na wyjściu trochę większy - 47uF zamiast 10uF, gdyż tylko taki elektrolit LOW ESR miałem. Próbowałem też z 10uF na wyjściu, ale bez low ESR - efekt dokładnie ten sam, Aby zobrazować problem. Zasilanie prosto z PSU. Na wyjściu z zasilacza są równe 3.3V (sprawdzałem poza kadrem miernikiem na zaciskach), na breadboardzie są chyba dużo opory (kilka Ohm na parę centymetrów) i napięcie ciut spadło, ale w granicach działania. Teraz zasilanie z LF33CV. Na wejściu ustawiam 5V i ograniczam prąd do 0,9A (próbowałem też ograniczać do 2A), bez obciążenia jest ok, pod obciążeniem jest zdecydowanie poniżej 3V. Próbowałem też zwiększać napięcie do okolic górnego limitu wejścia tj. 12V i spadek był taki sam. Poniżej nota stabilizatora. https://botland.com.pl/pl/stabilizatory-liniowe/126-stabilizator-ldo-33v-lf33cv-tht-to220.html?search_query=lf33cv&results=2 (str 11, LF33C) Jeśli dobrze rozumiem to on przy obciążeniu 200mA zadowala się dropout voltage o 0,2-0,35V, a przy obciążeniu 500mA 0,4-0,7V. Dobrze rozumiem? Z góry dziękuję za jakieś sugestie.
  7. Cześć, Edison to fajna zabawka, wrażenia z kursu jeszcze opiszę (co jest aktualne, a co się trochę zdeaktualizowało). Napotkałem pewien problem, pogrzebałem w czeluściach Internetu i nie mogę nigdzie znaleźć sensownego rozwiązania. Mianowicie chodzi o programowanie obiektowe w Arduino. Tak aby nie mieć wszystkiego w jednej funkcji loop, która może mieć nawet tysiące linii kody tylko dzielić kod na klasy, najlepiej te klasy zapisywać w oddzielnych plikach czyli tak bardziej współcześnie (pamiętam jedną z firm, w której pracowałem, pod koniec lat 2000, w której były pliki po 3500 linii kodu zawierajace w sobie PHP, MySQL, HTML, JavaScript i dla urozmaicenia czasami coś jeszcze). Do rzeczy. Poeksperymentowałem i napisałem prosty wrapper do LCD. Podobieństwa do znanych języków i wskazówki z błędów kompilatora dały taki rezultat. #include <LiquidCrystal_I2C.h> class MessageGenerator { String lines[2]; bool clear = false; LiquidCrystal_I2C *screen; public: MessageGenerator() { this->screen = new LiquidCrystal_I2C(0x27, 16, 2); this->screen->init(); this->screen->backlight(); this->screen->noAutoscroll(); } public: ~MessageGenerator() { free(this->screen); free(lines); } public: void setLine(String s, int l) { String oldV = lines[l]; if (oldV != s) { lines[l] = s; clear = true; } } public: void display() { if (clear) { this->screen->clear(); clear = false; } this->screen->setCursor(0, 0); this->screen->print(lines[0]); this->screen->setCursor(0, 1); this->screen->print(lines[1]); } }; MessageGenerator *lcd;// = new MessageGenerator(); void setup() { Serial.begin(9600); Serial.println("setup arduino"); lcd = new MessageGenerator(); lcd->setLine("Have a Nice Day", 0); lcd->display(); } Działa to losowo tj. czasami działa, a czasami nie działa. Nie do końca wiem dlaczego. Nie wiem czy Arduino jest bardziej podobny do C czy bardziej do C++ to też nie wiem jak tego używać np. czy jest jakiś garbage collector czy też manualnie zarządzać pamięcią, jak przydzielać adresy obiektom (zwyczajnie używać keyword new czy np. malloc aby zarezerwować jakiś blok pamięci). Obecnie czasami działa to dobrze, a czasami mam na wyświetlaczu dyskotekę lub aplikacja wiesza się w momencie wywoływania konstruktora klasy na wywołaniu this->screen->init(). Zaglądałem do wnętrza tej biblioteki LiquidCrystal_I2C i tam w init dużo ciekawego się nie dzieje poza tym, że jest powoływana instancja klasy Wire. Miałem już koncepcję, że nie deallocuję, ale nie bardzo wiem jak to debugować - tu niestety minimalizm IDE Arduino daje o sobie znać, a do Eclipse nie mam cierpliwości, choć pewnie wrócę do pomysłu konfiguracji Eclipse za pomocą Sloebera (niestety na Mac OS X nie chce działać tak automatycznie i idiotoodpornie jak to opisują na niektórych forach). Jak na Edisonie i w ogóle na Arduino działają sketche. Czy w danej chwili działa tylko jeden sketch czy też może działać kilka w tym samym czasie. Myślałem, że wgranie nowego sketcha ubija poprzedni. Próbowałem też w konsoli zrobić ps | grep sketch i dalej na niektórych procesach wykonać kill -9, ale to nie daje oczekiwanych efektów - tam jest jakiś proces sketch_restart. Efekt jest taki, że gdy wyświetlacz mi nie działa to nawet uruchomienie przykładowego sketcha nie powoduje, że on działa. Czy po restarcie urządzenia/odłączenia zasilania system bootuje się z aktywnym ostatnio wgranym sketchem? Czasami się też tak zdarza, że na wyświetlaczu widzę napisy, których być nie powinno, gdyż te fragmenty kodu są w danym uruchomieniu zakomentowane. Również czujnik temperatury i wilgotności działa u mnie losowo, tylko tutaj wynik losowania z opcją działanie jest rzadszy (często go nie wykrywa, z braku odpowiedniego modelu kupiłem w Botlandzie Si7021, szczęśliwie jest biblioteka do Arduino, sprawdzałem na przykładach i również zachowuje się losowo). O problemy podejrzewałem luźne wtyki na broadboardzie, ale po podłączeniu bezpośrednio do płytki Intela też nie działa. Mam jeszcze pytanie o programowanie wielowątkowe na Arduino. Czy to w ogóle jest możliwe i praktykowane? Jak rozumiem zasadniczo jest do dyspozycji jeden runloop, który jest zawarty w funkcji loop. Czy jest możliwość wydzielenia jakiejś operacji do innego wątku czy kolejki lub stworzenia własnego, dodatkowego runloopa? To tak bardziej na przyszłość mnie zaczęło zastanawiać. Wiem, że jakieś złudzenie wielozadaniowości można uzyskać za pomocą millis() (pisałeś o tym w ostatniej lekcji drugiej części kursu Arduino), ale to jednak trochę karkołomna implementacja. Próbowałem Googlać, ale większość odpowiedzi o OOP pokazuje tutoriale jak zbudować własną bibliotekę do Arduino, a to nie jest moim celem - przynajmniej narazie. W zasadzie mogłem to napisać jako pomysł na artykuł czyli programowanie w Arduino dla średniozaawansowanych. P.s. Czy w Arduino dostępne są bloki/funkcje anonimowe/clousures czy jak to się może nazywać? P.s. 2 Chciałem połączyć wszystkie lekcje w jeden układ aby było fajniej i sobie trochę skomplikowałem. P.s. 3 Jeśli nie masz czasu odpisywać na moje dziesiątki pytań, a masz jakiś reference handbook do programowania w Arduino to się również ucieszę. Na arduino.cc (https://www.arduino.cc/reference/en/#page-title) nie znalazłem odpowiedzi na nurtujące mnie kwestie. P.s. 4 Miałem pomysł aby zrobić kurs Arduino za pomocą Edisona (uniknąłbym kupowania kolejnych gratów, a większość z nich już mam) tylko zastanawiam się czy to napewno dobry pomysł. P.s. 5 Z góry bardzo dziękuję za odpowiedź, na ten kurs niestety nie mogę Wam zrobić donate kupując zestaw w Botlandzie bo już zestawów nie mają. P.s. 6 Dla zainteresowanych mój losowo działający sketch. #include <Adafruit_Si7021.h> #include <LiquidCrystal_I2C.h> class MessageGenerator { String lines[2]; bool clear = false; LiquidCrystal_I2C *screen; public: MessageGenerator() { this->screen = new LiquidCrystal_I2C(0x27, 16, 2); this->screen->init(); this->screen->backlight(); this->screen->noAutoscroll(); } public: ~MessageGenerator() { free(this->screen); free(lines); } public: void setLine(String s, int l) { String oldV = lines[l]; if (oldV != s) { lines[l] = s; clear = true; } } public: void display() { if (clear) { this->screen->clear(); clear = false; } // screen.home(); this->screen->setCursor(0, 0); this->screen->print(lines[0]); this->screen->setCursor(0, 1); this->screen->print(lines[1]); } }; MessageGenerator *lcd;// = new MessageGenerator(); Adafruit_Si7021 sensor = Adafruit_Si7021(); const int ALARM_PIN = 2; const int DOOR_PIN = 3; const int MOTION_PIN = 4; const int LIGHT_PIN = 0; const int kDuration = 100; int lastLightLevel = 0; double i = 0; void setup() { Serial.begin(9600); Serial.println("setup arduino"); lcd = new MessageGenerator(); pinMode(LED_BUILTIN, OUTPUT); pinMode(ALARM_PIN, OUTPUT); pinMode(DOOR_PIN, INPUT_PULLUP); pinMode(MOTION_PIN, INPUT_PULLUP); digitalWrite(ALARM_PIN, HIGH); lcd->setLine("Have a Nice Day", 0); lcd->display(); // if (!sensor.begin()) { // lcd->setLine("Sensor failure", 1); // lcd->display(); // sensor.reset(); // } } void loop() { digitalWrite(ALARM_PIN, HIGH); monitorAlarm(); i += double(double(kDuration) / 1000); int ii = (int)i; if (ii % 3 == 0) { displayLightLevel(); } else if (ii % 3 == 1) { displayHumidity(); } else if (ii % 3 == 2) { displayTemperature(); } delay(kDuration); } void monitorAlarm() { bool doorOpened = digitalRead(DOOR_PIN); bool motionDetected = digitalRead(MOTION_PIN); if (doorOpened || motionDetected) { // digitalWrite(ALARM_PIN, LOW); digitalWrite(LED_BUILTIN, HIGH); Serial.print("Alarm triggered! "); if(doorOpened) { Serial.print("DOOR "); } if(motionDetected) { Serial.print("MOTION "); } Serial.println(""); lcd->setLine("ALARM!", 0); lcd->display(); } else { lcd->setLine("Alarm Ended", 0); lcd->display(); digitalWrite(ALARM_PIN, HIGH); digitalWrite(LED_BUILTIN, LOW); } } void displayLightLevel() { int val = analogRead(LIGHT_PIN); if (abs(val - lastLightLevel) > 10) { Serial.print("Light lvl = "); Serial.println(val); } String s = "Light " + String(val); lcd->setLine(s, 1); lcd->display(); lastLightLevel = val; } void displayHumidity() { int val = (int)sensor.readHumidity(); String s = "Humidity " + String(val) + "%"; Serial.println(s); lcd->setLine(s, 1); lcd->display(); } void displayTemperature() { int val = (int)sensor.readTemperature(); String s = "Temperature " + String(val); Serial.println(s); lcd->setLine(s, 1); lcd->display(); }
  8. Cześć, niestety mi to nie działa. Też zauważyłem, że na Twoim nagraniu to działa pomimo braku podłączenia CD4026 do GND. Moje oba sterowniki są uszkodzone albo też ja je niechcący uszkodziłem. Do rzeczy. Zmontowałem układ, podłączyłem do baterii i nie działał, przystąpiłem do troubleshootingu. Wyjąłem układ i sprawdziłem testerem diod podłączenie każdego segmentu. Najpierw kontrolnie kropkę, a później w miejscach, w których normalnie wychodzi zasilanie z nóżek układu. Wszystko niby było ok. Wpiąłem układ i spróbowałem ponownie. Niestety znów nie działał. Przy okazji dotknąłem go i zauważyłem, że jest dość ciepły. Szybko odłączyłem zasilanie. Ustawiłem miernik na pomiar natężenia z zakresem do 200 mA i znów na chwilę go podłączyłem tym razem szeregowo wpinając miernik do zasilania. Pobór prądu wynosił 130 mA - wydaje mi się, że strasznie dużo. Układ znów ciepły (już mniej bo tylko zmierzyłem natężenie i odłączyłem). W innej próbie zmierzyłem napięcie - 6,4V, więc OK. Wyłączyłem baterie i dokonałem testu diod z wpiętym układem. Najpierw kontrolnie niepodłączona kropka, a później kolejne segmenty. Ledwo się świeciły (na nagraniu prawie nie widać) i to tylko gdy przyłożyłem sondę za opornikiem. Przed opornikiem w zasadzie się nie świeciły. To mi zasugerowało, że gdzieś wewnątrz układu musi być zwarcie. Spróbowałem z następnym, identyczna sytuacja. Po kilku próbach układy przestały się grzać, a ich pobór prądu wynosił ok. 0 mA, więc są chyba totalnie dead. Przy okazji zamówię w Botlandzie bo nie bardzo mam pomysł co to może być innego. P.s. Do zdjęć też zdemontowałem oporniki i wyprowadzenie masy aby mieć idealnie jak u Ciebie.
  9. To wiem bo to jest kondensator monolityczny czyli jego biegunowość nie ma znaczenia. Tylko skoro on się ładuje do ok. 3,3V, a na wyjściu z US1A jest ok. 6V to skoro tam jest wyższy potencjał dlaczego się on nie ładuje?
  10. Cześć, mam pytanie odnośnie do tego schematu. Dlaczego wg opisu kondensator się rozładowuje, a nie ładuje. ..., a jeśli już się rozładowuje to dlaczego przez opornik R2+P1, a nie np. R3 lub R1?
  11. OK, sprawdziłem. Z 4 MOSFETów, które mam dwa są trafione. Z trzecim działa OK, podobnie jak w przykładzie z diodą, o który Cię pytałem w I części kursu. Czyli naładuję go ładunkiem dodatnim i brzęczy do momentu aż rozładuję przykładając do masy.
  12. Cześć, czy wytłumaczysz mi dlaczego przy pewnych wartościach serwo ciągle drga, a w większości się ustawia do danego poziomu, stabilizuje i pozostaje nieruchome? Zastanawiało mnie to już przy konfiguracji modeli i w tym układzie jest identycznie.
  13. Mam problem. Buzzer w połączeniu z MOSFETem zawsze piszczy. Nawet gdy wyjmę opornik łączący + z GATE lub masę z GATE. Dosłownie zawsze. Myślałem, że mam uszkodzony tranzystor i próbowałem z innym ale skutek jest taki sam. Próbowałem zwierać jego nóżki na różne sposoby, również bez rezultatu.
  14. Leniwy jestem i z tego lenistwa napisałem do Botlandu. Mają ten zestaw w produktach wycofanych, więc można podejrzeć zawartość. https://botland.com.pl/pl/produkty-wycofane/5157-forbot-intel-edison-zestaw-elementow-bezplatny-kurs-on-line.html Dla potomnych, na wypadek usunięcia zawartości linku. Intel Edison (tego już nie kupicie, chyba, że używany np. na eBay) Arduino Breakout Kit (j.w.) Płytka stykowa 400 otworów (można wykorzystać tę z kursu elektroniki) Rezystory 470 Ohm 30 pcs Rezystory 10k 30 pcs Wyświetlacz LCD 2x16 podświetlany w kolorze niebieskim z konwerterem magistrali I2C. Dzięki temu układowi do podłączenia ekranu wystarczą dwie linie danych oraz zasilanie 5 V i masa. Dioda LED 5 mm czerwona - 10 szt. Moduł z buzzerem aktywnym z generatorem - umożliwia tworzenie sygnałów dźwiękowych przy pomocy stałego sygnału napięciowego. HDC1008 - czujnik wilgotności i temperatury zasilany napięciem od 3 V do 5 V z interfejsem I2C. Zakres pomiarowy: temperatura: -20 °C do 85 °C, wilgotność: 10 %RH do 80 %RH. Zestaw 65 przewodów połączeniowych do płytek stykowych o różnej długości w rozmaitych kolorach. Przewody połączeniowe żeńsko-męskie 20 cm - 40 szt. różnokolorowych przewodów połączeniowych akończonych z jednej strony złączem żeńskim, z drugiej końcówką męska. Czujnik magnetyczny otwarcia drzwi/okien - kontaktron CMD918, urządzenie stosowane jest głównie do określenia pozycji drzwi i okien. Wymiary obudowy to 9,5 x 18 mm. Fotorezystor 5-10 kΩ GL5616 - prosty czujnik natężenia światła. Zasilacz impulsowy 12V / 2,1A. Klawiatura numeryczna - do wprowadzania danych. Dwa przewody microUSB do połączenia płytki z komputerem. Czujnik PIR pozwala na wykrywanie ruchu. Wykorzystywany jest do detekcji obiektów w pomieszczeniach w systemach alarmowych i oświetleniowych. Kuferek do przenoszenia elementów zestawu Ja to lekko zmodyfikowałem. Zamiast płytki stykowej z zestawu wziąłem większą ze zworkami w zestawie. https://botland.com.pl/pl/plytki-stykowe/1504-plytka-stykowa-830-otworow-z-zestawem-140-zworek.html - przyda się w innych projektach. Z tego też względu nie wziąłem zestawu 65 przewodów do płytek stykowych. Czujnika wilgotności i temperatury nie znalazłem, więc wziąłem inny na I2C, a gold piny po kursie lutowania zakładam, że mu sam wstawię. https://botland.com.pl/pl/czujniki-temperatury/6554-si7021-czujniki-temperatury-i-wilgotnosci-i2c-sparkfun.html Fotorezystora nie mają w magazynie może kupię, ale w zasadzie dla testów wygodniej może być wstawić potencjometr i zamiast zasłaniać go ręką aby zasymulować zmianę natężenia światła przekręcić pokrętło - efekt tj. zmiana oporu jest taki sam Teraz chwilowo nie mam czasu, ale myślę, że pod koniec miesiąca, początek sierpnia zacznę się tym bawić, więc napiszę jak poszło. Na stronie Intela znalazłem jakieś narzędzia do Edisona i to nawet w wersji na OS X, zatem jest nadzieja, że to będzie normalnie działało.
  15. W. moim przypadku wybór Edisona to nie przypadek. Kupiłem go aby zamontować go w PixHawk Cube. Z tego względu mimo wszystko spróbuję.
×
×
  • Utwórz nowe...