Satura rādītājs:

Arduino šūpulītis: 19 soļi (ar attēliem)
Arduino šūpulītis: 19 soļi (ar attēliem)

Video: Arduino šūpulītis: 19 soļi (ar attēliem)

Video: Arduino šūpulītis: 19 soļi (ar attēliem)
Video: #19 Ведущая катушка Modbus Чтение/Запись | Внешний ПЛК Arduino 2024, Novembris
Anonim
Image
Image

Atvainojiet, es nevarēju pretoties trakajai intensīvajai mūzikai, ko ieteica mana video rediģēšanas lieta.

Nesen man piedzima pirmais bērns, un man jau bija koka šūpulis, ko tēvocis (kurš ir lielisks kokapstrādes darbinieks) izgatavoja manam brāļadēlam. Mans brāļadēls to jau sen bija pāraugis, tāpēc es labprāt to paņēmu un izvairījos tērēt VISU NAUDU jebkādam šūpulim/grozam, ko mammu emuāru autori lika manai sievai noģībt. Šūpulis ir diezgan vienkāršs dizains, būtībā divi statņi ar skrūvēm caur tām, kas atbalsta šūpuļa korpusu. Ir noņemama tapas, lai to nofiksētu vietā.

Dažu nedēļu laikā mēs atklājām, ka mēs bieži varam mazināt vieglu satraukumu, nedaudz šūpojot šūpuli, līdz mūsu zēns apmetās. Naktī, kad mēs to uzzinājām, es vēlu vakarā pavadīju dažas 10 minūšu garas rokas, sasniedzot roku zem segas, miegaini šūpojot viņu, priecājoties, ka esmu atradis veidu, kā viņu nomierināt, neizkāpjot no gultas. no rīta es piestiprināju auklu un nedaudz karabīnes, lai es varētu šūpot šūpuli, neizstiepjot roku.

No rīta pēc tam es sāku prāta vētru, lai robots vienkārši iešūpotu šo kazlēnu man. Ienāc Arduino…

Piegādes

Labi, tas bija mans pirmais Arduino projekts jebkad, tāpēc es eksperimentēju un izmēģināju un kļūdījos, un esmu pārliecināts, ka manā dizainā ir uzlabojumu iespējas, bet šeit ir mans detaļu saraksts: Arduino Uno (13 ASV dolāri), lai visu kontrolētu komplekts (10 USD) vadu savienošanai

Stepper motors (14 ASV dolāri) Šis ir visjautrākais gabals, jo tas ir tas, kas veic visu darbu. Es sāku ar nedaudz zemāku griezes momenta piedziņu, bet pēc tam ieguvu šo un tas darbojas diezgan labi. Jūtieties brīvi, lai iegūtu vēl jaudīgāku. Pakāpju motoru vadītāji ($ 10-30) Tas atrodas starp Arduino un motoru. Šis konkrētais acīmredzot spēj vadīt motoru klusāk nekā daži citi, tāpēc es to darīju, jo motors guļam dažu pēdu attālumā no manas (un mana dēla) galvas. Sākotnēji es tikai nopirku vienu TMC2209 draiveri par ~ 10 ASV dolāriem, bet galu galā nopirku 4 iepakojumu, jo sākumā man bija zināmas grūtības un vēlējos pārliecināties, vai kādā brīdī neesmu cepusi dēli. Es galu galā faktiski nogalināju 3 dēļus, kas mani noveda pie nākamā priekšmeta … Kondensatori! (10 ASV dolāri) Jums patiešām ir nepieciešams tikai 1 47 uF 50 V kondensators, tāpēc šī 240 kārba bija pārāk liela. 36 V barošanas avots (17 ASV dolāri) Es sākotnēji nopirku sliktu 12 V barošanas avotu, pēc tam uzzināju, ka tas ir visu manu problēmu avots un dabūju tādu, kas bija tuvāk maksimālajam spriegumam, ko mans pakāpju motors varēja apstrādāt. Ja izmantojat citu motoru vai pakāpienu vadītāju, pārliecinieties, ka tas spēj izturēt spriegumu (V) un barošanas avota strāvas stiprums (A) ir vismaz tik augsts kā motora maksimālais ampērs. 8 ASV dolāri) Šim nolūkam tiek pievienots barošanas avots. Jums vajadzēs pielodēt tos pie dažiem vadiem, lai tos ievietotu maizes dēļā. Liels džemperu komplekts (9 ASV dolāri), lai es varētu novietot vadības ierīces visur, kur es vēlos.

Pogas (8 USD) ieslēgšanai/izslēgšanai utt

Mikrofona pastiprinātājs (11 ASV dolāri) Ak, jūs visi nezinājāt, ka arī šī skaņa ir aktivizēta?

Es izmantoju dažus mazus skriemeļu riteņus (8 USD), taču varētu būt labākas alternatīvas. Vairāk par to vēlāk. Jums noteikti būs nepieciešams arī lodāmurs un viss, ko vēlaties izmantot motora uzstādīšanai. Es personīgi no četriem saskrūvētiem koka gabaliem izgatavoju rupju kasti un pēc tam pieskrūvēju tos pie cita koka gabala, kas ir aptuveni manas šūpuļa kājas platums. Pagaidām man to vienkārši piestiprina, jo nezinu, vai vēlos pārkāpt tēvoča šūpuli.

1. darbība. Iepazīstieties ar sava pakāpiena vadītāja pinout

Pievienojiet Arduino 5V/GND savam maizes dēlim
Pievienojiet Arduino 5V/GND savam maizes dēlim

Manā modelēšanas programmā nebija šīs precīzās draivera plates, tāpēc jums būs jāatsaucas uz šo attēlu. Esmu sakārtojis visu tādā pašā orientācijā kā šis attēls.

2. darbība: pievienojiet Arduino 5V/GND savam maizes dēlim

Pievienojiet vadu no Arduino 5V uz "+" sliedi maizes dēļa vienā pusē

(ignorēt

3. darbība: pievienojiet +/- sliedes VIO/GND

Pievienojiet +/- sliedes VIO/GND
Pievienojiet +/- sliedes VIO/GND

Pievienojiet vadu no sliedes "-" uz GND, kas atrodas pakāpiena vadītāja paneļa apakšējā kreisajā stūrī. Pievienojiet vadu no "+" sliedes līdz VIO

4. darbība: pievienojiet DIR/STEP Arduino digitālajām tapām

Pievienojiet DIR/STEP Arduino digitālajām tapām
Pievienojiet DIR/STEP Arduino digitālajām tapām

Savienojiet DIR un STEP tapas no pakāpiena vadītāja paneļa ar divām Arduino digitālajām tapām. Es izmantoju attiecīgi 2 un 3 tapas, taču tam nav nozīmes, kamēr vēlāk savā kodā iestatīsit tapas.

5. darbība: dodieties tālāk un pievienojiet šo kondensatoru…

Iesim uz priekšu un pievienosim šo kondensatoru…
Iesim uz priekšu un pievienosim šo kondensatoru…

Es sadedzināju 2 pakāpju draivera dēļus, jo man nebija kondensatora, tāpēc ļaujiet iet uz priekšu un pievienojiet 47uF 50V kondensatoru VM/GND tapām vadītāja panelī. Pārliecinieties, vai "-" tapa uz kondensatora atrodas maizes dēļa GND tapā (atbilstošajā kondensatora pusē būs "-")

6. solis: dodieties uz priekšu un pievienojiet šo GND

Un ejiet uz priekšu un pievienojiet šo GND
Un ejiet uz priekšu un pievienojiet šo GND

GND, kuram tikko pievienojāt kondensatoru, turpiniet un pievienojiet to tai pašai sliedei "-" kā otrai GND.

7. darbība: pievienojiet motoru vadītājam

Pievienojiet motoru vadītājam
Pievienojiet motoru vadītājam

Kurš tapa tiks novietots, būs atkarīgs no jūsu nopirktā motora, bet manis uzskaitītajā ir pievienota Amazon savienojuma shēma.

Manam motoram -

Savienojiet zaļo un melno ar M2B un M2A

Sarkanā un zilā savienošana ar M1A un M1B Piezīme. Ja kāda iemesla dēļ jūsu motoram nav diagrammas, varat viegli saprast, kuri vadi veido ķēdi, ja jums ir multimetrs. Iestatiet multimetru uz zemu pastiprinātāja iestatījumu un atvienojiet motoru. Pieskarieties vienam no multimetra vadiem pie viena no motora vadiem un pēc tam izmēģiniet katru citu vadu ar otru vadu. Ja jūs saņemat pretestības rādījumu, tad šie divi vadi veido 1 ķēdi, bet pārējie divi veido otru.

8. darbība. Savienojiet EN, MS1 un MS2 ar "-"

Savienojiet EN, MS1 un MS2 ar
Savienojiet EN, MS1 un MS2 ar

Es neesmu pilnīgi pārliecināts, ka tas ir nepieciešams, bet es uzskatu, ka tas nosaka motoru uz mazāku mikrosākumu iestatījumu TMC2209 draiverī. Jūs varat tos savienot ar sliedi "-", kas ir vistuvāk viņiem, jo vēlāk mēs to savienosim ar otru pusi.

9. solis: lodējiet sieviešu strāvas savienotāju diviem vadiem

Lodējiet sieviešu strāvas savienotāju diviem vadiem
Lodējiet sieviešu strāvas savienotāju diviem vadiem

Es neesmu pasaules labākais lodētājs, tāpēc jums tas būs jāmeklē citur, bet es to darīju tāpat. Es saliecu vadu galus tā, lai tie gulētu pret savienotāja vadiem, un pēc tam pielodēju vadu pie vada. Man nebija nekādu vadu termiski sarūkošu materiālu, tāpēc es tos vienkārši satinu ar elektrisko lenti.

10. darbība: pievienojiet tikko lodēto sieviešu savienotāju

Pievienojiet tikko lodēto sieviešu savienotāju
Pievienojiet tikko lodēto sieviešu savienotāju

Lūdzu, vēl nepievienojiet strāvas avotu. Sarkanais vads līdz "+", melns līdz "-"

11. darbība. Savienojiet tos ar VM/GND

Savienojiet tos ar VM/GND
Savienojiet tos ar VM/GND

Savienojiet šīs "+" un "-" sliedes ar VM un blakus esošo GND. Tie, uz kuriem ir kondensators.

12. solis: apbrīnojiet savu roku darbu

Apbrīnojiet savu roku darbu
Apbrīnojiet savu roku darbu

Labi, tagad motors un vadītājs ir pilnībā iestatīti! No šī brīža mēs tikai veiksim kontroli. Starp citu, turpinot:

  • Ja kāda iemesla dēļ esat atvienojis draiveri, nemēģiniet to savienot, kamēr jūsu 36V barošana ir pievienota. Es tā nogalināju savu trešo draivera paneli.
  • Pirms Arduino strāvas pievienošanas pievienojiet 36 V strāvu. Es personīgi neesmu cepusi Arduino, bet pa ceļam es redzēju daudzus brīdinājumus par to.

13. darbība: pēc izvēles - pārbaudiet savu VREF

TMC2209 ir potenciometrs, kas kontrolē motora strāvu. Ja jums ir tāds pats draiveris kā man, par to varat izlasīt šeit. Ja vēlaties pielāgot iestatījumu:

  • Atvienojiet visu strāvu un atvienojiet motora vadus no vadītāja.
  • Atvienojiet vadu no draivera EN (iespējošanas) tapas. Šī ir tapa augšējā kreisajā stūrī.
  • Pievienojiet motora barošanas avotu (36V)
  • Izmantojot 20 V multimetru, pieskarieties vienam vadam pie GND avota (es izmantoju vadu, kas savienots ar manu sliedi), bet otru pieskarieties VREF tapai. Lūdzu, nepieskarieties vadam nekam citam, ja to darāt, VARAT saīsināt vadītāju.
  • Izmantojiet nelielu skrūvgriezi, lai maigi noregulētu potenciometra skrūvi. Manai tāfelei pretēji pulksteņrādītāja virzienam = lielāka jauda. Mans VREF personīgi nolasa ~ 0.6V.

14. solis: pogas

Pogas!
Pogas!

Tālāk pievienojiet pogas tāpat. Viņiem nav vajadzīga vara.

  • Savienojiet pogas maizes dēļa sliedi "-" ar kādu no Arduino GND. Ja vēlaties, varat arī vienkārši atvienot to no maizes dēļa sliedes "-".
  • Pievienojiet vienu katras pogas tapu pie sliedes "-"
  • Pievienojiet vēl vienu katras pogas tapu Arduino digitālajai tapai.

Es izmantoju 4 pogas: Motors ieslēgts/izslēgts

Motors turpina

Mikrofons ieslēgts

Mikrofons izslēgts

Vairāk par šiem jautājumiem, kad mēs nonāksim pie koda, bet es izmantoju atšķirīgas mikrofona pogas tikai tāpēc, ka man nebija gaismas diodes, kas ļautu man zināt, vai mikrofons ir ieslēgts vai izslēgts, tāpēc atšķirīgas ieslēgšanas/izslēgšanas pogas padarīja to nepārprotamu.

15. darbība: pievienojiet mikrofona paneli

Pievienojiet mikrofona paneli
Pievienojiet mikrofona paneli

Šis ir vienkāršs, un Adafruit šeit ir labas instrukcijas (un lodēšanas pamati!).

  • Pievienojiet "-" GND
  • Savienojiet GND mikrofona panelī ar "-" (jūs varētu tieši savienot GND ar GND un izlaist iepriekšējo darbību)
  • Pievienojiet VCC Arduino 3.3V strāvai. Tas ir svarīgi, jo šis barošanas avots ir mazāk “trokšņains” nekā 5V, tādējādi uzlabojot mikrofona rādījumus
  • Savienojiet OUT ar ANALOG IN tapu Arduino. Es izmantoju A0.

16. solis: tam vajadzētu būt galīgajam rezultātam

Tam vajadzētu būt gala rezultātam!
Tam vajadzētu būt gala rezultātam!
Tam vajadzētu būt gala rezultātam!
Tam vajadzētu būt gala rezultātam!

Tagad visam vajadzētu būt gatavam. Šeit ir galīgās diagrammas attēls un mans vadu sajaukums patiesībā. Apskatīsim kādu kodu!

17. solis: kods

Labi, apskatīsim kodu! Šis nav mans tīrākais darbs, bet tas paveic darbu. Esmu pievienojis komentārus, lai šeit visu izskaidrotu, bet esiet ar mani. Visam tam es izmantoju Arduino IDE (pieejams bez maksas operētājsistēmā Windows un Mac). Mistors ir šāds: iestatiet motora ātrumu un pagrieziena attālumu.

Iestatiet veicamo akmeņu (šūpoļu) skaitu.

Pagrieziet iestatīto attālumu par 1 šūpošanos. Šūpojiet noteiktu skaitu reižu.

Starp to visu vērojiet pogu nospiešanu vai klausieties mikrofonu, lai redzētu, vai motoram jāieslēdzas. Jums būs jāpielāgo ātruma, attāluma un mikrofona jutības vērtības. Motora ātrums ietekmēs skaļumu un griezes momentu. Jo ātrāk motors darbojas, jo skaļāk un mazāk griezes momenta. Manējais pašlaik ir gandrīz kluss, tāpēc ir iespējams to palaist, neradot daudz skaņas.

#include // "standarta" soļu motoru bibliotēka

//#define DEBUG 1 // atceliet šo komentāru, ja vēlaties pielāgot mikrofona līmeni // Pogas iestatīšana - tās atbilst vietām, kur digitālās tapas, kuras pievienojāt pogām const int motorEnablePin = 10; const int turpinātPin = 11; const int micDisablePin = 12; const int micEnablePin = 13; // Mikrofona iestatīšana - A0 šeit ir mikrofona analogs. Parauga logs ir milis konstantos intPin = A0; const int sampleWindow = 1000; neparakstīts int paraugs; bool micEnabled = nepatiess; dubultā mikrofona jutība = 0,53; // jums, iespējams, tas būs jāmaina // Man aptuveni.5 bija pietiekami labs, lai neuzsāktu mazo dzirkstošo // bet iedegsies par maziem saucieniem int stepsPerRevolution = 3200; // mainiet to, lai tas atbilstu jūsu motora soļu skaitam vienā apgriezienā // Mans motors ir 200 soļi/apgrieziens // Bet es iestatīju draiveri uz 1/16 mikrosoli // tātad 200*16 = 3200 … godīgi sakot, nav ne jausmas, vai tas ir pareizais veids // to darīt Stepper myStepper (stepsPerRevolution, 2, 3); // 2 & 3 ir DIR & STEP tapas int stepCount = 0; int motorSpeed = 95; // jums tas būs jāpielāgo atbilstoši savam šūpulim un mazuļa svaram int numSteps = 90; // Attālums, kurā motors pārvietosies. // Jums tas būs jāpielāgo, pamatojoties uz motoram pievienotā riteņa rādiusu. Tas un ātrums, iespējams, būs izmēģinājumi un kļūdas. // Piezīme - lielāks ātrums pakāpju motoriem = mazāks efektīvais griezes moments // Ja jums nav pietiekami daudz griezes momenta, jūsu motors izlaidīs soļus (nekustēsies) int oldmotorButtonValue = HIGH; bool enabled = false; // motors iespējots? int loopStartValue = 0; int maxRocks = 100; // cik reizes vēlaties, lai tas šūpojas, pirms izslēdzat int rockCount = 0; void setup () {#ifdef DEBUG Serial.begin (9600); // atkļūdošanas reģistrēšanai #endif pinMode (motorEnablePin, INPUT_PULLUP); // Šis ir iestatījums, lai pogas darbotos bez strāvas pinMode (turpinietPin, INPUT_PULLUP); pinMode (micEnablePin, INPUT_PULLUP); pinMode (micDisablePin, INPUT_PULLUP); myStepper.setSpeed (motorSpeed); // iestata motora apgriezienu skaitu uz iepriekš norādīto} void loop () {int motorButtonValue = digitalRead (motorEnablePin); // digitalRead tikai nolasa pogu vērtības int turpinaVērtība = digitalRead (turpinātPin); // Tas nosaka motora pogas nospiešanu un neļauj tam darboties vairāk nekā vienu reizi uz klikšķi, ja (motorButtonValue == HIGH && oldmotorButtonValue == LOW) {enabled =! Enabled; } micCheck (); // Ja motors ir izslēgts un mikrofons ir ieslēgts, klausieties, vai bērns raud, ja (! Iespējots && micEnabled) {ja (getMicReading ()> = micSensitivity) iespējots = true; } ja (iespējots) {stepsPerRevolution = stepsPerRevolution * -1; // apgriezt virzienu // Ar manu iestatījumu ir efektīvāk apgriezties // pirmajā šūpolē. Varat to ievietot aiz cilpas // ja tas tā nav jūsu gadījumā // griešanās motors iepriekš norādītais attālums (int i = loopStartValue; i <numSteps; i ++) {// pārbaudiet, vai nav izslēgta int tempmotorButtonValue = digitalRead (motorEnablePin); if (tempmotorButtonValue! = motorButtonValue) {rockCount = 0; // Šīs nākamās divas rindas "ietaupa" motora pozīciju, lai nākamreiz, kad to ieslēgsit // tā turpinātu ceļot tā, it kā jūs to nebūtu izslēdzis. Tas novērš metienu // jūsu pārvietošanās attālumu loopStartValue = i; // saglabāt pozīciju stepsPerRevolution = stepsPerRevolution * -1; // saglabāt virzienu oldmotorButtonValue = tempmotorButtonValue; pārtraukums; } checkContinue (turpinātVērtība); // pārbaudiet, vai poga Turpināt tika nospiesta micCheck (); myStepper.step (stepsPerRevolution / 50); // cik soļu jāveic katrai cilpai, // jums, iespējams, būs jāpielāgo tas pozīcija if (i == numSteps - 1) {loopStartValue = 0; }}} kavēšanās (100); // pirms nākamā roka pauzes pauzējiet 100 milis. Jums tas būs jāpielāgo. ja (iespējots) checkComplete (); oldmotorButtonValue = motorButtonValue; // tas tiek izmantots, lai novērstu dubultklikšķus} // Šis kods ir tieši no Adafruit. double getMicReading () {unsigned long startMillis = millis (); neparakstīts int peakToPeak = 0; // no maksimuma līdz maksimumam līmenis neparakstīts int signalMax = 0; neparakstīts int signalMin = 1024; while (millis () - startMillis <sampleWindow) {micCheck (); if (digitalRead (motorEnablePin) == LOW) iespējots = true; paraugs = analogRead (micPin); if (parauga signālsMax) {signalMax = paraugs; // saglabājiet tikai maksimālos līmeņus} else if (paraugs = maxRocks) {iespējots = nepatiess; rockCount = 0; // atgriezties pie vidējā stāvokļa

for (int i = loopStartValue; i <numSteps/2; i ++) {

myStepper.step (stepsPerRevolution * -1 / 50); // 1/100 revolūcijas solis:

}

} }

18. darbība: montāža un riteņa iestatīšana

Montāža un riteņu uzstādīšana
Montāža un riteņu uzstādīšana

Tas man joprojām ir WIP, jo, kā jau teicu, es neesmu pārliecināts, ka vēl gribu ielikt skrūves savā šūpulī. Veids, kā es uztaisīju raktuves, ir šāds:

  • Ielieciet skavu, lai tā darbotos kā roka, kas atkāpjas no šūpuļa, lai mans ritenis varētu vilkt taisni
  • Pieskrūvēja neapstrādātu kārbu, lai ievietotu motoru, un pieskrūvēja to pie pamatnes plāksnes, kuru es piestiprināju pie šūpuļa kājas
  • Izgatavoja pielāgotu koka skriemeļu riteni ar caurumu, lai tas ietilptu mazajā pakāpiena skriemeļa ritenī. Es padarīju centra caurumu ļoti ciešu un vienkārši sabojāju pakāpienu skriemeļa ritenī. Es izurbju caurumu caur riteni līdz vidum, lai varētu piekļūt metāla skriemeļa riteņa skrūvei, lai to pievilktu pie pakāpiena motora.
  • Noskrēja virkni no šūpuļa "rokas" līdz ritenim. Es nostiprināju auklu, izlaižot to caur urbumu, ko biju izurbusi, un vienkārši piestiprināju to vietā.

Labāks risinājums 3. solim ir vispirms iegādāties lielāka diametra skriemeļa riteni. Manējais ir nedaudz zem 3 collu diametra rievas iekšpusē un patiešām labi darbojas manā šūpulī.

Mana pirmā versija riteņa vietā izmantoja roku. Tas nedarbojās gandrīz tikpat labi, jo spēks netika pielietots konsekventā virzienā, un tas bija arī ļoti jutīgs pret izmešanu, ja sākuma pozīcija nebija pareiza. Riteņa izmantošana atrisina šīs problēmas. Es arī izklaidējos, izmantojot nelielu skriemeļu sistēmu, bet galu galā tas nebija vajadzīgs, jo mans ritenis man deva pietiekami lielu griezes momentu.

19. darbība: galīgā iestatīšana

Galīgā iestatīšana
Galīgā iestatīšana

Uzstādiet mikrofonu tuvu savam bērnam, bet vietā, kur viņi nesaskaras ar vadiem. Ievietojiet pogas, kur vien vēlaties, ja vien jums ir pietiekami daudz vadu, lai palaistu galapunktu. Jūs varat arī vienkārši nomainīt pogas ar wifi iestatīšanu arduino, bet es vēl neesmu tik dziļi. Veiksmi!

Ieteicams: