Skocz do zawartości

Arduino Nano jako element odstraszania kretów


Aloyzy

Pomocna odpowiedź

Mam prośbę, być może dużo za późno, bo ten cykl szkoleniowy :) 
już przeglądałem dawno, więc może nikt się temu nie przygląda.
Chciałem użyć Arduino Nano jako element odstraszania kretów.
Do uruchomienia silniczka z mimośrodowo umieszczonym "młotkiem".
Program jest podstawowy do migania diodami. Normalnie działa,
ale potrzebuje, żeby uruchamiał się co dwie godziny (choć godzinę)
wstawiłem w delay() 3600000 i - nie działa czy delay ma jakieś
ograniczenia długości rejestru czy coś innego może przeszkadzać?
Przy okazji liczyłem, bo mam taką potrzebę sterowania dwoma silnikami 
krokowymi, ze będzie tu coś takiego (silniki DC są,
ale mnie potrzebne są krokowce. Szukałem i ciągle było coś co mi nie pasowało, najczęściej była opcja sterowania jednym silnikiem, inne nie działały.
Nawet kolega co to C++ ogarnia zrobił mi program, ale również on (ten program)
działał, i czasami - nie działał. Kupiłem w końcu u chińczyka sterownik,
a jakbym chciał silników krokowych sterować większą ilością to drogo wychodzi.
Pozdrawiam.

Link do komentarza
Share on other sites

2 godziny temu, Aloyzy napisał:

Program jest podstawowy do migania diodami. Normalnie działa,
ale potrzebuje, żeby uruchamiał się co dwie godziny (choć godzinę)
wstawiłem w delay() 3600000 i - nie działa czy delay ma jakieś
ograniczenia długości rejestru czy coś innego może przeszkadzać?

Wartość przekazywana jako parametr do funkcji delay to typ unsigned long, czyli maksymalnie można tam wpisać 4294967295. Program powinien więc działać poprawnie, problem leży prawdopodobnie w innym miejscu, ciężko jednak doradzić coś bez wglądu w kod.

Link do komentarza
Share on other sites

2 godziny temu, Aloyzy napisał:

ale również on (ten program)
działał, i czasami - nie działał

Używałeś jakiejś biblioteki? Jeśli tak to jakiej? Nano ma bardzo mało pamięci i mogło po prostu nie wystarczyć.

2 godziny temu, Aloyzy napisał:

jakbym chciał silników krokowych sterować większą ilością to drogo wychodzi

ESP32 zamiast Arduino. Cena raczej podobna, a sterowanie kilkoma silnikami to żaden problem.

Link do komentarza
Share on other sites

Przerabiałem temat kretów u takiego chłopa...😉 Raczej przegrasz ta wojnę 😭 były dźwięki były wibracje i krety też były 🤪 ale próbować można jak najbardziej...może mocniejsze wibracje coś dadzą...a co do uruchamiania jakiegoś kawałka kodu co godzinę to... 

bool flaga = false; 
uint32_t last_time = 0;

if (millis() - last_time > 3600000UL) { 
  flaga = true; 
  last_time = millis(); 
 } 

if (flaga) { 
  // wlacz wibracje 
  // wlacz dzwiek  
  delay(1000); // ustalic czas wlaczenia 
  // wylacz wibracje 
  // wylacz dzwiek  
  flaga = false;
 }

A co do krokowcow to albo jak @ethanak radzi...czyli ESP32 albo kombinować na millis() (w prostszych projektach)

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Masz problem z kodem to po prostu go załącz. W programowaniu jest promocja do int, liczby nie określone inaczej to int, int w AVR ma 16bit.

Jak wpisujesz liczbę większą niż 16 bit ze znakiem, czyli 32,767 to użyj UL, lub po prostu zmiennej/stałej zdefiniowanej jako uint32_t. Liczba podana jako 3600000 zostanie obcięta do 32340=(5)7E40, gubi piątkę, która tu bardzo dużo waży. To teoria, a jak kiedyś sprawdzałem to delay powyżej 30s działa dziwnie gdy się zapomni ul, kiedyś to sprawdzałem i nie wyszło  przykładowo ani te 360s, ani 32s, tylko coś pośrodku, albo NANO się wieszało.  Zobacz 360000UL.

Jak widać dużo lepiej użyć millis(), a do zmiennych używać typu uint32_t.

Do silników krokowych można użyć shielda CNC z driverami A4988, DRV8825, są też podstawki pod pojedyncze drivery (wychodzi drożej, shield na 4 to 10zł na Allegro), wystarczy  dwa piny do sterowania silnikiem - kierunek i prędkość, shieldy mogą mieć na stałe połaczone więcej pinów, trzeba zerknąć na schemat.

image.thumb.png.9f513a7e9eb44d634bbd74ace81902ba.png

image.thumb.png.07830d8ab33355eb8864713b7b66c919.png 

Taki komplecik z NANO 58:

image.thumb.png.4e58e01844dbc4455ac672eab5c1f9c1.png

Można to też upolować na Ali za pół ceny.

 

  • Lubię! 1
Link do komentarza
Share on other sites

Uwagi @kaczakat dot. delay() są przydatne, ale niepotrzebnie brnie w te silniki krokowe. Czy naprawdę uważacie, że silnik krokowy to najlepsza metoda płoszenia kreta? A może lepsza byłaby maszynę do szycia.....

  • Lubię! 1
Link do komentarza
Share on other sites

4 godziny temu, Treker napisał:

Wartość przekazywana jako parametr do funkcji delay to typ unsigned long, czyli maksymalnie można tam wpisać 4294967295. Program powinien więc działać poprawnie, problem leży prawdopodobnie w innym miejscu, ciężko jednak doradzić coś bez wglądu w kod.

Sprawa chyba się wyjaśniła. Uruchomiłem program i włączyłem stoper, ale po upływie
ustanowionego czasu nic się nie działo. Prawdopodobnie (jak napisał @kaczakat) te dłuższe delay()
mogą działać różnie.

 

14 minut temu, kaczakat napisał:

Masz problem z kodem to po prostu go załącz.

 

Kod jest beznadziejnie prosty (miganie diody)  :) 
Podłączyłem buzer i okazało się, że czasami odpowiada. Faktycznie, przynajmniej u mnie
to nie ma znaczenia, aby robił to precyzyjnie. Testuje teraz czy to będzie robił w ogóle :) 

 

19 minut temu, kaczakat napisał:

Do silników krokowych można użyć shielda CNC z driverami A4988, DRV8825

To jest ciekawa opcja. Przeanalizuje. Dzięki

1 godzinę temu, farmaceuta napisał:

Przerabiałem temat kretów u takiego chłopa...😉 Raczej przegrasz ta wojnę 😭 były dźwięki były wibracje i krety też były 🤪 ale próbować można jak najbardziej...

Żal mi kretów. To nie ich wina, że lubią różne pędraki, i jest ich najwięcej na mojej działce :).
Mój pomysł polega na uderzaniu metalowym "młoteczkiem" na mimośrodzie silniczka,
we wbity kątownik. Jeżeli jest prawdą, ze mają wrażliwy słuch, to  taki przenikliwy dźwięk
nie powinien być im obojętny. Sprawdzę już niebawem, i jaki będzie skutek  nie omieszkam poinformować.

Wolałbym, aby zrozumiały, że gdzie indziej będzie bardziej komfortowo. :)

33 minuty temu, kaczakat napisał:

Jak wpisujesz liczbę większą niż 16 bit ze znakiem, czyli 32,767 to użyj UL, lub po prostu zmiennej/stałej zdefiniowanej jako uint32_t. Liczba podana jako 3600000 zostanie obcięta do 32340=(5)7E40, gubi piątkę, która tu bardzo dużo waży.

Niestety nie jestem biegły (raczej bardzo początkujący), i nie wszystko do mnie trafia,
choć zacząłem wdrażać się w oprogramowanie używane w Arduino.
Jestem z czasów, gdy na studiach używało się Fortran -a,

choć jakieś główne zasady są nieco podobne.

 

4 minuty temu, jand napisał:

Czy naprawdę uważacie, że silnik krokowy to najlepsza metoda płoszenia kreta?

Nieee. :) 
Silniki krokowe to zupełnie inna bajka
Potrzebuje sterować zdalnie z reżyserki, kamerami w sali koncertowej czyli robić Pan&Tilt.
do tego potrzebny jest program do sterowania jednocześnie, dwoma silnikami przez jeden mikrokontroler.

Link do komentarza
Share on other sites

6 minut temu, Aloyzy napisał:

Jestem z czasów, gdy na studiach używało się Fortran -a,

Nie jesteś tu osamotniony 🙂

Nie wiem jakie mieliście maszyny na studiach, ale zrozumienie że w 24-bitowym INTEGER na ICL 1900 (czyli Odra 13xx) zmieści się więcej niż w 16-bitowym int w Arduino chyba nie wykracza poza jakieś podstawowe umiejętności liczenia? FORTRAN miał jedyny słuszny rozmiar INTEGER związany z wielkością słowa. Tutaj masz ich więcej: dwie długości (16-bitowy int i 32-bitowy long, o innych na razie nie wspominam), dodatkowo może być ze znakiem lub bez. A zapis 32-bitowej stałej bez znaku polega na dodaniu za liczbą literek U (jak unsigned) i L (jak long) - np. 3600000UL.

Co nie zmienia faktu, że delay służy do odczekania milisekund, a nie godzin...

Co do silników i kamer: w ESP32 masz do tego bibliotekę FastAccelStepper. Możesz sterować 6 silnikami (teoretycznie więcej, ale 6 działa na sprzętowych driverach), ustawiać precyzyjnie silniki z uwzględnieniem przyspieszenia i hamowania, w ogóle miodzio. Podajesz np. polecenie "Ustaw silnik N w pozycji X" albo "Przekręć silnik N o X kroków" i resztą się nie zajmujesz... No i do tego np. A9488 po jednym na każdy silnik... Podejrzewam tylko, że może być problem ze sterowaniem na większą odległość (ile jest od reżyserki do kamery?). 

Oczywiście, bibliotek typu AccelStepper możesz użyć również na zwykłym Arduino, ale masz ograniczenie do ilości silników. A ręczne operowanie pinami to chyba nie jest zadanie dla Ciebie (ani - jak mi się wydaje - dla kolegi od C++).

 

  • Lubię! 1
Link do komentarza
Share on other sites

3 minuty temu, ethanak napisał:

Co do silników i kamer: w ESP32 masz do tego bibliotekę FastAccelStepper. Możesz sterować 6 silnikami (teoretycznie więcej, ale 6 działa na sprzętowych driverach), ustawiać precyzyjnie silniki z uwzględnieniem przyspieszenia i hamowania,

Kamerą steruję joystickiem.
Zabrzmiało to ciekawie, zwłaszcza, że esp32 nie jest jakoś szczególnie drogie :) 
Czy jest jakieś dostępne oprogramowanie do obsługi, bo sam tego na pewno nie wymyślę.
a tego jeszcze nie szukałem.

Link do komentarza
Share on other sites

9 minut temu, ethanak napisał:

Podejrzewam tylko, że może być problem ze sterowaniem na większą odległość (ile jest od reżyserki do kamery?). 

ok 20 m

Link do komentarza
Share on other sites

Na 20m to niczym wbudowanym w UNO/NANO nie prześlesz ,  UART to ze 2m, kabelki do sterowania silnikami z drivera też z tyle max. Może być RS485, radiowo jak się będą widziały 2 ESP32, jeden z joystykiem, drugi jako odbiornik i sterownik do krokowców, lepiej jeszcze router WIFI między nimi, szybka komunikacja przez WIFI to websockets client-serwer.

Albo ten RS485, może być NANO, lepsze byłoby MICRO - mają dodatkowy UART na pinach, w UNO/NANO jest wspólny z USB co trochę wymusza mieszaniem kabelkami podczas testów i wgrywania, 2 konewertery UART-RS485, przed zakupem trzeba się zdecydować czy to będzie NANO/MICRO (5V) czy ESP32 (3.3V). Potem to już niczym się nie różni od komunikacji dwóch Arduino po UART. Może to dlatego teraz raz działa, raz nie.

Do bezprzewodowej komunikacji jest jeszcze sporo innych modułów: nRF24L01+, HC11, HC12, ale ich działanie zależy od widoczności i zakłóceń w tle.

Może być też gotowa Tasmota, obsługuje krokowce, obsługuje joy, można przesyłać dane między dwoma modułami, ale to też coś czego trzeba się nauczyć, jak już się wgra to konfigurację można wyklikać, do krokowca trzeba sobie wgrać firmware z dodaną obsługą driverów.

ESP32 nie ma w Arduino po instalacji, trzeba wejść w preferencje, wkleić linijkę znalezioną w Google, wejść w managerze płytek w wyszukiwarkę, wpisać ESP32, zainstalować i pojawia się kilkadziesiąt nowych płytek. To jest do ogarnięcia w parę minut.

Jednak reszta, jak jesteś  na etapie migania led, to trochę Ci czasu zajmie.

 

Link do komentarza
Share on other sites

4 godziny temu, kaczakat napisał:

Na 20m to niczym wbudowanym w UNO/NANO nie prześlesz ,  UART to ze 2m, kabelki do sterowania silnikami z drivera też z tyle max. Może być RS485, radiowo jak się będą widziały 2 ESP32, jeden z joystykiem, drugi jako odbiornik i sterownik do krokowców, lepiej jeszcze router WIFI między nimi, szybka komunikacja przez WIFI to websockets client-serwer.

Albo ten RS485, może być NANO, lepsze byłoby MICRO - mają dodatkowy UART na pinach, w UNO/NANO jest wspólny z USB co trochę wymusza mieszaniem kabelkami podczas testów i wgrywania, 2 konewertery UART-RS485, przed zakupem trzeba się zdecydować czy to będzie NANO/MICRO (5V) czy ESP32 (3.3V). Potem to już niczym się nie różni od komunikacji dwóch Arduino po UART. Może to dlatego teraz raz działa, raz nie.

Do bezprzewodowej komunikacji jest jeszcze sporo innych modułów: nRF24L01+, HC11, HC12, ale ich działanie zależy od widoczności i zakłóceń w tle.

Może być też gotowa Tasmota, obsługuje krokowce, obsługuje joy, można przesyłać dane między dwoma modułami, ale to też coś czego trzeba się nauczyć, jak już się wgra to konfigurację można wyklikać, do krokowca trzeba sobie wgrać firmware z dodaną obsługą driverów.

ESP32 nie ma w Arduino po instalacji, trzeba wejść w preferencje, wkleić linijkę znalezioną w Google, wejść w managerze płytek w wyszukiwarkę, wpisać ESP32, zainstalować i pojawia się kilkadziesiąt nowych płytek. To jest do ogarnięcia w parę minut.

Jednak reszta, jak jesteś  na etapie migania led, to trochę Ci czasu zajmie.

 

A onewire? 

 

Poza tym na krety najlepszy granat

Link do komentarza
Share on other sites

Do takich rzeczy i odległości to raczej szedłbym w stronę DMX512, jest do tego biblioteka na ESP32 ale nigdy nie próbowałem.

W każdym razie do tych celów to wymyślili.

Link do komentarza
Share on other sites

Sam do obsługi joysticków używam ESP-NOW. Co prawda sterują one silnikiem na prąd stały i serwem, ale można by je używać i do silników krokowych.

17091057539366796184885422644679.thumb.jpg.0d5c3f060206831294c17bf5ddf05e55.jpg

 

 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.