Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Dažniausiai man įdomu, kur ISS žiūri į dangų. Norėdami atsakyti į šį klausimą, padariau fizinį objektą, kad galėčiau tiksliai žinoti, kur yra ISS realiu laiku.
ISS sekimo lempa yra prie interneto prijungta lempa, kuri nuolat seka ISS ir rodo jos vietą Žemės paviršiuje (atspausdinta 3D formatu).
Premija: lempa taip pat rodo saulėtąją Žemės pusę su neopikseliais! ??
Taigi, šioje instrukcijoje matysime skirtingus žingsnius, kaip sukurti šią lempą, pagrįstą „WEMOS D1 Mini“, žingsniniu varikliu, servo varikliu, lazeriu ir 3D dalimis.
Aš viską kuriu pati, išskyrus 3D spausdintą Žemę, kuri buvo įsigyta „Aliexpress“.
Programinė įranga:
- „Arduino“pagrįstas kodas
- API ISS vieta: Atidaryti pranešimą - dabartinė ISS vieta (pateikė Nathanas Bergey)
- Analizuojami duomenys: „ArduinoJson“biblioteka (Benoit Blanchon)
CAD ir dalys:
- 3D spausdinta žemė, 18 cm skersmens (įsigyta „Aliexpress“: čia)
- 3D spausdintos variklio atramos - sukurtos naudojant „Fusion 360“ir atspausdintos naudojant „Prusa i3 MK2S“
- Vario vamzdis
- Betoninė bazė, pagaminta iš prancūzų vikingų
Techninė įranga:
- Mikrovaldiklis: „Wemos D1 Mini“(integruota „Wi -Fi“antena)
- Servo EMAX ES3352 MG
- Žingsninis variklis 28byj-48 (su ULN2003 vairuotojo lenta)
- 10 „NeoPixels“šviesos diodų
- 405 nm bangos ilgio lazeris
- Ribinis jungiklis
- 5V 3A maitinimo šaltinis
1 žingsnis: dalių modeliavimas „Fusion 360“ir spausdinimas
Norėdami sumontuoti visą aparatūrą, mes sukursime pagrindinę surinkimo bazę ant 3D dalių. „Thingiverse“dalis rasite čia.
Yra 3 dalys:
1) Paramos žingsnio ilguma
Ši dalis skirta žingsniniam varikliui, WEMOS, neopikselių juostai ir variniam vamzdžiui montuoti
2) Palaikymo jungiklis
Ši dalis skirta galiniam jungikliui montuoti (naudokite žingsniukui nurodyti -0 °/-180 ° platumą). Jis prisukamas ant žingsnelio viršaus
3) „Servo Latitude“palaikymas
Ši dalis skirta servo varikliui montuoti. „Support Servo“yra sumontuotas ant žingsninio variklio
Visos dalys buvo atspausdintos ant „Prusa I3 MK2S“su juodu PETG siūlu
2 žingsnis: laidų prijungimas ir surinkimas
Ši grandinė turės 5V 3A maitinimo įvestį (kad būtų galima naudoti tą patį maitinimo šaltinį žingsniniam valdikliui, lazeriui, neopikseliams ir WEMOS)
Pagal šį eskizą turime lygiagrečiai lituoti maitinimo šaltinį tiesiai prie aukščiau esančių elementų:
- Stepper vairuotojas
- Lazeris
- Neopikselių juostelė (NB: realybėje yra 10 neopikselių, o ne 8, kaip parodyta eskize)
- WEMOS
Toliau turime prijungti skirtingus elementus prie WEMOS:
1) Stepper vairuotojas seka šį sąrašą:
- IN1-> D5
- IN2-> D6
- IN3-> D7
- IN4-> D8
2) Servo variklis:
Duomenų servo kaištis -> D1
3) Neopikselių juostelės:
Duomenų neopikselių kaištis -> D2
4) Ribinis jungiklis:
Du jungiklio kaiščiai prie GND ir D3
Prijunkite ribinį jungiklį taip, kad grandinė atsidarytų/nutrūktų, kai paspaudžiame jungiklį (taigi grandinė uždaryta, kai niekas jo nespaudžia). Taip išvengiama neteisingos paskaitos dėl įtampos piko.
3 žingsnis: „Arduino“kodas - ISS pozicijos gavimas realiuoju laiku
Kad varytume du variklius, kad pasiektume ISS padėtį, turime gauti ISS padėtį realiuoju laiku:
- Pirmiausia mes naudosime „Open Notify Here“API
- Tada turime išanalizuoti duomenis, kad gautume paprastą ISS vietos vertę, naudodami analizavimo duomenis: ArduinoJson biblioteka (Benoit Blanchon)
#include <ESP8266WiFi.h #include <ESP8266HTTPClient.h #include <ArduinoJson.h // WiFi parametrai const char* ssid = "XXXXX"; const char* password = "XXXXX"; void setup () {Serial.begin (115200); WiFi.begin (ssid, slaptažodis); while (WiFi.status ()! = WL_CONNECTED) {delay (1000); Serial.println („Prisijungiama …“); }}
Ši programa prijungia „NodeMCU“prie „WiFi“, tada prisijungia prie API, gauna duomenis ir spausdina juos serijiniu būdu.
void loop () {
if (WiFi.status () == WL_CONNECTED) // Tikrinti WiFi būseną {HTTPClient http; // HTTPClient klasės objektas http.begin ("https://api.open-notify.org/iss-now.json"); int httpCode = http. GET (); // Patikrinkite grįžtamąjį kodą, jei (httpCode> 0) {// Parsing const size_t bufferSize = JSON_OBJECT_SIZE (2) + JSON_OBJECT_SIZE (3) + 100; DynamicJsonBuffer jsonBuffer (bufferSize); JsonObject & root = jsonBuffer.parseObject (http.getString ()); // Parametrai const char* message = root ["message"]; const char* lon = šaknis ["iss_position"] ["ilguma"]; const char* lat = šaknis ["iss_position"] ["platuma"]; // Išėjimas į serijinį monitorių Serial.print ("Message:"); Serial.println (pranešimas); Serial.print („Ilguma:“); Serial.println (lon); Serial.print („Platuma:“); Serial.println (lat); } http.end (); // Uždaryti ryšį} uždelsimas (50000); }
4 žingsnis: galutinis „Arduino“kodas
Šis „Arduino“kodas nustato ISS vietą, kad lazeris būtų perkeltas į reikiamą vietą Žemės paviršiuje, ir saulės padėtis, leidžianti apšviesti atitinkamus neopikselius, kad apšviestų saulės prisilietimą.
1 premija: įjungus lempą, iniciacijos fazės metu lazeris nurodys lempos padėtį (id: vieta, kurioje yra maršrutizatorius)
2 premija: kai ISS yra šalia lempos vietos (+/- 2 ° ilgio ir +/- 2 ° platumos), visi neopikseliai švelniai mirksės
5 veiksmas: mėgaukitės savo ISS stebėjimo priemone
Jūs sukūrėte ISS sekimo lempą, mėgaukitės!
Pirmasis prizas pirmojo autoriaus konkurse