Przeszukaj forum
Pokazywanie wyników dla tagów 'nrf24l01'.
Znaleziono 10 wyników
-
Niejednokrotnie tworząc różne roboty, maszyny oraz platformy terenowe, miałem do czynienia z łączeniem wielu modułów lub tworzenia prowizorycznych układów na płytkach uniwersalnych. Problem pojawiał się na tyle regularnie, że postanowiłem wykonać układ umożliwiający w zasadzie bezpośrednie podłączenie napędu oraz jego obsługę za pomocą modułu NRF24L01. Uniwersalny sterownik robotów to płytka oparta na Atmega328AU, która umożliwia sterowanie radiowe dwoma silnikami DC oraz 6 portami IO. Układ jest rozpoznawany przez komputer jako Arduino Nano, dzięki czemu jest wygodny w obsłudze oraz kompatybilny ze środowiskiem Arduino IDE. W PROJEKCIE WYKORZYSTANO MIĘDZY INNYMI: Mikrokontroler Atmega328P-AU, Złącze USB B SMD, Diody LED statusowe zielone 0603, Moduł radiowy NRF24L01, Złącza XT30 M, Złącza ARK 2pin 5mm, Oscylator 12MHz, Oscylator 16MHz, Stabilizator 3V3, Stabilizator 5V, PEŁNA LISTA KOMPONENTÓW BOM: FUNKCJE SPRZĘTOWE STEROWNIKA: ⦁ Wbudowane złącze zasilania XT30 przyjmujące maksymalnie 28V DC, ⦁ Złącze włącznika, ⦁ Wbudowane statusowe diody zasilania, ⦁ Konwertery napięcia 5V oraz 3,3V, ⦁ Listwę zasilającą 5V, ⦁ Przycisk reset, ⦁ Wbudowane dwa mostki H - BD62130AEFJ-E2, ⦁ Wyprowadzenie pod moduł nrf24l01, ⦁ 6 portów IO (2x PWM, 4x ADC, 1xI2C), ⦁ Komunikacja przez mini USB B, ⦁ Komunikacja przez SPI, ⦁ Komunikacja przez I2C, STEROWANIE SILNIKA DC: Obsługa silników szczotkowych odbywa się za pomocą dwóch zintegrowanych z PCB mostków H BD62130AEFJ-E2. Umożliwiają one pracę silników do 28V oraz 3A. Ich obsługa odbywa się po przez piny: ⦁ PD2 (Arduino port 2) – M1A, ⦁ PD3 (Arduino port 3) – M1B, ⦁ PD4 (Arduino port 4) – M2A, ⦁ PD7 (Arduino port 7) – M2B, PEŁEN SCHEMAT ELEKTRYCZNY: ZDJĘCIA ZMONTOWANEJ PCB: PODSUMOWANIE: Ten projekt bardzo usprawnił moją pracę oraz przyspieszył postępy nad innymi projektami. Głównie przez oszczędność czasu oraz wygodę w obsłudze i debbugowaniu problemów. W przyszłości planuję ponownie pochylić się nad tym sterownikiem, próbując zmniejszyć jego gabaryty oraz wyprowadzając więcej pinów mikrokontrolera.
- 3 odpowiedzi
-
- 4
-
-
- arduino nano
- Arduino IDE
- (i 3 więcej)
-
Już od jakiegoś czasu interesowały mnie walki robotów, dlatego chciałem podjąć wyzwanie i zbudować swoją własną maszynkę destrukcji. Określenie maszynka nie została użyta bez powodu, gdyż waga robota zamyka się w 150 gramach. Celem robotów combat nie jest żadne skomplikowane zadanie, muszą się ze sobą mierzyć w dosłownej walce na arenie. Są to w zasadzie proste, zdalnie sterowane roboty, nad którymi należy sprawować osobiście kontrolę. Nie należy jednak zapominać, że w tej niby prostej dziedzinie jest ukryta ogromna trudność. Mianowicie należy zbudować robota o dużej sile, wytrzymałości i prędkości - a to wszystko w malutkim gabarycie. Zaprojektowanie maszyny, która zmieści się w tak małej wadze i jednocześnie będzie groźnym przeciwnikiem nie jest łatwe. Należy dokładnie zaprojektować całą konstrukcję, liczyć się z każdą zmianą, szukać kompromisów i dobrze balansować z parametrami maszyny. Cały ten proces sprawił, że praca nad NEONem była niezwykle ciekawa oraz satysfakcjonująca. Konstrukcja jest w zasadzie w całości drukowana na BambuLab A1 z użyciem PA12+CF15 oraz TPU95. Użycie wydruków znacząco zredukowało wagę, a użycie odpowiednich materiałów pozwala na pochłanianie pewnej ilości energii kinetycznej ataków wrogów oraz zapewnia wytrzymały pancerz. Bronią jest tutaj bębęn wyposażony w 2 rzędy bolców, które mają za zadanie zahaczyć o oponenta i wyrzucić go w powietrze. Za napęd służy w nim silnik BLDC 1800kV. Napędem jezdnym robota są dwa silniki N20. Koła zostały wykonane z tego samego materiału co rama. Dodatkowo w celu lepszego styku z powierzchnią, koła posiadają opony z o-ringów. Elektronika była tutaj równie ciekawym wyzwaniem. Większość twórców robotów combat posługuje się gotowymi rozwiązaniami. Używa się najczęściej aparatury modelarskiej (nadajnik i odbiornik), sterownik ESC silnika bezszczotkowego oraz sterownik ESC silnika szczotkowego. Dla wielu wystarczającym wyzwaniem będzie wykonanie stosownej konstrukcji, ja jednak postanowiłem pójść o krok dalej i opracować własną elektronikę. NEONa napędza własny sterownik, komunikujący się drogą radiową za pomocą NRF24L01. Sercem sterownika jest dobrze znana Atmega328P-AU. Sterownik ma wyprowadzone pady pod przyłączenie złącz modułu USB-UART z CH340, który również powstał z myślą o robocie oraz jego wygodnym programowaniu. Układ posiada również zintegrowane sterowniki silników jezdnych, zapewniających prace przy prądzie dochodzącym nawet do 4A. Włącznik robota również jest własnym produktem, gdyż na rynku ciężko o lekki przełącznik o dużej wytrzymałości prądowej. Jedynym w pełni zewnętrznym układem jest ESC do silnika broni. NEON nie przeszedł jeszcze chrztu bojowego. Jednak walka jest już na horyzoncie i po odbytej bitwie chętnie umieszczę tutaj więcej, bardziej treściwych szczegółów tej konstrukcji. Po walkach przyjdzie także pora na wnioski oraz potencjalne ulepszenia. Poniżej zostawiam linki do materiałów użytych do budowy robota. Filament PA12+CF15 1.75mm, Filament TPU 1.7mm, Silniki N20 100RPM 6V, Mikrokontroler Atmega328P-AU, Moduł radiowy NRF24L01.
- 1 odpowiedź
-
- 8
-
-
- robot
- arduino nano
-
(i 1 więcej)
Tagi:
-
SŁOWEM WSTĘPU Geneza powstania tego projektu jest niezwykle prosta i prozaiczna - po prostu potrzebowałem na szybko nadajnik do obsługi odbiorników z modułem nrf24l01. Wiele moich projektów i robotów opiera swoją komunikację właśnie na tych popularnych i dobrze znanych układach. Jednak do tej pory nie miałem opracowanego żadnego kompaktowego rozwiązania do tego celu. Nadeszła jednak chwila, w której potrzebowałem rozwiązania przydającego się poza moim warsztatem - czyli w terenie. Projekt ten miał 3 główne założenia: Wykonać projekt w maksymalnie jak najkrótszym czasie. Do produkcji urządzenia wykonać ogólnodostępne komponenty walające się po moim warsztacie. Zostawić w projekcie miejsce na dalsze usprawnienia. Tym sposobem po dwóch dniach powstał pilot, którym bardzo bym chciał się podzielić ze społecznością tego forum, a także każdym, kto lubi tworzyć i będzie w potrzebie stworzenia takiego urządzenia. Udało się spełnić wszystkie postawione wymagania. Czas produkcji prototypu zamyka się w niecałych 7 godzinach. W czas ten wliczony jest wydruk elementów na drukarce 3D, wytrawienie PCB oraz końcowy montaż całej elektroniki. Pilot posiada bardzo prosty i surowy styl, który w połączeniu z wyczuwalnym ciężarem 420 gramów daje odczucie solidnego i wytrzymałego produktu. Choć kształt pilota był tworzony w czysto improwizowanym procesie, bardzo dobrze układa się w dłoniach i zapewnia pewny chwyt całego urządzenia. Jeżeli więc potrzebny jest pilot RC a brak jest czasu, to do wykonania tego będziesz potrzebować: 2x Moduł Joystick z przyciskiem 1x Potencjometr montażowy 10k 1x gałka do potencjometru (nie jest konieczna ale to miły dodatek) 1x Arduino Nano - U3 2x przełącznik kołyskowy złącza goldpin męskie raster 2,54mm - J3, J4, J5, J6, J7, J8, J9, J10, J11, D1 złącza goldpin żeńskie raster 2,54mm przewody męsko-męskie 10cm przewody męsko-męskie 20cm 1x moduł nrf24L01+PA+LNA (można użyć standardowego modułu) - U4 1x dioda LED THT 5mm 1x stabilizator 5V LM7805 - U1 1x stabilizator 3,3V LF33CV - U2 1x rezystor 1k - R1 4x kondensator 100uF/16V (ważne by wysokość kondensatora nie była większa niż 7mm) - C2, C3, C4, C5 1x kondensator 100nF/50V - C5 2x złącze śrubowe ARK raster 5mm - J1, J2 1x pojemnik na baterie 6xAA 1x laminat jednostronny FR4 śruby do drewna fi3 12mm ELEKTRONIKA: Projekt płytki powstał w programie KiCAD. Nie ma w tym projekcie niczego wartego szerszego wyjaśniania. PCB ma za zadanie wyprowadzić złącza pod Arduino Nano, moduł radiowy oraz złącza sygnałowe goldpin. Arduino pełni rolę głównej jednostki obliczeniowej, obsługującej nasze radio. Szereg złącz sygnałowych jest podpiętych pod porty analogowe A0-A5, co umożliwia podłączenie sygnałów analogowych oraz modułów z interfejscem I2C (furtka na przyszłe modernizacje). Projekt PCB został wykonany z myślą o metodzie termotransferu, dlatego ułożenie oraz grubość ścieżek wygląda w taki a nie inny sposób. Priorytetem było stworzenie PCB łatwej i szybkiej w domowej produkcji. W załączniku umieściłem plik PCB.PDF zawierający layout niezbędny do wykonania płytki. Co do komponentów pasywnych potrzebnych do montażu PCB, domyślne wartości zostały wymienione wyżej w liście. Kondensatory C1,C2,C3,C4 mogą mieć inne wartości (np. 22uF-220uF). Ważne jest by zachować minimalnie napięcie 16V oraz wysokość kondensatorów maksymalnie 7mm. Rezystor R1 jest jedynie ogranicznikiem prądu i jego wartość jest w pełni zależna od decyzji montera. Na renderze widać diodę D1 wlutowaną w PCB. Ostatecznie zamontowałem tam złącze goldpin, aby doprowadzić zasilanie do diody statusowej umieszczonej w innym miejscu obudowy pilota. KONSTRUKCJA PILOTA: Konstrukcja została zaprojektowana w programie Fusion360. Posiadając modele 3D stworzonej PCB a także wszystkich niezbędnych komponentów, wykonałem stosowną obudowę. Starałem się, by pilot przypominał dostępne na rynku aparatury RC, aby finalny produkt mógł godnie prezentować się poza garażem np. w trakcie trwania różnych imprez lub zlotów. Finalny model składa się z 4 elementów: bazy, pokrywy frontu, pokrywy baterii oraz mocowania anteny. Do wydrukowania tych elementów skorzystałem z czarnego PLA. Części zostały wydrukowane na Bambulab A1 z użyciem supportów drzewnych, z wypełnieniem gyroidalnym 5%. Wszystkie pliki w formacie STL umieściłem w folderze 3Dfiles.zip. MONTAŻ ELEKTRONIKI: Montaż najlepiej zacząć od podłączenia przewodów10cm Ż-Ż do modułów joystick. Przewody podwinąłem tak, aby przechodziły pod modułem i wówczas przykręciłem je śrubami 3mm do bazy pilota. Do potencjometru oraz diody statusowej LED przylutowałem przewody Ż-Ż, aby ułatwić ich podłączenie do PCB. W przypadku potencjometru, zastosowałem przewody 10cm a diody 20cm. Potencjometr posiada w bazie miejsce, gdzie można zamontować go na "wcisk", bez konieczności przykręcania. Należy pamiętać o usunięcia kombinerkami wystającej blokadki, która służy do unieruchamiania potencjometru na panelu. Dioda LED posiada również miejsce do jej umieszczenia. Zalecam poprowadzenie przewodów diody LED pod modułem prawego joysticka. Pilot posiada 2 przełączniki - "1" oraz "ON/OFF". Do przełącznika "1" można przylutować przewody 10cm Ż-Ż w celu podłączenia go do PCB. Do przełącznika "ON/OFF" można przylutować zwykłe przewody, ponieważ jest on podłączany do złącza ARK. Do zasilania pilota wykorzystano 6 baterii AA, przez wzgląd na ich powszechne występowanie w sklepach. Przewody koszyka baterii AA można zarobić i również wpiąć w dedykowane złącze ARK na PCB. Koszyk baterii montowany jest śrubkami stożkowymi fi3 x 8mm. W przypadku ich braku wystarczy cienka taśma dwustronna lub po prostu zamknięcie obudowy tylną klapą. W bazie znajdują się dedykowane miejsca pod umieszczenie małych opasek zaciskowych, które pomogą w organizacji przewodów. Sygnały należy podłączyć w sposób następujący: Potencjometr - A0 Joystick lewy oś X - A1 Joystick lewy oś Y - A2 Joystick prawy oś X - A4 Joystick prawy oś Y - A5 Przełącznik "1" - A3 Po podłączeniu wszystkich przewodów, można podłączyć moduł radiowy nrf24L01. Jeżeli mamy model z dodatkową anteną, należy umieścić ją ostrożnie w dedykowanym kanale i przymocować za pomocą wydrukowanego mocowania. NIE WKŁADAMY JESZCZE ARDUINO NANO! PROGRAM: Przed zamknięciem obudowy pilota, należy wgrać program na Arduino. Pilot nie ma niestety żadnego wyprowadzenia pod złącze USB, dlatego wszystkie zmiany w oprogramowaniu wymagają otwarcia pilota. Poniżej załączam prosty kod do działania tego pilota. Umożliwia on wysyłanie informacji za pomocą 6 kanałów. 5 kanałów obsługuje wyprowadzenia analogowe, mapując je na zakres 0-255 i wysyłając w takiej formie. Kanał 6 odpowiada za wysyłanie stanu logicznego przełącznika. Po zaprogramowaniu Arduino, można podłączyć je do PCB i zamknąć bazę pilota za pomocą frontu. Front przytwierdzany jest za pomocą śrubek fi3. Na potencjometr można założyć gałkę bez konieczności przykręcania jego wału. Pozostaje uruchomić pilot przełącznikiem ON/OFF i sprawdzić, czy elektronika uruchamia się poprawnie. Jeżeli Arduino daje nam lekką czerwoną poświatę a dioda statusowa mieni się na froncie, nasz pilot jest gotowy do działania. #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> const uint64_t my_radio_pipe = 0xE8E8F0F0E1LL; //Adres RF24 radio(9, 10); struct Data_to_be_sent { byte ch1; byte ch2; byte ch3; byte ch4; byte ch5; byte ch6; }; Data_to_be_sent sent_data; void setup() { radio.begin(); radio.setAutoAck(false); radio.setDataRate(RF24_250KBPS); radio.openWritingPipe(my_radio_pipe); sent_data.ch1 = 127; sent_data.ch2 = 127; sent_data.ch3 = 127; sent_data.ch4 = 127; sent_data.ch5 = 127; sent_data.ch6 = 0; } void loop() { sent_data.ch1 = map( analogRead(A0), 0, 1024, 0, 255); //pot sent_data.ch2 = map( analogRead(A1), 0, 1024, 0, 255); //joy1 X sent_data.ch3 = map( analogRead(A2), 0, 1024, 0, 255); //joy1 Y sent_data.ch4 = map( analogRead(A4), 0, 1024, 0, 255); //joy2 X sent_data.ch5 = map( analogRead(A5), 0, 1024, 0, 255); //joy2 Y sent_data.ch6 = digitalRead(A3); radio.write(&sent_data, sizeof(Data_to_be_sent)); } PODSUMOWANIE: Projekt ten okazał się dla mnie całkiem przyjemnym ale także angażującym zadaniem, w którym mogłem przetestować swoje umiejętności wobec bardzo krótkiego czasu oraz ograniczonych zasobów. Mam nadzieję, że okaże się on dla kogoś równie przydatny jak dla mnie. Liczę także na dalszy rozwój tego projektu, dodając do niego nowe funkcje oraz poprawiając design. PCB.pdf 3Dfiles.zip
- 5 odpowiedzi
-
- 10
-
-
- arduino nano
- nrf24l01
-
(i 3 więcej)
Tagi:
-
System monitorowania poziomu wody w studni z funkcją stacji pogodowej Mój ogród, podobnie jak wiele innych, jest uzależniony od wody ze studni. Często borykałem się z problemem nieregularnego napełniania się studni, szczególnie w okresach suszy. Wielokrotnie zdarzało się, że pompa pracowała na sucho, co prowadziło do jej zapowietrzenia. Stworzyłem system monitoringu poziomu wody w studni, który sprawdza poziom wody i jej temperaturę. Pierwotnie w skład projektu wchodziły dwa urządzenia- nadajnik oparty o Pi Pico W umieszczony przy studni oraz odbiornik jako urządzenie oparte na Raspberry Pi pico. Oba urządzenia komunikowały się radiowo poprzez NRF24L01. Ze względu na problemy ze stabilizacją działania tych modułów radiowych projekt obecnie oparty jest na jednym Pi Pico W w specjalnie zaprojektowanej obudowie znajdującej się przy studni. Wysyła ono dane na serwer oparty na systemie Fedora Server. Serwer ten wstawia dane do bazy danych oraz generuje stronę www, która w sposób estetyczny pokazuje wyniki pomiarów. def send_data(data): ''' Sending data to the server''' try: # Determining the server address addr_info = socket.getaddrinfo('000.000.000.000', 5001) addr = addr_info[0][-1] # Creating and connecting a socket s = socket.socket() s.connect(addr) data = data.replace(' ', '+') # Preparing and sending an HTTP request request = "GET /update?data=" + str(data) + " HTTP/1.1\r\nHost: 000.000.000.000\r\nConnection: close\r\n\r\n" lcd.move_to(14,1) lcd.putstr('s1') s.send(bytes(request, 'utf8')) except: print(f'Failed to send data.') Przejdźmy do szczegółów. Do pomiaru poziomu wody użyłem wodoodpornego czujnika ultradźwiękowego JSN-SR04T. Swoją drogą naprawdę go polecam bo działa już 3 sezon bez żadnych problemów. Kluczem było tutaj odpowiednie zawieszenie sensora tak aby w jego zasięgu znajdowało się wyłącznie lustro wody a nie ścianki studni. Jego zakres pomiarowy to 20-450 cm a kąt pomiarowy mniej niż 50 stopni. Dokładność pomiarów +-3mm jak dla mnie wystarczająca do tego zastosowania. def get_distance(): count_d = 0 d = sensor.distance_cm() while d < 5: actual_time = formated_time() lcd.move_to(0,0) lcd.putstr(actual_time[9:18]) lcd.move_to(14,1) lcd.putstr('d' + str(count_d)) print('Proba uzyskania glebokosci studni: ' + str(count_d)) d = sensor.distance_cm() sleep(1) count_d = count_d + 1 if count_d >5: return 0 break # print('Distance:', distance, 'cm') #sleep(0.1) lcd.move_to(14,1) lcd.putstr(' ') return d W wodzie zanurzony jest kolejny z czujników kupiony zresztą też w sklepie Botland: DS18B20. Zakres pomiaru temperatury: -55°C do +125°C z dokładnością +- 0,5 stopnia. Nie sądzę abym za mojego życia potrzebował szerszego zakresu pomiarowego do pomiaru wody w studni Ja kupiłem wersję z 5 metrowym przewodem, ale z tego co widzę są wersje z krótszymi przewodami i dłuższymi. Do projektu dołożyłem także czujnik do pomiaru temperatury powietrza, wilgotności i ciśnienia atmosferycznego BME280. Zakres pomiarowy jest bardzo przyzwoity, temperaturę mierzy w zakresie-40°C - 85°C przy dokładności ±1°C. Wilgotność: 10% RH do 80% RH, dokładność ±3% RH. Ciśnienie powietrza: 300 hPa do 1100 hPa, dokładność ±1 hPa. temp, pressure, humidity = bme.read_compensated_data() temperature = temp / 100 # Temperatura w °C pressure = pressure / 100 / 256 # Ciśnienie w hPa humidity = humidity / 1024 # Wilgotność w % temperature = "{:02d}".format(round(temperature)) pressure = "{:02d}".format(round(pressure)) humidity = "{:02d}".format(round(humidity)) Co prawda z poziomu serwera można zarządzać czasem pomiaru to jednak dodałem niejako standardowo do projektu zegar DS1302 RTC. Urządzenie aktualizuje swój czas po włączeniu. def get_current_datetime(): response = urequests.get("http://worldtimeapi.org/api/timezone/Europe/Warsaw") data = response.json() datetime = data["datetime"] return datetime def set_ds1302_datetime(datetime_str): #print("Received datetime string:", datetime_str) datetime_obj = utime.localtime(utime.mktime((int(datetime_str[0:4]), int(datetime_str[5:7]), int(datetime_str[8:10]), int(datetime_str[11:13]), int(datetime_str[14:16]), int(datetime_str[17:19]), 0, 0,))) datetime_list = [datetime_obj[0], datetime_obj[1], datetime_obj[2], datetime_obj[6] + 1, datetime_obj[3], datetime_obj[4], datetime_obj[5], 0] #print("Converted datetime list:", datetime_list) ds.date_time(datetime_list) Moduł przy studni zawiera także wyświetlacz aby można było sprawdzić parametry będąc koło studni. Jest to typowy LCD 2x16 z konwerterem I2C LCM1602 W kodzie programu będzie widoczny import biblioteki NRF24L01. Mam ciągły „uraz” po pomimo dodania kondensatora elektronicznego i ceramicznego bezpośrednio przy VCC i GND modułu, nie byłem wstanie okiełznać w sposób zadowalający jego działania. Może kiedyś... W tym sezonie chciałbym rozbudować urządzenie o funkcję automatycznego włączania i wyłączania pompy w zależności od poziomu wody. Na zdjęciach obudowy można zobaczyć specjalne porty na kable wejściowe i wyjściowe. Jest także miejsce przekaźnik 250 VAC z optoizolacją. Pod jego 4 złącza podłączę w przyszłości zarówno pompę jak i elektrozawory poszczególnych linii nawadniania. Wyniki pomiarów mogę przeglądać na specjalnej stronie hostowanej na własnym serwerze. Dostosowana jest ona zarówno do smartfonów jak i do czytnika ebook. Strona pokazuje w sposób graficzny poziom napełnienia studni oraz jej poziom sprzed 5 minut. Na koniec- samodzielnie zaprojektowana obudowa, w której każdy element ma swoje miejsce. Zapraszam także do obejrzenia filmu prezentującego rozwiązanie: link do youtube. Będę bardzo wdzięczny za wszelkie rady ale także i konstruktywną krytykę.
-
Nie wiem czy można to nazwać pełnoprawnym DIY ale dzisiaj zaprezentuję drugie życie robota z kursu budowy robotów. Komentarz dla czepialskich: tak, mogę tego robota nazwać robotem ponieważ jest wyposażony w akcelerometr który jest pewnego rodzaju czujnikiem. Wykorzystałem tą konstrukcję, ponieważ chciałem zrobić coś małego co będzie mogło jeździć po całym domu z kamerką. Najpierw omówimy sobie co było gotowe a później co dodałem albo zmieniłem. Cała konstrukcja, Arduino i shield forbota przez cały czas były na swoim miejscu nic w tej kwestii nie ruszałem (oprócz przylutowania paru kabelków do shielda, i wkręcenia wyższych dystansów pod Arduino). Natomiast ze zmian jest jedna ale za to ważna sprawa jaką jest zasilanie. W oryginalnym robocie całość była zasilana z 6 paluszków AA co daje razem 9 woltów (1,5V * 6 = 9V) . Wady takiego rozwiązania były dwie - brak możliwości ponownego naładowania i zajmowały sporo miejsca. Pozbyłem się problemu i zamieniłem na 2 akumulatorki 18650 co daje 8.4 woltów (4.2V * 2 = 8,4V). Ale ktoś może powiedzieć zaraz zaraz, ale 2 takie akumulatorki 18650 wcale nie zajmują jakoś mniej miejsca i w ogóle to 8.4 V to nie za mało ? I ma rację bo przy 8.4V mogłem jeździć niecałe dwie minuty (to wszystko wina malinki) dlatego dodałem przetwornicę step- up która podnosi napięcie do 10V. Wracając do kwestii zajmowanego miejsca przez baterie to może faktycznie 18650 nie zajmuje mniej miejsca objętościowo ale za to kształtem idealnie wpasowały się pod przestrzeń między podwoziem a Arduino. Swoją drogą, gdybym nie odkrył tego miejsca to ten projekt by nie powstał. To tyle ze zmian teraz czas na dodatki. Najważniejszym dodatkiem jest mój samodzielnie zlutowany shield na shielda, może śmiesznie to brzmi ale tak właśnie jest. Zawiera on: moduł radiowy nRF24l01 który odpowiada za sterowanie wszystkim, akcelerometr MPU6050 który daje możliwość cieszyć się w miarę prostą jazdą do przodu, wyprowadzenia na 2 serwa które pozwalają poruszać kamerą aby uzyskać większy kąt widzenia, tranzystor do którego podpięte są 2 ledy 1w każda. Drugim dodatkiem jest Raspberry Pi 4B razem z kamerką . Tak zdaję sobie sprawę że rpi 4 to overkill do takiego projektu, zajmuje połowę platformy i potrafi zużywać więcej prądu niż cała reszta robota. Ale po prostu nie mam nic innego pod ręką. Teraz powiem kilka słów o poszczególnych funkcjach i podzespołach (jeśli można tak to nazwać). Zasilanie - nie będę się już powtarzał ale dla tych co jeszcze się nie domyślili dopowiem tylko że malinka jest zasilana przez przetwornicę step-down ( 8.4V przetwarza na 5V) Sterowanie - jak już mówiłem za sterowanie odpowiada nRF24l01, jako transmitera używam własnoręcznie zlutowanego pilota którego używałem już w moich poprzednich projektach i o dziwo cały czas jest sprawny. Na razie pilot ma 10 kanałów z czego 8 używam w tym robocie. Krótka rozpiska co obsługuje poszczególny kanał: lewy joystick góra dół - jazda przód tył, lewy joystick lewo prawo - obrót lewo prawo, prawy joystick góra dół - ruch kamerą góra dół, prawy joystick lewo prawo - ruch kamerą lewo prawo, potencjometr - trymer (albo jakoś tak, nie wiem jak to się pisze) do kamery lewo prawo, chodzi o taki minimalny ruch serwem który pomaga ustawić kamerę w miarę prosto, środkowy(pod nrf'em) toggle switch - włącza funkcję w miarę prostej jazdy do przodu, prawy toggle switch - światła on/off, przycisk w lewym joysticku - włącza buzzer (ten wbudowany w forbotowego shielda). Akcelerometr - sprawił mi najwięcej problemów, a właściwie to program którego nie umiałem poprawnie napisać. Okej przyznam się że funkcji przetwarzającej dane z akcelerometru nie napisałem w pełni samodzielnie. Działa to tak że program odczytuje przyspieszenie w osi Z i w zależności od tej danej steruje prędkością poszczególnych silników. Kamera - podłączona do RPI 4B przekazuje obraz przez Wi-Fi w sieci WLAN . Ja siedząc przy komputerze widzę ten obraz z programu VNC. Oczywiście najpierw muszę wywołać jakąś komendę którą się z wami podzielę, może ktoś skorzysta: raspivid -o -t 0 -w 800 -h 400 -rot 180 -fps 30 Ta część też zajęła mi trochę czasu. Chciałem żeby opóźnienie obrazu nie przekraczało 200ms więc przekopywałem internet żeby znaleźć jak streamować obraz za pomocą netcata. Niestety nie udało się znaleźć żadnego właściwego poradnika. Po dłuższym czasie poszukiwań znalazłem tą komendę która pozwoliła mi streamować obraz z kamery na naprawdę sensownym opóźnieniu (postaram się później podesłać filmik w komentarzu). Wady - oczywiście, tak jak wszystko na tym świecie robot ma wady i to nie jedną, a kilka: środek ciężkości - można głównym ciężarem są akumulatorki które są położone z tyłu co znacznie przesuwa środek ciężkości (czerwony - gdzie jest, zielony - gdzie powinien być), Raspberry Pi 4B - zajmuje za dużo miejsca i pobiera za dużo prądu, Zasilanie - pomimo że je zmieniłem to nadal 18650 nie są najlepszym rozwiązaniem. Na końcu zamieszczę jeszcze filmik pokazujący moc akcelerometru, ruch kamery i jazdę po dywanie.
- 7 odpowiedzi
-
- 16
-
-
witam mam problem z nrf24l01 nie mogę się komunikować na dosłownie wszystkim od prostych programów typu naciśnij przycisk na arduino 1 a na arduino 2 zapalisię dioda Aż po programy pokroju auta nie nie chodzi o to że jak ktoś może zrozumieć z opisu nie umiem programować ale ja umiem programować może nie świetnie ale potrafie tyle że właśnie ja nawet niewiem co jest nie tak próbiwałem wgrywać gotowce sam pisać i du*a ta dodatkowo nie wiem o co chodzi (najprawdopodobniej nrf24l01) bo inne szkice działają na tych arduinach typu miganie diodą (bez nrf24l01) nie wiem ile już wypróbowałem szkiców dotyczących nrf24l01 piętnaście? i żadne nie działa czy może ktoś wie o co chodzi możecie też dać jakiegoś gotowca ale i tak nie zadziała (at tak wogóle gratuluje że komuś to śię chce czytać bo dużo XD)
-
Witam. Mam problem z dwoma Arduino Nano (oczywiście klony z allegro) oraz dwoma modułami NRF24L01 (zakupionych na Aliexpress), mianowicie nie chcą one się połączyć. Już na początku przy przykładzie pingpair były problemy bo raz się łączyło raz nie. Szukałam innych przykładów na internecie i w ogóle nie działały, szukałam dalej i sprawę z stabilnym zasilaniem rozwiązałam poprzez stabilizator +3.3V, program nigdzie się nie zacina i połączenia sprawdzone po kilka razy. Nie mam już pomysłów co może być. Kod nadajnika: #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <RF24_config.h> int State1 = 0; RF24 radio(9, 10); const byte address[6] = "00002"; void setup() { Serial.begin(9600); pinMode(2, INPUT); radio.begin(); radio.openWritingPipe(address); radio.setPALevel (RF24_PA_LOW); radio.stopListening(); } void loop() { if (digitalRead(2) == 0) { State1 = 0; Serial.println("0"); } else{ State1 = 1; Serial.println("1"); } } Kod odbiornika: #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <RF24_config.h>// biblioteki int State1 = 0; RF24 radio(9, 10); // CE, CSN const byte address[6] = "00002"; void setup() { Serial.begin(9600); pinMode(5, OUTPUT); radio.begin(); radio.openReadingPipe(0, address); radio.setPALevel(RF24_PA_LOW); } void loop(){ radio.startListening(); radio.read(&State1, sizeof(State1)); Serial.println("start"); if (State1 == 1) { digitalWrite(5, LOW); Serial.println("1"); } else { digitalWrite(5, HIGH); Serial.println("0"); } Serial.println("koniec"); }
-
Arduino Nano 33 IoT odczytuje/wyświetla nie poprawnie dane
piotr_1998-09 opublikował temat w Arduino i ESP
Witam! Realizuję projekt w którym wykorzystuję moduły komunikacyjne nRF24L01 do budowy sieci sensorów. Sieć narazie składa się z jednego węzła, który odczytuje temperaturę. Dane z tego węzła trafiają do bramy, a brama ma przekazywać dane do bazy danych Firebase. Bramą ma być Arduino Nano 33 IoT, jednak natchnąłem się tu na problem, ponieważ nano wyświetla nie poprawnie odczyty temperatury. Bramę stworzyłem też na Arduino Mega i Uno, i te płytki odczytują poprawnie dane. Moje pytanie brzmi, czym może być spowodowane to, że Nano 33 IoT źle wyświetla dane? Jak można to naprawić? Poniżej załączam kod programu bramy i zdjęcia z odczytu temperatury na Nano 33 IoT(COM5) i Mega(COM9). Za wszelką pomoc z góry dziękuję! PS. Temperatura zapisałem w typie całkowitym int, czyli np. odczyt 30.31 będzie w wyświetlony jako 3031. #include <RF24Network.h> #include <RF24.h> #include <SPI.h> RF24 radio(7,8); RF24Network network(radio); const uint16_t this_node = 00; void setup() { Serial.begin(9600); SPI.begin(); radio.begin(); network.begin(90, this_node); radio.setDataRate(RF24_2MBPS); Serial.println("Start"); } void loop() { network.update(); // Receiving while(network.available()){ RF24NetworkHeader header; int incomingData; network.read(header, &incomingData, sizeof(incomingData)); if(header.from_node == 01){ Serial.print("Temperatura: "); Serial.print(incomingData); Serial.println(" *C"); } /* if(header.from_node == 02){ Serial.print(incomingData); Serial.println(" BPM"); } */ } }- 3 odpowiedzi
-
- ArduinoNanoIoT
- nrf24l01
- (i 2 więcej)
-
Ostatnio kupiłem moduł NodeMcu V3 udało mi się podłączyć go do Internetu i kanału na ThingSpeak. Teraz chcę do niego podłączyć moduł NRF24l01 tak żeby połączyć to z arduino uno i modułem NRF24l01. Chcę zrobić tak żeby NodeMcu odczytywało dane z trzech czujników DHT22 i wysyłało na ThingSpeak, i do arduino uno poprzez NRF24l01. Tylko mam taki problem, żeby NodeMcu połączyło się z siecią to muszę odpiąć wszystkie czujniki a jak się połączy to można je podpiąć ( żeby wgrać program też trzeba odpiąć czujniki). A drugi problem to taki, że nie wiem jak wysłać i odebrać odczytane temperatury i wilgotności do arduino. Poniżej programy: Odbieranie danych poprzez arduino //Include Libraries #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> //create an RF24 object RF24 radio(9, 8); // CE, CSN //address through which two modules communicate. const byte address[6] = "00001"; void setup() { while (!Serial); Serial.begin(9600); radio.begin(); //set the address radio.openReadingPipe(0, address); //Set module as receiver radio.startListening(); } void loop() { //Read the data if available in buffer if (radio.available()) { char text[11]; radio.read(&text, sizeof(text)); Serial.println(text); } } Wysyłanie danych poprzez NodeMcu //Include Libraries #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> //create an RF24 object RF24 radio(5, 4); // CE, CSN //address through which two modules communicate. const byte address[6] = "00001"; void setup() { radio.begin(); radio.openWritingPipe(address); radio.stopListening(); } void loop() { //Send message to receiver const char text[] = "Hello World"; radio.write(&text, sizeof(text)); delay(1000); } Wysyłanie na kanał ThingSpeak #include "ThingSpeak.h" #include "secrets.h" #include <ESP8266WiFi.h> #include "DHT.h" char ssid[] = "BESKID_MEDIA"; // your network SSID (name) char pass[] = "slowackiego11"; // your network password int keyIndex = 0; // your network key Index number (needed only for WEP) WiFiClient client; unsigned long myChannelNumber = 1202307; const char * myWriteAPIKey = "LG492GYXPS7UXOC0"; // Uncomment one of the lines below for whatever DHT sensor type you're using! //#define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT21 // DHT 21 (AM2301) #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 // Initialize DHT sensor. DHT dht(D6, DHTTYPE); DHT dht1(D7, DHTTYPE); DHT dht2(D8, DHTTYPE); float Temperature; float Humidity; float Temperature1; float Humidity1; float Temperature2; float Humidity2; // Initialize our values int number1; int number2; int number3; int number4; int number5; int number6; String myStatus = ""; void setup() { Serial.begin(115200); // Initialize serial WiFi.mode(WIFI_STA); ThingSpeak.begin(client); // Initialize ThingSpeak pinMode(D6, INPUT); pinMode(D7, INPUT); pinMode(D8, INPUT); dht.begin(); dht1.begin(); dht2.begin(); delay(500); } void loop() { // Connect or reconnect to WiFi if(WiFi.status() != WL_CONNECTED){ Serial.print("Attempting to connect to SSID: "); Serial.println(SECRET_SSID); while(WiFi.status() != WL_CONNECTED){ WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network. Change this line if using open or WEP network Serial.print("."); delay(5000); } Serial.println("\nConnected."); } // set the fields with the values ThingSpeak.setField(1, number1); ThingSpeak.setField(2, number2); ThingSpeak.setField(3, number3); ThingSpeak.setField(4, number4); ThingSpeak.setField(5, number5); ThingSpeak.setField(6, number6); delay(200); // set the status ThingSpeak.setStatus(myStatus); // write to the ThingSpeak channel int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey); if(x == 200){ Serial.println("Channel update successful."); }else{ Serial.println("Problem updating channel. HTTP error code " + String(x)); } Serial.println(Temperature); Serial.println(Temperature1); Serial.println(Temperature2); Temperature = dht.readTemperature(); // Gets the values of the temperature Humidity = dht.readHumidity(); // Gets the values of the humidity Temperature1 = dht1.readTemperature(); // Gets the values of the temperature Humidity1 = dht1.readHumidity(); // Gets the values of the humidity Temperature2 = dht2.readTemperature(); // Gets the values of the temperature Humidity2 = dht2.readHumidity(); // Gets the values of the humidity number1 = Temperature; number2 = Humidity; number3 = Temperature1; number4 = Humidity1; number5 = Temperature2; number6 = Humidity2; delay(10000); // Wait 20 seconds to update the channel again }
-
Witam Tak jak napisałem w temacie mam problem z obsługą 2rf24l01 a dokładnie po kilku godzinach prób nie udało mi się uruchomić ani jednego programu na Arduino nano. Czy moglibyście coś mi doradzić w związku z tymi modułami ? Dodam że przylutowałem kondensatory 3.3µF. Poniżej wklejam jeden z przykładów jaki próbowałem zastosować. Nadajnik #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> int przycisk = 7; const uint64_t pipe = 0x1CF8361637LL; RF24 radio(7, 8); int stan; void setup() { pinMode(przycisk,INPUT); radio.begin(); radio.openWritingPipe(pipe); } void loop() { stan = digitalRead(przycisk); radio.write(&stan, sizeof(int)); / } Odbiornik #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> const uint64_t pipe = 0x1CF8361637LL; int dioda = 8; RF24 radio(7, 8); int stan; void setup() { pinMode(dioda,OUTPUT); delay(1000); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop() { if (radio.available()) { radio.read(&stan, sizeof(int)); if(stan == 0) { digitalWrite(dioda,HIGH); }else digitalWrite(dioda,LOW); } }