Arduino Zero: Co to jest, do czego służy i w jakich projektach rozwojowych można go używać?

Ostatnia aktualizacja: 15/09/2022
Arduino Zero: co to jest, do czego służy i w jakich projektach rozwojowych można go używać.

Płytka Arduino ZERO Jest przeznaczony dla użytkowników, którzy Realizują projekty, których nie są w stanie utrzymać klasyczny Arduino UNODzieje się tak ze względu na moc obliczeniową mikrokontrolera, pamięci flash i zegara procesora.

Ważne jest zatem, aby wiedzieć, czym są płytki Arduino ZERO i do czego się je wykorzystuje w elektronice. Informacje te można znaleźć w dalszych akapitach tego artykułu.

Pokażemy Ci również Główne cechy płytki i kryteria, które należy wziąć pod uwagę pracując z Arduino ZEROSprawdź tę wydajną płytę główną.

Czym są płytki Arduino Zero i do czego służą te płytki deweloperskie w elektronice?

Talerz Arduino ZERO Jest to urządzenie posiadające magistralę elektroniczną, która obejmuje 32-bitowy rdzeń ATMEL Cortex-M0 SAMD21 MCUCharakteryzuje się tym, że ma debugowanie programulub debugowania, dzięki czemu użytkownik nie będzie potrzebował żadnego zewnętrznego sprzętu.

Posiada całą niezbędną technologię, aby praca nad projektami Internetu RzeczyNależy wyjaśnić, że jej wydajność jest nieco niższa niż innych płyt, ponieważ Obsługiwane napięcie wynosi 3.3 V.Wszystkie piny, oprócz pinu 4, Pracują z zakłóceniami zewnętrznymi typu 0 i 1. Z drugiej strony prąd stały, zarówno wejściowy, jak i wyjściowy, jest 7 mA a prędkość zegara procesora osiąga 48 MHz.

Cechy: Jakie są główne cechy tej płytki Arduino?

Cechy: Jakie są główne cechy tej płytki Arduino?

Główne cechy tej płytki Arduino to: 

  • Idealnie nadaje się do pracy w robotyka, automatyka i projekty technologiczne.
  • Jest właścicielem wbudowany skruber który łączy się ze sprzętem MCU który pozwala na zaprogramowanie SAMD21 przez interfejs SWD. Umożliwia to również pełny dostęp do mikrokontrolera i możliwość pracy z kodami programów w celu ich modyfikacji.
  • Zewnętrzny zasilacz, który posiada Arduino ZERO Zasilanie jest dostarczane przez złącze z plusem w środku lub przez piny GND i VIN znajdujące się na złączu 2,1 mm. Oznacza to, że płytka nie posiada portu USB do zasilania.
  • L PWM to 3, 4, 5, 6, 8, 9, 10, 11, 12 i 13podczas gdy wejścia analogowe oni są w A0 do A5Napięcie wyjściowe znajduje się na przetworniku cyfrowo-analogowym (DAC), czyli na kanale A0.
  • SPI znajduje się w SS, MOSI, MISO i SCK talerza.
  • Posiada działający zegarek. 48MHz, dzięki czemu możesz liczyć czas rzeczywisty i kalendarz.

O czym należy pamiętać podczas pracy z płytkami Arduino ZERO?

O czym należy pamiętać podczas pracy z płytkami Arduino ZERO?

Pierwszą rzeczą, którą powinieneś wiedzieć, jest to, że tablica Arduino ZERO działa przy napięciu 3.3 VJest nieco niższa niż w przypadku innych płyt głównych. Dlatego należy wziąć to pod uwagę, ponieważ może to spowodować uszkodzenie mikroprocesora i innych podzespołów. Kiedy Pracujesz w IDE i otwierasz monitorMikrokontrolery i wykonywanie szkicu nie zostaną ponownie uruchomione, dlatego konieczne będzie ponowne uruchomienie procesu za pomocą przycisku znajdującego się na pulpicie oprogramowania. Arduino.

Zasilanie nie jest dostarczane przez wejście USBMoże to skomplikować projekt, jeśli chcesz użyć złącza 2,1 mm do podłączenia innego obwodu. Na koniec, Musisz zachować ostrożność przy ustalaniu liczby procesów przypisywanych do projektu.Choć prawdą jest, że ta płyta główna jest znacznie mocniejsza od Arduino UNO A jeśli masz wydajny mikrokontroler, dobrą pamięć i zegar 48 MHz, powinieneś zawsze zwracać uwagę na obciążenie, jakie mu przekazujesz.

Lista najlepszych projektów, które możesz zrealizować przy użyciu płytek Arduino ZERO

Odkryj najlepsze projekty, które możesz zrealizować przy użyciu płytki Arduino ZERO:

Wyświetlacz NeoPixel sterowany przez Wi-Fi

Wyświetlacz NeoPixel sterowany przez Wi-Fi

Dzięki temu projektowi będziesz mógł stworzyć ekran NeoPixel zarządzany przez WiFi. Będziesz potrzebować jednego Płytka Arduino ZEROBędziesz potrzebować pierścienia świetlnego typu NeoPixel, kilku diod LED, płytki stykowej, kondensatora 1000 µF, rezystora 475 omów oraz przewodów do wykonania połączeń. Będziesz musiał złożyć go samodzielnie. zgodnie z opisami i specyfikacjami części A biorąc pod uwagę piny na płytce, zgodnie ze wszystkim, co omówiliśmy w tym poście.

Gdy już będziesz mieć gotowy zestaw, będziesz musiał wprowadzić następujący kod:

#włączać #włączać #define PIN 12 #define NUMPIXELS 10 #define interval 50 #define wifiRetryTimes 0 Adafruit_NeoPixel pikseli = Adafruit_NeoPixel ( NUMPIXELS , PIN , NEO_GRB + NEO_KHZ800 ); uint32_t czerwony = pikseli . Kolor ( 255 , 0 , 0 ); uint32_t niebieski = piksele . Kolor (0, 0, 255); uint32_t zielony = piksele. Kolor ( 0 , 255 , 0 ); uint32_t pixelColour ; uint32_t lastColor ; float activeColor [] = { 255 , 0 , 0 }; Adres IP apIP ( 192 , 168 , 0 , 150 ); Adres IP netMsk ( 255 , 255 , 255 , 0 ); Adres IP gw ( 192 , 168 , 0 , 1 ); Adres IP dns ( 192 , 168 , 0 , 1 ); string IP ; char APssid [] = "MKR1000" ; char APpass [] = "MKR1000" ; char ssid [] = "TwojeSSID" ; char pass [] = "TwojeHasło" ; int keyIndex = 0 ; int status = WL_IDLE_STATUS ; Serwer WiFiServer ( 80 ); const char html1 [] PROGMEM = "<! DOCTYPE html>  Selektor kolorów Neopixel < / title > " " < style type = 'text / css' >. bt {wyświetlacz: blok; szerokość: 250px; wysokość: 100px; wypełnienie: 10px; margines: 10px; wyrównanie tekstu: do środka; promień obramowania: 5px; kolor: biały; grubość czcionki: pogrubiona; rozmiar czcionki: 40px; dekoracja tekstu: brak;} ciało {tło: #000;} " ".red {tło: czerwone; kolor: biały;}. zielony {tło: # 0C0; kolor: biały;}. niebieski {tło: niebieskie; kolor: biały;}" ".biały {tło: białe; kolor: czarny; obramowanie: 1 px, czarne;}. wyłącz {tło: # 666; kolor: biały;}. colorPicker {tło: białe; kolor: czarny;}. colorWipe {rozmiar czcionki: 40px; tło: liniowy gradient(prawy, czerwony, #0C0, niebieski);} " ".theatreChase {rozmiar czcionki: 40px; tło: liniowy gradient(prawy, czerwony, czarny, czerwony, czarny, #0C0, czarny, #0C0, czarny, niebieski, czarny, niebieski);}" ".rainbow {rozmiar czcionki: 40px; tło: czerwony; tło: liniowy gradient(prawy, czerwony, pomarańczowy, żółty, zielony, niebieski, indygo, fioletowy, czerwony, pomarańczowy, żółty, zielony, niebieski, indygo, fioletowy) );} " ".rainbowCycle {rozmiar czcionki: 40px; tło: czerwony; tło: liniowy gradient(prawy, czerwony, pomarańczowy, żółty, zielony, niebieski, indygo, fioletowy);}" ".rainbowChase {rozmiar czcionki: 40px; tło: czerwony; tło: gradient liniowy (w prawo: czerwony, czarny, pomarańczowy, czarny, żółty, czarny, zielony, czarny, niebieski, czarny, indygo, czarny, fioletowy); } " ; const char html2 [] PROGMEM = ".breathe {tło: niebieskie; kolor: biały;}. cylon {tło: czerwone; kolor: czarny;}. bicie serca {tło: czerwone; kolor: biały;}. BOŻE NARODZENIE {rozmiar czcionki: 40px; tło: czerwone; tło: gradient liniowy (w prawo, czerwony, zielony, czerwony, zielony, czerwony, zielony, czerwony, zielony, czerwony, zielony, zielony);} " ".ALL {tło: białe; kolor: niebieski;}. I {tło: #EE0; wysokość: 100px; szerokość: 100px; promień obramowania: 50px;}. B { tło: #000; wysokość: 100px; szerokość: 100px; promień obramowania: 50px;}. A {font-size: 35px;} td {vertical-align: middle;} " "td {vertical-align: middle;} " " " ;

const char  html3 []  PROGMEM  =

"función ResetWebpage () {if (window.location.href! = 'http: // # ADRES IP /') {window.open ('http: // # ADRES IP /', '_ self', true)}};" // zmień tutaj wartość witryny na swoją statyczną witrynę "function myFunction () {document.getElementById ('brilloLevel'). składać();} " " v = 1 '> Czerwony Chusteczka do czyszczenia kolorów " " Zielony Pościg teatralny " " Niebieski Tęcza " " Biały Pościg za tęczą " ; const char html4 [] PROGMEM = " Łowca Cylonów Cykl Tęczy " " Oddychać Bicie serca " " Boże Narodzenie WSZYSTKIE Cykle " " Dezaktywowany  " " " ; String sendHtml3 = html3 ; String sendHtml4 = html4 ; String currentLine; boolean NeoState[] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, true}; //Aktywuj funkcję Neopixel (domyślnie wyłączona) int neopixMode = 0; long previousMillis = 0 ; long lastAllCycle = 0 ; long previousColorMillis = 0 ; int i = 0 ; int vent = 0 ; int beat = 0 ; ; uint32_t lastAllColor = 0 ; empty configuration () { pixels . start(); pikseli . setBrightness (jasność); writeLEDS ( 0 , 0 , 0 ); Serial. początek ( 9600 ); Serial . println ( ssid ); jeśli ( WiFi . status () == WL_NO_SHIELD ) { Serial . println(F("Brak osłony WiFi")); while(true); } WiFi. config (apIP); //WiFi.config(apIP, dns, gw, netMsk); while (status ! = WL_CONNECTED ) { dla ( int x = 0 ; x <= wifiRetryTimes ; x ++ ) { Serial . print(F("Próba połączenia z siecią o nazwie:")); Serial. println ( ssid ); } Serial . print(F("Nie można połączyć się z siecią Wi-Fi")); state = WiFi. beginAP (APssid); // utwórz AP — adres IP jest obecnie statyczny i wynosi 192.168.1.1 // state = WiFi.beginAP(APssid, APpass); delay ( 10000 ); break ; } printWifiStatus (); sendHtml3 . zamień ("#ADRESIP" , IP ); wyślijHtml4 . replace("#BRIGHT", "150"); Serial. println(F("Serwer USP uruchomiony!!" )); serwer . begin(); Serial . println(F("Serwer HTTP uruchomiony!!" )); } pusta pętla () { WiFiClient Client = serwer . dostępny (); jeśli (klient) { println(F("nowy klient")); bieżący wiersz = ""; podczas gdy (klient.połączony()) { jeśli (klient.dostępny()) { char c = klient.odczytaj(); Serial. napisz ( c ); jeśli ( c == '\ n' ) { klient . println("Typ zawartości: text/html"); client. println(); klient. drukuj(F(html1)); klient . drukuj(F(html2)); klient . drukuj (wyślijHtml3); klient . drukuj (wyślijHtml4); klient . println(); break; } else { // jeśli ma nową linię, musisz usunąć currentLine: if (currentLine. indexOf ( "Referer" ) < 0 ) { // zawsze wykonuje się, jeśli Referer nie znajduje się w wartości zwracanej if ( currentLine . indexOf("/L00") > 0) { // jeśli /L00 jest obecne w ciągu handle_L00(); // wykonaj funkcję } if (currentLine. indexOf ( "/L01" ) > 0 ) { handle_L01 (); } if ( currentLine . indexOf ( "/L02" ) > 0 ) { handle_L02 (); } if ( currentLine . indexOf ( "/L03" ) > 0 ) { handle_L03 (); } if ( currentLine . indexOf ( "/L04" ) > 0 ) { handle_L04 (); } if ( currentLine . indexOf ( "/L05" ) > 0 ) { handle_L05 (); } if ( currentLine . indexOf ( "/L06" ) > 0 ) { handle_L06 (); } if ( currentLine . indexOf ( "/L07" ) > 0 ) { handle_L07 (); } if ( currentLine . indexOf ( "/L08" ) > 0 ) { handle_L08 (); } if ( currentLine . indexOf ( "/L09" ) > 0 ) { handle_L09 (); } if ( currentLine . indexOf ( "/L10" ) > 0 ) { handle_L10 (); } if ( currentLine . indexOf ( "/L11" ) > 0 ) { handle_L11 (); } if ( currentLine . indexOf ( "/L12" ) > 0 ) { handle_L12 (); } if ( currentLine . indexOf ( "/L13" ) > 0 ) { handle_L13 (); } if ( currentLine . indexOf ( "/L14" ) > 0 ) { handle_L14 (); } if ( currentLine . indexOf ("bright" ) > 0 ) { handle_bright (); } } currentLine = "" ; } } else if ( c ! = '\r' ) bieżącaLinia + = c ; } if ( bieżącaLinia . endsWith("/generate_204")) { handle_root(); } } } // zamyka połączenie: client. stop(); Serial . println(F("klient rozłączony")); } NeoPixModes(); }

Rejestrowanie wartości temperatury

Rejestrowanie wartości temperatury

Będziesz potrzebować talerza Arduino MKR Zero, kondensator 100 nF, rezystor 4.75 kΩ, czujnik temperatury i wilgotności, płytka montażowa, kable i karta MicroSD. Projekt ten ma na celu rejestrowanie wartości temperatury i wilgotności rejestrowanych przez Twoje urządzenie.

Będziesz musiał zmontuj Arduino za pomocą płytki stykowejNastępnie podłącz czujnik temperatury i wilgotności do płytki stykowej. Następnie należy podłączyć pin zasilania czujnika. do pinu VCC i na koniec podłącz pin danych czujnika do pinu 7Po zakończeniu należy podłączyć styk uziemienia czujnika wilgotności i temperatury do styku GND z talerza Arduino. Następnie podłączysz kondensator do GND i wytrzymałość.

Po zakończeniu należy wprowadzić następujące kody:

#włączać #włączać #włączać #define DHTPIN 7 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); const int chipSelect = SS1; unsigned long previousTime; int loadDataCheck; RTCZero rtc; const byte seconds = 50; const byte minutes = 44; const bytehours = 17; const byteday = 1; const byte month = 9; const byte year = 16; void setup() { pinMode(LED_BUILTIN, OUTPUT); begin(9600); println("Przykład DataLoggera:"); if (!SD.begin(chipSelect)) { println("Karta uszkodzona lub nieobecna"); return; } println("Karta zainicjowana."); //Gdy do czujnika DHT22 zostanie dostarczone zasilanie, //nie wysyłaj żadnych instrukcji do czujnika //w ciągu jednej sekundy, aby przejść stan niestabilności delay(1000); println("Inicjowanie DHT"); begin(); println("Inicjowanie RTC"); begin(); setTime(godziny, minuty, sekundy); setDate(dzień, miesiąc, rok); setAlarmTime(0, 0, 0); enableAlarm(rtc.MATCH_SS); attachInterrupt(dataCheck); loadDataCheck=0; previousTime=millis(); println("System gotowy..."); } void loop() { unsigned long currentTime=millis(); if ((currentTime-previousTime)>5000) { digitalWrite(LED_BUILTIN, HIGH); delay(100); digitalWrite(LED_BUILTIN, LOW); previousTime=millis(); } if (loadDataCheck) logData(); } void dataCheck(){ loadDataCheck=1; } void logData(void) { float moisture = dht.readHumidity(); float temperature = dht.readTemperature(); String dataString = ""; dataString += "Temperatura: " + String(temperature) + " C" + "\t" + "Wilgotność: " + String(humidity) + "%\t" + "Czas: " + getTime(); File dataFile = SD.open("datalog.txt", FILE_WRITE); // jeśli plik jest dostępny, zapisz do niego: if (dataFile) { println(dataString); close(); // wydrukuj również na porcie szeregowym: println(dataString); } String getTime(void) { String returnString = ""; jeśli (rtc.getHours() < 10) returnString += "0" + String(rtc.getHours()); w przeciwnym razie returnString += String(rtc.getHours()); returnString += ":"; jeśli (rtc.getMinutes() < 10) returnString += "0" + String(rtc.getMinutes()); w przeciwnym razie returnString += String(rtc.getMinutes()); returnString += ":"; jeśli (rtc.getSeconds() < 10) returnString += "0" + String(rtc.getSeconds()); w przeciwnym razie returnString += String(rtc.getSeconds()); return returnString; }

Arduino Zero Robot

Arduino Zero Robot

Możesz stworzyć robota za pomocą płytki ArduinoDo tego potrzebny będzie adapter Arduino MKR2UNOpłytka Arduino MotorShield Rev3, silnik prądu stałego, przewody i bateria 9V. Gdy już masz te materiały, musisz je zmontować, sklejając silnik, a następnie wykonując połączenia wskazane na częściach.

Następnie będziesz musiał wprowadzić następujące kody:

#include <SPI.h>

#include <WiFi101.h>

#include <WiFiMDNSResponder.h>

#include "arduino_secrets.h"

char ssid[] = SECRET_SSID;

char pass[] = SECRET_PASS;

int keyIndex = 0;

char mdnsName[] = "WiFiRobot";

int status = WL_IDLE_STATUS;

WiFiServer server(80);

String readString;

const int pinDirA = 12;

const int pinDirB = 0;

const int pinPwmA = 3;

const int pinPwmB = 11;

const int pinBrakeA = 9;

const int pinBrakeB = 8;

const int motorSpeed = 200;

const int stepsDelay = 500;

void setup() {

pinMode(pinDirA, OUTPUT);

pinMode(pinPwmA, OUTPUT);

pinMode(pinBrakeA, OUTPUT);

pinMode(pinDirB, OUTPUT);

pinMode(pinPwmB, OUTPUT);

pinMode(pinBrakeB, OUTPUT);

brake();

begin(9600);

if (WiFi.status() == WL_NO_SHIELD) {

println("WiFi shield not present");

// don't continue:

while (true);

}

while ( status != WL_CONNECTED) {

print("Attempting to connect to SSID: ");

println(ssid);

status = WiFi.begin(ssid, pass);

delay(10000);

}

printWiFiStatus();

begin();

if (!mdnsResponder.begin(mdnsName)) {

println("Failed to start MDNS responder!");

while (1);

}

print("Server listening at http://");

print(mdnsName);

println(".local/");

println();

}

void loop() {

poll();

WiFiClient client = server.available();

if (client) {

println("new client");

boolean currentLineIsBlank = true;

while (client.connected()) {

if (client.available()) {

char c = client.read();

readString += c;

write(c);

if (c == '\n' && currentLineIsBlank) {

// send a standard http response header

println("HTTP/1.1 200 OK");

println("Content-Type: text/html");

println("Connection: close");

//client.println("Refresh: 5");

println();

println("<!DOCTYPE HTML>");

println("<head><title>WiFi Robot</title></head>");

println("<center><hr/><p> Click the Buttons to move the robot <p/><hr/></center>");

println("<center><input type=button value='GO UP' onmousedown=location.href='/?GO_UP'></center><br/>");

println("<center><left><input type=button value='GO LEFT' onmousedown=location.href='/?GO_LEFT'><input type=button value='GO RIGHT' onmousedown=location.href='/?GO_RIGHT'></center><br/>");

println("<center><input type=button value='GO DOWN' onmousedown=location.href='/?GO_DOWN'></right></center><br/><br/>");

println("<hr/>");

println("</body>");

println("</html>");

break;

}

if (c == '\n') {

currentLineIsBlank = true;

}

else if (c != '\r') {

currentLineIsBlank = false;

}

}

}

delay(1);

stop();

if (readString.indexOf("/?GO_UP") > 0) {

println();

println("UP");

println();

goUp();

}

if (readString.indexOf("/?GO_DOWN") > 0) {

println();

println("DOWN");

println();

goDown();

}

if (readString.indexOf("/?GO_LEFT") > 0) {

println();

println("LEFT");

println();

goLeft();

}

if (readString.indexOf("/?GO_RIGHT") > 0) {

println();

println("RIGHT");

println();

goRight();

}

readString = "";

println("client disconnected");

}

}

void printWiFiStatus() {

print("SSID: ");

println(WiFi.SSID());

IPAddress ip = WiFi.localIP();

print("IP Address: ");

println(ip);

long rssi = WiFi.RSSI();

print("signal strength (RSSI):");

print(rssi);

println(" dBm");

}

void goDown(void) {

motorAforward();

motorBforward();

delay(stepsDelay);

brake();

}

void goUp(void) {

motorBbackward();

motorBbackward();

delay(stepsDelay);

brake();

}

void goLeft(void) {

motorAforward();

motorBbackward();

delay(2*stepsDelay);

brake();

}

void goRight(void) {

motorBforward();

motorAbackward();

delay(2*stepsDelay);

brake();

}

void motorAforward(void) {

digitalWrite(pinDirA, HIGH);

digitalWrite(pinBrakeA, LOW);

analogWrite(pinPwmA, motorSpeed);

}

void motorAbackward(void) {

digitalWrite(pinDirA, LOW);

digitalWrite(pinBrakeA, LOW);

analogWrite(pinPwmA, motorSpeed);

}

void motorBforward(void) {

digitalWrite(pinDirB, HIGH);

digitalWrite(pinBrakeB, LOW);

analogWrite(pinPwmB, motorSpeed);

}

void motorBbackward(void) {

digitalWrite(pinDirB, LOW);

digitalWrite(pinBrakeB, LOW);

analogWrite(pinPwmB, motorSpeed);

}

void brake(void) {

digitalWrite(pinBrakeA, HIGH);

digitalWrite(pinBrakeB, HIGH);

}
E-booki IPAP
Ebooki IPAP

🔥DOŁĄCZ🔥 DO NOWEJ SPOŁECZNOŚCI IP@P! ZAPISZ SIĘ TUTAJ!

Tematy

Autor: Félix Albornoz

Mam ponad 20 lat doświadczenia w branży technologicznej, gdzie pomagam firmom i użytkownikom rozwijać się i szkolić w tej dziedzinie. Ciągle uczę się czegoś nowego.

Związane z