Satura rādītājs:
- 1. darbība: augšup un lejup
- 2. solis: kā ir ar kreiso un labo pusi ?
- 3. solis: ķermeņa pacelšana… KĀ?
- 4. solis: Bet šīs kastes nav tik skaistas …
- 5. solis: slinky rotaļlietas ?? Ak, vai
- 6. solis: izdrukājiet savu pūķi
- 7. solis: laiks pastiprināt pūķi, izmantojot NeoPixels
- 8. solis: laika programmēšana
- 9. darbība. Programmēšana turpinās
- 10. solis: izbaudiet savu pūķi
Video: Sine-ese Dragon: 10 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Sine-ese Dragon ir mājīgs mājas dekors, kurā tiek izmantotas mehāniskas kustības un gaismas, lai pastāstītu laika prognozi nākamajiem trim trīs stundu intervāliem. Pēc definīcijas ambient apraksta kaut ko tuvāko apkārtni; līdz ar to tika nolemts būt atbilstošam laika apstākļu datu iekļaušanai apkārtējā displejā. Laika apstākļi ir aspekts, kas nejauši maina cilvēku dienu un ir informācija, kas pastāvīgi mainās katru minūti vai pat līdz sekundei.
Ķīnas pūķis ir “spēka, spēka un veiksmes simbols”, un Āzijas subkontinentā to bieži vērtē kā augstu kultūras un tradicionālo vērtību. Ķīniešu pūķim ir ne tikai laime, bet arī spēcīgas spējas, kas kontrolē “ūdeni, nokrišņus, taifūnus un plūdus”. Galu galā Ķīnas pūķis tika uzskatīts par piemērotu laika apstākļu datu attēlošanai.
Vizualizācija
Sine-ese Dragon tiek manipulēts sešos galvenajos punktos trīs atsevišķās sadaļās, kas attēlo laika prognozi trīs 3 stundu intervālos. Par katru 3 stundu intervālu tiks iekļauta šāda informācija:
- Laika apstākļu apraksts - nosaka pašreizējās laika apstākļu informācijas krāsu.
- Temperatūra - norāda ķermeņa augstumu
- Mitrums - LED segmentu mirgošana
- Vēja ātrums - kontrolē ķermeņa ātrumu, pārvietojoties pa kreisi un pa labi.
Nepieciešamie materiāli
- 3 mm saplāksnis/kartons
- 5 mm koka tapas vai irbulīši
- 2 Daļiņu fotoni
- 3 slinkas rotaļlietas
- 6 servomotori
- NeoPixel gaismas (vai nu šķipsnas, vai atsevišķas gaismas, kas sašūtas kopā)
- Daudz super līmes
- Vadošs pavediens
- Akrila krāsa
- Dekoratīvs audums
- Lāzera griezējs
- 3D printeris
1. darbība: augšup un lejup
Jūsu pirmais solis, lai izveidotu Sine-ese Dragon, ir izveidot komponentu, kas kontrolē ķermeņa kustību augšup un lejup. Cik aizraujoši!
-
Lejupielādējiet Adobe Illustrator failus (.ai) un izdrukājiet tos, izmantojot lāzergriešanas iekārtu.
upDownBoxWithPlatform.ai jāizdrukā uz kartona
-
Lejupielādējiet 3D drukas failus (.stl) un izdrukājiet tos ar savu iecienītāko 3D printeri.
Diska vai diska pagriezēja krāsai nav nozīmes. Otrajā attēlā diska pagriezējs ir ievietots diska caurumā
-
Salieciet pirmās divas sastāvdaļas un pielīmējiet tās kopā, kā parādīts 3. līdz 5. attēlā.
- Platforma
- Diska rievas
-
Tagad salieciet lodziņu, ievērojot tālāk sniegtos padomus.
- Servo vadiem vajadzētu iet caur taisnstūra atveri kārbas sānos.
- Diska pagriezēja īsākais gals tiek piestiprināts pie servo galvas, un garākais gals iet caur kastes otras puses caurumu ar apaļu caurumu. Tas ir parādīts 6. attēlā.
- Tagad mums ir nepieciešams kaut kas, lai nodrošinātu, ka platforma paliek izlīdzināta, kad disks tiek pagriezts. Izgrieziet irbulīti 75 mm garos kociņos (7. attēls) un, izmantojot karstu līmi, ielīmējiet tos caur kastes augšpusi platformas augšpusē. Pārliecinieties, ka nūjas ir novietotas 90 grādu leņķī pret platformu.
- Ievietojiet 212 mm garu nūju kastes augšējā daļā esošajā caurumā uz platformas.
Mīļi! Tagad jums ir pilnīga kaste (8. attēls) pūķa kustībai uz augšu un uz leju. Tagad atkārtojiet iepriekš minētās darbības vēl divas reizes!
2. solis: kā ir ar kreiso un labo pusi ?
Tagad mēs nevaram aizmirst par Sine-ese Dragon kreiso un labo kustību, vai ne? Lecam otrajā solī!
-
Lejupielādējiet Adobe Illustrator failus (.ai) un izdrukājiet tos, izmantojot lāzergriešanas iekārtu.
- leftRightBoxWithPlatforms.ai jāizdrukā uz kartona.
- ArmTurner.ai fails jāizdrukā uz materiāla, kura biezums ir 3 mm.
-
Lejupielādējiet 3D drukas failus (.stl) un izdrukājiet tos ar savu iecienītāko 3D printeri.
Noteikti izdrukājiet divas rokas! Krāsai šeit nav nozīmes
- Salieciet abas platformas kopā, kā parādīts 3. attēlā, izmantojot karstu līmi.
-
Salieciet kastīti. Lai gan tas var būt sarežģīti, to ir vieglāk sasniegt, veicot tālāk norādītās darbības.
- Ievietojot abas platformas starp divām lielajām spraugām kastes abās pusēs.
- Pirmās rokas novietošana augšējās platformas augšpusē.
- Rokas pagrieziena vītne caur roku un pēc tam augšējā platforma.
- Otrās rokas novietošana apakšējās platformas augšpusē.
- Rokas pagrieziena vītne caur otro roku un pēc tam apakšējo platformu.
- Rokas virpotāja izbīdīšana caur 3D drukātā rokas virpotāja taisnstūra atveri.
- Virpotāja otrs gals iet virs servomotora.
- Pievienojiet kastē augšējo, apakšējo un aizmugurējo daļu.
Jūsu pēdējai samontētajai kastei vajadzētu izskatīties kā sestajai bildei. Tagad jums tas jāatkārto vēl divas reizes!
Šī soļa beigās jums vajadzētu būt sešām kastēm ar trim augšup/lejup un pa kreisi/pa labi kustību sistēmām.
3. solis: ķermeņa pacelšana… KĀ?
Labs jautājums! Tas ir tad, kad nāk šie 3D drukātie slinky turētāji. Lejupielādējiet iekļauto.stl failu un izdrukājiet to, izmantojot 3D printeri. Noteikti izdrukājiet kopumā 6 turētājus 6 dažādām kastēm.
Ja esat redzējis augšējā slinky turētāja attēlu, pārsteigums ir izpostīts - tā ir mūsu Sine -ese Dragon krāsa!
4. solis: Bet šīs kastes nav tik skaistas …
Un es piekrītu! Tāpēc mēs izmantosim lāzera griezēju, lai izgrieztu daudz pievilcīgāku kastīti, kurā būtu visas šīs kastes un tās paslēptu.
Lejupielādējiet šos Adobe Illustrator failus un izgrieziet tos, izmantojot lāzera griezēju. Mākoņu dizainu ar rokām zīmējis viens no līdzautoriem. Jūtieties brīvi tos mainīt, noņemot tos ilustratora failā un pievienojot savu dizainu pēc saviem ieskatiem! Tālāk ir sniegti ieteikumi, kā visu salikt kopā.
- Salieciet un pielīmējiet visus trīs pirmā faila gabalus (externalBoxFinal_1).
- Vēl nepievienojiet gabalu no otrā faila (externalBoxFinal_2).
- Ielieciet gabalu no trešā faila (externalBoxFinal_3) kastes apakšā, un tam vajadzētu aizvērties augšpusē. Līme TIKAI kastes apakšā.
- Divreiz drukājiet iekšējās kastes. Līmējiet abus gabalus, kuros ir lieli taisnstūra caurumi. Pēc tam pielīmējiet trīs atlikušos gabalus kopā. Visbeidzot pielīmējiet to pie otra līmētā komplekta ar caurumiem.
- Novietojiet platformu lielas kastes apakšā.
- Ievietojiet visas 6 mazākās kastes attiecīgajās vietās uz platformas.
- Tagad ievietojiet gabalu no otrā faila (externalBoxFinal_2) kastes augšpusē un pielīmējiet ap malu. Augšējā gabala caurumiem jāsakrīt ar caurumiem uz mazākām kastēm. Ja nē, pārkārtojiet mazākās kastes. Mazākām kastēm vispār nepievienojiet līmi.
- Ja izmantojat maizes dēli, kura apakšā ir lipīgs gabals, novietojiet to netālu no apakšējā gabala centra vietā, kur, aizverot kastīti, maizes dēlis kopā ar fotoniem pazudīs. Apakšējā daļā ir nelielas spraugas, kas atvieglo savienojumu ar fotoniem no ārpuses.
5. solis: slinky rotaļlietas ?? Ak, vai
Pūķa ķermenis:
1. Apvienojiet trīs slinkies kopā, izmantojot karstu līmi vai lenti.
2. Izmēriet slinku garumu un diametru un izgrieziet dekoratīvā auduma gabalu.
3. Atnesiet divus auduma galus un šujiet tos kopā.
4. Kad esat pabeidzis to šūšanu, iebīdiet tos kā zeķes.
5. Šūšanas galus piešuj pie šūtā auduma.
6. solis: izdrukājiet savu pūķi
3D drukātas pūķa daļas:
1. Daļas tika ņemtas no
2. Mēs izmantojām tikai galvu, kājas un acis.
3. Pēc detaļas 3D drukāšanas izlīdziniet to, izmantojot smilšpapīru un acetonu.
4. Krāsojiet detaļas tā, kā vēlaties to izrotāt.
7. solis: laiks pastiprināt pūķi, izmantojot NeoPixels
Gaismas segments:
1. Ja vēlaties, varat vienkārši izmantot neopikselu pavedienu, lai izveidotu gaismas. (Mums beidzās šķipsnas).
2. Mēs izmantojām 20 neopikselu gaismas un savienojām tās, izmantojot vadus. Šie vadi tika pielodēti un savienoti ar fotonu, izmantojot sarkano vadu, lai tas atbilstu pūķa tēmai.
3. Jūs varat arī uzšūt savas neopikseļu gaismas uz garā auduma gabala, bet mēs tās neizmantojām, jo mums bija metālisks slinky.
Daļu montāža: Nostipriniet gaismas segmentu pūķa ķermeņa iekšpusē, izmantojot pavedienus vai vadus. Pārliecinieties, vai spējat savienot gaismas ar fotonu bāzes kastes iekšpusē. Piestipriniet galvu, kājas un asti pie ķermeņa, izmantojot līmi. Kad tie ir ievietoti, nostipriniet korpusu slinkos turētājos, kurus mēs iepriekš iespiedām. Tagad ķermenis ir gatavs programmēšanai.
8. solis: laika programmēšana
Tā kā darbam ar sešiem atsevišķiem servomotoriem mēs izmantosim divus daļiņu fotonus (viens fotons var darboties tikai ar četriem), mēs rakstīsim divus atsevišķus, bet līdzīgus kodus, kas tiks parādīti mikrokontrolleros.
Tagad par pirmo mikrokontrolleri…
Arduino failā (.ino) iekļaujiet šādas bibliotēkas un definējiet:
#include "neopixel.h"
#iekļaut "ArduinoJson.h"
#define PIXEL_PIN D4
#define PIXEL_COUNT 18
Pēc tam deklarējiet šādus mainīgos:
Adafruit_NeoPixel strip = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN);
Servo servoLeftRight_1; Servo servoUpDown_1; Servo servoLeftRight_2; Servo servoUpDown_2; int positionLeftRight_1 = 0; int positionUpDown_1 = 0; int leftRight_1 = 1; int upDown_1 = 1; int positionLeftRight_2 = 100; // ir jābūt no 0 līdz 180 (grādos) int positionUpDown_2 = 180; // ir jābūt no 0 līdz 180 (grādos) int leftRight_2 = 1; // 0 = pa kreisi, 1 = pa labi int upDown_2 = 1; // 0 = uz augšu, 1 = uz leju const size_t bufferSizeCurrent = JSON_ARRAY_SIZE (1) + JSON_OBJECT_SIZE (1) + 2*JSON_OBJECT_SIZE (2) + JSON_OBJECT_SIZE (4) + JSON_OBJECT_SIZE (5) + JSON_OBJECT_SIZE (5) + JSON_OBJECT_SIZE 390; config (5) + 76*JSON_OBJECT_SIZE (8) + 12490; String weatherArray [3]; pludiņa temperatūraArray [3]; pludiņa mitrumsArray [3]; pludiņa vējšSpeedArray [3]; Stīgu laika zīmogsArray [3]; int upDownMaxDegree [3]; int leftRightSpeed [3]; String allData5DaysForecast;
Noklikšķiniet šeit, lai uzzinātu, kā iestatīt tīmekļa āķus. Kad esat pabeidzis, pievienojiet šādas deklarācijas un funkcijas un, ja nepieciešams, veiciet atbilstošas izmaiņas:
void getWeather5DayForecast () {Particle.publish ("get_weather5DayForecast"); allData5DaysForecast = ""; } Taimeris taimerisWeatherForecast (60000, getWeather5DayForecast); void getCurrentWeather () {Particle.publish ("get_currentWeather"); } Taimeris taimerisWeatherCurrent (60000, getCurrentWeather);
Šādas funkcijas kontrolē pūķa augšup/lejup un kreiso/labo kustību:
void changeLeftRight1 () {if (leftRight_1) {positionLeftRight_1 = positionLeftRight_1 + leftRightSpeed [0]; ja (positionLeftRight_1> 100) {leftRight_1 = 0; }} else {positionLeftRight_1 = positionLeftRight_1 - leftRightSpeed [0]; ja (positionLeftRight_1 <0) {leftRight_1 = 1; }} servoLeftRight_1.write (positionLeftRight_1); }
void changeLeftRight2 () {
if (leftRight_2) {positionLeftRight_2 = positionLeftRight_2 + leftRightSpeed [1]; ja (positionLeftRight_2> 100) {leftRight_2 = 0; }} else {positionLeftRight_2 = positionLeftRight_2 - leftRightSpeed [1]; if (positionLeftRight_2 <0) {leftRight_2 = 1; }} servoLeftRight_2.write (positionLeftRight_2); }
void changeUpDown1 () {
ja (uz leju_1) {positionUpDown_1 ++; ja (positionUpDown_1> upDownMaxDegree [0]) {upDown_1 = 0; }} cits {positionUpDown_1--; ja (positionUpDown_1 <1) {upDown_1 = 1; }} servoUpDown_1.write (positionUpDown_1); }
void changeUpDown2 () {
ja (uz leju_2) {positionUpDown_2 ++; ja (positionUpDown_2> upDownMaxDegree [1]) {upDown_2 = 0; }} cits {positionUpDown_2--; ja (positionUpDown_2 <1) {upDown_2 = 1; }} servoUpDown_2.write (positionUpDown_2); }
Lai varētu mainīt kustības intervālā, tiek izveidoti taimeri.
Taimeris taimerisLeftRight1 (100, mainītLeftRight1);
Taimeris taimerisLeftRight2 (100, mainītLeftRight2); Taimeris timerUpDown1 (10, changeUpDown1); Taimeris timerUpDown2 (10, mainītUpDown2);
Tālāk beidzot tiek pievienota iestatīšanas funkcija. Noteikti veiciet atbilstošas izmaiņas koda rindās, kas attiecas uz tīmekļa āķiem.
void setup () {// sākt laika taimeri timerWeatherForecast.start (); timerWeatherCurrent.start (); // Neopikseļu sloksne.begin (); // Ievietojiet inicializāciju, piemēram, pinMode, un sāciet funkcijas šeit. // Iestatiet Micro Servo servoLeftRight_1.attach (D1); servoUpDown_1.attach (D0); servoLeftRight_2.attach (D3); servoUpDown_2.attach (D2); servoLeftRight_1.write (positionLeftRight_1); // inicializēt servo pozīciju servoUpDown_1.write (positionUpDown_1); // inicializēt servo pozīciju servoLeftRight_2.write (positionLeftRight_2); // inicializēt servo pozīciju servoUpDown_2.write (positionUpDown_2); // inicializēt servo pozīcijas taimeriLeftRight1.start (); timerLeftRight2.start (); timerUpDown1.start (); timerUpDown2.start (); // Atveriet konsoli Serial.begin (9600); kavēšanās (2000); Serial.println ("Labdien!"); // Abonējiet vietni get_weather5DayForecast un get_currentWeather webhooks Particle.subscribe ("hook-response/get_weather5DayForecast", gotWeather5DayForecast, MY_DEVICES); Particle.subscribe ("hook-response/get_currentWeather/0", gotCurrentWeatherData, MY_DEVICES); getCurrentWeather (); getWeather5DayForecast (); }
Šim projektam netiek izmantota cilpas funkcija. Mēs nevaram aizmirst funkcijas, kas nepieciešamas, lai apstrādātu no tīmekļa āķiem saņemtos datus!
void gotWeather5DayForecast (const char *notikums, const char *dati) {allData5DaysForecast += dati; // saglabā visus datus vienā virknē. int allData5DaysForecastLen = allData5DaysForecast.length (); ogļu buferis [allData5DaysForecastLen + 1]; allData5DaysForecast.toCharArray (buferis, allData5DaysForecastLen + 1); // izveidot buferi virknei int bufferLength = sizeof (buferis); DynamicJsonBuffer jsonBufferWeather (buferisLength); JsonObject & root = jsonBufferWeather.parseObject (buferis); // Pārbaudiet, vai parsēšana izdodas. if (! root.success ()) {//Serial.println("Parsing for weather 5 days prognoze … ERROR! "); atgriešanās; } int i = 1; JsonArray & list = root ["saraksts"]; for (JsonObject & currentObject: list) {if (i <3) {JsonObject & main = currentObject ["galvenais"]; pludiņa temperatūra = galvenā ["temp"]; int mitrums = galvenais ["mitrums"]; JsonObject & weather = currentObject ["laika apstākļi"] [0]; const char* weatherInfo = laika apstākļi ["galvenais"]; float windSpeed = currentObject ["vējš"] ["ātrums"]; const char* laika zīmogs = currentObject ["dt_txt"]; int tempFah = convertToFahrenheit (temperatūra); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree = servoMaxDegree; int servoIncrement = updateleftRight (windSpeed); leftRightSpeed = servoIncrement; setColor (weatherInfo, i); temperatureArray = tempFah; mitrumsArray = mitrums; weatherArray = weatherInfo; windSpeedArray = vēja ātrums; timestampArray = laika zīmogs; i ++; } cits {pārtraukums; }}}
void gotCurrentWeatherData (const char *notikums, const char *dati) {DynamicJsonBuffer jsonBufferWeather (bufferSizeCurrent); JsonObject & root = jsonBufferWeather.parseObject (dati); // Pārbaudiet, vai parsēšana izdodas. if (! root.success ()) {//Serial.println("Parsing for current weather … ERROR! "); atgriešanās; } JsonObject & weather = root ["laika apstākļi"] [0]; const char* weather_main = laika apstākļi ["galvenais"]; JsonObject & main = root ["main"]; float main_temp = main ["temp"]; int main_humidity = galvenais ["mitrums"]; pludiņš vējš_ātrums = sakne ["vējš"] ["ātrums"]; const char* laika zīmogs = sakne ["dt_txt"]; int tempFah = convertToFahrenheit (main_temp); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree [0] = servoMaxDegree; int servoIncrement = updateleftRight (vēja ātrums); leftRightSpeed [0] = servoIncrement; setColor (laika apstākļi_, 0); weatherArray [0] = weather_main; temperatureArray [0] = tempFah; mitruma masīvs [0] = galvenais mitrums; windSpeedArray [0] = vēja ātrums; timestampArray [0] = laika zīmogs; }
Zemāk varat atrast papildu funkcijas, kas kontrolē servomotoru pozīciju atjaunināšanu, temperatūras pārveidošanu no Kelvina uz Fārenheitu un gaismas diožu krāsu iestatīšanu.
int updateUpDown (float temp) {// Kartējiet grādu diapazonā no [0, 180] float servoMaxDegree = temp * 45/31 + (990/31); Serial.print ("jauna servo pakāpe:"); Serial.println (servoMaxDegree); atgriešanās servoMaxDegree; }
int updateleftRight (float windSpeed) {
// Vēja ātruma kartēšana [1, 100] pludiņa servoIncrement = windSpeed * 99 /26 + 1 diapazonā; Serial.print ("jauna servo pieauguma vērtība:"); Serial.println (servoIncrement); atgriešanās servoPalielinājums; }
int convertToFahrenheit (float tempKel) {
int tempFah = tempKel * 9,0 / 5,0 - 459,67; atgriešanās tempFah; }
void setColor (String weatherDesc, int index) {
int ledIndex = 0; ja (indekss == 0) {ledIndex = 0; } cits if (indekss == 1) {ledIndex = 6; } cits if (indekss == 2) {ledIndex = 12; } cits {atgriezties; } if (weatherDesc == "Skaidrs") {// dzeltens (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (253, 219, 62)); // dzeltena sloksne.parādīt (); kavēšanās (20); }} cits if (weatherDesc == "Mākoņi") {// pelēks priekš (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (223, 229, 237)); // pelēka josla.show (); kavēšanās (20); }} cits if (weatherDesc == "Sniegs") {// balts priekš (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (255, 225, 225)); // balta sloksne.show (); kavēšanās (20); }} cits if (weatherDesc == "Lietus") {// zils priekš (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (119, 191, 246)); // zilā sloksne.show (); kavēšanās (20); }} else {// red for (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (254, 11, 5)); // red strip.show (); kavēšanās (20); }}}
Kad esat pievienojis visu savam Arduino failam, apkopojiet to. Ja nav kļūdu, dodieties uz priekšu un mirgo kodu līdz pirmajam fotonam. Nākamais solis nodrošinās jums līdzīgu kodu, kas tiks parādīts otrajā fotonā.
9. darbība. Programmēšana turpinās
Tā kā otrā fotona kods ir gandrīz identisks pirmajam, viss kods tiek nokopēts un ielīmēts zemāk:
#ietver "ArduinoJson.h"
Servo servoLeftRight_3;
Servo servoUpDown_3;
int positionLeftRight_3 = 45;
int positionUpDown_3 = 0; int leftRight_3 = 1; int upDown_3 = 1;
config
config (5) + 76*JSON_OBJECT_SIZE (8) + 12490;
String weatherArray [3];
pludiņa temperatūraArray [3]; pludiņa mitrumsArray [3]; pludiņa vējšSpeedArray [3]; Stīgu laika zīmogsArray [3]; int upDownMaxDegree [3]; int leftRightSpeed [3];
String allData5DaysForecast;
void getWeather5DayForecast ()
{Particle.publish ("get_weather5DayForecast2"); allData5DaysForecast = ""; }
Taimeris taimerisWeatherForecast (60000, getWeather5DayForecast); 10, 800, 000 ms = 3 dienas
void getCurrentWeather ()
{Particle.publish ("get_currentWeather2"); }
Taimeris taimerisWeatherCurrent (60000, getCurrentWeather);
void changeLeftRight3 () {
if (leftRight_3) {positionLeftRight_3 = positionLeftRight_3 + leftRightSpeed [2]; ja (positionLeftRight_3> 100) {leftRight_3 = 0; }} else {positionLeftRight_3 = positionLeftRight_3 - leftRightSpeed [2]; ja (positionLeftRight_3 <0) {leftRight_3 = 1; }} servoLeftRight_3.write (positionLeftRight_3); }
void changeUpDown3 () {
ja (uz leju_3) {positionUpDown_3 ++; ja (positionUpDown_3> upDownMaxDegree [2]) {upDown_3 = 0; }} cits {positionUpDown_3--; ja (positionUpDown_3 <1) {upDown_3 = 1; }} servoUpDown_3.write (positionUpDown_3); }
Taimera taimerisLeftRight3 (100, mainītLeftRight3);
Taimeris timerUpDown3 (10, mainītUpDown3);
void setup () {
// sākt laika taimeri timerWeatherForecast.start (); timerWeatherCurrent.start (); // Ievietojiet inicializāciju, piemēram, pinMode, un sāciet funkcijas šeit. // Iestatiet Micro Servo servoLeftRight_3.attach (D1); servoUpDown_3.attach (D0);
servoLeftRight_3.write (positionLeftRight_3); // inicializēt servo pozīciju
servoUpDown_3.write (positionUpDown_3); // inicializēt servo pozīciju
timerLeftRight3.start ();
timerUpDown3.start (); // Atveriet konsoli Serial.begin (9600); kavēšanās (2000); Serial.println ("Labdien!"); // Abonējiet vietni get_weather5DayForecast un get_currentWeather webhooks Particle.subscribe ("hook-response/get_weather5DayForecast2", gotWeather5DayForecast, MY_DEVICES); Particle.subscribe ("hook-response/get_currentWeather2/0", gotCurrentWeatherData, MY_DEVICES); getCurrentWeather (); getWeather5DayForecast (); }
void gotWeather5DayForecast (const char *notikums, const char *dati)
{allData5DaysForecast += dati; // saglabā visus datus vienā virknē. int allData5DaysForecastLen = allData5DaysForecast.length (); ogļu buferis [allData5DaysForecastLen + 1]; allData5DaysForecast.toCharArray (buferis, allData5DaysForecastLen + 1); // izveidot buferi virknei int bufferLength = sizeof (buferis); DynamicJsonBuffer jsonBufferWeather (buferisLength); JsonObject & root = jsonBufferWeather.parseObject (buferis); //Serial.println(allData5DaysForecast); // Pārbaudiet, vai parsēšana izdodas. if (! root.success ()) {//Serial.println("Parsing for weather 5 days prognoze … ERROR! "); atgriešanās; } int i = 1; JsonArray & list = root ["saraksts"]; for (JsonObject & currentObject: list) {if (i <3) {JsonObject & main = currentObject ["galvenais"]; pludiņa temperatūra = galvenā ["temp"]; int mitrums = galvenais ["mitrums"]; JsonObject & weather = currentObject ["laika apstākļi"] [0]; const char* weatherInfo = laika apstākļi ["galvenais"]; float windSpeed = currentObject ["vējš"] ["ātrums"]; const char* laika zīmogs = currentObject ["dt_txt"]; int tempFah = convertToFahrenheit (temperatūra); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree = servoMaxDegree; int servoIncrement = updateleftRight (windSpeed); leftRightSpeed = servoIncrement; temperatureArray = tempFah; mitrumsArray = mitrums; weatherArray = weatherInfo; windSpeedArray = vēja ātrums; timestampArray = laika zīmogs; i ++; } cits {pārtraukums; }}}
void gotCurrentWeatherData (const char *notikums, const char *dati)
{DynamicJsonBuffer jsonBufferWeather (bufferSizeCurrent); JsonObject & root = jsonBufferWeather.parseObject (dati); //Serial.println(data); // Pārbaudiet, vai parsēšana izdodas. if (! root.success ()) {//Serial.println("Parsing for current weather … ERROR! "); atgriešanās; } JsonObject & weather = root ["laika apstākļi"] [0]; const char* weather_main = laika apstākļi ["galvenais"]; JsonObject & main = root ["main"]; float main_temp = main ["temp"]; int main_humidity = galvenais ["mitrums"]; pludiņš vējš_ātrums = sakne ["vējš"] ["ātrums"]; const char* laika zīmogs = sakne ["dt_txt"]; int tempFah = convertToFahrenheit (main_temp); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree [0] = servoMaxDegree; int servoIncrement = updateleftRight (vēja ātrums); leftRightSpeed [0] = servoIncrement; weatherArray [0] = weather_main; temperatureArray [0] = tempFah; mitruma masīvs [0] = galvenais mitrums; windSpeedArray [0] = vēja ātrums; timestampArray [0] = laika zīmogs; }
int updateUpDown (float temp) {
// Kartēt grādu diapazonā no [0, 180] float servoMaxDegree = temp * 45/31 + (990/31); Serial.print ("jauna servo pakāpe:"); Serial.println (servoMaxDegree); atgriešanās servoMaxDegree; }
int updateleftRight (float windSpeed) {
// Vēja ātruma kartēšana [1, 100] pludiņa servoIncrement = windSpeed * 99 /26 + 1 diapazonā; Serial.print ("jauna servo pieauguma vērtība:"); Serial.println (servoIncrement); atgriešanās servoPalielinājums; }
int convertToFahrenheit (float tempKel) {
int tempFah = tempKel * 9,0 / 5,0 - 459,67; atgriešanās tempFah; }
Tu to izdarīji! Jūs esat to paveicis, izmantojot projekta programmēšanas sadaļu! Tagad noteikti veiciet visus vadus un savienojumus no servomotoriem un neopikseliem līdz maizes dēlim un mikrokontrolleriem. PIEZĪME: ievietojiet papildu tapas/irbulīšus caur vertikālajām spraugām uz kastēm ķermeņa kreisajai un labajai kustībai. Otram galam jābūt savienotam ar pūķa ķermeni.
10. solis: izbaudiet savu pūķi
Apsveicam! Jūs esat izveidojis Sine-ese Dragon no nulles! Tagad viss, kas jums jādara, ir sēdēt un baudīt apkārtējo displeju!
PIEZĪME: Šis projekts tika veidots kā daļa no kursa darba, ko veica Joan Bempong un Soundarya Muthuvel. Kursa lapu var atrast šeit.
Ieteicams:
Kā: Raspberry PI 4 bez galvas (VNC) instalēšana ar RPI attēlu un attēliem: 7 soļi (ar attēliem)
Kā: Raspberry PI 4 bez galvas (VNC) instalēšana ar Rpi-imager un Pictures: Es plānoju izmantot šo Rapsberry PI daudzos jautros projektos savā emuārā. Jūtieties brīvi to pārbaudīt. Es gribēju atkal izmantot savu aveņu PI, bet manā jaunajā vietā nebija tastatūras vai peles. Pagāja laiks, kopš es izveidoju aveņu
Arduino Halloween Edition - zombiju uznirstošais ekrāns (soļi ar attēliem): 6 soļi
Arduino Helovīna izdevums - zombiju uznirstošais ekrāns (soļi ar attēliem): Vai vēlaties Helovīnā nobiedēt savus draugus un radīt kliedzošu troksni? Vai arī vienkārši gribi uztaisīt labu palaidnību? Šis zombiju uznirstošais ekrāns to var izdarīt! Šajā pamācībā es iemācīšu jums, kā viegli izveidot izlecošus zombijus, izmantojot Arduino. HC-SR0
ESP8266/Arduino SmartThings Bearded Dragon Habitat kontrolieris/monitors: 4 soļi
ESP8266/Arduino SmartThings bārdaino pūķu biotopu kontrolieris/monitors: DaVinci mūsu pūķis bija paredzēts programmatūras jaunināšanai uz viņa Vivarium kontrolieri. Es nolēmu pāriet no labās tradicionālās Arduino loģikas, kas pēdējā gada laikā ir ticami novērsta, uz ST_Anything SmartThings int
Kā lietot Dragon Rider 500 kopā ar AVR Dragon: 10 soļi
Kā lietot Dragon Rider 500 ar savu AVR Dragon: Šis pamācība ir avārijas kurss, kā izmantot dažas Ecros Technologies Dragon Rider 500 funkcijas. Lūdzu, ņemiet vērā, ka Ecros vietnē ir pieejama ļoti detalizēta lietotāja rokasgrāmata. Dragon Rider ir interfeisa dēlis
Kamera atvieglotiem laika intervāla attēliem: 22 soļi (ar attēliem)
Kamera atvieglotiem laika intervāla attēliem: es pārbaudīju vienu no citām instrukcijām par laika nobīdes filmu veidošanu. Viņš diezgan labi aptvēra filmas daļu. Viņš pastāstīja par bezmaksas programmatūru, kuru varat lejupielādēt, lai izveidotu filmas. Es sev teicu: domāju, ka redzēšu, vai varu