Агуулгын хүснэгт:
- Алхам 1: Материал
- Алхам 2: Робот гарыг 3D хэвлэх
- Алхам 3: Цахим монтаж
- Алхам 4: Ухаалаг гар утасны програм
- Алхам 5: Arduino код
- Алхам 6: Энэ бол боллоо
Видео: Робот гар тоглоом - Ухаалаг гар утасны хянагч: 6 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:02
Сайн уу !
Энд зуны хөгжилтэй тоглоом: Ухаалаг гар утасны удирддаг робот гар !!
Та видеон дээр харж байгаа шиг ухаалаг гар утсан дээрээ Joysticks ашиглан гараа удирдах боломжтой.
Та хэд хэдэн давтагдсан ажлуудыг жишээ болгон гүйцэтгэхийн тулд роботыг давталтаар хуулбарлах загварыг хадгалах боломжтой. Гэхдээ энэ загварыг таны хүссэнээр зохицуулж болно !!!!
Бүтээлч байх !
Алхам 1: Материал
Эндээс танд хэрэгтэй материалыг харж болно.
Энэхүү робот гарыг бүтээхэд танд 50 орчим евро хэрэгтэй болно. Програм хангамж, хэрэгслийг сольж болно, гэхдээ би эдгээр төслийг энэ төсөлд ашигласан.
Алхам 2: Робот гарыг 3D хэвлэх
Робот гарыг 3D хэвлэсэн (манай prusa i3 -тэй).
"HowtoMechatronics.com" вэбсайтын ачаар түүний STL файлууд 3D гар бүтээхэд гайхалтай юм.
Бүх хэсгийг хэвлэхэд 20 орчим цаг шаардагдана.
Алхам 3: Цахим монтаж
Монтаж нь 2 хэсгээс тусдаа байна.
Цахим хэсэг бөгөөд arduino нь дижитал тээглүүрээр servo -д холбогддог бөгөөд Bluetooth төхөөрөмжтэй (Rx, Tx).
Серво нь 2 утасны цэнэглэгч (5V, 2A max) -ээр тэжээгддэг хүчирхэг хэсэг.
Алхам 4: Ухаалаг гар утасны програм
Аппликейшнийг зохион бүтээгч 2 дээр хийсэн. Бид 2 бариул ашиглан 4 сервос, 2 товчлуур ашиглан эцсийн бариулыг хянадаг.
Бид гар болон ухаалаг гар утсыг Bluetooth модулийг (HC-06) ашиглан холбодог.
Эцэст нь хэмнэх горим нь хэрэглэгчдэд Arm хүртэл 9 хүртэлх байрлалыг хадгалах боломжийг олгодог.
Дараа нь гар автомат горимд шилжиж, хадгалсан байрлалыг дахин гаргах болно.
Алхам 5: Arduino код
// 08/19 - Робот гар ухаалаг гар утсыг удирддаг
#оруулах #ҮНЭН үнэнийг тодорхойлох #ХУДАЛ худлаа тодорхойлох // ******************** МЭДЭГДЭЛ ***************** ***********
үгийн төлөөлөгч; // mot elvoyé du module Arduino au ухаалаг гар утас
int chiffre_final = 0; int cmd = 3; // хувьсагч commande du servo moteur (troisième fil (улбар шар, jaune)) int cmd1 = 5; // servo1 int cmd2 = 9; // servo2 int cmd3 = 10; // servo3 // int cmd4 = 10; // servo4 int cmd5 = 11; // pince int activate_saving = 0; Servo moteur; // on définit notre servomoteur Servo moteur1; Servo moteur2; Servo moteur3; // Servo moteur4; Servo moteur5; int step_angle_mini = 4; int step_angle = 3; int өнцөг, өнцөг1, өнцөг3, өнцөг5, өнцөг2; // өнцөг int pas; int r, r1, r2, r3; int бүртгэгч; логик сэрвээ = ХУДАЛ; boolean fin1 = FALSE; boolean fin2 = FALSE; boolean fin3 = ХУДАЛ; boolean fin4 = FALSE; w үг; // ухаалаг гар утас эсвэл модулийн хувьсагчийн элч Arduino int sauvegarde_positions1 [5]; int sauvegarde_positions2 [5]; int sauvegarde_positions3 [5]; int sauvegarde_positions4 [5]; int sauvegarde_positions5 [5]; int sauvegarde_positions6 [5]; int sauvegarde_positions7 [5]; int sauvegarde_positions8 [5]; int sauvegarde_positions9 [5];
// int өнцөг; // эргүүлэх өнцөг (0 ба 180)
//********************ТОХИРУУЛАХ*************************** ******** хүчингүй тохиргоо () {sauvegarde_positions1 [0] = sauvegarde_positions1 [1] = sauvegarde_positions1 [2] = sauvegarde_positions1 [3] = sauvegarde_positions1 [4] = 0; sauvegarde_positions2 [0] = sauvegarde_positions2 [1] = sauvegarde_positions2 [2] = sauvegarde_positions2 [3] = sauvegarde_positions2 [4] = 0; sauvegarde_positions3 [0] = sauvegarde_positions3 [1] = sauvegarde_positions3 [2] = sauvegarde_positions3 [3] = sauvegarde_positions3 [4] = 0; sauvegarde_positions4 [0] = sauvegarde_positions4 [1] = sauvegarde_positions4 [2] = sauvegarde_positions4 [3] = sauvegarde_positions4 [4] = 0; sauvegarde_positions5 [0] = sauvegarde_positions5 [1] = sauvegarde_positions5 [2] = sauvegarde_positions5 [3] = sauvegarde_positions5 [4] = 0; sauvegarde_positions6 [0] = sauvegarde_positions6 [1] = sauvegarde_positions6 [2] = sauvegarde_positions6 [3] = sauvegarde_positions6 [4] = 0; sauvegarde_positions7 [0] = sauvegarde_positions7 [1] = sauvegarde_positions7 [2] = sauvegarde_positions7 [3] = sauvegarde_positions7 [4] = 0; sauvegarde_positions8 [0] = sauvegarde_positions8 [1] = sauvegarde_positions8 [2] = sauvegarde_positions8 [3] = sauvegarde_positions8 [4] = 0; sauvegarde_positions9 [0] = sauvegarde_positions9 [1] = sauvegarde_positions9 [2] = sauvegarde_positions9 [3] = sauvegarde_positions9 [4] = 0; moteur.attach (cmd); // on l'objet au pin de commande moteur1.attach (cmd1); moteur2. хавсаргах (cmd2); moteur3. хавсаргах (cmd3); // moteur4.attach (cmd4); moteur5. хавсаргах (cmd5); moteur.write (6); өнцөг = 6; moteur 1. бичих (100); өнцөг1 = 100; moteur2. бичих (90); moteur 3. бичих (90); //moteur4. бичих (12); moteur 5. бичих (90); өнцөг = 6; өнцөг1 = 100; өнцөг2 = 90; өнцөг3 = 90; өнцөг5 = 90; Цуваа эхлэх (9600); // Bluetooth -ийн модулийг ашиглах} // ******************** BOUCLE ****************** ***************** void loop () {
// Serial.print ("өнцөг");
//Serial.print(angle); Serial.print ("\ t"); Serial.print (angle1); Serial.print ("\ t"); Serial.print (angle2); Serial.print ("\ t "); Serial.print (өнцөг3); Serial.print (" / t "); Serial.print (өнцөг5); Serial.print (" / n ");
//Serial.print("angle ");
int i; w = recevoir (); // ухаалаг гар утсан дээрх мэдээллийн талаар, w w switch (w) {тохиолдол 1: TouchDown_Release (); завсарлага; тохиолдол 2: TouchDown_Grab (); завсарлага; тохиолдол 3: Base_Rotation (); завсарлага; тохиолдол 4: Base_AntiRotation (); завсарлага; тохиолдол 5: Waist_Rotation (); завсарлага; тохиолдол 6: Waist_AntiRotation (); завсарлага; тохиолдол 7: Third_Arm_Rotation (); завсарлага; тохиолдол 8: Third_Arm_AntiRotation (); завсарлага; тохиолдол 9: Fourth_Arm_Rotation (); завсарлага; тохиолдол 10: Fourth_Arm_AntiRotation (); завсарлага; // тохиолдол 11: Fifth_Arm_Rotation (); break; // тохиолдол 12: Fifth_Arm_AntiRotation (); завсарлага; тохиолдол 21: Serial.print ("case case 1"); chiffre_final = 1; sauvegarde_positions1 [0] = өнцөг; sauvegarde_positions1 [1] = өнцөг1; = өнцөг5; Serial.println (sauvegarde_positions1 [1]); Serial.println (sauvegarde_positions1 [2]); Serial.println (sauvegarde_positions1 [3]); Serial.println (sauvegarde_positions1 [4]; завсарлага; тохиолдол 22: chiffre_final = 2; sauvegarde_positions2 [0] = өнцөг; sauvegarde_positions2 [1] = өнцөг1; sauvegarde_positions2 [2] = өнцөг2; sauvegarde_positions2 [3] = өнцөг3; sauvegarde_positions2 [4] завсарлага; тохиолдол 23: chiffre_final = 3; sauvegarde_positions3 [0] = өнцөг; sauvegarde_positions3 [1] = өнцөг1; sauvegarde_positions3 [2] = өнцөг2; sauvegarde_positions3 [3] = өнцөг 3; sauvegarde_positions3 [4] тохиолдол 24: chiffre_final = 4; sauvegarde_positions4 [0] = өнцөг; sauvegarde_positions4 [1] = өнцөг1; sauvegarde_positions4 [2] = өнцөг2; sauvegarde_positions4 [3] = өнцөг3; sauvegarde_positions4 [4] завсарлага; тохиолдол 25: chiffre_final = 5; sauvegarde_positions5 [0] = өнцөг; sauvegarde_positions5 [1] = өнцөг1; sauvegarde_positions5 [2] = өнцөг2; sauvegarde_positions5 [3] = өнцөг3; sauvegarde_positions5 [4] завсарлага; тохиолдол 26: chiffre_final = 6; sauvegarde_positions6 [0] = өнцөг; sauvegarde_positions6 [1] = өнцөг1; sauvegarde_positions6 [2] = өнцөг2; sauvegarde_positions6 [3] = өнцөг3; sauvegarde_positions6 [4] завсарлага; тохиолдол 27: chiffre_final = 7; sauvegarde_positions7 [0] = өнцөг; sauvegarde_positions7 [1] = өнцөг1; sauvegarde_positions7 [2] = өнцөг2; sauvegarde_positions7 [3] = өнцөг3; sauvegarde_positions7 [4] завсарлага; тохиолдол 28: chiffre_final = 8; sauvegarde_positions8 [0] = өнцөг; sauvegarde_positions8 [1] = өнцөг1; sauvegarde_positions8 [2] = өнцөг2; sauvegarde_positions8 [3] = өнцөг3; sauvegarde_positions8 [4] завсарлага; тохиолдол 29: chiffre_final = 9; sauvegarde_positions9 [0] = өнцөг; sauvegarde_positions9 [1] = өнцөг1; sauvegarde_positions9 [2] = өнцөг2; sauvegarde_positions9 [3] = өнцөг3; sauvegarde_positions5 [4] завсарлага;
тохиолдол 31: Serial.print ("31"); activate_saving = 1; chiffre_final = 0; завсарлага; // ЭХЛЭХ
тохиолдол 33: Serial.print ("33"); activate_saving = 0; break; // BUTTON SAVE анхдагч: завсарлага; } if (w == 32) {Serial.print ("\ nДахин хуулбарлах / nChiffre финал:"); Цуваа.хэвлэх (chiffre_final); Serial.print ("\ n Sauvegarde байрлал 1: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions1 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde байрлал 2: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions2 ); Serial.print ("\ t");} Serial.print ("\ n Sauvegarde байрлал 3: / n"); for (i = 0; i <5; i ++) {Serial.print (sauvegarde_positions3 ); Serial.print ("\ t");} for (i = 1; i <= chiffre_final; i ++) {Цуваа. хэвлэх ("\ n / n ЭХЛЭХ / nГогцоо:"); Serial.print (i); Serial.print ("\ n"); шилжүүлэгч (i) {тохиолдол 1: goto_moteur (*(sauvegarde_positions1)); саатал (200); goto_moteur1 (*(sauvegarde_positions1+1)); саатал (200); goto_moteur2 (*(sauvegarde_positions1+2)); саатал (200); goto_moteur3 (*(sauvegarde_positions1+3)); саатал (200); goto_moteur5 (*(sauvegarde_positions1+4)); саатал (200); завсарлага; тохиолдол 2: goto_moteur (*(sauvegarde_positions2)); саатал (200); goto_moteur1 (*(sauvegarde_positions2+1)); саатал (200); goto_moteur2 (*(sauvegarde_positions2+2)); саатал (200); goto_moteur3 (*(sauvegarde_positions2+3)); саатал (200); goto_moteur5 (*(sauvegarde_positions2+4)); саатал (200); завсарлага; тохиолдол 3: goto_moteur (*(sauvegarde_positions3)); саатал (200); goto_moteur1 (*(sauvegarde_positions3+1)); саатал (200); goto_moteur2 (*(sauvegarde_positions3+2)); саатал (200); goto_moteur3 (*(sauvegarde_positions3+3)); саатал (200); goto_moteur5 (*(sauvegarde_positions3+4)); саатал (200); завсарлага; тохиолдол 4: goto_moteur (*(sauvegarde_positions4)); саатал (200); goto_moteur1 (*(sauvegarde_positions4+1)); саатал (200); goto_moteur2 (*(sauvegarde_positions4+2)); саатал (200); goto_moteur3 (*(sauvegarde_positions4+3)); саатал (200); goto_moteur5 (*(sauvegarde_positions4+4)); саатал (200); завсарлага; тохиолдол 5: goto_moteur (*(sauvegarde_positions5)); саатал (200); goto_moteur1 (*(sauvegarde_positions5+1)); саатал (200); goto_moteur2 (*(sauvegarde_positions5+2)); саатал (200); goto_moteur3 (*(sauvegarde_positions5+3)); саатал (200); goto_moteur5 (*(sauvegarde_positions5+4)); саатал (200); завсарлага; тохиолдол 6: goto_moteur (*(sauvegarde_positions6)); саатал (200); goto_moteur1 (*(sauvegarde_positions6+1)); саатал (200); goto_moteur2 (*(sauvegarde_positions6+2)); саатал (200); goto_moteur3 (*(sauvegarde_positions6+3)); саатал (200); goto_moteur5 (*(sauvegarde_positions6+4)); саатал (200); завсарлага; тохиолдол 7: goto_moteur (*(sauvegarde_positions7)); саатал (200); goto_moteur1 (*(sauvegarde_positions7+1)); саатал (200); goto_moteur2 (*(sauvegarde_positions7+2)); саатал (200); goto_moteur3 (*(sauvegarde_positions7+3)); саатал (200); goto_moteur5 (*(sauvegarde_positions7+4)); саатал (200); завсарлага; тохиолдол 8: goto_moteur (*(sauvegarde_positions8)); саатал (200); goto_moteur1 (*(sauvegarde_positions8+1)); саатал (200); goto_moteur2 (*(sauvegarde_positions8+2)); саатал (200); goto_moteur3 (*(sauvegarde_positions8+3)); саатал (200); goto_moteur5 (*(sauvegarde_positions8+4)); саатал (200); завсарлага; тохиолдол 9: goto_moteur (*(sauvegarde_positions9)); саатал (200); goto_moteur1 (*(sauvegarde_positions9+1)); саатал (200); goto_moteur2 (*(sauvegarde_positions9+2)); саатал (200); goto_moteur3 (*(sauvegarde_positions9+3)); саатал (200); goto_moteur5 (*(sauvegarde_positions9+4)); саатал (200); завсарлага; } Serial.print ("\ n *********************** FIN ДҮГНЭЛТ ***************** / n "); саатал (500); }} /*Цуваа.хэвлэх ("дебют / n"); Serial.print (sauvegarde_positions1 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions1 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions2 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions2 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions3 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions3 [4]); Serial.print ("\ n"); Serial.print (sauvegarde_positions4 [0]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [1]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [2]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [3]); Serial.print ("\ t"); Serial.print (sauvegarde_positions4 [4]); Serial.print ("\ n");
Serial.print ("\ nfin / n");*/
саатал (100); } // **************************** ҮЙЛ ЯВДАЛ ****************** ******************
word recevoir () {// fonction permettant de recevoir l'in information ухаалаг гар утас
if (Serial.available ()) {w = Serial.read ();
Serial.flush ();
буцах w; }}
void goto_moteur (int angle_destination)
{while (angle_destination angle+step_angle) {Serial.print ("\ n -------------- * * * * * * -------------- ---- / n "); Serial.print ("angle_destination = / t"); Цуваа.хэвлэх (өнцгийн_товилгоо); Serial.print ("\ n angle1 = / t"); Serial.print (өнцөг); if (angle_destination өнцөг + step_angle) {өнцөг = өнцөг + step_angle; moteur. бичих (өнцөг);} саатал (100); } moteur.write (angle_destination); } void goto_moteur1 (int angle_destination) {while (angle_destination angle1+step_angle) {Цуваа.хэвлэх ("\ n -------------- * * * * * * ------- ----------- / n "); Serial.print ("angle_destination = / t"); Цуваа.хэвлэх (өнцгийн_товилгоо); Serial.print ("\ n өнцөг2 = / t"); Цуваа.хэвлэх (өнцөг1); хэрэв (өнцгийн_ тодорхойлох өнцөг1 +алхам_өнцөг) {өнцөг1 += алхам_өнцөг; moteur1. бичих (өнцөг1);;} саатал (100); } moteur1. бичих (өнцгийн_байх); } void goto_moteur2 (int angle_destination) {
байхад (өнцгийн_ тодорхойлох өнцөг2+алхам_өнцөг)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Цуваа.хэвлэх (өнцгийн_товилгоо); Serial.print ("\ n angle3 = / t"); Serial.print (өнцөг2); хэрэв (өнцгийн_охилтын өнцөг2 +алхам_өнцөг) {өнцөг2 += алхам_өнцөг; moteur2. бичих (өнцөг2);} саатал (100); } moteur2. бичих (өнцгийн_байх); } void goto_moteur3 (int angle_destination) {
байхад (өнцгийн_ тодорхойлох өнцөг3+алхам_өнцөг)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Цуваа.хэвлэх (өнцгийн_товилгоо); Serial.print ("\ n angle4 = / t"); Serial.print (өнцөг3); хэрэв (өнцгийн_хаягийн өнцөг3 +алхам_өнцөг) {өнцөг3 += алхам_өнцөг; moteur3. бичих (өнцөг3);} саатал (100); } moteur3. бичих (өнцгийн_хаяг); } void goto_moteur5 (int angle_destination) {
байхад (өнцгийн_охилтын өнцөг5+алхам_өнцөг)
{Serial.print ("\ n -------------- * * * * * * ------------------ / n"); Serial.print ("angle_destination = / t"); Цуваа.хэвлэх (өнцгийн_товилгоо); Serial.print ("\ n angle5 = / t"); Serial.print (өнцөг5); хэрэв (өнцгийн_охилтын өнцөг5 +алхам_өнцөг) {өнцөг5 += алхам_өнцөг; moteur5. бичих (өнцөг5);} саатал (100); } moteur5. бичих (өнцгийн_хаяг); }
хүчингүй TouchDown_Release () // TouchDown товчлуурыг суллах
{хэрэв (өнцөг5 <180) {өнцөг5 = өнцөг5+step_angle_mini; } moteur5. бичих (өнцөг5); }
хүчин төгөлдөр бус TouchDown_Grab () // TouchDown Button Grab
{if (angle5> 0) {angle5 = angle5-step_angle_mini; } moteur5. бичих (өнцөг5); } void Base_Rotation () {if (өнцөг 0) {өнцөг = өнцөг-алхам_өнцөг; } өөр өнцөг = 0; moteur. бичих (өнцөг); } хүчингүй Waist_Rotation () {if (angle1 20) {angle1 = angle1-step_angle; } өөр өнцөг1 = 20; moteur1. бичих (өнцөг1); } void Third_Arm_Rotation () {if (angle2 0) {angle2 = angle2-step_angle; } moteur2. бичих (өнцөг2); } хүчингүй Fourth_Arm_Rotation () {if (angle3 = 0) {angle3 = angle3-step_angle_mini; } moteur3. бичих (өнцөг3); }
Алхам 6: Энэ бол боллоо
Үзсэнд баярлалаа, танд таалагдсан гэж найдаж байна!
Хэрэв танд энэхүү зааварчилгаа таалагдсан бол манайд зочилж илүү ихийг мэдэж аваарай! =)
Зөвлөмж болгож буй:
Утасны гар утасны микрофон: 9 алхам
Утасны гар утасны микрофон: Хэсэг хугацааны өмнө найз охин маань надаас түүнийг бүх хипстер хамтлагуудын утасны микрофон болгоно уу гэж асуусан. Тиймээс би мэдээж түүнд тэгэх болно гэдгээ хэлсэн. Маш их хугацаа өнгөрсөн … тэгээд би үүнийг хийлээ. Энэ нь ажиллахад зориулагдсан болно
Minion Cubecraft тоглоом (гар чийдэнгийн тоглоом): 4 алхам
Minion Cubecraft Toy (Гар чийдэнгийн тоглоом): Удаан хугацааны турш би бамбарыг харанхуйд ашиглахыг хүсч байсан, гэхдээ зүгээр л асаах унтраалгатай цилиндр хэлбэртэй биетэй болох санаа надад үүнийг хийхгүй байхыг эсэргүүцсэн юм. Энэ нь хэт ерөнхий урсгал байсан. Тэгээд нэг өдөр ах маань жижигхэн ПХБ авчирсан
Гар утасны тоглоом: 5 алхам
Мобайл тоглоом: Энэ бол миний тоглоомыг зохион бүтээгч ашиглан хийсэн тоглоом бөгөөд би үүнийг бусад хүмүүст зориулж татаж авах боломжтой
ROS MoveIt робот гар 2 -р хэсэг: Робот хянагч: 6 алхам
ROS MoveIt Robotic Arm 2-р хэсэг: Робот хянагч: https://github.com/AIWintermuteAI/ros-moveit-arm.git Өгүүллийн өмнөх хэсэгт бид робот гартаа зориулан URDF болон XACRO файлуудыг үүсгэж RVIZ-ийг эхлүүлсэн. загварчилсан орчинд робот гар. Энэ удаад бид үүнийг хийх болно
Кодлохгүйгээр гар утасны тоглоом хийх: 6 алхам
Кодлохгүйгээр гар утасны тоглоом хийх: Тоглоом хийх нь эв нэгдлийг ашиглан 3D тоглоом бүтээх эсвэл Java гэх мэт хэлээр хатуу кодлох тоглоом тоглох нь үнэхээр хэцүү мэт санагдаж магадгүй юм. Аль ч тохиолдолд танд маш их туршлага хэрэгтэй бөгөөд энэ нь дөнгөж эхэлж байгаа хүнд үргэлж хөгжилтэй байдаггүй. Тиймээс энэ хуудсанд