Odkryj nasze najnowsze porady zwi─ůzane z Arduino! ­čîč Wewn─ůtrz wskaz├│wki, kt├│re mog─ů by─ç pomocne dla Twoich projekt├│w!

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐#001

´╗┐Witajcie w naszym najnowszym newsletterze edukacyjnym po┼Ťwi─Öconym tematyce Arduino! Przede wszystkim dzi─Ökujemy za zaufanie i do┼é─ůczenie do naszej listy mailingowej. Cieszymy si─Ö, ┼╝e mo┼╝emy razem odkrywa─ç niesamowity ┼Ťwiat mikrokontroler├│w i projektowania elektroniki. 

´╗┐W naszych newsletterach skupimy si─Ö g┼é├│wnie na zg┼é─Öbianiu tajemnic programowania, elektroniki, ciekawych projektach znalezionych w sieci, nowo┼Ťciach ze spo┼éeczno┼Ťci arduinowo.pl oraz podsumowa┼ä naszych dyskusji na kana┼éach Discord. Niezale┼╝nie od tego, czy dopiero zaczynasz swoj─ů przygod─Ö, czy ju┼╝ tworzysz z┼éo┼╝one projekty, mam nadziej─Ö, ┼╝e znajdziesz tutaj co┼Ť ciekawego i inspiruj─ůcego. Zapraszamy do lektury i eksperymentowania!

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Czym s─ů funkcje w Arduino? Funkcje to ma┼ée bloki kodu, kt├│re wykonuj─ů okre┼Ťlone zadanie. Mo┼╝esz je wywo┼éywa─ç wielokrotnie w swoim programie, co u┼éatwia zarz─ůdzanie kodem i rozwi─ůzywanie skomplikowanych problem├│w.

´╗┐Dlaczego funkcj─Ö s─ů dla nas wa┼╝ne? U┼╝ywanie funkcji jest bardzo korzystne podczas pracy z AI, poniewa┼╝ na chwil─Ö obecn─ů modele takie jak chatGPT nie potrafi─ů wygenerowa─ç kod├│w dla bardziej z┼éo┼╝onych projekt├│w. Pytaj─ůc chatGPT o napisanie tylko pojedynczych funkcji ┼éatwiej jest nam dok┼éadnie opisa─ç czego oczekujemy, przetestowa─ç i zaimplementowa─ç w projekcie. 

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Podczas pracy z Arduino cz─Östo wykorzystujemy wbudowane funkcje systemowe, na przyk┼éad:

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐1. Funkcj─Ö delay(1000), kt├│ra wprowadza op├│┼║nienie w wykonywaniu programu na jedn─ů sekund─Ö. 

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐2. Funkcj─Ö digitalRead(3), kt├│ra s┼éu┼╝y do odczytywania stanu cyfrowego z okre┼Ťlonego pinu, w tym przypadku z pinu numer 3. Funkcja ta zwraca warto┼Ť─ç binarn─ů, kt├│ra mo┼╝e by─ç HIGH (wysoki) lub LOW (niski), w zale┼╝no┼Ťci od stanu napi─Öcia na danym pinie. Jest ona przydatna do odczytywania sygna┼é├│w z r├│┼╝nych czujnik├│w lub przycisk├│w.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐W Arduino IDE mo┼╝emy stworzy─ç r├│wnie┼╝ w┼éasne funkcje, przyk┼éadowo funkcj─Ö kt├│ra doda nam dwie liczby ca┼ékowite - Rys.1.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐

Rys.1. Przyk┼éad definicji funkcji u┼╝ytkownika zwracaj─ůcej sum─Ö dw├│ch liczby.

´╗┐Elementy sk┼éadowe definicji funkcji:

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐1. Nazwa funkcji: Na pocz─ůtku nadajemy unikatow─ů nazw─Ö funkcji. Najlepiej, aby jej nazwa kojarzy┼éa si─Ö z zadaniem realizowanym przez funkcj─Ö. W naszym przypadku funkcja ma dodawa─ç dwie liczby dlatego nazwali┼Ťmy j─ů dodaj.

´╗┐2. Parametry wej┼Ťciowe: W tym miejscu wprowadzamy zmienne, kt├│re chcemy wykorzysta─ç w naszej funkcji. W naszej przyk┼éadowej funkcji dodaj parametrami wej┼Ťciowymi b─Öd─ů dwie liczby, kt├│re chcemy doda─ç i nazwali┼Ťmy je literami a oraz b. Dodatkowo musimy poda─ç typy tych zmiennych. Typy zmiennych w Arduino to podstawowe elementy, kt├│re pozwalaj─ů okre┼Ťli─ç rodzaj i rozmiar danych, z kt├│rymi program b─Ödzie pracowa─ç. O typach napiszemy jeszcze szczeg├│┼éowo w innym wydaniu newslettera. W tym przyk┼éadzie dla naszych parametr├│w wej┼Ťciowych wybrali┼Ťmy typ int (INTEGER), kt├│ry reprezentuje zmienn─ů ca┼ékowit─ů o warto┼Ťci w zakresie od -32768 do 32767. Mo┼╝liwe jest stworzenie funkcji bez parametr├│w wej┼Ťciowych - wtedy w nawiasach okr─ůg┼éych, gdzie wpisaliby┼Ťmy parametry nic nie wpisujemy.

´╗┐3. Cia┼éo funkcji, klamry: Cia┼éo funkcji to miejsce, gdzie umieszczamy wszystkie polecenia (kod programu funkcji), kt├│re wykona─ç ma funkcja i musz─ů zawiera─ç si─Ö mi─Ödzy klamr─ů otwarcia { oraz zamkni─Öcia }. Poniewa┼╝ nasza funkcja ma doda─ç dwie liczny, wprowadzili┼Ťmy dodatkowo zmienn─ů c jest r├│wna sumie zmiennej a oraz zmiennej b. Zmienn─ů c zdefiniowali┼Ťmy jako typu int - INTEGER, trzeba jednak zwr├│ci─ç uwag─Ö, ┼╝e suma dw├│ch liczb typu int w wyniku mo┼╝e da─ç liczb─Ö poza zakresem typu int od -32768 do 32767 (wtedy funkcja nie b─Ödzie dzia┼éa┼éa prawid┼éowo). Nale┼╝y o tym pami─Öta─ç i w razie potrzeby zmieni─ç typ na long lub wprowadzi─ç dodatkowe zabezpieczenie (np. funkcj─Ö sprawdzaj─ůc─ů).

´╗┐4. Warto┼Ť─ç zwracana i jej typ: W Arduino IDE, funkcja zwraca warto┼Ť─ç po poleceniu return. Funkcja mo┼╝e zwr├│ci─ç tylko pojedyncz─ů warto┼Ť─ç i po zrealizowaniu polecenia return ignoruje dalszy kod programu funkcji. W naszym przyk┼éadzie zwr├│cili┼Ťmy warto┼Ť─ç zmiennej c czyli napisali┼Ťmy: return c;. O typach by┼éo ju┼╝ kr├│tko w podpunkcie nr 2. Tak samo jak parametry funkcji musz─ů mie─ç sw├│j typ, r├│wnie┼╝ musimy zdefiniowa─ç typ dla warto┼Ťci zwracanej. Poniewa┼╝ nasza zmienna c jest typu int dlatego mo┼╝na przypisa─ç taki sam typ zwracany, czyli int. Je┼Ťli nie chcemy, aby funkcja zwraca┼éa warto┼Ť─ç zamiast typu wpisujemy void.

´╗┐Wywo┼éanie funkcji: Mamy ju┼╝ gotow─ů funkcj─Ö dodaj i teraz mo┼╝emy u┼╝y─ç j─ů w naszym kodzie g┼é├│wnego programu setup lub loop. W naszym przypadku, je┼Ťli chcemy obliczy─ç sum─Ö liczb 2 i 5, wywo┼éanie funkcji b─Ödzie wygl─ůda┼éo bardzo prosto: doda(2,5); Wynik mo┼╝emy r├│wnie┼╝ przypisa─ç do nowej zmiennej np.: int wynik = doda(2,5);. Po takim poleceniu zmienna wynik przyjmie warto┼Ť─ç r├│wn─ů 7.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐W praktyce u┼╝ycie naszej funkcji dodaj b─Ödzie wygl─ůda┼éo nast─Öpuj─ůco:

´╗┐Kod definicji funkcji w przeciwie┼ästwie do wywo┼éania funkcji dodajemy w dowolnym miejscu poza sekcj─ů setup i loop (my umie┼Ťcili┼Ťmy na ko┼äcu programu za sekcj─ů loop - patrz na kod powy┼╝ej).

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Ciekawostki dla bardziej zaawansowanych

´╗┐Jak w Arduino zwr├│ci─ç z funkcji wi─Öcej ni┼╝ jedn─ů warto┼Ť─ç? W Arduino IDE nie da si─Ö bezpo┼Ťrednio zwr├│ci─ç wi─Öcej ni┼╝ jednej warto┼Ťci, mo┼╝na jednak zastosowa─ç pewne triki. Poni┼╝ej poka┼╝emy jak "zwr├│ci─ç" dwie zmienne - jednocze┼Ťnie wynik dla dodawania oraz odejmowania.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐1. U┼╝ycie zmiennych globalnych na przyk┼éad:

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐2. U┼╝ycie wska┼║nik├│w na przyk┼éad:

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐3. U┼╝ycie struktury na przyk┼éad:

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐4. U┼╝ycie tablicy na przyk┼éad:

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Powy┼╝szymi sposobami mo┼╝na "zwr├│ci─ç" z funkcji kilka parametr├│w. Znajcie jeszcze jakie┼Ť inne sposoby? Je┼Ťli tak koniecznie napiszcie w spo┼éeczno┼Ťci na naszym serwerze Discord.

´╗┐W pierwszym wydaniu newsletera, napiszemy kr├│tko o najbardziej podstawowym elemencie wykorzystywanym w elektronice -  jest nim rezystor. W jednym zdaniu mo┼╝na napisa─ç, ┼╝e rezystor jest elementem ograniczaj─ůcym pr─ůd p┼éyn─ůcy w obwodzie elektrycznym. Na schematach rezystory mog─ů mie─ç r├│┼╝ne symbole graficzne np. - Rys.2.

Rys.2. Przykłady symboli graficznych rezystorów na schematach.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Rezystory przydaj─ů si─Ö tak┼╝e w wielu bardziej z┼éo┼╝onych aplikacjach, takich jak dzielniki napi─Öcia, filtry, czy uk┼éady wzmacniaczy. Znajomo┼Ť─ç ich w┼éa┼Ťciwo┼Ťci pozwala na precyzyjne kontrolowanie sygna┼é├│w w obwodzie, co jest niezb─Ödne w wielu zaawansowanych projektach Arduino.

´╗┐Co wa┼╝ne, rezystory wyst─Öpuj─ů w r├│┼╝nych warto┼Ťciach rezystancji, kt├│re s─ů zazwyczaj oznaczane za pomoc─ů kodu kolorowego ÔÇô umiej─Ötno┼Ť─ç odczytywania tych kod├│w jest bardzo pomocne (szukaj w sieci "kod paskowy rezystora"). R├│wnie┼╝ rezystory SMD s─ů oznaczone cyframi.

´╗┐Warto┼Ť─ç rezystancji mo┼╝na r├│wnie┼╝ zmierzy─ç multimetrem, jednak w ten spos├│b mo┼╝emy mierzy─ç tylko rezystory niepod┼é─ůczone do obwodu (pomiar pod┼é─ůczonego do obwodu rezystora mo┼╝e da─ç nieprawid┼éowy wynik).

´╗┐Dla u┼╝ytkownik├│w Arduino, zrozumienie roli rezystor├│w jest kluczowe. S─ů one nie tylko fundamentem wielu projekt├│w, ale tak┼╝e s┼éu┼╝─ů do ochrony innych komponent├│w przed uszkodzeniem przez nadmierny pr─ůd. Przyk┼éadem mo┼╝e by─ç u┼╝ycie rezystora do ograniczenia pr─ůdu p┼éyn─ůcego przez diod─Ö LED, aby zapobiec jej przepaleniu - Rys.3.

Rys.3. Przykład zastosowania rezystora w obwodzie diody LED.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Jak obliczy─ç warto┼Ť─ç rezystora, kt├│ry musimy zastosowa─ç dla typowej diody LED? 

´╗┐Nasza p┼éytka Arduino zasilana jest napi─Öciem 5V to napi─Öcie zasilania (NZ) diody r├│wnie┼╝ wynosi NZ = 5V. Aby obliczy─ç warto┼Ť─ç rezystora R, przyjmijmy standardowe warto┼Ťci dla typowej diody LED:

1. Pr─ůd przewodzenia (PP) diody LED: PP = 20 mA (0.02 A) - to typowa warto┼Ť─ç dla wielu diod LED.
2. Napi─Öcie przewodzenia (NP) diody LED: NP = 2V - to przybli┼╝ona warto┼Ť─ç dla wielu diod LED, ale mo┼╝e si─Ö r├│┼╝ni─ç w zale┼╝no┼Ťci od koloru i typu diody.

Zastosujemy wz├│r na obliczenie warto┼Ťci rezystancji (prawo Ohma):

R = (NZ-NP)/PP = (5V - 2V) / 0.02A = 150Ohm

Warto┼Ť─ç rezystora, kt├│ry powiniene┼Ť u┼╝y─ç do ograniczenia pr─ůdu diody LED pod┼é─ůczonej do ┼║r├│d┼éa 5V, wynosi minimalnie 150Ohm. Je┼Ťli masz kart─Ö katalogow─ů u┼╝ywanej diody LED, mo┼╝esz znale┼║─ç w niej dok┼éadne warto┼Ťci pr─ůdu oraz napi─Öcia przewodzenia i podstawi─ç do powy┼╝szego wzoru.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Jaki rezystor zastosowa─ç, aby chroni─ç pin wyj┼Ťciowy Arduino UNO (ustawiony jako OUTPUT) przed uszkodzeniem?

´╗┐Arduino UNO dzia┼éa z napi─Öciem logicznym U = 5V i zaleca si─Ö, aby pr─ůd p┼éyn─ůcy przez ka┼╝dy pin GPIO nie przekracza┼é I = 20mA (absolutnie maksymalny pr─ůd dla pinu GPIO to I = 40 mA).

´╗┐Warto┼Ť─ç rezystora zalecana: R = U / I = 5V / 0.02A = 250Ohm.

´╗┐Warto┼Ť─ç rezystora minimalna: R = U / I = 5V / 0.04A = 125Ohm.

´╗┐Aby ograniczy─ç pr─ůd do 40 mA na pinie wyj┼Ťciowym Arduino UNO, nale┼╝y u┼╝y─ç rezystora o warto┼Ťci nie mniejszej ni┼╝ 125 om├│w. U┼╝ycie takiego rezystora zapewni, ┼╝e pr─ůd p┼éyn─ůcy przez pin nie przekroczy maksymalnej bezpiecznej warto┼Ťci dla Arduino UNO, nawet je┼Ťli pin zostanie przypadkowo zwarty do masy (jednak rekomenduje si─Ö u┼╝ywanie rezystor├│w o nieco wy┼╝szej warto┼Ťci np. 220Ohm). 

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Rezystory nielinowe

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Chocia┼╝ wi─Ökszo┼Ť─ç standardowych rezystor├│w ma liniow─ů charakterystyk─Ö rezystancji w stosunku do napi─Öcia, rezystory nieliniowe wykazuj─ů zmienno┼Ť─ç swojej rezystancji w zale┼╝no┼Ťci od innych czynnik├│w, takich jak temperatura, o┼Ťwietlenie czy napi─Öcie.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Termistory w skr├│cie PTC (Positive Temperature Coefficient) i NTC (Negative Temperature Coefficient). Termistory PTC zwi─Ökszaj─ů swoj─ů rezystancj─Ö wraz ze wzrostem temperatury, podczas gdy termistory NTC zachowuj─ů si─Ö odwrotnie ÔÇô ich rezystancja maleje przy wzro┼Ťcie temperatury. Ta w┼éa┼Ťciwo┼Ť─ç sprawia, ┼╝e s─ů one niezwykle przydatne w aplikacjach do pomiaru temperatury, ochrony przed przegrzaniem, czy w uk┼éadach kompensacji temperaturowej.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Fotorezystory zmieniaj─ů swoj─ů rezystancj─Ö w odpowiedzi na zmiany nat─Ö┼╝enia ┼Ťwiat┼éa. Ich rezystancja maleje przy wzro┼Ťcie nat─Ö┼╝enia ┼Ťwiat┼éa, co czyni je przydatnymi w czujnikach ┼Ťwiat┼éa, alarmach i urz─ůdzeniach do automatycznego sterowania o┼Ťwietleniem.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Warystory, znane r├│wnie┼╝ jako VDR (Voltage Dependent Resistors), maj─ů charakterystyk─Ö rezystancji zale┼╝n─ů od przy┼éo┼╝onego napi─Öcia. Przy normalnych warunkach pracy maj─ů wysok─ů rezystancj─Ö, ale w przypadku wyst─ůpienia wysokiego napi─Öcia (jak w przypadku przepi─Ö─ç) ich rezystancja gwa┼étownie spada, co pozwala na przepuszczenie pr─ůdu i ochron─Ö innych element├│w uk┼éadu.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Ciekawostk─ů mo┼╝e by─ç fakt, ┼╝e w bardzo zaawansowanych zastosowaniach, takich jak precyzyjne uk┼éady pomiarowe czy sprz─Öt audiofilski, wyb├│r odpowiedniego typu rezystora (np. metalizowany, drutowy, w─Öglowy) mo┼╝e mie─ç znacz─ůcy wp┼éyw na dzia┼éanie ca┼éego uk┼éadu ze wzgl─Ödu na r├│┼╝nice w szumie termicznym, stabilno┼Ťci i innych parametrach rezystor├│w.

´╗┐W tej cz─Ö┼Ťci newsletera przedstawiamy ciekawy projekt znaleziony w sieci. Tym razem jest nim angielskoj─Özyczny projekt dla Arduino UNO, wykorzystuj─ůcy wy┼Ťwietlacz OLED jako wska┼║nik tr├│jwymiarowego kompasu pionowego. Autor w celu pokazania jak dzia┼éa wy┼Ťwietlanie kierunku dla uproszczenia zastosowa┼é potencjometr zamiast magnetometru. Poza samym opracowaniem, autor pokazuje r├│wnie┼╝ na filmie, w jaki spos├│b zasymulowa─ç prac─Ö potencjometru oraz wy┼Ťwietlacza OLED online na stronie wokwi.com

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Cho─ç kana┼éy na naszym serwerze Discord zosta┼éy niedawno utworzone i nie ma jeszcze wielu cz┼éonk├│w, nie brakuje na nim ciekawych dyskusji. 

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Zamieszczamy tu podsumowanie naszych ostatnich dyskusji na serwerze Discord:

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐@jimboston - przedstawi┼é sw├│j projekt automatycznej praski do prochu, wykonanej w technologii 3D oraz schemat blokowy jej dzia┼éania. Pyta┼é r├│wnie┼╝ rekomendacj─Ö w sprawie doboru najlepszych podzespo┼é├│w. 

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐@PM - przedstawi┼é propozycj─Ö kodu programu dla Arduino dla praski u┼╝ytkownika @jimboston

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐@Piotr Spychalski Ga┼Ťnica - pyta┼é o programy do projektowania PCB oraz firmy produkuj─ůce p┼éytki PCB.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Dla os├│b kt├│re chc─ů jeszcze zapisa─ç si─Ö na serwer dyskusyjny o Arduino na Discord udost─Öpnione zosta┼éo aktualne zaproszenie:

´╗┐Dzi─Ökujemy za przeczytanie tego newslettera. Twoja opinia jest bardzo wa┼╝na i wp┼éywa na tre┼Ťci, kt├│re w przysz┼éo┼Ťci zostan─ů opublikowane.

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Czy podoba┼éa Ci si─Ö tre┼Ť─ç tego wydania newslettera?

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐Jaki jest dla Ciebie poziom zaawansowania materia┼é├│w tego wydania newslettera?

´╗┐Swoj─ů szczeg├│┼éow─ů opini─ů mo┼╝esz podzieli─ç si─Ö na kanale Discord o nazwie "newsletter-dyskusja"

´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐´╗┐

Wypisz si─Ö z newslettera
Sent by MailerLite