Arduino Zero: Çfarë është, për çfarë përdoret dhe në cilat projekte zhvillimi mund të përdoret?

Përditësimi i fundit: 15/09/2022
Arduino Zero: Çfarë është, për çfarë përdoret dhe në cilat projekte zhvillimi mund të përdoret.

Pllaka Arduino ZERO Është projektuar për ata përdorues që Ata zbatojnë projekte që nuk mund t'i mbështesin Arduino UNO klasikKjo është për shkak të kapacitetit të përpunimit të mikrokontrollorit (MCU), memories flash dhe orës së CPU-së.

Prandaj, është e rëndësishme të dini se çfarë janë pllakat Arduino ZERO dhe për çfarë përdoren këto pllaka në elektronikë. Ju mund ta gjeni këtë informacion në paragrafët e këtij artikulli.

Gjithashtu, ne do t'ju tregojmë Karakteristikat kryesore të pllakës dhe kriteret që duhet të merrni në konsideratë kur punoni me Arduino ZEROShikoni këtë motherboard të fuqishëm.

Çfarë janë pllakat Arduino Zero dhe për çfarë përdoren këto pllaka zhvillimi në elektronikë?

Pjata Arduino ZERO Është një pajisje që ka një autobus elektronik që përfshin një Një mikrokontrollues ATMEL Cortex-M0 SAMD21 me bërthamë 32-bitëshKarakterizohet nga të paturit e një debugging i programit, ose debug, duke e bërë të mundur që përdoruesi të mos ketë nevojë për ndonjë pajisje të jashtme.

Ka të gjithë teknologjinë e nevojshme për të duke punuar në projekte të Internetit të GjëraveËshtë e nevojshme të sqarohet se performanca e saj është pak më e ulët se ajo e bordeve të tjera, pasi Tensioni që mbështet është 3.3VTë gjitha kunjat, përveç kunjit 4, Ata punojnë me ndërprerje të jashtme të tipit 0 dhe 1. Nga ana tjetër, rryma e vazhdueshme, si në hyrje ashtu edhe në dalje, është 7 mA dhe shpejtësia e orës së CPU-së arrin 48 MHz.

Karakteristikat: Cilat janë karakteristikat kryesore të kësaj pllake Arduino?

Karakteristikat: Cilat janë karakteristikat kryesore të kësaj pllake Arduino?

Karakteristikat kryesore të kësaj pllake Arduino janë: 

  • Është ideale për të punuar në robotikë, në automatizim dhe në projekte teknologjike.
  • Zotëron a pastrues i integruar që lidhet me harduerin e MCU që ju lejon të programoni SAMD21 përmes një ndërfaqeje SWD. Kjo gjithashtu lejon akses të plotë në mikrokontrollues dhe mundësinë për të punuar me kodet e programit për t'i modifikuar ato.
  • Furnizimi me energji i jashtëm që ka Arduino ZERO Energjia furnizohet nëpërmjet një lidhësi qendror pozitiv ose nëpërmjet kunjave GND dhe VIN të vendosura në kokën e këtij lidhësi 2,1 mm. Kjo do të thotë se nuk ka portë USB për të furnizuar me energji pllakën.
  • L PWM janë 3, 4, 5, 6, 8, 9, 10, 11, 12 dhe 13ndërsa hyrjet analoge Ata janë brenda A0 deri A5Tensioni i daljes është në DAC, i cili është kanali A0.
  • SPI ndodhet në SS, MOSI, MISO dhe SCK të pllakës.
  • Ai zotëron një orë pune. 48MHz, kështu që mund të llogaritni kohën reale dhe kalendarin.

Çfarë duhet të kem parasysh kur punoj me pllakat Arduino ZERO?

Çfarë duhet të kem parasysh kur punoj me pllakat Arduino ZERO?

Gjëja e parë që duhet të dini është se bordi Arduino ZERO funksionon me një tension prej 3.3VËshtë pak më i ulët se motherboard-et e tjera. Prandaj, duhet ta merrni parasysh këtë kufizim sepse mund të dëmtoni mikroprocesorin dhe komponentët e tjerë. Kur Ju punoni në IDE dhe hap monitorinMikrokontrolluesit dhe ekzekutimi i skicës nuk rinisin, kështu që do t'ju duhet ta rifilloni procesin duke përdorur një buton që gjendet në panelin e kontrollit të softuerit. Arduino.

Energjia nuk furnizohet nëpërmjet një hyrjeje USBKjo mund ta ndërlikojë projektin nëse doni të përdorni lidhësin 2,1 mm për një lidhje tjetër qarku. Së fundmi, Duhet të jeni të kujdesshëm në lidhje me numrin e proceseve që i atribuoni projektit.Ndërsa është e vërtetë që kjo motherboard është shumë më superiore në fuqi sesa UNO Arduino Dhe nëse keni një mikrokontrollues të fuqishëm, memorie të mirë dhe një frekuencë 48 MHz, duhet të jeni gjithmonë të vetëdijshëm për ngarkesën që i transferoni atij.

Lista e projekteve më të mira që mund të bëni me pllakat Arduino ZERO

Zbuloni projektet më të mira që mund të realizoni me një pllakë Arduino ZERO:

Ekran NeoPixel i kontrolluar nga WiFi

Ekran NeoPixel i kontrolluar nga WiFi

Me këtë projekt do të jeni në gjendje të krijoni një ekran të NeoPixel menaxhuar nga Wifi. Do të të duhet një Pllaka Arduino ZERODo t'ju duhet një dritë unazore e tipit NeoPixel, disa LED, një pllakë buke, një kondensator 1000 µF, një rezistencë 475 ohm dhe tela për të bërë lidhjet. Do t'ju duhet ta montoni vetë. duke ndjekur përshkrimet dhe specifikimet e pjesëve Dhe duke marrë parasysh kunjat në tabelë, në përputhje me gjithçka që kemi diskutuar në këtë postim.

Pasi të keni gati montimin, do t'ju duhet të futni kodin e mëposhtëm:

#përfshij #përfshij #define PIN 12 #define NUMPIXELS 10 #define interval 50 #define wifiRetryTimes 0 Piksele Adafruit_NeoPixel = Adafruit_NeoPixel ( NUMPIXELS , PIN , NEO_GRB + NEO_KHZ800 ); uint32_t red = piksele . Ngjyra (255, 0, 0); uint32_t blu = pikselë. Ngjyra (0, 0, 255); uint32_t jeshile = pikselë. Ngjyra (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 Adresa gw (192, 168, 0, 1); dns IP Adresa (192, 168, 0, 1); string IP; char APssid [] = "MKR1000"; char APpass [] = "MKR1000"; char ssid [] = "SSID-jaJuaj"; char pass [] = "FjalëkalimiJuaj"; int keyIndex = 0; int status = WL_IDLE_STATUS; Serveri WiFiServer (80); const char html1 [] PROGMEM = "<! DOCTYPE html>  Zgjedhësi i Ngjyrave Neopixel < / title > " " < style type = 'text / css' >. bt {shfaq: bllok; gjerësia: 250px; lartësia: 100px; mbushja: 10px; marzhi: 10px; rreshtimi i tekstit: qendra; rrezja-e-border-it: 5px; ngjyra: e bardhë; pesha-e-fontit: e trashë; madhësia-e-fontit: 40px; dekorimi-i-tekstit: asnjë;} trupi {sfondi: #000;} " ".red {sfondi: i kuq; ngjyra: e bardhë;}. jeshile {sfondi: # 0C0; ngjyra: e bardhë;}. blu {sfondi: blu; ngjyra: e bardhë;}" ".white {sfondi: i bardhë; ngjyra: e zezë; bordura: 1px e zezë e plotë;}. fikur {sfondi: # 666; ngjyra: e bardhë;}. colorPicker {sfondi: i bardhë; ngjyra: e zezë;}. colorWipe {madhësia e fontit: 40px; sfondi: linear-gradient(djathtas, e kuqe, #0C0, blu);} " ".theatreChase {madhësia e fontit: 40px; sfondi: linear-gradient(djathtas, e kuqe, e zezë, e kuqe, e zezë, #0C0, e zezë, #0C0, e zezë, blu, e zezë, blu);}" ".rainbow {madhësia e fontit: 40px; sfondi: i kuq; sfondi: linear-gradient(djathtas, e kuqe, portokalli, e verdhë, jeshile, blu, indigo, vjollcë, e kuqe, portokalli, e verdhë, jeshile, blu, indigo, vjollcë) );} " ".rainbowCycle {madhësia e fontit: 40px; sfondi: i kuq; sfondi: linear-gradient(djathtas, e kuqe, portokalli, e verdhë, jeshile, blu, indigo, vjollcë);}" ".rainbowChase {madhësia e fontit: 40px; sfondi: i kuq; sfondi: gradient linear (në të djathtë, e kuqe, e zezë, portokalli, e zezë, e verdhë, e zezë, jeshile, e zezë, blu, e zezë, indigo, e zezë, vjollcë); } "; const char html2 [] PROGMEM = ".breathe {sfondi: blu; ngjyra: e bardhë;}. cilindrik {sfondi: i kuq; ngjyra: e zezë;}. rrahje zemre {sfondi: i kuq; ngjyra: e bardhë;}. KRISHTLINDJET {madhësia e shkronjave: 40px; sfondi: i kuq; sfondi: gradient linear (djathtas, i kuq, jeshil, i kuq, jeshil, i kuq, jeshil, i kuq, jeshil, i kuq, jeshil, i kuq, jeshil, i kuq, jeshil);} " ".TË GJITHA {sfondi: i bardhë; ngjyra: blu;}. Dhe {sfondi: #EE0; lartësia: 100px; gjerësia: 100px; rrezja e kufirit: 50px;}. B { sfondi: #000; lartësia: 100px; gjerësia: 100px; rrezja-e-kufirit: 50px;}. A {madhësia e shkronjave: 35px;} td {drejtimi vertikal: i mesëm;} " "td {drejtimi vertikal: i mesëm;} " " " ;

const char  html3 []  PROGMEM  =

"función ResetWebpage () {if (window.location.href! = 'http: // # IPADDRESS /') {window.open('http: // # IPADDRESS /', '_ self', true)}};" // ndryshoni vlerën e faqes së internetit këtu në faqen tuaj statike të internetit "function myFunction () {document.getElementById('brilloLevel'). dërgo();} " " v = 1 '> E kuqe Fshirja e ngjyrës " " Jeshile Ndjekja e Teatrit " " Blu Ylber " " E bardhë Ndjekja e Ylberit " ; const char html4 [] PROGMEM = " Cylon Chaser Cikli i Ylberit " " Merr frymë Rrahje zemre " " Krishtlindje I GJITHË Ciklit " " Çaktivizuar  " " " ; String sendHtml3 = html3 ; String sendHtml4 = html4 ; String currentLine; boolean NeoState[] = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true }; //Aktivizo Funksionin Neopixel (i çaktivizuar si parazgjedhje) 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 . fillimi(); pikselët. setBrightness (shkëlqimi); writeLEDS (0, 0, 0); Serial. fillim (9600); serial. println (ssid); nëse (WiFi). statusi () == WL_NO_SHIELD) { Serial. println(F("Mburoja e WiFi nuk është e pranishme")); ndërsa(e vërtetë); } WiFi. konfigurim (apIP); //WiFi.config (apIP, dns, gw, netMsk); ndërsa (statusi!) = WL_CONNECTED) { për (int x = 0; x <= wifiRetryTimes; x ++) { Serial. print(F("Duke u përpjekur të lidhem me rrjetin e emëruar:")); Serial. println(ssid); } Serial. print(F("Nuk munda të lidhem me Wifi-n")); state = WiFi. beginAP(APssid); // krijo një AP - IP është aktualisht statike në 192.168.1.1 // gjendje = WiFi.beginAP(APssid, APpass); delay(10000); break; } printWifiStatus(); sendHtml3. zëvendëso ("#IPADRESA", IP); sendHtml4. zëvendëso("#BRIGHT", "150"); Numri serial. println(F("Serveri USP u nis!!" )); server. fillim(); serial. println(F("Serveri HTTP u nis!!" )); } cikli bosh () { WiFiClient Client = server. i disponueshëm(); nëse (klient) { println(F("klient i ri")); currentLine = ""; ndërsa (klient.i lidhur()) { nëse (klient.i disponueshëm()) { char c = client.read(); Serial. shkruaj(c); nëse(c == '\n') {klient. println("Lloji i përmbajtjes: tekst/html"); klienti. println(); klienti. shtyp(F(html1)); klient. shtyp(F(html2)); klient. printo (sendHtml3); klient. printo (sendHtml4); klient. println(); break; } else { // nëse ka një rresht të ri, do të duhet të fshini currentLine: nëse (currentLine. indexOf("Referer") < 0) { // gjithmonë ekzekutohet nëse Referuesi nuk është në vlerën e kthyer nëse (currentLine). indexOf("/L00") > 0) { // nëse /L00 është i pranishëm në vargun handle_L00(); // ekzekuto funksionin } nëse (currentLine. indeksi i("/L01") > 0) { handle_L01(); } nëse (Line aktuale. indeksi i("/L02") > 0) { handle_L02(); } nëse (Line aktuale. indeksi i("/L03") > 0) { handle_L03(); } nëse (Line aktuale. indeksi i("/L04") > 0) { handle_L04(); } nëse (Line aktuale. indeksi i("/L05") > 0) { handle_L05(); } nëse (Line aktuale. indeksi i("/L06") > 0) { handle_L06(); } nëse (Line aktuale. indeksi i("/L07") > 0) { handle_L07(); } nëse (Line aktuale. indeksi i("/L08") > 0) { handle_L08(); } nëse (Line aktuale. indeksi i("/L09") > 0) { handle_L09(); } nëse (Line aktuale. indeksi i("/L10") > 0) { handle_L10(); } nëse (Line aktuale. indeksi i("/L11") > 0) { handle_L11(); } nëse (Line aktuale. indeksi i("/L12") > 0) { handle_L12(); } nëse (Line aktuale. indeksi i("/L13") > 0) { handle_L13(); } nëse (Line aktuale. indeksi i("/L14") > 0) { handle_L14(); } nëse (Line aktuale. indexOf("e ndritshme") > 0) { handle_bright(); } } currentLine = ""; } } përndryshe nëse (c!) = '\r') vija aktuale + = c; } nëse (vija aktuale. endsWith("/generate_204")) { handle_root(); } } } // mbyll lidhjen: klient. ndalesë(); serial. println(F("klienti u shkëput")); } NeoPixModes(); }

Regjistrimi i vlerave të temperaturës

Regjistrimi i vlerave të temperaturës

Do t'ju duhet një pjatë Arduino MKR Zero, një kondensator 100 nF, një rezistencë 4.75 k ohm, një sensor temperature dhe lagështie, një pllakë futëse, kabllo dhe një kartë MicroSD. Ky projekt funksionon për të mbajtur një regjistër të vlerave të temperaturës dhe lagështisë të regjistruara nga pajisja juaj.

Ju do të keni për të montoni Arduinon me pllakën e bukësMë pas, lidhni sensorin e temperaturës dhe lagështisë me pllakën e integruar. Pas kësaj, do t'ju duhet të lidhni pinin e energjisë së sensorit. në pinin VCC dhe më në fund lidhni pinin e të dhënave të sensorit me pinin 7Kur të keni mbaruar, do t'ju duhet të lidhni kunjin e tokëzimit të sensorit të lagështisë dhe temperaturës me kunjin. GND nga pjata Arduino. Më pas, do ta lidhni kondensatorin me GND dhe qëndresë

Pasi të keni mbaruar, do t'ju duhet të futni këto kode:

#përfshij #përfshij #përfshij #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("Shembull i Datalogger:"); if (!SD.begin(chipSelect)) { println("Karta dështoi, ose nuk është e pranishme"); return; } println("karta u inicializua."); //Kur sensorit DHT22 i furnizohet energji, //mos dërgoni asnjë udhëzim te sensori //brenda një sekonde për të kaluar vonesën e statusit të paqëndrueshëm(1000); println("Inicializimi i DHT"); begin(); println("Inicializimi i RTC"); begin(); setTime(orë, minuta, sekonda); setDate(ditë, muaj, vit); setAlarmTime(0, 0, 0); enableAlarm(rtc.MATCH_SS); attachInterrupt(dataCheck); loadDataCheck=0; previousTime=millis(); println("Sistemi gati..."); } 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(temperatura) + "C" + "\t" + "Lagështia: " + String(lagështia) + "%\t" + "Koha: " + getTime(); File dataFile = SD.open("datalog.txt", FILE_WRITE); // nëse skedari është i disponueshëm, shkruajeni në të: if (dataFile) { println(dataString); close(); // printoni edhe në portin serial: println(dataString); } String getTime(void) { String returnString = ""; if (rtc.getHours() < 10) returnString += "0" + String(rtc.getHours()); else returnString += String(rtc.getHours()); returnString += ":"; nëse (rtc.getMinutes() < 10) returnString += "0" + String(rtc.getMinutes()); përndryshe returnString += String(rtc.getMinutes()); returnString += ":"; nëse (rtc.getSeconds() < 10) returnString += "0" + String(rtc.getSeconds()); përndryshe returnString += String(rtc.getSeconds()); return returnString; }

Roboti Arduino Zero

Roboti Arduino Zero

Mund të krijoni një robot me një pllakë ArduinoPër këtë do t'ju duhet një përshtatës Arduino MKR2UNOnjë pllakë Arduino MotorShield Rev3, një motor DC, tela dhe një bateri 9V Pasi të keni këto materiale, do t'ju duhet t'i montoni ato duke ngjitur motorin dhe më pas duke bërë lidhjet e treguara në pjesë.

Tjetra, do t'ju duhet të futni këto kode:

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

}
Libra elektronikë të IPAP
Ebooks IPAP

🔥BASHKOHUNI🔥 ME KOMUNITETIN E RI IP@P! REGJISTROHUNI KËTU!

Temat

Autori: Félix Albornoz

Kam mbi 20 vjet përvojë pune në sektorin e teknologjisë, duke ndihmuar kompanitë dhe përdoruesit të zhvillohen dhe të trajnohen në këtë fushë. Mësoj vazhdimisht gjëra të reja.

Të ngjashme