Satura rādītājs:
- 1. darbība. Izmantotie resursi
- 2. darbība. Par vārpstām - kas tās ir?
- 3. solis: Par vārpstām - vienas un lodīšu pavedieni
- 4. solis: Par vārpstām - lietojumprogrammas
- 5. solis: Par vārpstām - parametri
- 6. darbība. Par vārpstām - solis (pārvietojums un ātrums)
- 7. solis: montāža
- 8. solis: montāža - materiāli
- 9. darbība: montāža - 01. darbība
- 10. darbība: montāža - 02. darbība
- 11. darbība: montāža - 03. darbība
- 12. darbība: montāža - 04. darbība
- 13. solis: montāža - elektronika
- 14. solis: elektriskā shēma
- 15. darbība: avota kods
- 16. darbība. Par vārpstām - mašīnas konfigurācija
- 17. solis: Marlin
- 18. darbība: GRBL
- 19. darbība. Skatiet vairāk manu darbu:
Video: Arduino Uno ar vārpstu un piķa motoru: 19 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Šodien mēs runāsim par ļoti svarīgu priekšmetu mehānikā un mehatronikā: mašīnu elementi. Šajā rakstā mēs īpaši pievērsīsimies vārpstām, piedāvājot dažas interesantas funkcijas un lietojumus. Tomēr mēs parādīsim dažus veidus, kā aprēķināt vārpstas radīto kustību un parādīt testa komplektu.
Tāpēc es veicu montāžu zemāk, kas atklāj 2 mm un 8 mm vārpstas virzienu. Šīs manis izmantotās TR8 vārpstas parasti tiek izmantotas mazos maršrutētājos un 3D printeros, it īpaši uz Z ass. Atceroties, ka, apgūstot dažus jēdzienus, pie kuriem mēs šeit strādāsim, jūs varēsit izstrādāt jebkura veida mašīnas.
1. darbība. Izmantotie resursi
- Trapecveida vārpsta 8 mm diametrā un 2 mm solī
- Trapecveida vārpsta 8 mm diametrā un 8 mm solī
- 8x2 vārpstas atloku kastanis
- 8x8 vārpstas atloku kastanis
- Gultņi 8 mm diametra vārpstām
- Lineāra cilindriska vadotne 10 mm diametrā
- Cilindriskie rullīšu gultņi 10 mm vadotnēm
- Kronšteini 10 mm cilindriskām vadotnēm
- NEMA 17 Motors
- Vārpstas sakabes
- Arduino Uno
- Vadītājs DRV8825
- 4x4 matricas tastatūra
- Displejs Nokia 5110
- Dažādas plastmasas detaļas
- Skrūves un uzgriežņi
- Koka pamatne
- Ārējais 12V barošanas avots
2. darbība. Par vārpstām - kas tās ir?
Vārpstas ir mašīnu elementi, piemēram, skrūves. Tas ir, tie ir taisni stieņi, ko veido nepārtrauktu pakāpienu pavedieni. Tos izmanto mehānismos, kuriem nepieciešama lineāra kustība un pozicionēšana. Tie var izdarīt lielu stiepes un spiedes spēku un pārnest griezes momentu. Tie ļauj kustēties ar automātisku bloķēšanu. Tos var izgatavot no dažādiem materiāliem, kas ir visizplatītākais alumīnijs un tērauds.
Tā kā Ķīnas uzņēmumi ražo trapecveida vārpstas, es ieteiktu jums iegūt šāda veida izstrādājumus, nevis labi zināmo uzgriežņu skrūvi. Tas ir saistīts ar pievilcīgāku cenu un vilcienu, kas, manuprāt, ir pretīgs.
Fotogrāfijā es ievietoju labāko vārpstu, kurai, manuprāt, ir recirkulācijas lodīšu vārpsta. Tas parasti ir izgatavots no ļoti cieta tērauda, un bumbiņas griežas ap to, kastaņa iekšpusē. Papildus lieliskajai precizitātei es uzsveru arī izturību, jo šāda veida vārpsta var reproducēt miljardiem kustību, nesabojājot mehānismu. Lētāka iespēja, kuru mēs šeit izmantojam, ir trapecveida vārpsta.
3. solis: Par vārpstām - vienas un lodīšu pavedieni
Lodīšu vārpstām, fotoattēlā pa kreisi, ir pusapaļi kanāli, kur bumbiņas ripo. Tie ir salīdzinoši dārgāki, un tiem ir zema berze, salīdzinot ar vienas skrūves vārpstām, tādējādi iegūstot daudz lielāku ražu (rites berze).
Vienvītņotajām vārpstām attēla labajā pusē parasti ir trapecveida profili, jo šī ģeometrija ir piemērotāka spēku pielietošanai aksiālā virzienā un vienmērīgai kustībai. Tie ir salīdzinoši lēti un tiem ir augsta berze, salīdzinot ar recirkulējošiem lodīšu vārpstām, kas noved pie zemas ražas, ti, slīdēšanas berzes.
4. solis: Par vārpstām - lietojumprogrammas
Vārpstas var pielietot jebkuram mehānismam, kur nepieciešama lineāra kustība. Tos plaši izmanto rūpniecībā mašīnās un procesos.
Dažas lietojumprogrammas ietver:
- Kravas pacēlāji
- Preses
- Zemenes un virpas
- CNC aprīkojums
- Iesaiņošanas mašīnas
- 3D printeri
- Lāzera griešanas un griešanas iekārtas
- Rūpnieciskie procesi
- Pozicionēšanas un lineārās kustības sistēmas
5. solis: Par vārpstām - parametri
Veidojot mehānismu, jāņem vērā vairākas vārpstas īpašības. Papildus diametram un slīpumam ir jāatzīst tā spiedes stiprība, inerces moments (izturība pret rotācijas stāvokļa izmaiņām), konstruktīvs materiāls, rotācijas ātrums, kuram tas tiks pakļauts, darbības virziens (horizontāli) vai vertikāli), cita starpā, pielietotā slodze.
Bet, pamatojoties uz jau izveidotiem mehānismiem, mēs varam intuitēt vairākus no šiem parametriem.
Atzīsim kādu kopīgu labumu. Sāksim ar STEP.
6. darbība. Par vārpstām - solis (pārvietojums un ātrums)
Nosaka uzgriezņa nobraukto garumu katrā apgriezienā. Tas parasti ir mm / apgrieziens.
2 mm vārpsta vienā apgriezienā izraisīs 2 mm pārvietojumu katrā vārpstas pagriezienā. Tas ietekmēs uzgriežņa lineāro ātrumu, jo, palielinoties griešanās ātrumam, palielināsies apgriezienu skaits laika vienībā un līdz ar to arī nobrauktais attālums.
Ja 2 mm griešanās vienā apgriezienā griežas ar ātrumu 60 RPM (viens apgrieziens sekundē), uzgrieznis kustēsies ar ātrumu 2 mm sekundē.
7. solis: montāža
Mūsu montāžā man ir divi motori un mūsu tastatūra ar displeju, kas izskatījās pēc kalkulatora, jo es tiem izveidoju vāku 3D printerī. Nokia displejā mums ir šādas iespējas:
F1: Pusmēness - Fuso pāriet no pašreizējās pozīcijas uz manu noteikto pozīciju
F2: lejupejošs - pagrieziens
F3: Ātrums - vai es varu mainīt impulsa platumu
F4: ESC
8. solis: montāža - materiāli
A - 10 mm lineārās vadotnes
B - 2. un 8. mm soļu trapecveida vārpstas
C - urbšanas bāze
D - vārpstas gultņi
E - Vadotņu turētāji
F - Kastaņi
G - Gultņi
H - uzmavas
I - Dzinēji
J - dažādas plastmasas detaļas (kursori, motora kronšteini, ķīļi, tastatūras atbalsts un displejs
9. darbība: montāža - 01. darbība
Pēc pamatnes (C) urbšanas mēs saliekam divus motorus (I). Lai tos piestiprinātu, mēs izmantojam 3D printerī izgatavotus kronšteinus (J). Nepievelciet nevienu skrūvi šajā pozicionēšanas solī. Tas ļaus veikt nepieciešamos pielāgojumus izlīdzināšanas posmā.
10. darbība: montāža - 02. darbība
Joprojām pēc pamatnes (C) urbšanas novietojiet vadotnes (E) un gultņus (D). Sīkāka informācija par plastmasas starpliku (J), ko izmanto, lai pielāgotu gultņu augstumus.
11. darbība: montāža - 03. darbība
Mēs izveidojam kursoru, izmantojot drukātu daļu, lai savienotu gultni (G) ar uzgriezni (F). Mēs izmantojām divus kursorus, vienu pa labi, otru pa kreisi. Tās funkcija ir norādīt pozīciju uz skalas ikreiz, kad vēlamies noteikt vārpstas izraisīto pārvietojumu.
12. darbība: montāža - 04. darbība
Ievietojiet vadotni (A) un vārpstu (B) attiecīgajā gultnē (D) un balstā (E) pretī motoram, pēc tam ievietojiet vadotni un vārpstu gultnē (G) un kastaņā (F) un pie vārpstas galā mēs ievietojam arī savienotāju (H). Mēs ņemam tos abus, līdz tie sasniedz savus pēdējos punktus (pretējais balsts un motors).
Viegli pievelciet skrūves, lai vēlāk varētu veikt regulēšanu. Atkārtojiet procedūru, izmantojot atlikušo vadotni un vārpstu. Kad visas sastāvdaļas ir novietotas, mēs veicam detaļu izlīdzināšanu, pabeidzot mehāniskās montāžas posmu.
13. solis: montāža - elektronika
Izmantojot drukātu plastmasas turētāju, mēs nostiprinājām Nokia 5110 displeju un 4x4 matricas tastatūru. Stenda apakšējā telpā atradīsies Arduino Uno, draiveris DRV8825.
Izmantojot pieejamo urbšanu pamatnē, mēs nostiprinām mezglu.
14. solis: elektriskā shēma
Elektroinstalācijas shēma ir vienkārša. Mums ir DRV8825 un tie paši divi 17 spoguļi, tas ir, tas pats solis, ko mēs nosūtām vienam, iet uz citu. Mainās tas, ka vienā no motoriem man ir 8 mm vārpstas un otrā 2 mm vārpsta. Tātad skaidrs, ka pirmais ar 8 mm vārpstu iet ātrāk. Diagrammā joprojām ir displejs un 4x4 tastatūra, kurai jābūt matricai.
15. darbība: avota kods
Bibliotēku iekļaušana un objektu izveide
Mums šeit ir Lib, ko es darīju, kas ir StepDriver.h. Tas ir sagatavots 8825, 4988 un arī TB6600 draiveriem. Šajā solī es izveidoju objektu DRV8825, d1.
// Biblioteca responseável por capturar a tecla que foi pressionada no teclado #include // Biblioteca responseável pelos graficos do display #include // Biblioteca responseável pela comunicacao do display #include // Configuracao de pinos do Display // pin 6 - Serial clock out [SCLK] // pin 5 - sērijas datu izeja (DIN) // pin 4 - datu/komandu atlase (D/C) // pin 3 - LCD mikroshēmas izvēle (CS/CE) // pin 2 - LCD reset (RST) Adafruit_PCD8544 displejs = Adafruit_PCD8544 (6, 5, 4, 3, 2); // Biblioteca de motor de passo #include // Instancia o driver DRV8825 DRV8825 d1;
Konstantes un globālie mainīgie
Šajā koda daļā es aplūkoju matricu, kuru es iemācīju citā video stundā (LINK KEYBOARD). Tomēr es runāju par tastatūras objektu, bez attāluma un ātruma.
const baits LINHAS = 4; // número de linhas do tecladoconst byte COLUNAS = 4; // número de colunas do teclado // definēt 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" '}}; baits 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, response tovel capturer and tecla pressionada Keypad customKeypad = Keypad (makeKeymap (SIMBOLOS), PINOS_LINHA, PINOS_COLUNA, LINHAS, COLUNAS); // variáveis resposnsáveis por armazenar o valor digitado char customKey; neparakstīta garā distancija = 0; neparakstīta garā velocidāde = 2000;
Tastatūras lasīšanas funkcija
Šajā solī mums ir kods, kas attiecas uz displeju, kas darbojas, palielinoties un samazinot drukāšanu.
// Funcao responseavel por ler o valor do usuario pelo teclado -------------------------------------- --- unsigned 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 (BALTS); display.print ("VALOR"); display.setTextColor (BLACK); display.fillRect (0, 24, 21, 11, 2); display.setCursor (2, 26); display.setTextColor (BALTS); display.print ("CLR"); display.setTextColor (BLACK); display.setCursor (23, 26); display.print ("LIMPAR"); display.fillRect (0, 36, 21, 11, 2); display.setCursor (5, 38); display.setTextColor (BALTS); display.print ("F4"); display.setTextColor (BLACK); display.setCursor (23, 38); display.print ("VOLTAR"); display.setCursor (2, 14); display.display (); Stīgu valor = ""; char tecla = nepatiess;
cilpas gaida, kad tiek nospiesta taustiņa
Šeit mēs izskaidrojam cilpas programmēšanu, tas ir, kur ievadāt vērtības.
// 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': gadījums '7': gadījums '8': gadījums '9': gadījums '0': valor += tecla; displejs.druka (tecla); display.display (); pārtraukums; // Skatiet CLR foi pressionada case 'c': // Limpa a string valor valor = ""; // Apaga o valor do display display.fillRect (2, 14, 84, 8, 0); display.setCursor (2, 14); display.display (); pārtraukums; // Skatiet ENT foi pressionada case 'e': // Retorna o valor return valor.toInt (); pārtraukums; // Skatīt F4 (ESC) foi pressionada case 'D': return -1; noklusējums: pārtraukums; }} // Limpa o char tecla tecla = false; }}
Motora piedziņas funkcija
Šajā posmā tiek strādāta ar funkciju "pārvietot". Es saņemu impulsu skaitu un virzienu, un tad es izveidoju "par".
// Funcao responseavel por mover o motor -------------------------------------- void mover (neparakstīts) gari pulsos, bool direcao) {for (unsigned long i = 0; i <pulsos; i ++) {d1.motorMove (directcao); }}
uzstādīt ()
Tagad es pārvietoju displeju un draivera konfigurāciju, un pat ievietoju piespraušanu avota kodā, lai būtu vieglāk. Es inicializēju noteiktas vērtības un nodarbojos ar metodēm, kas ģenerē iestatījumus.
void setup () {// Configuracao do display ---------------------------------------- -------- display.begin (); display.setContrast (50); display.clearDisplay (); display.setTextSize (1); display.setTextColor (BLACK); // Configuração do Driver DRV8825 ---------------------------------------- // pin GND - Iespējot (ENA) // 13. tapa - M0 // 12. tapa - M1 // 11. tapa - M2 // 10. tapa - Atiestatīt (RST) // 9. tapa - Miega režīms (SLP) // 8. tapa - Solis (STP) // 7. tapa - virziens (DIR) d1.pinConfig (99, 13, 12, 11, 10, 9, 8, 7); d1.miegs (LOW); d1.reset (); d1.solisPerMm (100); d1.stepPerRound (200); d1.stepConfig (1); d1.motionConfig (50, velocidade, 5000); }
cilpa () - 1. daļa - Zīmēšanas izvēlne
void loop () {// Escreve o Menu do Programa no display ----------------------------------- display.clearDisplay (); display.fillRect (0, 0, 15, 11, 2); display.setCursor (2, 2); display.setTextColor (BALTS); display.print ("F1"); display.setTextColor (BLACK); display.setCursor (17, 2); display.print ("CRESCENTE"); display.fillRect (0, 12, 15, 11, 2); display.setCursor (2, 14); display.setTextColor (BALTS); display.print ("F2"); display.setTextColor (BLACK); display.setCursor (17, 14); display.print ("DECRESCENTE"); display.fillRect (0, 24, 15, 11, 2); display.setCursor (2, 26); display.setTextColor (BALTS); display.print ("F3"); display.setTextColor (BLACK); display.setCursor (17, 26); display.print ("VELOCIDADE");
cilpa () - 2. daļa - Zīmēšanas izvēlne
display.fillRect (0, 36, 15, 11, 2); display.setCursor (2, 38); display.setTextColor (BALTS); display.print ("F4"); display.setTextColor (BLACK); display.setCursor (17, 38); display.print ("ESC"); display.display (); bool esc = nepatiess;
cilpa () - 3. daļa - Skriešana
// 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 (); // Skatiet ESC foi pressionada if (distancia == -1) {esc = true; } cits {// Escreve tela "Movendo" bez displeja displeja.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (21, 2); display.setTextColor (BALTS); display.print ("MOVENDO"); display.setTextColor (BLACK); display.setCursor (2, 14); displejs.druka (distancia); display.print ("Passos"); display.display ();
cilpa () - 4. daļa - Skriešana
// Move o motor mover (distancia, LOW); // Volta ao menu esc = true; } pārtraukums; // Se tecla F2 foi pressionada case 'B': distancia = lerValor (); // Skatīt ESC foi pressionada if (distancia == -1) {esc = true; } cits {// Escreve tela "Movendo" bez displeja displeja.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (21, 2); display.setTextColor (BALTS); display.print ("MOVENDO"); display.setTextColor (BLACK); display.setCursor (2, 14); displejs.druka (distancia); display.print ("Passos"); display.display ();
cilpa () - 5. daļa - Skriešana
// Move o motor mover (distancia, HIGH); // Volta ao menu esc = true; } pārtraukums; // Skatiet F3 foi pressionada case 'C': velocidade = lerValor (); ja (velocidade == -1) {esc = true; } cits {// Escreve a tela "Velocidade" nav displeja displeja.clearDisplay (); display.fillRect (0, 0, 84, 11, 2); display.setCursor (12, 2); display.setTextColor (BALTS); display.print ("VELOCIDADE"); display.setTextColor (BLACK); display.setCursor (2, 14); displejs.druka (velocidāde); display.print (char (229)); display.print ("s");
cilpa () - 6. daļa - Skriešana
display.fillRect (31, 24, 21, 11, 2); display.setCursor (33, 26); display.setTextColor (BALTS); display.println ("Labi!"); display.setTextColor (BLACK); display.display (); // Configura nova velocidade ao motor d1.motionConfig (50, velocidade, 5000); kavēšanās (2000); // Volta ao menu esc = true; } pārtraukums; // 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; noklusējums: pārtraukums; }} // Limpa vai char customKey customKey = false; }}
16. darbība. Par vārpstām - mašīnas konfigurācija
Piemēram, CNC mašīnās, piemēram, 3D printeros un maršrutētājos, programmai, kas ir atbildīga par pozicionēšanas kontroli, ir jāzina, kā kustības notiks, atkarībā no soļu motoram doto impulsu skaita.
Ja pakāpienu motora draiveris pieļauj mikropakāpju izmantošanu, šī konfigurācija jāņem vērā, aprēķinot iegūto pārvietojumu.
Piemēram, ja 200 pakāpju motors vienā apgriezienā ir pievienots vadītājam, kas iestatīts uz 1/16, tad vienam vārpstas apgriezienam būs nepieciešami 16 x 200 impulsi, tas ir, 3200 impulsi katram apgriezienam. Ja šīs vārpstas solis ir 2 mm vienā apgriezienā, tad uzgriežņa kustībā būs nepieciešami 3200 impulsi, lai uzgrieznis pārvietotos par 2 mm.
Faktiski programmatūras kontrolieri bieži izmanto iemeslu, lai norādītu šo attiecību, "impulsu skaitu uz milimetru" vai "soļus / mm".
17. solis: Marlin
Piemēram, Marlinā sadaļā @section motion mēs redzam:
/ **
* Noklusējuma ass soļi vienībā (soļi / mm)
* Aizstāt ar M92
* X, Y, Z, E0 [, E1 [, E2 [, E3 [, E4]
* /
#define DEFAULT_AXIS_STEPS_PER_UNIT {80, 80, 3200, 100}
Šajā piemērā mēs varam secināt, ka X un Y asu precizitāte ir 80 impulsi, lai pārvietotos 1 mm, savukārt Z ir nepieciešami 3200 impulsi, bet ekstrūderim E0 - 100.
18. darbība: GRBL
Zemāk mēs redzam GRBL konfigurācijas komandas. Izmantojot komandu $ 100, mēs varam pielāgot nepieciešamo impulsu skaitu, lai radītu viena milimetra nobīdi uz X ass.
Zemāk redzamajā piemērā mēs redzam, ka pašreizējā vērtība ir 250 impulsi uz mm.
Y un Z asis var iestatīt attiecīgi $ 101 un $ 102.
Ieteicams:
Kā kontrolēt līdzstrāvas motoru ar L298n un Arduino: 5 soļi
Kā kontrolēt līdzstrāvas motoru ar L298n un Arduino: Sveiki visiem. Iepazīstinām ar sevi. Mans vārds ir Dimitris un es esmu no Grieķijas. Es ļoti mīlu Arduino, jo tā ir gudra tāfele. Es centīšos pēc iespējas labāk aprakstīt šo pamācību, lai to padarītu ikviens. Tātad sāksim
Kontrolējiet jaudīgu elektrisko skeitborda e-velosipēdu 350 W līdzstrāvas motoru, izmantojot Arduino un BTS7960b: 9 soļi
Kontrolējiet jaudīgu elektrisko skeitborda e-velosipēdu 350 W līdzstrāvas motoru, izmantojot Arduino un BTS7960b: Šajā apmācībā mēs uzzināsim, kā kontrolēt līdzstrāvas motoru, izmantojot Arduino un DC draiveri bts7960b. Motors var būt 350 W vai tikai mazs rotaļlietu arduino līdzstrāvas motors kamēr tā jauda nepārsniedz BTS7960b draivera maksimālo strāvu. Noskatieties video
Kā kontrolēt BLDC motoru ar Arduino un kursorsviru: 6 soļi
Kā vadīt BLDC motoru ar Arduino un kursorsviru: Sveiki draugi šajā apmācībā es jums parādīšu, kā kontrolēt bezsuku līdzstrāvas motoru jeb BLDC motoru ar Arduino un kursorsviru
Vairāk nekā 4 motoru izmantošana - vairāku motoru vairogu sakraušana: 3 soļi
Vairāk nekā 4 motoru izmantošana - vairāku motoru vairogu sakraušana: Instruktējama vibrotaktīvo sensoro aizstāšanas un palielināšanas ierīce (https: //www.instructables.com/id/Vibrotactile-Sens …) parāda veidu, kā izveidot ierīci, kas tulko sensoro ieguldījums vibrācijas stimulos. Šie vibrācijas stimuli ir
Kā vadīt bezpilota bezkaršu līdzstrāvas motoru (3 vadu tips), izmantojot HW30A motora ātruma regulatoru un Arduino UNO: 5 soļi
Kā vadīt bezpilota bezkaršu līdzstrāvas motoru (3 vadu tips), izmantojot HW30A motora ātruma regulatoru un Arduino UNO: Apraksts: HW30A motora ātruma regulatoru var izmantot ar 4-10 NiMH/NiCd vai 2-3 šūnu LiPo baterijām. BEC ir funkcionāls ar līdz pat 3 LiPo šūnām. To var izmantot, lai kontrolētu bezsuku līdzstrāvas motora (3 vadi) ātrumu ar maksimālo līdz 12 Vdc. Īpaši