Arduino Zero: cos'è, a cosa serve e in quali progetti di sviluppo può essere utilizzato?

Ultimo aggiornamento: 15/09/2022
Arduino Zero: cos'è, a cosa serve e in quali progetti di sviluppo può essere utilizzato.

La scheda Arduino ZERO È progettato per quegli utenti che Eseguono progetti che non sono in grado di sostenere il classico Arduino UNOCiò è dovuto alla capacità di elaborazione della MCU, alla memoria flash e alla frequenza di clock della CPU.

Pertanto, è importante sapere cosa sono le schede Arduino ZERO e a cosa servono in elettronica. Puoi trovare queste informazioni nei paragrafi di questo articolo.

Inoltre, te lo mostreremo Le caratteristiche principali della scheda e i criteri da considerare quando si lavora con Arduino ZEROScopri questa potente scheda madre.

Cosa sono le schede Arduino Zero e a cosa servono queste schede di sviluppo in elettronica?

Il piatto Arduino ZERO Si tratta di un dispositivo dotato di un bus elettronico che include un Microcontrollore ATMEL Cortex-M0 SAMD21 a 32 bit. È caratterizzato dall'avere a debug del programma, o debug, consentendo all'utente di non aver bisogno di alcun hardware esterno.

Ha tutta la tecnologia necessaria per lavorare a progetti sull'Internet delle coseÈ necessario chiarire che le sue prestazioni sono leggermente inferiori a quelle di altre schede, poiché La tensione supportata è di 3.3 VTutti i pin, eccetto il pin 4, Lavorano con interruzioni esterne di tipo 0 e 1. D'altra parte, la corrente continua, sia in ingresso che in uscita, è 7 mA e la velocità di clock della CPU raggiunge 48 MHz.

Caratteristiche: Quali sono le caratteristiche principali di questa scheda Arduino?

Caratteristiche: Quali sono le caratteristiche principali di questa scheda Arduino?

Le caratteristiche principali di questa scheda Arduino sono: 

  • È ideale per lavorare in robotica, nell'automazione e nei progetti tecnologici.
  • Ha un scrubber integrato che si collega all'hardware di MCU che ti permette di programmare il SAMD21 attraverso un'interfaccia SWD. Ciò consente inoltre l'accesso completo al microcontrollore e la possibilità di lavorare con i codici di programmazione per modificarli.
  • L'alimentatore esterno che Arduino ZERO ha L'alimentazione viene fornita tramite un connettore con polo centrale positivo o attraverso i pin GND e VIN situati sull'header di questo connettore da 2,1 mm. Ciò significa che non è presente una porta USB per alimentare la scheda.
  • I I valori PWM sono 3, 4, 5, 6, 8, 9, 10, 11, 12 e 13mentre il ingressi analogici sono dentro Da A0 ad A5La tensione di uscita si trova sul DAC, che corrisponde al canale A0.
  • L'SPI si trova in SS, MOSI, MISO e SCK della piastra.
  • Possiede un orologio funzionante. 48MHz, così puoi contare il tempo reale e il calendario.

Cosa devo tenere a mente quando lavoro con le schede Arduino ZERO?

Cosa devo tenere a mente quando lavoro con le schede Arduino ZERO?

La prima cosa che dovresti sapere è che il consiglio Arduino ZERO funziona a una tensione di 3.3 VÈ leggermente inferiore rispetto alle altre schede madri. Pertanto, è necessario tenere conto di questa limitazione, poiché si potrebbe danneggiare il microprocessore e altri componenti. Quando Lavori nell'IDE e apri il monitorI microcontrollori e l'esecuzione dello sketch non si riavviano, quindi sarà necessario riavviare il processo utilizzando un pulsante presente nella dashboard del software. Arduino.

L'alimentazione non viene fornita tramite un ingresso USB.Ciò potrebbe complicare il progetto se si desidera utilizzare il connettore da 2,1 mm per un altro collegamento del circuito. Infine, Bisogna fare attenzione al numero di processi che si attribuiscono al progetto.Sebbene sia vero che questa scheda madre è di gran lunga superiore in termini di potenza rispetto alla UNO Arduino E se disponete di un microcontrollore potente, di una buona memoria e di un clock a 48 MHz, dovreste sempre prestare attenzione al carico che gli trasferite.

Elenco dei migliori progetti che puoi realizzare con le schede Arduino ZERO

Scopri i migliori progetti che puoi realizzare con una scheda Arduino ZERO:

Display NeoPixel controllato tramite Wi-Fi

Display NeoPixel controllato tramite Wi-Fi

Con questo progetto potrai creare una schermata di Neo Pixel gestito da WiFi. Ne avrai bisogno di uno Scheda Arduino ZEROAvrai bisogno di un anello luminoso tipo NeoPixel, diversi LED, una breadboard, un condensatore da 1000 µF, una resistenza da 475 ohm e dei fili per effettuare i collegamenti. Dovrai assemblarlo tu stesso. seguendo le descrizioni e le specifiche delle parti E considerando i pin sulla scacchiera, in conformità con tutto ciò che abbiamo discusso in questo post.

Una volta che l'assemblaggio è pronto, dovrai inserire il seguente codice:

#includi #includi #define PIN 12 #define NUMPIXELS 10 #define interval 50 #define wifiRetryTimes 0 Adafruit_NeoPixel pixels = Adafruit_NeoPixel ( NUMPIXELS , PIN , NEO_GRB + NEO_KHZ800 ); uint32_t red = pixels . Colore ( 255 , 0 , 0 ); uint32_t blu = pixel . Colore ( 0 , 0 , 255 ); uint32_t verde = pixel . Colore ( 0 , 255 , 0 ); uint32_t pixelColour ; uint32_t lastColor ; float activeColor [] = { 255 , 0 , 0 }; IPAddress apIP ( 192 , 168 , 0 , 150 ); IPAddress netMsk ( 255 , 255 , 255 , 0 ); IP Address gw ( 192 , 168 , 0 , 1 ); dns IP Address ( 192 , 168 , 0 , 1 ); string IP ; char APssid [] = "MKR1000" ; char APpass [] = "MKR1000" ; char ssid [] = "YourSSID" ; char pass [] = "YourPassword" ; int keyIndex = 0 ; int status = WL_IDLE_STATUS; WiFiServer Server(80); const char html1[] PROGMEM = "<! DOCTYPE html>  Selettore colori Neopixel < / titolo > " " < stile tipo = 'testo / css' >. bt {display: block; width: 250px; height: 100px; padding: 10px; margin: 10px; text-align: center; border-radius: 5px; colour: white; font-weight: bold; font-size: 40px; text-decoration: none;} body {background: #000;} " ".red {background: red; color: white;}. verde {sfondo: # 0C0; colore: bianco;}. blu {sfondo: blu; colore: bianco;}" ".bianco {sfondo: bianco; colore: nero; bordo: 1px solido nero;}. off {background: # 666; color: white;}. colorPicker {sfondo: bianco; colore: nero;}. colorWipe {font-size: 40px; background: linear-gradient(right, red, #0C0, blue);} " ".theatreChase {font-size: 40px; background: linear-gradient(right, red, black, red, black, #0C0, black, #0C0, black, blue, black, blue);}" ".rainbow {font-size: 40px; background: red; background: linear-gradient(right, red, orange, yellow, green, blue, indigo, violet, red, orange, yellow, green, blue, indigo, violet) );} " ".rainbowCycle {font-size: 40px; background: red; background: linear-gradient(right, red, orange, yellow, green, blue, indigo, violet);}" ".rainbowChase {font-size: 40px; background: red; background: gradiente lineare (a destra, rosso, nero, arancione, nero, giallo, nero, verde, nero, blu, nero, indaco, nero, viola); } " ; const char html2 [] PROGMEM = ".breathe {background: blue; color: white;}. cylon {sfondo: rosso; colore: nero;}. battito cardiaco {sfondo: rosso; colore: bianco;}. NATALE {dimensione carattere: 40px; sfondo: rosso; sfondo: gradiente lineare (destra, rosso, verde, rosso, verde, rosso, verde, rosso, verde, rosso, verde, rosso, verde);} " ".TUTTO {sfondo: bianco; colore: blu;}. E {background: #EE0; height: 100px; width: 100px; border radius: 50px;}. B { background: #000; height: 100px; width: 100px; border-radius: 50px;}. Un {font-size: 35px;} td {vertical-align: middle;} " "td {vertical-align: middle;} " " " ;

const char  html3 []  PROGMEM  =

"función ResetWebpage () {if (window.location.href! = 'http: // # IPADDRESS /') {window.open ('http: // # IPADDRESS /', '_ self', true)}};" // cambia qui il valore del sito web con il tuo sito web statico "function myFunction () {document.getElementById ('brilloLevel'). invia();} " " v = 1 '> Rosso Salviette colorate " " Verde Caccia al teatro " " Blu Arcobaleno " " Bianco Inseguimento dell'arcobaleno " ; const char html4 [] PROGMEM = " Cacciatore Cylon Ciclo dell'arcobaleno " " Respirare Battito del cuore " " Natale Tutto il ciclo " " Disattivato  " " " ; 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}; //Attiva la funzione Neopixel (disattivata per impostazione predefinita) 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 . inizio(); pixel . setBrightness (brightness); writeLEDS ( 0 , 0 , 0 ); Seriale. inizio ( 9600 ); Seriale . println ( ssid ); if ( WiFi . stato () == WL_NO_SHIELD ) { Seriale . println(F("WiFi shield non presente")); while(true); } WiFi. config ( apIP ); //WiFi.config(apIP, dns, gw, netMsk); while ( status ! = WL_CONNECTED ) { per ( int x = 0 ; x <= wifiRetryTimes ; x ++ ) { Serial . print(F("Tentativo di connessione alla rete denominata:"); Seriale. println(ssid); } Seriale. print(F("Impossibile connettersi al Wi-Fi")); stato = Wi-Fi. beginAP(APssid); // crea un AP - l'IP è attualmente statico a 192.168.1.1 // state = WiFi.beginAP(APssid, APpass); delay(10000); break; } printWifiStatus(); sendHtml3. sostituisci ( "#INDIRIZZOIP" , IP ); inviaHtml4 . sostituisci("#LUCIDO", "150"); Seriale. println(F("Server USP avviato!!" )); server . inizio(); Seriale. println(F("Server HTTP avviato!!" )); } ciclo vuoto () { WiFiClient Client = server . disponibile(); se (client) { println(F("nuovo client")); currentLine = ""; mentre (client.connesso()) { se (client.disponibile()) { char c = client.read(); Seriale. scrivi ( c ); se ( c == '\ n' ) { client . println("Tipo di contenuto: text/html"); client. println(); client. print(F(html1)); cliente . print(F(html2)); cliente . stampa (invia HTML3); cliente . stampa (invia HTML4); cliente . println(); break; } else { // se ha una nuova riga, dovrai eliminare currentLine: if (currentLine. indexOf ( "Referer" ) < 0 ) { // viene sempre eseguito se Referer non è nel valore restituito if ( currentLine . indexOf("/L00") > 0) { // se /L00 è presente nella stringa handle_L00(); // esegui la funzione } 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' ) currentLine + = c ; } if ( currentLine . endsWith("/generate_204")) { handle_root(); } } } // chiude la connessione: client. stop(); Seriale. println(F("client disconnesso")); } NeoPixModes(); }

Registrazione dei valori di temperatura

Registrazione dei valori di temperatura

Ti servirà un piatto Arduino MKR Zeroun condensatore da 100 nF, una resistenza da 4.75 kΩ, un sensore di temperatura e umidità, una scheda di inserimento, cavi e una scheda MicroSD. Questo progetto ha lo scopo di tenere traccia dei valori di temperatura e umidità rilevati dal dispositivo.

Tu dovrai Assembla l'Arduino con la breadboardSuccessivamente, collega il sensore di temperatura e umidità alla breadboard. Dopodiché, dovrai collegare il pin di alimentazione del sensore. al pin VCC e infine collegare il pin dati del sensore al pin 7Quando hai finito, dovrai collegare il pin di massa del sensore di umidità e temperatura al pin GND dalla piastra Arduino. Successivamente, collegherai il condensatore al GND e resistenza.

Una volta terminato, dovrai inserire questi codici:

#includi #includi #includi #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("Esempio DataLogger:"); if (!SD.begin(chipSelect)) { println("Scheda non funzionante o non presente"); return; } println("Scheda inizializzata."); //Quando viene fornita alimentazione al sensore DHT22, //non inviare alcuna istruzione al sensore //entro un secondo per superare lo stato instabile delay(1000); println("Inizializzazione DHT"); begin(); println("Inizializzazione RTC"); begin(); setTime(ore, minuti, secondi); setDate(giorno, mese, anno); setAlarmTime(0, 0, 0); enableAlarm(rtc.MATCH_SS); attachInterrupt(dataCheck); loadDataCheck=0; previousTime=millis(); println("Sistema pronto..."); } 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 humidity = dht.readHumidity(); float temperature = dht.readTemperature(); String dataString = ""; dataString += "Temperatura: " + String(temperature) + " C" + "\t" + "Umidità: " + String(humidity) + "%\t" + "Ora: " + getTime(); File dataFile = SD.open("datalog.txt", FILE_WRITE); // se il file è disponibile, scrivici: if (dataFile) { println(dataString); close(); // stampa anche sulla porta seriale: println(dataString); } String getTime(void) { String returnString = ""; if (rtc.getHours() < 10) returnString += "0" + String(rtc.getHours()); else returnString += String(rtc.getHours()); returnString += ":"; if (rtc.getMinutes() < 10) returnString += "0" + String(rtc.getMinutes()); altrimenti returnString += String(rtc.getMinutes()); returnString += ":"; if (rtc.getSeconds() < 10) returnString += "0" + String(rtc.getSeconds()); else returnString += String(rtc.getSeconds()); return returnString; }

Robot Arduino Zero

Robot Arduino Zero

È possibile creare un robot con una scheda ArduinoPer questo avrai bisogno di un adattatore Arduino MKR2UNOuna scheda Arduino MotorShield Rev3, un motore a corrente continua, dei fili e una batteria 9V. Una volta che avrete a disposizione questi materiali, dovrete assemblarli incollando il motore e poi effettuando i collegamenti indicati sui componenti.

Successivamente, dovrai inserire questi codici:

#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);

}
Ebook di IPAP
Ebooks IPAP

🔥UNISCITI🔥 ALLA NUOVA COMMUNITY IP@P! ISCRIVITI QUI!

Temi

Autore: Félix Albornoz

Ho maturato oltre 20 anni di esperienza nel settore tecnologico, aiutando aziende e utenti a svilupparsi e formarsi in questo campo. Sono sempre alla ricerca di nuove conoscenze.

È parente