4. Concepte importante

cu bekathwia ARDUINO CLASS

Introducere:

În această lecție vom aborda câteva concepte importante pe care trebuie să le înțelegeți pentru a vă crea propriile proiecte Arduino. Vom discuta despre viteza la lipire, bibliotecile de coduri, LED-urile adresabile, organizarea codurilor cu funcții și calcularea cerințelor de putere ale proiectelor dvs.

Lipirea este o tehnică de construcție electronică extrem de utilă și este surprinzător de satisfăcătoare. Este nevoie de o practică pentru a excela, ca și cele mai valoroase eforturi, deci ia un moment pentru a vă stabili intenția pentru această lecție. Stabiliți un obiectiv pentru a continua să încercați chiar dacă deveniți frustrați și aveți grijă cu voi în timpul procesului. Și protejați ochii - nimeni nu dorește niște bucăți fierbinți de metal în ochi! În timp ce vorbim de siguranță, lucrați într-o zonă ventilată și spălați-vă apoi mâinile, în special înainte de a atinge orice fel de mâncare. Fiți atent și în alertă în jurul ciocanului tău de lipit; păstrați lucrurile care se pot încingi departe de partea fierbinte (inclusiv pielea) și opriți-l (sau deconectați-l) în loc să îl lăsați nesupravegheat.

Vom folosi lipirea pentru a atașa firele pe o bucată de bandă NeoPixel, astfel încât să o putem conecta în placa de testare fără sudură. Un ciocan de lipit de bază, precum cel recomandat pentru această clasă, vă va ține destul de mult și, dacă faceți upgrade la o stație de lipit reglabilă la temperatură ca a mea, puteți să vă păstrați ciocanulul de bază ca rezervă sau să-l dați unui prieten. Introduceți-l, porniți-l și lăsați-l să se încălzească câteva minute (al meu este setat la 650 de grade F). Păstrați un burete umed sau burete de alamă în apropiere (multe suporturi de ciocan de lipit vin cu un mic burete). Când ciocanul este fierbinte, curățați vârful cu câteva șervețele pe burete sau în buretele bobinei de alamă. Apoi, atingeți ciocanul de lipit pentru o clipă de fludor pentru a transfera un pic de aliaj la vârf, numit cositorirea ciocanului de lipit. Repetați regulat procedura de curățire și cositorire a ciocanului de lipit pentru a preveni depunerea în exces a aliajului de lipit și oxidarea.

Lipirea funcționează prin încălzirea componentelor metalice ce urmează a fi îmbinate, apoi permite aliajelor de temperatură scăzută să se topească, să curgă și să se întărească între ele. Aliajul nu este lipici. Dacă topiți aliajul pe vârf și apoi îl frecați de cablurile componentelor, nu veți crea o conexiune electrică bună.

Aliajul este folosit cu flux (de obicei încorporat în aliaj, etichetat ca "miez de colofoniu"), care este o substanță care ajută la întârzierea oxidării. Acesta protejează zona imediată a metalelor de lipit și fierbe/arde în timp ce se răcesc. Fumurile de lipire sunt în principal de la rășini, din care se face fluxul. Dacă aplicați aliajul topit pe componentele reci, acestea ar putea părea că sunt lipite, însă un strat de oxidare este ascuns în interior, creat atunci când aliajul de lipire se răcește brusc când atinge componenta de bază. Aceasta se numește o lipitură rece, care împiedică transmiterea de electroni prin îmbinarea de lipit. Întotdeauna încălziți componentele în întregime înainte de a aplica aliaj suplimentar! Îmbinările sudate bine vor arăta netede și strălucitoare, nu urâtă sau mată.

Un instrument a treia mână ajută foarte mult atunci când vine vorba de stabilitatea muncii dvs., mai ales pe măsură ce învățați să țineți ciocanul ferm. Îmi place să pun un tub termocontractant peste fălcile instrumentului a treia mână, pentru a-i înmuia mușcătura.

Pregătiți-vă trei fire, tăind conectorii la un capăt și dezizolând capetele pentru a expune firele goale de sârmă. Răsuciți șuvițele fiecărui fir pentru a le păstra împreună, apoi încălziți firul cu ciocanul de lipit și aplicați o cantitate mică de fludor. Îndepărtați fludorul înainte de a îndepărta ciocanul, pentru a da fludorului topit un ultim moment să se așeze. Repetați cu celelalte două fire, apoi puneți-le deoparte.

Tăiați o bucată din banda NeoPixel cu lungimea de 19 pixeli, folosind cutter-ul cu tăiere în diagonală pentru a fixa în mijlocul plăcuțelor de cupru. Îndepărtați de pe cămașa din silicon și identificați intrarea - marcajele săgeților din punctul de bandă departe de ea. Prinde capătul de intrare în instrumentul a treia mână, cu partea din spate a benzii îndreptată către dvs. Strângeți centrul de cupru prin atingerea ciocanului de lipit, apoi aplicați o cantitate mică de aliaj. Deplasați vârful în jurul tălpii de cupru pentru a răspândi stropii de aliaj în jur.

Acum că cele două componente sunt cositorite, va fi mai ușor să le lipiți împreună. Ridicați o sârmă albă într-o mână și ciocanul de lipit în cealaltă. Țineți capătul firului cositorit la placa de cupru cositorit și reîncălziți simultan cele două componente. Aliajul de lipire de pe fiecare ar trebui să curgă împreună, dacă nu, este posibil să fie nevoie să aplicați ceva mai mult. Îndepărtați ciocanul înainte de a lăsa sârma, astfel încât aliajul să aibă șansa să se răcească, fixând firul în poziție. Dacă vă este dificil sau prea fierbinte să țineți firul cu degetele, utilizați o pereche de pensete sau clești.

Răsuciți banda NeoPixel și similar cositoriți și lipiți firele la celelalte două plăcuțe de cupru (fir roșu pentru 5V, fir negru pentru GND). Nu contează cu adevărat în ce parte a tălpii de cupru să-l lipiți, dar fețele alternante dau îmbinărilor sudate un pic mai mult spațiu de mișcare. Îndepărtați orice sârme excedentare care ies din talpa de cupru. Acum sunteți gata să conectați banda la placa de testare și să obțineți LED-urile strălucitoare (vom face asta în continuare)!

Dacă faceți o greșeală, aplicați prea mult aliaj sau doar doriți să vă dezasamblați lucrarea, puteți dezlipi îmbinarea prin simpla reîncălzire și trăgând firul. Pentru mai multe componente încâlcite, puteți folosi panglica de deslipire din cupru pentru a elimina excesul de aliaj (suprafața sa foarte interțesută atrage aliajul prin acțiunea capilară) sau o pompă de dezlipire prin aspirație.

Practicați-vă abilitățile de lipire din nou prin atașarea firelor la două terminale diagonale ale unui buton. Cositoriți firele și terminalele butonului, apoi reîncălziți pentru a permite aliajului să curgă. Puneți butonul deoparte pentru proiectul final.

LED-uri adresabile și biblioteci de coduri

Acum că banda este sudată, va trebui să programați Arduino pentru a aprinde LED-urile. NeoPixel este numele de marcă Adafruit pentru banda LED "inteligentă" LED adresabil WS2812 (spre deosebire de banda analogică LED).

Fiecare pixel are un cip în interior pentru a comunica cu placa Arduino și cu alți pixeli pe banda sa (nu se poate aprinde fără un controler). Pentru a controla banda, sunt necesare câteva funcții suplimentare Arduino și le putem obține instalând biblioteca de coduri. Bibliotecile de coduri Arduino vă permit să folosiți instrumente puternice de calcul folosind comenzi simple. Arduino recunoaște aceste module adăugate și apoi puteți utiliza comenzile lor în cadrul programului dvs. Bibliotecile Arduino există pentru tot felul de sarcini complexe, cum ar fi controlul panourilor LED mari, citirea senzorilor, crearea de sunete și multe altele.

În programul dvs. Arduino, navigați la Sketch -> Include Library -> Manage Libraries ...

Când se deschide Library Manager, căutați "NeoPixel" în câmpul din dreapta sus. Selectați opțional o versiune a bibliotecii din meniul derulant și faceți clic pe butonul "Install". Acum sunteți pregătit să utilizați biblioteca NeoPixel în schițele Arduino! Puteți utiliza managerul de bibliotecă pentru a instala toate tipurile de extensii distractive în limbajul de programare Arduino care vă ajută să interfațați cu senzori, motoare și multe altele.

Priviți cu atenție banda de pixeli. Fiecare pixel conține un LED RGB foarte mic, care poate crea teoretic orice culoare a luminii. Totuși, generarea de alb pur reprezintă o provocare pentru LED-urile RGB și, de multe ori, îi lasă pe utilizatori dezamăgiți în ceea ce privește calitatea colorată sau slabă a luminii produse. Din acest motiv, banda RGBW include și un LED alb în interiorul ambalajului său.

Codarea pentru acești pixeli va include patru valori de luminozitate pentru a descrie o culoare a pixelilor: roșu, verde, albastru și alb. Acest lucru este similar cu analogWrite (); în exemplul cu LED RGB din primele exerciții: furnizați un număr de la 0 la 255 pentru a reprezenta luminozitatea LED-ului. Funcțiile din biblioteca NeoPixel iau numere de pixel și aceste valori de culoare ca argumente, apoi le traduce în comenzi pentru trimiterea de-a lungul benzii LED.

Acum, dacă banda noastră NeoPixel are fire atașate, conectați-o la placa de testare. Firul de 5V (roșu) se duce la magistrala de alimentare a plăcii, iar firul de masă (negru) se duce la magistrala de masă a plăcii. Conectați firul de date (alb) la pinul Arduino 6.

Găsiți acest circuit pe Tinkercad

Descărcați/copiați codul din modulul Tinkercad Circuits (Code button->download code button) și deschideți-l în software-ul dvs. Arduino. Conectați cablul USB și încărcați la Arduino Uno și vizualizați pixelii care se aprind și schimbă culorile.

Să aruncăm o privire la schița Arduino:

#include <Adafruit_NeoPixel.h>

#define PIN 6

#define NUM_LEDS 19

#define BRIGHTNESS 50

// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_RGB Pixels are wired for RGB bitstream
// NEO_GRB Pixels are wired for GRB bitstream, correct if colors are swapped upon testing
// NEO_RGBW Pixels are wired for RGBW bitstream
// NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels)
// NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);

Prima secțiune creează o instanță a benzii NeoPixel și stabilește biții configurați ai programului, cum ar fi pinii conectați la banda și butonul NeoPixel, numărul de pixeli și nivelul luminozității globale. Instrucțiunile #define sunt similare cu declarațiile de variabile, dar sunt utilizate pentru informații care nu se modifică în timp ce programul se execută. Ele iau mai puțină memorie decât declarațiile variabilelor regulate.

void setup() {

strip.setBrightness(BRIGHTNESS);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}

strip.show(); este folosit ori de câte ori doriți să se schimbe pixelii. Setarea culorilor pixelilor și afișarea celor mai recente modificări sunt împărțite în două comenzi separate.

void loop() {
// Some example procedures showing how to display to the pixels:
colorWipe(strip.Color(255, 0, 0), 50); // Red
colorWipe(strip.Color(0, 255, 0), 50); // Green
colorWipe(strip.Color(0, 0, 255), 50); // Blue
colorWipe(strip.Color(0, 0, 0, 255), 50); // White

whiteOverRainbow(20,75,5);

pulseWhite(5);

// fullWhite();
// delay(2000);

rainbowFade2White(3,3,1);

}

Bucla principală apelează doar alte funcții. Să aruncăm o privire mai atentă la colorWipe(); , definită chiar sub bucla principală, și ia două argumente: o culoare (strip.Color(r, g, b, w)), și o valoare de viteză.

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}

Definiția funcției începe cu tipul de date pe care funcția o va returna sau trimite înapoi la programul principal. În acest caz, funcția nu întoarce nimic, deci cuvântul void este folosit la începutul definiției. În continuare este numele funcției, care depinde de dvs. Apoi, în paranteze sunt argumentele pe care le are funcția, în acest caz un număr întreg fără semn de 32 biți numit "c" și un număr întreg fără semn de 8 biți numit "wait". În interiorul funcției, aceste variabile locale sunt utilizate pentru a face referire la informațiile pe care le-ați transmis acesteia din bucla principală (sau din altă funcție).

Funcția însăși trece prin toți pixelii din bandă (folosind o buclă For și o funcție NeoPixel numită strip.numPixels();), colorând și arătând fiecare dintre ele înainte de a trece la următoarea. Celelalte funcții din programul strandtest RGBW funcționează la fel.

Scrieți propriile funcții

Puteți modifica ușor colorWipe (); pentru a începe codarea propriei dvs. animații unice. Încercați să copiați întreaga definiție a funcției și să schimbați numele funcției (sau copiați și lipiți acest fragment imediat după acolada de închidere a buclei principale).

// my first NeoPixel animation
void animationExperiment(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}

}

Apoi începeți să vă jucați cu codul. Spun că vreau să aprind un pixel aleatoriu în bandă, în loc să le aprind în ordine. Aș putea folosi funcția random(); încorporată în Arduino pentru a alege un pixel, care generează un număr aleator între cele două argumente:

strip.setPixelColor(random(0,strip.numPixels()), c);

Apelați noua funcție în interiorul buclei principale:

void loop() {
animationExperiment(strip.Color(255, 0, 0), 50); // Red

}

Încărcați în mod repetat experimentul cu codul pe placa dvs. Arduino Uno, făcând de fiecare dată mici modificări.

Dacă găsiți un efect care vă place, opriți editarea acelei funcții și creați una nouă, fie prin copierea/lipirea unei funcții și schimbarea numelui acesteia, fie prin tastarea definiției:

void functionName() {
//contents

}

Felicitări, aceasta este tot ce trebuie pentru a crea funcții în Arduino! Sunt un instrument util pentru a separa o bucată de cod pe care doriți să îl accesați în mod repetat și face mai ușor să citiți codul.

Planificarea alimentării

Deoarece am pătruns în circuitele motor DC și NeoPixel, probabil că veți dori să alimentați proiectul dvs. Arduino cu altceva decât cablul USB. Indiferent dacă construiți un semn LED care se conectează în perete sau un circuit GPS alimentat de baterii pentru următoarea aventură geocaching (joc bazat pe poziționare GPS), doar un pic de matematică simplă vă va ajuta să alegeți corect sursa de alimentare de fiecare dată. Tot ce faceți este să adăugați consumul de curent al fiecărei componente și să alegeți o sursă de alimentare care să corespundă sau să depășească nevoile dvs. de amperaj. Componentele își prezintă consumul de curent pe paginile de produs și fișele tehnice. De exemplu, 10 LED-uri care fiecare consumă ~ 20mA, atunci când este cuplat la o placă Arduino care consumă ~ 50mA. 10*20 + 50 = 250 mA. O baterie de 250mAh va alimenta acest circuit timp de o oră. Pachetul AA reîncărcabil din imaginea de mai sus oferă 1900mAh, astfel încât poate alimenta circuitul pentru 1900mAh/250mA = 7,6 ore. Când bateriile se cuplează în serie, tensiunea lor se adună dar amperajul nu (4 baterii AA dau 4x1,5 V dar nu 4x1900mAh).

În realitate, circuitul dvs. poate utiliza o putere mult mai mică decât maximul calculat. LED-urile care sunt estompate cu PWM utilizează doar o fracțiune din puterea celor care au luminozitate completă, de exemplu. A avea mai mult curent disponibil decât ai nevoie nu este un lucru rău, deoarece ajută la prevenirea suprasolicitării ofertei. Circuitele consumă doar puterea de care au nevoie!

Pentru majoritatea proiectelor Arduino, este suficient un pachet de 4xAA sau 3xAAA. Vă puteți conecta direct la mufa de 2,1 mm Arduino cu acumulator sau sursă de perete sau conectați cablul USB la un adaptor de perete. Multe plăci compatibile Arduino mai mici au porturi JST pe ele, un conector comun pentru baterii lipoli (lithium polymer). Unele chiar au încărcare USB chiar pe placă! Bateriile lipoly au rol special de siguranță, deci nu trebuie scurtcircuitate sau abuzate, sau păstrate la temperaturi extreme și citiți avertismentele de siguranță ale producătorilor înainte de a le lucra cu ele.

Durabilitate și rezistență la intemperii

Este foarte probabil că doriți să creați proiecte Arduino care vor funcționa ceva timp, în timp ce vor îndura repetate mișcări sau expuneri la elemente. Proiectarea durabilității într-un circuit necesită o anumită preconcepție a posibilelor moduri de defectare, adesea descoperite doar prin prototipuri repetate și îmbunătățire a eșecului anterior. Iată câteva sfaturi despre proiectare și construcție pentru durabilitate. Amintiți-vă să citiți și să urmați instrucțiunile producătorului și procedurile de siguranță atunci când utilizați materiale periculoase.

Protejați sursa de alimentare cu energie - Cea mai importantă parte a circuitului dvs. de a vă menține în siguranță este bateria și conexiunile de alimentare. Un scurtcircuit de aici ar putea declanșa un întrerupător de circuit, ar putea deteriora componentele sau ar cauza un incendiu.

Reducerea tensionării - Rețineți că circuitul dvs. are atât conexiuni mecanice, cât și electrice. Uneori ele sunt totuna, la fel ca și porturile USB și de putere ale lui Arduino. Dar, este întotdeauna o idee grozavă de a adăuga conexiuni mecanice la proiectele dvs. pentru a împiedica firele să tragă de îmbinările lor lipite. Aveți posibilitatea să utilizați brățări auto-blocante pentru a asigura firele și majoritatea plăcilor de circuite au găuri de montaj pentru a fi utilizate cu șuruburi sau pentru coasere de mână. Pentru conexiunile care se vor îndoi în mod repetat, utilizați sârmă lițată în loc de miez-solid.

Cunoașteți adezivii dvs. - Utilizarea adezivului corect pentru lucrare este esențială pentru durabilitatea circuitului dvs.! De exemplu, puține lucruri se vor lipi, de fapt, de învelișul din silicon care vine în jurul benzii LED. Doar anumiți adezivi din silicon vor oferi în acest caz o etanșare impermeabilă la intemperii. Permatex 66B este favoritul meu pentru bandajul de silicon al benzii NeoPixel. Orice adeziv trebuie testat pentru a verifica dacă acesta se leagă de ambele suprafețe. Adezivul topit la cald a fost convenabil pentru proiectul de oglindă infinită din această clasă, dar el miroase urât pentru durabilitate. În schimb, recomand foarte mult adezivul pentru ambarcațiuni E6000 sau vărul lui Quick Hold. Acestea necesită mai mult timp să se usuce, dar lipește tot (cu excepția siliconului) și curat uscat și flexibil. Pentru a afla mai multe despre adezivi, consultați Glue class!

Umiditatea - Este important să vă protejați circuitul de apă, care va cauza scurt-circuite. Dacă te gândești să faci un costum electronic, de exemplu, te-ai gândit că transpirația ta poate fi un factor? Unde va fi localizat circuitul dvs. și ce umiditate/condiții de apă vă poate aștepta acolo? În general, vă puteți gândi să folosiți acoperiri pentru a rezolva această problemă. Puteți găsi carcase complet impermeabile pentru proiectele dvs., acoperiți circuitul cu țesături impermeabile și utilizați adezivi impermeabili pentru a etanșa toate deschiderile. Folosesc adesea un lac de unghii clar pentru a proteja componentele goale pe costume/purtători. Vopseaua spray clară este, de asemenea, o opțiune bună, cu toate acestea nu sunt un mare fan al noilor acoperiri hidrofobe precum NeverWet. Acestea au fost concepute pentru lucruri precum circuitul din interiorul telefonului dvs., și nu funcționează bine în exterior datorită fragilității fizice extreme, sensibilității la raze de soare și naturii toxice.

Totuși, apa nu este inamicul unui circuit! Dacă bateria/sursa de alimentare este îndepărtată, cele mai multe circuite nu vor fi deteriorate de apă, atâta timp cât se usucă înainte de a fi conectate (și nu au rămas mult timp să se corodeze). Excepții există pentru componentele în care apa poate intra în interior, cum ar fi microfoanele. Dar, în general, este în regulă să spălați proiectele dvs. Arduino după deconectarea alimentării și scoaterea bateriilor.

Expunerea la fluctuație UV și la temperatură - În timp, multe materiale plastice, adezivi și alte materiale de protecție se descompun atunci când sunt expuse la lumina soarelui. Sistemele de protecție ale firelor pot deveni fragile și pot fi deschise. Acoperirile se pot sparge. Gândiți-vă la temperaturile pe care circuitul dvs. le poate întâlniți. Majoritatea vieților bateriilor sunt scurtate prin expunerea la temperaturi ridicate sau scăzute, de exemplu. Verificați foile de date pentru componentele dvs. pentru a afla limitele lor de temperatură de funcționare.

Acesta este doar vârful iceberg-ului durabilității, oameni buni. Există domenii întregi de studiu dedicate subiectului, în inginerie mecanică, design industrial și știința materialelor, pentru a numi doar câteva. Totuși, pentru majoritatea proiectelor, un pic de E6000 și unele legături zip merg într-adevăr într-un drum lung spre menținerea proiectelor vii.