{"id":170,"date":"2025-02-28T16:06:07","date_gmt":"2025-02-28T13:06:07","guid":{"rendered":"https:\/\/ta9ea.com\/?p=170"},"modified":"2025-02-28T16:06:07","modified_gmt":"2025-02-28T13:06:07","slug":"az-el-rotator","status":"publish","type":"post","link":"https:\/\/ta9ea.com\/?p=170","title":{"rendered":"AZ-EL ROTATOR"},"content":{"rendered":"<p><span style=\"font-family: Arial; font-size: medium;\"><span>3D bask\u0131l\u0131 AZ-EL rotator\u00a0<\/span><\/span><span style=\"font-family: Arial; font-size: medium;\"><span>Bu proje fikri pa3axa taraf\u0131ndan 24GHz&#8217;de k\u0131sa menzilli d\u00fczlem da\u011f\u0131l\u0131ml\u0131 qso&#8217;lar yapmak i\u00e7in ba\u015flat\u0131ld\u0131.\u00a0<\/span><\/span><span style=\"font-family: Arial; font-size: medium;\"><span>Hafif bir bask\u0131l\u0131 \u00e7anakla birlikte wavelab 24GHz mod\u00fcllerinin kullan\u0131labilirli\u011fi, u\u00e7aklar\u0131 izlemek i\u00e7in hafif bir AZ-EL rotatoruna izin verir. U\u00e7ak konumu, \u00e7evredeki alandaki u\u00e7aklardan adsb verileri al\u0131narak sa\u011flan\u0131r. Rotator bir tripoda monte edilecek ve ayr\u0131ca uydu takibi i\u00e7in k\u00fc\u00e7\u00fck bir combi yagi&#8217;yi tutacak kadar g\u00fc\u00e7l\u00fcd\u00fcr.\u00a0<\/span><\/span><span style=\"font-family: Arial; font-size: medium;\"><span>\u0130lk ad\u0131m, adsb al\u0131c\u0131s\u0131na veya di\u011fer bilgisayar yaz\u0131l\u0131mlar\u0131na aray\u00fcz olu\u015fturma olana\u011f\u0131 olan bir kontrol panosu ile birlikte d\u00fc\u015f\u00fck maliyetlerle tamamen 3D bask\u0131l\u0131 k\u00fc\u00e7\u00fck bir AZ-EL sistemi tasarlamakt\u0131r.<\/span><\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-171 size-full\" src=\"https:\/\/ta9ea.com\/wp-content\/uploads\/2025\/02\/foto-rotator.jpg\" alt=\"\" width=\"640\" height=\"480\" \/><\/p>\n<p><span>A\u015fa\u011f\u0131daki bas\u0131l\u0131 par\u00e7alar PLA&#8217;dan yap\u0131lmal\u0131, duvar kal\u0131nl\u0131\u011f\u0131 1 mm ve dolgu oran\u0131 %10 olmal\u0131d\u0131r<\/span><\/p>\n<p><span>Alt taban plakas\u0131 (1 adet) \u00a0\u00a0\u00a0<\/span><a href=\"http:\/\/www.hybridpretender.nl\/baseplate_2.STL\"><span>taban plakas\u0131_2.STL<\/span><\/a><br \/>\n<span>Dikey taban (1 adet)\u00a0\u00a0\u00a0<\/span><a href=\"http:\/\/www.hybridpretender.nl\/vertical%20base.STL\"><span>dikey taban.STL<\/span><\/a><br \/>\n<span>B\u00fcy\u00fck di\u015fli yar\u0131s\u0131 (4 adet) \u00a0\u00a0\u00a0<\/span><a href=\"http:\/\/www.hybridpretender.nl\/tandwiel_groot.STL\"><span>tandwiel_groot.STL<\/span><\/a><br \/>\n<span>Motor di\u015flisi (2 adet) \u00a0\u00a0\u00a0<\/span><a href=\"http:\/\/www.hybridpretender.nl\/tandwiel_motor.STL\"><span>tandwiel_motor.STL<\/span><\/a><span>\u00a0tandwiel_motor.STL<\/span><br \/>\n<span>Diren\u00e7 di\u015flisi (2 adet) \u00a0\u00a0\u00a0<\/span><a href=\"http:\/\/www.hybridpretender.nl\/tandwiel_potmeter.STL\"><span>tandwiel_potmeter.STL<\/span><\/a><br \/>\n<span>Di\u015fli kelep\u00e7esi (2 adet) \u00a0\u00a0\u00a0<\/span><a href=\"http:\/\/www.hybridpretender.nl\/lagerklem.STL\"><span>lagerklem.STL<\/span><\/a><br \/>\n<span>Ay\u0131r\u0131c\u0131 halka (8 adet) \u00a0\u00a0\u00a0<\/span><a href=\"http:\/\/www.hybridpretender.nl\/bus.STL\"><span>bus.STL<\/span><\/a><\/p>\n<p><span>Di\u011fer par\u00e7alar:<\/span><\/p>\n<p><span>Bilyal\u0131 rulman (4 adet) : 35x44x5mm 6707-2R Aliexpress<\/span><br \/>\n<span>Motor (2 adet) : Bringsmart (2 adet) JGY-370 12V 10rpm Aliexpress<\/span><br \/>\n<span>10 tur de\u011fi\u015fken diren\u00e7 Junkbox<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>Kontrol panosu<\/p>\n<p>Rotor kontrol\u00fc, \u00e7ekirde\u011finde bir Arduino nano, bir L298N k\u00f6pr\u00fc motor kontrol\u00f6r\u00fc ve I2C 16&#215;2 lcd ekran bulunur. Yaz\u0131l\u0131m Simplesat yay\u0131n\u0131na dayanmaktad\u0131r. Rotor kontrol\u00f6r\u00fc, bir\u00e7ok farkl\u0131 izleme yaz\u0131l\u0131m\u0131 taraf\u0131ndan olu\u015fturulan Yeasu GS-232 komutlar\u0131n\u0131 dinler.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-172 size-full\" src=\"https:\/\/ta9ea.com\/wp-content\/uploads\/2025\/02\/control.jpg\" alt=\"\" width=\"640\" height=\"480\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-173 size-full\" src=\"https:\/\/ta9ea.com\/wp-content\/uploads\/2025\/02\/diagram.jpg\" alt=\"\" width=\"601\" height=\"679\" \/><\/p>\n<pre class=\"lang:arduino decode:true \">#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100\n#include \"Arduino.h\"\n#else\n#include \"WProgram.h\"\n#endif\n#include &lt;Wire.h&gt;\n#include &lt;LCD.h&gt;\n#include &lt;LiquidCrystal_I2C.h&gt;\n#include &lt;SoftwareSerial.h&gt; \/\/ use software uart library\nLiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7); \n\nconst long _azAdZeroOffset   =  0;   \/\/ adjust to zero out lcd az reading when control box az = 0\nconst long _elAdZeroOffset   =  0;   \/\/ adjust to zero out lcd el reading when control box el = 0\n\n\/*\n    10 bit A\/D converters in the Arduino have a max value of 1023\n    for the azimuth the A\/D value of 1023 should correspond to 360 degrees\n    for the elevation the A\/D value of 1023 should correspond to 360 degrees\n    integer math is used so the scale value is multiplied by 100 to maintain accuracy\n    the scale factor should be 100 * (1023 \/ 360) for the azimuth\n    the scale factor should be 100 * (1023 \/ 360) for the elevation\n*\/\n\nconst long _azScaleFactor =  284;  \/\/  adjust as needed\nconst long _elScaleFactor =  284;  \/\/  adjust as needed\n\n\/\/ lcd display control\nconst byte _backLightOn = 0x11;   \/\/ lcd back light on\nconst byte _cursorOff = 0x16;     \/\/ lcd cursor off\nconst byte _clearScreen = 0x0C;   \/\/ lcd clear screen\nconst byte _line0 = 0x80;         \/\/ lcd line 0 - top line\nconst byte _line1 = 0x94;         \/\/ lcd line 1 - bottom line\n\n\/\/ pins\nconst byte _azimuthInputPin = A0;   \/\/ azimuth analog signal from potmeter\nconst byte _elevationInputPin = A1; \/\/ elevation analog signal from potmeter\nconst byte _G5500UpPin = 7;        \/\/ elevation rotor up control line\nconst byte _G5500DownPin = 8;      \/\/ elevation rotor down control line\nconst byte _G5500LeftPin = 9;      \/\/ azimuth rotor left control line\nconst byte _G5500RightPin = 10;     \/\/ azimuth rotor right control line\nint _ResetPin = 3;\nint val=0; \n\n\n\/\/ take care if you lower this value -  wear or dirt on the pots in your rotors\n\/\/ or A\/D converter jitter may cause hunting if the value is too low.\n\nlong _closeEnough = 100;   \/\/ tolerance for az-el match in rotor move in degrees * 100\n\n\/\/ ------------------------------------------------------------\n\/\/ ------ values from here down should not need adjusting -----\n\/\/ ------------------------------------------------------------\n\n\/\/ rotor\nconst long _maxRotorAzimuth = 45000L;  \/\/ maximum rotor azimuth in degrees * 100\nconst long _maxRotorElevation = 18000L; \/\/ maximum rotor elevation in degrees * 100\n\nlong _rotorAzimuth = 0L;       \/\/ current rotor azimuth in degrees * 100\nlong _rotorElevation = 0L;     \/\/ current rotor azimuth in degrees * 100\nlong _azimuthTemp = 0L;        \/\/ used for gs232 azimuth decoding\nlong _elevationTemp = 0L;      \/\/ used for gs232 elevation decoding\nlong _newAzimuth = 0L;         \/\/ new azimuth for rotor move\nlong _newElevation = 0L;       \/\/ new elevation for rotor move\nlong _previousRotorAzimuth = 0L;       \/\/ previous rotor azimuth in degrees * 100\nlong _previousRotorElevation = 0L;     \/\/ previous rotor azimuth in degrees * 100\n\nunsigned long _rtcLastDisplayUpdate = 0UL;      \/\/ rtc at start of last loop\nunsigned long _rtcLastRotorUpdate = 0UL;        \/\/ rtc at start of last loop\nunsigned long _displayUpdateInterval = 500UL;   \/\/ display update interval in mS\nunsigned long _rotorMoveUpdateInterval = 100UL; \/\/ rotor move check interval in mS\n\nboolean _gs232WActice = false;  \/\/ gs232 W command in process\nint _gs232AzElIndex = 0;        \/\/ position in gs232 Az El sequence\nlong _gs232Azimuth = 0;          \/\/ gs232 Azimuth value\nlong _gs232Elevation = 0;        \/\/ gs232 Elevation value\nboolean _azimuthMove = false;     \/\/ azimuth move needed\nboolean _elevationMove = false;   \/\/ elevation move needed\n\nString azRotorMovement;   \/\/ string for az rotor move display\nString elRotorMovement;   \/\/ string for el rotor move display\n\n\n\/\/\n\/\/ run once at reset\n\/\/\nvoid setup()\n{\n \n    \/\/ initialize serial ports:\n  Serial.begin(9600);  \/\/ control\n  \n  lcd.begin(16, 2); \/\/ Inizializzo LCD 16 caratteri per 2 linee\n  delay (200);\n  lcd.setBacklightPin(3,POSITIVE);\n  lcd.setBacklight(HIGH);\n\n  \n  \/\/ initialize rotor control pins as outputs\n  pinMode(_G5500UpPin, OUTPUT);\n  pinMode(_G5500DownPin, OUTPUT);\n  pinMode(_G5500LeftPin, OUTPUT);\n  pinMode(_G5500RightPin, OUTPUT);\n\n  pinMode(_ResetPin, INPUT_PULLUP);\n\n  \/\/ set all the rotor control outputs High\n  digitalWrite(_G5500UpPin, HIGH);\n  digitalWrite(_G5500DownPin, HIGH);\n  digitalWrite(_G5500LeftPin, HIGH);\n  digitalWrite(_G5500RightPin, HIGH);\n\n\n\n  \n  lcd.clear();   \/\/ clear screen\n  delay(100);                         \/\/ wait for clear screen\n\n  lcd.println(\"   PE1CKK V1.8    \");\n  delay(2000);\n  lcd.clear();   \/\/ clear screen\n\n\n}\n\n\n\/\/\n\/\/ main program loop\n\/\/\nvoid loop()\n{\n  \/\/ check for serial data\n  if (Serial.available() &gt; 0)\n  {\n    decodeGS232(Serial.read());\n  }\n\n  unsigned long rtcCurrent = millis(); \/\/ get current rtc value\n\n  \/\/ check for rtc overflow - skip this cycle if overflow\n  if (rtcCurrent &gt; _rtcLastDisplayUpdate) \/\/ overflow if not true    _rotorMoveUpdateInterval\n  {\n    \/\/ update rotor movement if necessary\n    if (rtcCurrent - _rtcLastRotorUpdate &gt; _rotorMoveUpdateInterval)\n    {\n      _rtcLastRotorUpdate = rtcCurrent; \/\/ reset rotor move timer base\n\n      \/\/ AZIMUTH\n      readAzimuth(); \/\/ get current azimuth from G-5500\n      \/\/ see if azimuth move is required\n      if ( (abs(_rotorAzimuth - _newAzimuth) &gt; _closeEnough) &amp;&amp; _azimuthMove )\n      {\n        updateAzimuthMove();\n      }\n      else  \/\/ no move required - turn off azimuth rotor\n      {\n        digitalWrite(_G5500LeftPin, HIGH);\n        digitalWrite(_G5500RightPin, HIGH);\n        _azimuthMove = false;\n        azRotorMovement = \"        \";\n      }\n\n      \/\/ ELEVATION\n      readElevation(); \/\/ get current elevation from G-5500\n      \/\/ see if aelevation move is required\n      if ( abs(_rotorElevation - _newElevation) &gt; _closeEnough &amp;&amp; _elevationMove ) \/\/ move required\n      {\n        updateElevationMove();\n      }\n      else  \/\/ no move required - turn off elevation rotor\n      {\n        digitalWrite(_G5500UpPin, HIGH);\n        digitalWrite(_G5500DownPin, HIGH);\n        _elevationMove = false;\n        elRotorMovement = \"        \";\n      }\n    } \/\/ end of update rotor move\n\n\n    \/\/ update display if necessary\n    if (rtcCurrent - _rtcLastDisplayUpdate &gt; _displayUpdateInterval)\n    {\n      \/\/ update rtcLast\n      _rtcLastDisplayUpdate = rtcCurrent;  \/\/ reset display update counter base\n      displayAzEl(_rotorAzimuth, _rotorElevation);\n    }\n  }\n  else \/\/ rtc overflow - just in case\n  {\n    \/\/ update rtcLast\n    _rtcLastDisplayUpdate = rtcCurrent;\n  }\n\/\/ uitzetten bij bedienen knop\n val = digitalRead(_ResetPin); \n\n if (val == LOW)\n    {_newElevation = _rotorElevation;\n      _newAzimuth = _rotorAzimuth;\n    }\n \n\n}\n\n\n\/\/\n\/\/ update elevation rotor move\n\/\/\nvoid updateElevationMove()\n{\n  \/\/ calculate rotor move\n  long rotorMoveEl = _newElevation - _rotorElevation;\n\n  if (rotorMoveEl &gt; 0)\n  {\n    elRotorMovement = \"  U \";\n    elRotorMovement = elRotorMovement + String(_newElevation \/ 100);\n    digitalWrite(_G5500DownPin, HIGH);\n    digitalWrite(_G5500UpPin, LOW);\n  }\n  else\n  {\n    if (rotorMoveEl &lt; 0)\n    {\n      elRotorMovement = \"  D \";\n      elRotorMovement = elRotorMovement + String(_newElevation \/ 100);\n      digitalWrite(_G5500UpPin, HIGH);\n      digitalWrite(_G5500DownPin, LOW);\n    }\n  }\n}\n\n\n\/\/\n\/\/ update azimuth rotor move\n\/\/\nvoid updateAzimuthMove()\n{\n  \/\/ calculate rotor move\n  long rotorMoveAz = _newAzimuth - _rotorAzimuth;\n  \/\/ adjust move if necessary\n  if (rotorMoveAz &gt; 18000) \/\/ adjust move if &gt; 180 degrees\n  {\n    rotorMoveAz = rotorMoveAz - 180;\n  }\n  else\n  {\n    if (rotorMoveAz &lt; -18000) \/\/ adjust move if &lt; -180 degrees\n    {\n      rotorMoveAz = rotorMoveAz + 18000;\n    }\n  }\n\n  if (rotorMoveAz &gt; 0)\n  {\n    azRotorMovement = \"  R \";\n    azRotorMovement = azRotorMovement + String(_newAzimuth \/ 100);\n    digitalWrite(_G5500LeftPin, HIGH);\n    digitalWrite(_G5500RightPin, LOW);\n  }\n  else\n  {\n    if (rotorMoveAz &lt; 0)\n    {\n      azRotorMovement = \"  L \";\n      azRotorMovement = azRotorMovement + String(_newAzimuth \/ 100);\n      digitalWrite(_G5500RightPin, HIGH);\n      digitalWrite(_G5500LeftPin, LOW);\n    }\n  }\n}\n\n\n\/\/\n\/\/ read azimuth from G5500\n\/\/\nvoid readElevation()\n{\n  long sensorValue = analogRead(_elevationInputPin);\n  _rotorElevation = ((sensorValue * 10000) \/ _elScaleFactor) - _elAdZeroOffset;\n}\n\n\n\/\/\n\/\/ read azimuth from G5500\n\/\/\nvoid readAzimuth()\n{\n  long sensorValue = analogRead(_azimuthInputPin);\n  _rotorAzimuth = ((sensorValue * 10000) \/ _azScaleFactor) - _azAdZeroOffset;\n}\n\n\n\/\/\n\/\/ decode gs232 commands\n\/\/\nvoid decodeGS232(char character)\n{\n  switch (character)\n  {\n    case 'w':  \/\/ gs232 W command\n    case 'W':\n      {\n        {\n          _gs232WActice = true;\n          _gs232AzElIndex = 0;\n        }\n        break;\n      }\n\n    \/\/ numeric - azimuth and elevation digits\n    case '0':  case '1':   case '2':  case '3':  case '4':\n    case '5':  case '6':   case '7':  case '8':  case '9':\n      {\n        if ( _gs232WActice)\n        {\n          processAzElNumeric(character);\n        }\n      }\n\n    default:\n      {\n        \/\/ ignore everything else\n      }\n  }\n}\n\n\n\/\/\n\/\/ process az el numeric characters from gs232 W command\n\/\/\nvoid processAzElNumeric(char character)\n{\n  switch (_gs232AzElIndex)\n  {\n    case 0: \/\/ first azimuth character\n      {\n        _azimuthTemp = (character - 48) * 100;\n        _gs232AzElIndex++;\n        break;\n      }\n\n    case 1:\n      {\n        _azimuthTemp = _azimuthTemp + (character - 48) * 10;\n        _gs232AzElIndex++;\n        break;\n      }\n\n    case 2: \/\/ final azimuth character\n      {\n        _azimuthTemp = _azimuthTemp + (character - 48);\n        _gs232AzElIndex++;\n\n        \/\/ check for valid azimuth\n        if ((_azimuthTemp * 100) &gt; _maxRotorAzimuth)\n        {\n          _gs232WActice = false;\n          _newAzimuth = 0L;\n          _newElevation = 0L;\n        }\n        break;\n      }\n\n    case 3: \/\/ first elevation character\n      {\n        _elevationTemp = (character - 48) * 100;\n        _gs232AzElIndex++;\n        break;\n      }\n\n    case 4:\n      {\n        _elevationTemp = _elevationTemp + (character - 48) * 10;\n        _gs232AzElIndex++;\n        break;\n      }\n\n    case 5: \/\/ last elevation character\n      {\n        _elevationTemp = _elevationTemp + (character - 48);\n        _gs232AzElIndex++;\n\n        \/\/ check for valid elevation\n        if ((_elevationTemp * 100) &gt; _maxRotorElevation)\n        {\n          _gs232WActice = false;\n          _newAzimuth = 0L;\n          _newElevation = 0L;\n        }\n        else \/\/ both azimuth and elevation are ok\n        {\n          \/\/ set up for rotor move\n          _newAzimuth = _azimuthTemp * 100;\n          _newElevation = _elevationTemp * 100;\n          _azimuthMove = true;\n          _elevationMove = true;\n        }\n        break;\n      }\n\n    default:\n      {\n        \/\/ should never get here\n      }\n  }\n}\n\n\n\/\/\n\/\/ display az el on display\n\/\/\nvoid displayAzEl(long az, long el)\n{\n  \/\/ display azimuth - filter A\/D noise\n  if (abs(_rotorAzimuth - _previousRotorAzimuth) &gt; 50)\n  {\n    _previousRotorAzimuth = _rotorAzimuth;\n    displayAz(az);\n  }\n\n\n  \/\/ display elevation - filter A\/D noise\n  if (abs(_rotorElevation - _previousRotorElevation) &gt; 50)\n  {\n    _previousRotorElevation = _rotorElevation;\n    displayEl(el);\n  }\n\n}\n\n\n\/\/\n\/\/ display elevation - pad to length 8\n\/\/   error message if &lt; 0 or &gt; max\n\/\/\nvoid displayEl(long el)\n{\n  \/\/ clear elevation line  lcdSerial\n  lcd.setCursor(0, 1); \/\/ numero Colonna, Riga\n  lcd.print(\"                \");\n\n  \/\/  adjust value for display\n  double elFloat = el;\n  elFloat = elFloat \/ 100.0;\n\n  \/\/ position lcd cursor on bottom line\n  lcd.setCursor(0, 1); \/\/ numero Colonna, Riga\n\n  \/\/ display elevation\n  lcd.print(\"EL \");\n  \/\/ pad with spaces\n  if (elFloat &lt; 10.0)\n  {\n    lcd.print(\" \");\n  }\n  if (elFloat &lt; 100.0)\n  {\n    lcd.print(\" \");\n  }\n  lcd.print(elFloat, 1);\n  lcd.print(elRotorMovement);\n}\n\n\n\/\/\n\/\/ display azimuth - pad to length 8\n\/\/   error message if &lt; 0 or &gt; max\n\/\/\nvoid displayAz(long az)\n{\n  \/\/ clear azimuth line\n  lcd.setCursor(0, 0);\n  lcd.print(\"                \");\n\n  \/\/  adjust value for display\n  double azFloat = az;\n  azFloat = azFloat \/ 100.0;\n\n  \/\/ position lcd cursor on top line\n  lcd.setCursor(0, 0);\n\n  \/\/ display azimuth\n  lcd.print(\"AZ \");\n  \/\/ pad with spaces\n  if (azFloat &lt; 10.0)\n  {\n    lcd.print(\" \");\n  }\n  if (azFloat &lt; 100.0)\n  {\n    lcd.print(\" \");\n  }\n  lcd.print(azFloat, 1);\n  lcd.print(azRotorMovement);\n}<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>3D bask\u0131l\u0131 AZ-EL rotator\u00a0Bu proje fikri pa3axa taraf\u0131ndan 24GHz&#8217;de k\u0131sa menzilli d\u00fczlem da\u011f\u0131l\u0131ml\u0131 qso&#8217;lar yapmak i\u00e7in ba\u015flat\u0131ld\u0131.\u00a0Hafif bir bask\u0131l\u0131 \u00e7anakla birlikte wavelab 24GHz mod\u00fcllerinin kullan\u0131labilirli\u011fi, [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,1,3,4],"tags":[],"class_list":["post-170","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ardu","category-genel","category-hamrad","category-qo100"],"_links":{"self":[{"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/wp\/v2\/posts\/170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ta9ea.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=170"}],"version-history":[{"count":0,"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/wp\/v2\/posts\/170\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ta9ea.com\/index.php?rest_route=\/"}],"wp:attachment":[{"href":"https:\/\/ta9ea.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ta9ea.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ta9ea.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}