Indholdsfortegnelse:

Arduino Uno med spindel og pitchmotor: 19 trin
Arduino Uno med spindel og pitchmotor: 19 trin

Video: Arduino Uno med spindel og pitchmotor: 19 trin

Video: Arduino Uno med spindel og pitchmotor: 19 trin
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Juli
Anonim
Image
Image
Ressourcer brugt
Ressourcer brugt

I dag skal vi tale om et meget vigtigt emne inden for mekanik og mekatronik: maskinelementerne. I denne artikel vil vi specifikt behandle spindlerne med nogle interessante funktioner og applikationer. Alligevel vil vi demonstrere nogle måder at beregne bevægelsen forårsaget af en spindel og præsentere en testsamling.

Jeg lavede derfor nedenstående samling, som afslører forskydningen af en spindel på 2 mm og en anden på 8 mm. Disse TR8 spindler, jeg bruger, bruges almindeligvis i små routere og 3D -printere, især på Z -aksen. Husk, at ved at mestre nogle koncepter, som vi vil arbejde med her, vil du være i stand til at designe enhver maskintype.

Trin 1: Brugte ressourcer

  • Trapesformet spindel 8 mm i diameter og 2 mm skridning
  • Trapesformet spindel 8 mm i diameter og 8 mm i stigning
  • 8x2 spindelflange kastanje
  • 8x8 spindelflange kastanje
  • Lejer til spindler med en diameter på 8 mm
  • Lineær cylindrisk guide 10 mm i diameter
  • Cylindriske rullelejer til 10 mm styr
  • Beslag til 10 mm cylindriske guider
  • NEMA 17 Motorer
  • Skaftkoblinger
  • Arduino Uno
  • Driver DRV8825
  • 4x4 matrix tastatur
  • Vis Nokia 5110
  • Diverse plastikdele
  • Bolte og møtrikker
  • Træbase
  • Ekstern 12V strømforsyning

Trin 2: Om spindler - hvad er de?

Om spindler - hvad er de?
Om spindler - hvad er de?

Spindler er elementer i maskiner, såsom skruer. Det vil sige, at de er lige stænger dannet af tråde af kontinuerlige trin. De bruges i mekanismer, der kræver lineær bevægelse og positionering. De kan udøve høje træk- og trykkræfter og overføre drejningsmoment. De tillader bevægelse med automatisk låsning. De kan konstrueres af forskellige materialer, idet de er det mest almindelige aluminium og stål.

Da kinesiske virksomheder fremstiller trapezformede spindler, vil jeg foreslå, at du får denne type produkter i stedet for den velkendte møtrikbolt. Dette skyldes den mere attraktive pris og træk, som jeg anser for frygtelig.

På billedet satte jeg den bedste spindel, der efter min mening er den cirkulerende kuglespindel. Det er normalt lavet af et meget hårdt stål, og kuglerne kredser om det, inde i kastanje. Udover den store præcision fremhæver jeg også holdbarheden, da denne type spindel kan gengive milliarder af bevægelser uden at beskadige mekanismen. En billigere løsning, som er den, vi bruger her, er den trapezformede spindel.

Trin 3: Om spindler - enkelt- og kugletråde

Om spindler - enkelt- og kugletråde
Om spindler - enkelt- og kugletråde

Boldspindlerne, på billedet til venstre, har halvcirkelformede kanaler, hvor kuglerne ruller. De er relativt dyrere og har lav friktion sammenlignet med enkeltskruespindler, hvilket fører til et meget højere udbytte (rullende friktion).

De enkelttrådede spindler på højre side af billedet har normalt trapezprofiler, da denne geometri er mere passende til at påføre kræfter i aksial retning og jævn overførsel af bevægelse. De er relativt billige og har høj friktion sammenlignet med recirkulerende kuglespindler, hvilket fører til et lavt udbytte, dvs. slipfriktion.

Trin 4: Om spindler - applikationer

Om spindler - applikationer
Om spindler - applikationer

Spindler kan påføres enhver mekanisme, hvor lineær bevægelse er påkrævet. De er meget udbredt i industrien inden for maskiner og processer.

Nogle applikationer omfatter:

  • Lastlifte
  • Tryk på
  • Jordbær og drejebænke
  • CNC -udstyr
  • Indpakningsmaskiner
  • 3D -printere
  • Laserskæring og skæreudstyr
  • Industrielle processer
  • Positionerings- og lineære bevægelsessystemer

Trin 5: Om spindler - parametre

Om spindler - parametre
Om spindler - parametre

Der er flere kendetegn ved en spindel, der skal tages i betragtning ved design af en mekanisme. Ud over dens diameter og stigning er det nødvendigt at genkende dens trykstyrke, dets inertimoment (modstand mod ændring i dets rotationstilstand), konstruktivt materiale, den rotationshastighed, den vil blive udsat for, driftsretning (vandret eller lodret), den påførte belastning, blandt andre.

Men baseret på allerede konstruerede mekanismer kan vi intuitere flere af disse parametre.

Lad os genkende nogle fælles gode. Lad os starte med TRIN.

Trin 6: Om spindler - trin (forskydning og hastighed)

Om spindler - trin (forskydning og hastighed)
Om spindler - trin (forskydning og hastighed)

Bestemmer længden, som møtrikken rejser ved hver omdrejning. Dette er normalt i mm / omdrejningstal.

En 2 mm spindel pr. Omdrejning vil medføre en forskydning på 2 mm ved hver omdrejning, spindlen udfører. Det vil påvirke møtrikkens lineære hastighed, da antallet af omdrejninger pr. Tidsenhed øges og følgelig også tilbagelagt afstand med stigningen i omdrejningshastigheden.

Hvis et 2 mm spin pr. Omdrejning drejer ved 60 omdr./min. (Et omdrejning pr. Sekund), bevæger møtrikken sig med 2 mm pr. Sekund.

Trin 7: Montering

montage
montage
montage
montage

I vores samling har jeg to motorer og vores tastatur med displayet, der lignede en lommeregner, fordi jeg lavede et cover til dem i 3D -printeren. På Nokia -skærmen har vi følgende muligheder:

F1: Halvmåne - Fuso går fra den aktuelle position til den position, jeg bestemmer

F2: faldende - drej

F3: Hastighed - Kan jeg ændre pulsbredden

F4: ESC

Trin 8: Montering - materialer

Montering - materialer
Montering - materialer

A - 10 mm lineære guider

B - Trapezformede spindler i trin 2 og 8 mm

C - Borebase

D - Lejer til spindler

E - Guideholdere

F - Kastanjer

G - Lejer

H - Koblinger

I - Motorer

J - Forskellige plastdele (markører, motorbeslag, kiler, tastaturstøtte og display

Trin 9: Montering - Trin 01

Montering - trin 01
Montering - trin 01

Efter boringen af basen (C) samler vi de to motorer (I). For at fastgøre dem bruger vi beslag lavet i 3D -printeren (J). Spænd ikke nogen af skruerne i dette positioneringstrin. Dette giver mulighed for de nødvendige justeringer i justeringstrinnet.

Trin 10: Montering - Trin 02

Montering - Trin 02
Montering - Trin 02

Efter at have boret bunden (C), placeres føringsskinnerne (E) og lejerne (D). Detaljer til plastskiven (J), der bruges til at justere højderne på lejerne.

Trin 11: Montering - Trin 03

Montering - Trin 03
Montering - Trin 03

Vi opretter en markør ved hjælp af en trykt del til at forbinde lejet (G) med møtrikken (F). Vi brugte to markører, en til højre til venstre til venstre. Dets funktion er at angive positionen på en skala, når vi vil bestemme forskydningen forårsaget af spindlen.

Trin 12: Montering - Trin 04

Montering - trin 04
Montering - trin 04
Montering - trin 04
Montering - trin 04

Sæt styret (A) og spindlen (B) i deres respektive leje (D) og understøtning (E), modsat motoren, indsæt derefter styret og spindlen i lejet (G) og kastanje (F) og ved spidsen af spindlen indsætter vi også koblingen (H). Vi tager dem begge, indtil de når deres sidste punkter (modsat støtte og motor).

Spænd skruerne let for at muliggøre en senere justering. Gentag proceduren ved hjælp af den resterende guide og spindel. Med alle komponenterne placeret, udfører vi justeringen af delene og afslutter det mekaniske samlingsstadium.

Trin 13: Montering - Elektronik

Montering - Elektronik
Montering - Elektronik
Montering - Elektronik
Montering - Elektronik
Montering - Elektronik
Montering - Elektronik

Ved hjælp af en trykt plastholder sikrede vi Nokia 5110 -skærmen og et 4x4 matrix -tastatur. I stativets nederste rum ligger Arduino Uno, driveren DRV8825.

Ved hjælp af den tilgængelige boring i bunden fastgør vi samlingen.

Trin 14: Elektrisk plan

Elektrisk ordning
Elektrisk ordning

Ledningsdiagrammet er enkelt. Vi har DRV8825 og de samme to 17 spejle, det vil sige, at det samme trin, vi sender til det ene, går til det andet. Hvad der ændrer sig er, at jeg i en af motorerne har en 8 mm spindel og i den anden en 2 mm spindel. Det er derfor klart, at den første, med 8 mm spindel, går hurtigere. Stadig i diagrammet er displayet og 4x4 -tastaturet, som skal være matrix.

Trin 15: Kildekode

Inkludering af biblioteker og oprettelse af objekter

Vi har her en Lib, som jeg gjorde, hvilket er StepDriver.h. Det er forberedt til 8825, 4988 og også TB6600 -driverne. Jeg opretter i dette trin objektet DRV8825, d1.

// Biblioteca responsável por capturar a tecla que foi pressionada no teclado #include // Biblioteca responsável pelos graficos do display #include // Biblioteca responsável pela comunicacao do display #include // Configuracao de pinos do Display // pin 6 - Serielt ur (SCLK) // pin 5 - Serielle data ud (DIN) // pin 4 - Data/Command select (D/C) // pin 3 - LCD chip select (CS/CE) // pin 2 - LCD reset (RST) Adafruit_PCD8544 display = Adafruit_PCD8544 (6, 5, 4, 3, 2); // Biblioteca de motor de passo #include // Instancia o driver DRV8825 DRV8825 d1;

Konstanter og globale variabler

I denne del af koden behandler jeg matricen, som jeg underviste i en anden videotime (LINK TASTATUR). Alligevel taler jeg om tastaturobjektet, udover afstand og hastighed.

const byte LINHAS = 4; // número de linhas do tecladoconst byte COLUNAS = 4; // número de colunas do teclado // define uma matriz com os símbolos que deseja ser lido do teclado char SIMBOLOS [LINHAS] [COLUNAS] = {{'A', '1', '2', '3'}, { 'B', '4', '5', '6'}, {'C', '7', '8', '9'}, {'D', 'c', '0', 'e '}}; byte PINOS_LINHA [LINHAS] = {A2, A3, A4, A5}; // pinos que indicam as linhas do teclado byte PINOS_COLUNA [COLUNAS] = {0, 1, A0, A1}; // pinos que indicam as colunas do teclado // instancia de Keypad, responsável por capturar a tecla pressionada Tastatur customKeypad = Tastatur (makeKeymap (SIMBOLOS), PINOS_LINHA, PINOS_COLUNA, LINHAS, COLUNAS); // variáveis resposnsáveis por armazenar o valor digitado char customKey; usigneret lang afstand = 0; usigneret lang velocidade = 2000;

Tastaturlæsningsfunktion

I dette trin har vi koden, der refererer til displayet, der fungerer ved stigende og faldende udskrivning.

// Funcao responsavel por ler o valor do usuario pelo teclado -------------------------------------- --- usigneret long lerValor () {// Escreve o submenu que coleta os valores no display display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (27, 2); display.setTextColor (HVID); display.print ("VALOR"); display.setTextColor (SORT); display.fillRect (0, 24, 21, 11, 2); display.setCursor (2, 26); display.setTextColor (HVID); display.print ("CLR"); display.setTextColor (SORT); display.setCursor (23, 26); display.print ("LIMPAR"); display.fillRect (0, 36, 21, 11, 2); display.setCursor (5, 38); display.setTextColor (HVID); display.print ("F4"); display.setTextColor (SORT); display.setCursor (23, 38); display.print ("VOLTAR"); display.setCursor (2, 14); display.display (); String valor = ""; char tecla = falsk;

looping venter på tasten trykkes

Her forklarer vi Loop -programmering, det vil sige, hvor du indtaster værdierne.

// Loop infinito enquanto nao chamar o return while (1) {tecla = customKeypad.getKey (); if (tecla) {switch (tecla) {// Se teclas de 0 a 9 forem pressionadas case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': valor += tecla; display.print (tecla); display.display (); pause; // Se tecla CLR foi pressionada case 'c': // Limpa a string valor valor = ""; // Værd at vise display.fillRect (2, 14, 84, 8, 0); display.setCursor (2, 14); display.display (); pause; // Se tecla ENT foi pressionada case 'e': // Retorna o valor return valor.toInt (); pause; // Se tecla F4 (ESC) foi pressionada case 'D': return -1; standard: pause; }} // Limpa o char tecla tecla = falsk; }}

Motordrevsfunktion

Funktionen "flytte" arbejdes med i dette trin. Jeg får antallet af impulser og retningen, og så laver jeg et "for".

// Funcao responsavel por mover o motor -------------------------------------- void mover (unsigned lange pulsos, bool direcao) {for (usigneret lang i = 0; i <pulsos; i ++) {d1.motorMove (direcao); }}

Opsætning ()

Nu flytter jeg skærmen og driverkonfigurationen, og jeg lægger endda fastgørelsen inde i kildekoden for at gøre det lettere. Jeg initialiserer visse værdier og beskæftiger mig med de metoder, der genererer indstillingerne.

ugyldig opsætning () {// Configuracao do display ---------------------------------------- -------- display.begin (); display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (SORT); // Konfiguration af driver DRV8825 ----------------------------------------- // pin GND - Aktiver (ENA) // pin 13 - M0 // pin 12 - M1 // pin 11 - M2 // pin 10 - Reset (RST) // pin 9 - Sleep (SLP) // pin 8 - Step (STP) // pin 7 - Retning (DIR) d1.pinConfig (99, 13, 12, 11, 10, 9, 8, 7); d1.sleep (LOW); d1.reset (); d1.stepPerMm (100); d1.stepPerRound (200); d1.stepConfig (1); d1.motionConfig (50, velocidade, 5000); }

loop () - 1. del - Tegningsmenu

void loop () {// Escreve o Menu do Programa no display ----------------------------------- display.clearDisplay (); display.fillRect (0, 0, 15, 11, 2); display.setCursor (2, 2); display.setTextColor (HVID); display.print ("F1"); display.setTextColor (SORT); display.setCursor (17, 2); display.print ("CRESCENTE"); display.fillRect (0, 12, 15, 11, 2); display.setCursor (2, 14); display.setTextColor (HVID); display.print ("F2"); display.setTextColor (SORT); display.setCursor (17, 14); display.print ("DECRESCENTE"); display.fillRect (0, 24, 15, 11, 2); display.setCursor (2, 26); display.setTextColor (HVID); display.print ("F3"); display.setTextColor (SORT); display.setCursor (17, 26); display.print ("VELOCIDADE");

loop () - Del 2 - Tegningsmenu

display.fillRect (0, 36, 15, 11, 2); display.setCursor (2, 38); display.setTextColor (HVID); display.print ("F4"); display.setTextColor (SORT); display.setCursor (17, 38); display.print ("ESC"); display.display (); bool esc = falsk;

loop () - Del 3 - Løb

// Loop enquanto a tecla F4 (ESC) nao for pressionada while (! Esc) {// captura a tecla pressionada do teclado customKey = customKeypad.getKey (); // caso alguma tecla foi pressionada if (customKey) {// Trata a tecla apertada switch (customKey) {// Se tecla F1 foi pressionada case 'A': distancia = lerValor (); // Se tecla ESC foi pressionada if (distancia == -1) {esc = true; } andet {// Skær til "Movendo" uden visning display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (21, 2); display.setTextColor (HVID); display.print ("MOVENDO"); display.setTextColor (SORT); display.setCursor (2, 14); display.print (distancia); display.print ("Passos"); display.display ();

loop () - Del 4 - Løb

// Flyt til motorflytter (distancia, LOW); // Volta ao menu esc = true; } pause; // Se tecla F2 foi pressionada case 'B': distancia = lerValor (); // Se tecla ESC foi pressionada if (distancia == -1) {esc = true; } andet {// Skær til "Movendo" uden visning display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (21, 2); display.setTextColor (HVID); display.print ("MOVENDO"); display.setTextColor (SORT); display.setCursor (2, 14); display.print (distancia); display.print ("Passos"); display.display ();

loop () - Del 5 - Løb

// Flyt til motorflytter (distancia, HIGH); // Volta ao menu esc = true; } pause; // Se tecla F3 foi pressionada case 'C': velocidade = lerValor (); hvis (velocidade == -1) {esc = true; } andet {// Skær en "Velocidade" uden visning display.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (12, 2); display.setTextColor (HVID); display.print ("VELOCIDADE"); display.setTextColor (SORT); display.setCursor (2, 14); display.print (velocidade); display.print (tegn (229)); display.print ("s");

loop () - Del 6 - Løb

display.fillRect (31, 24, 21, 11, 2); display.setCursor (33, 26); display.setTextColor (HVID); display.println ("OK!"); display.setTextColor (SORT); display.display (); // Configura nova velocidade ao motor d1.motionConfig (50, velocidade, 5000); forsinkelse (2000); // Volta ao menu esc = true; } pause; // Se tecla F4 (ESC) foi pressionada case 'D': // Se tecla CLR foi pressionada case 'c': // Se tecla ENT foi pressionada case 'e': // Volta ao menu esc = true; standard: pause; }} // Limpa o char customKey customKey = false; }}

Trin 16: Om spindler - maskinkonfigurationer

Om spindler - maskinkonfigurationer
Om spindler - maskinkonfigurationer

I CNC -maskiner som f.eks. 3D -printere og routere skal programmet, der er ansvarlig for positioneringskontrol, vide, hvordan bevægelserne vil forekomme som en funktion af antallet af pulser, der gives til trinmotoren.

Hvis trinmotordriveren tillader anvendelse af mikrotrin, skal denne konfiguration tages i betragtning ved beregningen af den producerede forskydning.

For eksempel, hvis en 200-trins motor pr. Omdrejning er forbundet til en driver, der er indstillet til 1/16, vil der kræves 16 x 200 impulser for en enkelt omdrejning af spindlen, det vil sige 3200 pulser for hver omdrejning. Hvis denne spindel har en stigning på 2 mm pr. Omdrejning, vil det kræve 3200 impulser i driveren for at møtrikken kan bevæge sig 2 mm.

Faktisk bruger softwarecontrollere ofte en grund til at angive dette forhold, "antallet af pulser pr. Millimeter" eller "trin / mm".

Trin 17: Marlin

Marlin
Marlin

I Marlin ser vi for eksempel i afsnittet @section motion:

/ **

* Standardakse trin pr. Enhed (trin / mm)

* Tilsidesæt med M92

* X, Y, Z, E0 [, E1 [, E2 [, E3 [, E4]

* /

#define DEFAULT_AXIS_STEPS_PER_UNIT {80, 80, 3200, 100}

I dette eksempel kan vi konkludere, at X- og Y -akserne har en nøjagtighed på 80 pulser for at bevæge sig 1 mm, mens Z har brug for 3200 pulser, og ekstruderen E0 har brug for 100.

Trin 18: GRBL

GRBL
GRBL

Nedenfor ser vi GRBL -konfigurationskommandoer. Med $ 100-kommandoen kan vi justere antallet af impulser, der kræves for at forårsage en en-millimeter forskydning på X-aksen.

I eksemplet herunder kan vi se, at den aktuelle værdi er 250 impulser pr. Mm.

Y- og Z -akserne kan indstilles henholdsvis $ 101 og $ 102.

Anbefalede: