Arduino

Arduino
Logo Arduino
Logo programu
Ilustracja
Autor Arduino Software
Pierwsze wydanie 2005
Aktualna wersja stabilna 1.8.12 (13 lutego 2020; ponad 4 lata temu)[1]
Język programowania Java, C, C++
System operacyjny wieloplatformowy
Rodzaj Zintegrowane środowisko programistyczne
Licencja LGPL lub GPL
Strona internetowa
Proste zastosowanie Arduino

Arduinoplatforma programistyczna dla systemów wbudowanych oparta na prostym projekcie Open Hardware przeznaczonym dla mikrokontrolerów montowanych w pojedynczym obwodzie drukowanym, z wbudowaną obsługą układów wejścia/wyjścia oraz standaryzowanym językiem programowania[2]. Język programowania Arduino jest oparty na środowisku Wiring i zasadniczo na języku C/C++ (kilka prostych przekształceń kodu wykonywane przed przejściem do avr-gcc)[3]. Celem projektu Arduino jest przygotowanie narzędzi – ogólnodostępnych, tanich, niewymagających dużych nakładów finansowych, elastycznych i łatwych w użyciu przez hobbystów. Częściowo Arduino stanowi również alternatywę dla osób, które nie mają dostępu do bardziej zaawansowanych kontrolerów, wymagających bardziej skomplikowanych narzędzi[4].

Arduino może być wykorzystany do tworzenia samodzielnych interaktywnych obiektów lub może być podłączony do komputera-hosta. Typowa płyta Arduino zawiera kontroler, cyfrowe i analogowe linie wejścia/wyjścia oraz interfejs UART lub USB dla połączeń z komputerem-hostem. Komputer jest wykorzystywany do programowania kontrolera oraz do interakcji w czasie działania z Arduino. Pomimo tego że płyty Arduino generalnie nie współpracują z siecią, częstym rozwiązaniem jest łączenie jednego lub kilku Arduino z hostem sieciowym, gdzie Arduino używa się w roli sprzętowych kontrolerów, a host przyjmuje rolę sieci lub interfejsu użytkownika. Budowanie interfejsu hosta jest proste, ponieważ oprogramowanie hosta może być pisane w różnych językach. Możliwe jest programowanie interfejsu w kilkunastu językach programowania, m.in. w Javie, ActionScript, C/C++, C#, Perl, VBScript[5].

Programowanie odbywa się najczęściej za pośrednictwem Arduino IDE[6] bazującym na projekcie Processing. Sam język programowania Arduino[7] bazuje na Wiring i przypomina język C. Wewnątrz Arduino IDE kod programu jest pośrednio kompilowany przez avr-gcc, a następnie wgrywany do podłączonej płyty Arduino. IDE działa wtedy jako emulator terminala szeregowego, pozwalając na interakcję z pracującym Arduino.

Obecnie układy Arduino bazują na mikrokontrolerach Atmel AVR. Nie jest to formalnym wymogiem i może być rozszerzony, o ile sprzęt i narzędzia będą wspierały język Arduino i zostaną zaakceptowane przez Projekt Arduino[2]. Na rynku istnieje wiele klonów inspirowanych oryginalnym Arduino, bądź kompatybilne z jego rozszerzeniami, takimi jak karty rozszerzeń, jednak rozprowadzanych pod innymi nazwami.

Obecnie sprzedawane są wstępnie zmontowane układy Arduino, jednak cały czas jest dostępny schemat sprzętowy dla tych, którzy chcą zbudować Arduino samodzielnie.

W 2008 roku projekt Arduino otrzymał wyróżnienie w kategorii Digital Communities na Prix Ars Electronica[8][9].

Projekt zapoczątkowany został w 2005 roku we Włoszech w celu zbudowania urządzenia kontrolującego studenckie projekty interakcyjne jako tańsza alternatywa dla innych dostępnych wtedy systemów prototypowania. Do października 2008 roku zostało sprzedanych ponad 50 000 sztuk Arduino[10].

Platforma

Hardware

Płyta Arduino składa się z 8-bitowego mikrokontrolera Atmel AVR z uzupełniającymi elementami w celu ułatwienia programowania oraz włączenia innych układów. Ważnym aspektem jest standardowy sposób, w jaki wyprowadzone są złącza, pozwalające na podłączenie płyty z mikrokontrolerem do różnych wymiennych modułów dodatkowych (nazywanych shieldami). Oficjalne płyty Arduino wykorzystują układy z serii megaAVR, a konkretnie ATmega8, ATmega168, ATmega328, oraz ATmega1280 i ATmega 2560[11][12][13]. Kilka innych układów jest wykorzystywanych w klonach Arduino. Większość płyt zawiera 5V regulator napięcia, 16 MHz rezonator kwarcowy (w niektórych odmianach rezonator ceramiczny), chociaż niektóre projekty, takie jak LilyPad działają na częstotliwości 8 MHz i rezygnują z regulatora napięcia na płycie ze względu na szczególne ograniczenia wielkości układu. Mikrokontroler Arduino jest wstępnie zaprogramowany z wykorzystaniem programu rozruchowego, co upraszcza przesyłanie programu do pamięci flash układu – w porównaniu do innych urządzeń, gdzie najczęściej potrzebny jest zewnętrzny programator mikrokontrolera.

Na poziomie konceptualnym wszystkie płyty Arduino są programowane za pośrednictwem interfejsu szeregowego RS-232, jednak sprzętowa implementacja jest zależna od konkretnej wersji. Serial Arduino zawierają prosty obwód inwertera do konwersji sygnału pomiędzy RS-232 i TTL. Obecne płyty Arduino są programowane przez USB realizowane przez adapter USB-to-Serial, taki jak układ FTDI FT232. Niektóre warianty Arduino, takie jak Arduino Mini i nieoficjalny Boarduino, używają odłączanego adaptera USB-to-Serial w formie płyty lub kabla, Bluetooth lub innych metod.

Na płycie Arduino większość pinów wejścia/wyjścia mikrokontrolera jest wyprowadzona do wykorzystania przez inne układy. Dla przykładu, Diecimila, obecnie zastąpiona przez Duemilanove, udostępnia 14 cyfrowych pinów wejścia/wyjścia – 6 które mogą wytwarzać sygnały PWM i 6 wejść analogowych. Wszystkie piny są wyprowadzone na wierzchu płyty za pośrednictwem 0,1-calowych żeńskich styków. Na rynku dostępne są płyty nazywane potocznie shieldami, które po podłączeniu za pośrednictwem wyprowadzonych pinów do płyty Arduino rozszerzają możliwości macierzystego układu o jedną lub kilka funkcjonalności, np. obsługa bezprzewodowej transmisji Bluetooth lub IrDA.

Arduino Nano oraz kompatybilne z Arduino – Barebones i Boarduino, mają dodatkowo na spodniej stronie płyty wyprowadzone męskie styki, co pozwala na podłączenie układu do płytki prototypowej.

Oprogramowanie

Arduino IDE jest wieloplatformową aplikacją napisaną w języku Java, wydzieloną z IDE przygotowanego dla języka Processing i projektu Wiring. Środowisko jest zaprojektowane w taki sposób, aby było przyjazne dla hobbystów i osób niezajmujących się tworzeniem oprogramowania. IDE zawiera edytor kodu z takimi funkcjami, jak podświetlanie składni czy automatyczne wcięcia w kodzie, oraz pozwala na kompilację i wysłanie programu do płyty Arduino. Zazwyczaj nie ma potrzeby dodatkowej edycji plików Makefile lub uruchamiania programów z linii poleceń.

Standardowo IDE Arduino zawiera bibliotekę C/C++ o nazwie "Wiring" (z projektu o tej samej nazwie), dzięki czemu wykonywanie podstawowych operacji wejścia/wyjścia staje się znacznie łatwiejsze. Programy dla Arduino są napisane głównie w języku C/C++, jednak użytkownicy muszą zdefiniować jedynie dwie funkcje, aby otrzymać gotowy do uruchomienia program:

  • setup() – funkcja wykonywana raz, na początku działania programu, wykorzystywana najczęściej do ładowania ustawień,
  • loop() – funkcja wywoływana wielokrotnie, przez cały okres działania programu, czyli do czasu odłączenia zasilania od układu.

Typowy pierwszy program dla mikrokontrolera Arduino ma za zadanie spowodować miganie wbudowanej w układ diody LED. W środowisku Arduino użytkownik może napisać program w następujący sposób:

#define LED_PIN 13

void setup () {
    pinMode (LED_PIN, OUTPUT);     // ustawienie pinu 13 jako cyfrowego wyjścia
}

void loop () {
    digitalWrite (LED_PIN, HIGH);  // włączenie diody LED
    delay (1000);                  // odczekanie sekundy (1000 milisekund)
    digitalWrite (LED_PIN, LOW);   // wyłączenie diody LED
    delay (1000);                  // odczekanie sekundy
}

Powyższy kod nie jest widziany przez kompilator jako poprawny program, więc gdy użytkownik kliknie na "Upload to I/O board" w oknie IDE kopia kodu jest zapisywana do pliku tymczasowego, gdzie dodatkowo dołączany jest nagłówek include na początku i prostą funkcją main() na końcu pliku:

#include "Arduino.h"
#define LED_PIN 13

void setup () {
    pinMode (LED_PIN, OUTPUT);     // ustawienie pinu 13 jako cyfrowego wyjścia
}

void loop () {
    digitalWrite (LED_PIN, HIGH);  // włączenie diody LED
    delay (1000);                  // odczekanie sekundy (1000 milisekund)
    digitalWrite (LED_PIN, LOW);   // wyłączenie diody LED
    delay (1000);                  // odczekanie sekundy
}
int main(void)
{
    init();

    setup();

    for (;;)
        loop();

    return 0;
}

"Arduino.h" jest głównym nagłówkiem włączającym do programu bibliotekę Wiring, a funkcja main() wykonuje tylko trzy wywołania: init(), zdefiniowane przez IDE, oraz setup() i loop() zdefiniowane przez użytkownika.

IDE Arduino używa do kompilacji programów zestawu narzędzi GNU Toolchain i biblioteki AVR Libc, natomiast do uploadu programu do płyty Arduino wykorzystywany jest program AVRDude.

Oficjalne układy

Arduino Diecimila
Arduino UNO
Arduino Leonardo

Oryginalne układy Arduino produkowane są przez włoską firmę Smart Projects. Niektóre układy z rodziny Arduino zostały zaprojektowane przez amerykańską firmę SparkFun Electronics.

Do tej pory wyprodukowano trzydzieści cztery wersje układów Arduino[14]:

  1. Serial Arduino, programowany przez interfejs szeregowy DB9 i korzystający z układu ATmega8
  2. Arduino Extreme, programowany przez interfejs USB i zaopatrzony w układ ATmega8
  3. Arduino Mini, miniaturowa wersja Arduino wykorzystująca montowany powierzchniowo układ ATmega168 lub Atmega328
  4. Arduino Nano, jeszcze mniejsza wersja Arduino, zasilana przez USB zaopatrzona w montowany powierzchniowo układ ATmega168
  5. Arduino LilyPad, minimalistyczny projekt wykorzystujący montowany powierzchniowo układ ATmega168
  6. Arduino NG, programowany przez interfejs USB i korzystający z układu ATmega8
  7. Arduino NG plus, programowany za pośrednictwem interfejsu USB i zaopatrzony w układ ATmega168
  8. Arduino BT, programowana bezprzewodowo przez interfejs Bluetooth korzystająca z układu ATmega168
  9. Arduino Diecimila, z interfejsem USB i układem Atmega168 w obudowie DIL28 (na zdjęciu obok)
  10. Arduino Duemilanove ("2009"), wykorzystujący Atmega168 (Atmega328 w nowszych wersjach) zasilany z zewnętrznego zasilacza lub przez USB
  11. Arduino Mega, zaopatrzony w montowany powierzchniowo układ ATmega1280, dzięki czemu posiada więcej pamięci i pinów wejścia/wyjścia[15].
  12. Arduino Mega ADK, jest to Arduino Mega wzbogacona w układ MAX3421, który jest USB HOST'em.
  13. Arduino Uno, wersja z programowalnym interfejsem USB i układem Atmega328
  14. Arduino Leonardo, wersja z układem ATmega32u4, który jest sercem Arduino i odpowiada za komunikację USB (na zdjęciu obok)
  15. Arduino Ethernet, wersja z układem ATmega328, interfejsem Ethernet zamiast USB oraz czytnikiem kart microSD
  16. Arduino Yún, wersja z układem ATmega32u4 oraz wbudowanym układem WiFi
  17. Arduino Esplora, wersja z układem Atmega32U4, płytka zaprojektowana jako baza pod kontroler do konsoli
  18. Arduino Robot, wersja zbudowana z dwóch okrągłych płyt, każda wyposażona w procesor ATmega32u4
  19. Arduino 101, jest to płytka z układem Intel Curie x86 (Quark)oraz żyroskopem, akcelerometrem i modułem Bluetooth
  20. Arduino zero, płytka z procesorem 32-bit ARM Cortex
  21. Arduino Due, wersja z procesorem AT91 SAM3X8E
  22. Arduino Pro, wersja oparta na układzie ATmega328
  23. Arduino Pro Mini, niewielka płytka z procesorem Atmega328
  24. Arduino M0, płytka z mikrokontrolerem ATSAMD21G18 z rdzeniem ARM Cortex-M0
  25. Arduino M0 Pro, wersja M0 wzbogacona o debugger EDBG
  26. Arduino Tian, wersja posiadająca wiele interfejsów takich jak: Ethernet, WiFi oraz Bluetooth
  27. Arduino INDUSTRIAL 101, jest to mała dwu procesorowa płytka, z układem Atheros AR9331 obsługującym WiFi oraz Ethernet
  28. Arduino LEONARDO ETH, wersja płytki Arduino Leonardo z modułem Ethernet
  29. Arduino MKR FOX 1200, jest to mały moduł z układami Atmel SAMD21 i ATA8520
  30. Arduino GEMMA, jest to płytka oparta na mikrokontrolerze attiny85
  31. LILYPAD ARDUINO USB, płytka wyposażona w procesor atmega32u4 ze złączem micro usb
  32. LILYPAD ARDUINO MAIN BOARD, wersja bez gniazda USB oraz z mikrokontrolerem atmega328
  33. LILYPAD ARDUINO SIMPLE, wersja z procesorem atmega328 ze złączem do podłączenia akumulatora
  34. LILYPAD ARDUINO SIMPLE SNAP, uproszczona wersja płytki LILYPAD ARDUINO SIMPLE
  35. OPTA Programmable Logic Relays Seria 8A, Stworzony przy współpracy z firmą Finder, która specjalizuje się w produkcji przekaźników przemysłowych. OPTA to w pełni programowalny przekaźnik logiczny (4 wyjścia przekaźnikowe 10A i 8 wejść analog/cyfra).

Otwarty sprzęt i otwarte oprogramowanie

Przekaźnik Finder OPTA Seria 8A
Przekaźnik Programowalny Logicznie. Finder OPTA 8A. Stworzony przez Arduino i Finder.
 Osobny artykuł: Open Hardware.

Referencyjny schemat sprzętowy układu Arduino jest rozpowszechniany na licencji Creative Commons Attribution Share-Alike 2.5 i jest dostępny na stronie www projektu Arduino. Dostępne są również dokładne schematy budowy niektórych wersji układów Arduino[14]. Kod źródłowy IDE Arduino i biblioteki sprzętowe dla Arduino są udostępniane i rozpowszechniane na licencji GPLv2[16].

Dodatkowy osprzęt

Proto-shield, zamontowany na Arduino

Zarówno Arduino, jak i jego klony, mogą korzystać z płyt rozszerzeń, potocznie nazywanych shieldami, które wpina się w zazwyczaj wyprowadzone złącza głównego układu. Shieldy mogą w ten sposób rozszerzać bazowy układ Arduino o różnorodne funkcje, np. dostarczać interfejs Ethernet lub Bluetooth, kontrolę silników, prototypowanie układów[17].

Przykładowe shieldy:

  • Arduino Ethernet Shield
  • Arduino Motor Shield
  • XBee Shield
  • TouchShield
  • Extender Shield
  • InputShield

Klony

Od czasu, gdy projekty sprzętu i oprogramowania dla Arduino są dostępne w ramach licencji copyleft, programiści wyrazili pragnienie, aby nazwa "Arduino" (oraz jej pochodne) była używana wyłącznie w odniesieniu do oficjalnych produktów i niewykorzystywana do prac pochodnych bez zezwolenia. Oficjalny dokument dotyczący polityki używania nazwy Arduino podkreśla, że projekt jest otwarty na włączanie prac innych autorów do oficjalnego produktu[18].

W wyniku zastrzeżenia konwencji nazewnictwa Arduino grupa użytkowników Arduino utworzyła fork projektu na bazie układu Arduino Diecimila, wydając ekwiwalent oryginału pod nazwą Freeduino[19]. Nazwa Freeduino nie jest zastrzeżona i może być używana w dowolny sposób[20].

Kilka produktów kompatybilnych z Arduino unika macierzystej nazwy, używając różnych wariantów nazwy 'duino'. Komercyjne wersje tych produktów są sprzedawane przez innych producentów.

Klony zgodne z shieldami

Następujące układy są w pełni lub prawie w pełni kompatybilne zarówno ze sprzętem, jak i z oprogramowaniem Arduino, w tym są zgodne z shieldami:

  • Freeduino SB, produkowany i sprzedawane jako minizestaw przez Solarbotics Ltd.
  • Freeduino MaxSerial, układ ze standardowym interfejsem szeregowym DB9, produkowana i sprzedawana jako gotowy układ lub kit przez Fundamental Logic.
  • Freeduino Through-Hole, układ niewykorzystujący technologii montażu powierzchniowego, produkowany i sprzedawany jako kit przez NKC Electronics.
  • Illuminato, układ wykorzystujący mikrokontroler ATMega645 zamiast ATMega168. Posiada 64KB pamięci flash, 4KB pamięci RAM i 32 piny wejścia/wyjścia ogólnego przeznaczenia. Sprzęt i oprogramowanie mają otwarty kod źródłowy. Płyta jest zaprojektowana tak, aby miała smukły wygląd. Dodatkowo posiada 10 diod LED, które mogą być kontrolowane przez "ukryte" komendy. Dystrybuowany przez Liquidware.
  • Metaboard, układ zaprojektowany, by charakteryzował się bardzo małą złożonością, a co za tym idzie, niską ceną. Sprzęt i oprogramowanie mają otwarty kod źródłowy. Rozwijany przez Metalab.
  • MMduinoUNO, zgodny z Arduino Duemilanove, produkowany i sprzedawany przez Propox sp. z o.o. Jeden z najtańszych klonów na polskim rynku, w odróżnieniu od oryginału posiada dodatkowo męskie złącza goldpin od spodu płytki.
  • Seeeduino, zbudowany na podstawie schematu Arduino Diecimila.
  • eJackino, kit dystrybuowany przez CQ Publisher w Japonii.
  • Wiseduino, układ dla mikrokontrolerów kompatybilnych z Arduino, zawierający zegar czasu rzeczywistego DS1307 (RTC) z zapasową baterią, kość EEPROM 24LC256 oraz złącze adaptera XBee do bezprzewodowej komunikacji.
  • SunDuino to polski klon oparty na Arduino PRO, pozbawiony układu FTDI, ale zgodny programowo i sprzętowo z płytkami ARDUINO DECIMILA, rozwijany przez grupę Lothar Team znaną ze świetnych dem na C-64 i AMIGA, której założycielem jest koder grupy SunRiver, znany swego czasu jako AndzinSan. Obecnie trwają prace nad SunDuino32, które mają być zgodne ze shieldami Arduino, ale posiadać na pokładzie będą mikrokontrolery STM32F10x. Na stronie jest wzmianka, że już udało się doprowadzić do działania ze środowiskiem ARDUINO płytkę STM32VL Discovery.

Klony zgodne z programem rozruchowym

Sanguino

Następujące układy są zgodne z oprogramowaniem dla Arduino, jednak nie są kompatybilne z shieldami. Posiadają inne złącza zasilania i złącza wejścia/wyjścia, takie jak szereg pinów na spodniej stronie płytki do łączenia z płytkami prototypowymi, czy bardziej wyspecjalizowane złącza:

  • "Oak Micros om328p" – kompaktowa wersja Arduino Duemilanove w postaci urządzenia na płytce prototypowej (36 mm x 18 mm), które można umieścić w standardowym złączu 28-pinowym, z obsługą USB, układem ATmega328p oraz 6 diodami LED.
  • "Boarduino" – niedrogi klon układu Diecimila przeznaczony do prototypowania, produkowany przez Adafruit.
  • "Bare Bones Board" (BBB) oraz "Really Bare Bones Board" (RBBB) produkowane przez Modern Device – tanie i kompaktowe klony przeznaczone do prototypowania.
  • "iDuino", płyta z interfejsem USB do prototypowania, produkowana i sprzedawana jako kit przez Fundamental Logic.
  • "Sanguino" – otwarty, wzmocniony klon Arduino wykorzystujący układ ATMega644P zamiast ATMega168. Posiada 64KB pamięci flash, 4KB pamięci RAM i 32 piny wejścia/wyjścia ogólnego przeznaczenia zamknięte w 40-pinowym układzie DIP. Rozwijany w ramach projektu RepRap.
  • "LEDuino", układ z rozszerzoną magistralą I²C, dekoderem DCC oraz interfejsem magistrali CAN. Produkowane z użyciem montażu powierzchniowego, sprzedawane jako kompletne układy przez Siliconrailway.
  • "Stickduino", podobny do klucza USB.
  • "Roboduino", zaprojektowany do zastosowań w robotyce. Wszystkie złącza posiadają sąsiadujące linie zasilający, do których w łatwy sposób mogą być podłączone różnego rodzaju silniki i czujniki. Wyprowadzone są dodatkowe złącza zasilające oraz do komunikacji szeregowej. Układ jest rozwijany przez Curious Inventor, L.L.C.
  • "Wireless Widget", kompaktowy (35 mm × 70 mm), niskonapięciowy, zasilany bateryjnie klon Arduino zaopatrzony w interfejs komunikacji bezprzewodowej o zasięgu do 120 m.
  • "Crowduino" Oparty na płytce Duemilanove. Układ posiada dodatkowe złącza, które pozwalają na podłączanie modułów XBee.

Zespół projektowy

Zespół projektowy Arduino składa się z sześciu osób: Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, David Mellis i Nicholas Zambetti[21].

Zobacz też

Przypisy

  1. Arduino - ReleaseNotes. [dostęp 2020-02-16]. (ang.).
  2. a b What makes an Arduino board an Arduino?. Projekt Arduino. [dostęp 2009-10-12]. [zarchiwizowane z tego adresu (2013-01-15)]. (ang.).
  3. Arduino build process. Projekt Arduino. (ang.).
  4. Project homepage. Projekt Arduino. (ang.).
  5. Interfacing Arduino to other languages. Projekt Arduino. (ang.).
  6. Arduino environment. Projekt Arduino. (ang.).
  7. Arduino programming language reference. Projekt Arduino. (ang.).
  8. Ars Electronica Archiv. [dostęp 2009-10-12]. [zarchiwizowane z tego adresu (2013-07-22)]. (niem.).
  9. Ars Electronica Archiv / ANERKENNUNG. [dostęp 2009-10-12]. [zarchiwizowane z tego adresu (2014-02-04)]. (niem.).
  10. Clive Thompson. Build It. Share It. Profit. Can Open Source Hardware Work?. „Wired”. 16 (11), s. 166–176, 2008-10-20. [dostęp 2015-07-29]. (ang.). 
  11. Full Page Reload [online], IEEE Spectrum: Technology, Engineering, and Science News [dostęp 2021-04-06] (ang.).
  12. Getting Started with Arduino MEGA2560 [online], www.arduino.cc [dostęp 2021-04-06] (ang.).
  13. Arduino - ArduinoBoardMega [online], www.arduino.cc [dostęp 2021-04-06].
  14. a b Hardware. Projekt Arduino. [dostęp 2009-09-26]. (ang.).
  15. ArduinoBoardMega. Projekt Arduino. [dostęp 2009-03-26]. (ang.).
  16. Download the Arduino Software. Projekt Arduino. (ang.).
  17. Arduino – ArduinoShields. Projekt Arduino. [dostęp 2009-03-20]. (ang.).
  18. So you want to make an Arduino. Projekt Arduino. [dostęp 2015-07-29]. [zarchiwizowane z tego adresu (2011-03-17)]. (ang.).
  19. Boxall 2013 ↓, s. 250. Cytat: "Do największych zalet tego modelu należą niska cena i wyjątkowe uczucie satysfakcji po samodzielnym skonstruowaniu płytki"
  20. Freeduino Open Designs. [dostęp 2015-07-29]. (ang.).
  21. Full Page Reload [online], IEEE Spectrum: Technology, Engineering, and Science News [dostęp 2021-04-06] (ang.).

Bibliografia

Linki zewnętrzne