Агуулгын хүснэгт:
- Алхам 1: Дээш ба доош
- Алхам 2: Зүүн ба баруун талаар яах вэ?
- Алхам 3: Биеэ барих … ХЭРХЭН?
- Алхам 4: Гэхдээ эдгээр хайрцгууд тийм ч хөөрхөн биш …
- Алхам 5: Slinky Toys ?? Өө, хонгор минь
- Алхам 6: Луугаа хэвлэ
- Алхам 7: NeoPixels ашиглан луугаа дээшлүүлэх цаг боллоо
- Алхам 8: Програмчлалын цаг
- Алхам 9: Програмчлал үргэлжилж байна
- Алхам 10: Луугаа сайхан өнгөрүүлээрэй
Видео: Sine-ese Dragon: 10 алхам (зурагтай)
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:05
Sine-ese Dragon нь орчны гурван цагийн зайтай цаг агаарын урьдчилсан мэдээг хэлэхийн тулд механик хөдөлгөөн, гэрлийг ашигладаг орчны чимэглэлийн хэсэг юм. Тодорхойлолтоор хүрээлэн буй орчин нь аливаа зүйлийн ойр орчныг дүрсэлдэг; Тиймээс цаг агаарын мэдээллийг хүрээлэн буй орчны дэлгэцэнд оруулах нь зүйтэй гэж шийдсэн. Цаг агаар бол хүмүүсийн өдрийг санамсаргүйгээр өөрчилдөг тал бөгөөд энэ нь минут тутамд эсвэл бүр секунд хүртэл байнга өөрчлөгдөж байдаг мэдээллийн нэг хэсэг юм.
Хятадын луу бол "хүч чадал, хүч чадал, азын бэлгэдэл" бөгөөд Ази тив даяар соёл, уламжлалын өндөр үнэ цэнийг хадгалдаг. Хятадын луу сайн аз авчрахаас гадна "ус, хур тунадас, хар салхи, үер" -ийг хянадаг хүчтэй хүч чадалтай гэж ярьдаг. Эцэст нь Хятадын луу цаг агаарын мэдээг илэрхийлэхэд тохиромжтой гэж үзсэн.
Дүрслэл
Sine-ese Dragon-ийг гурван үндсэн гурван хэсэгт гурван үндсэн интервалаар цаг агаарын урьдчилсан мэдээг харуулдаг. 3 цагийн интервал бүрийн хувьд дараахь мэдээллийг оруулах болно.
- Цаг агаарын тодорхойлолт - одоогийн цаг агаарын мэдээллийн өнгийг тодорхойлдог.
- Температур - биеийн өндрийг тодорхойлдог
- Чийгшил - LED сегментүүд анивчдаг
- Салхины хурд - биеийн баруун, зүүн тийш хөдөлж буй хурдыг хянадаг.
Шаардлагатай материал
- 3 мм фанер/картон
- 5 мм -ийн модон алчуур эсвэл савх
- 2 ширхэгийн фотон
- 3 Зальтай тоглоом
- 6 servo мотор
- NeoPixel гэрэл (утас эсвэл дан гэрэл тус тусад нь оёдог)
- Маш олон супер цавуу
- Цахилгаан дамжуулагч утас
- Нийлэг будаг
- Чимэглэлийн даавуу
- Лазер таслагч
- 3D принтер
Алхам 1: Дээш ба доош
Sine-ese Dragon-ийг бүтээх эхний алхам бол биеийн дээш доош хөдөлгөөнийг хянадаг бүрэлдэхүүн хэсгийг бүтээх явдал юм. Ямар сэтгэл хөдөлгөм юм бэ!
-
Adobe Illustrator файлуудыг (.ai) татаж аваад лазер таслагч ашиглан хэвлээрэй.
upDownBoxWithPlatform.ai -ийг картон дээр хэвлэх ёстой
-
3D хэвлэх файлуудыг (.stl) татаж аваад дуртай 3D принтерээ ашиглан хэвлээрэй.
Өнгө нь диск эсвэл эргүүлэгчийн хувьд хамаагүй. Хоёрдахь зураг дээр дискний эргүүлэгчийг дискний нүхэнд оруулсан болно
-
Эхний хоёр бүрэлдэхүүн хэсгийг угсарч, 3-5 -р зурагт үзүүлсэн шиг наалдуулна.
- Платформ
- Дискний ховил
-
Доорх зөвлөмжийг дагаж хайрцгийг нэгтгэ.
- Сервогийн утас нь хайрцагны хажуугийн тэгш өнцөгт нээлхийгээр дамжин өнгөрөх ёстой.
- Дискний эргүүлэгчийн хамгийн богино үзүүр нь servo толгойд бэхлэгддэг бөгөөд урт төгсгөл нь хайрцагны нөгөө талын нүхээр дамжин дугуй нүхтэй байдаг. Үүнийг 6 -р зурагт үзүүлэв.
- Дискийг эргүүлэх үед платформыг тэгш байлгахын тулд бидэнд ямар нэгэн зүйл хэрэгтэй байна. Савх савыг 75 мм урт саваа болгон хайчилж ав (зураг 7), хайрцгийн дээд хэсгээс халуун цавуу ашиглан тавцангийн дээд хэсэгт наа. Модыг тавцан дээр 90 градусаар доош нь тэгшитгэсэн эсэхийг шалгаарай.
- 212 мм урт саваа тавцан дээрх хайрцагны дээд хэсгийн дунд нүхэнд оруулна.
Хөөрхөн! Одоо та лууг дээш доош чиглүүлэх бүрэн хайрцагтай (зураг 8) байна. Одоо дээрх алхамуудыг дахин хоёр удаа давтана уу!
Алхам 2: Зүүн ба баруун талаар яах вэ?
Одоо бид Синусын луугийн баруун, зүүн хөдөлгөөнийг мартаж болохгүй, тийм үү? Хоёр дахь алхам руу орцгооё!
-
Adobe Illustrator файлуудыг (.ai) татаж аваад лазер таслагч ашиглан хэвлээрэй.
- leftRightBoxWithPlatforms.ai картон дээр хэвлэх ёстой.
- armTurner.ai файлыг 3 мм зузаантай материал дээр хэвлэх ёстой.
-
3D хэвлэх файлуудыг (.stl) татаж аваад дуртай 3D принтерээ ашиглан хэвлээрэй.
Хоёр гараа хэвлэхээ мартуузай! Энд өнгө нь хамаагүй
- 3 платформ дээр халуун цавуу ашиглан хоёр платформыг угсарна.
-
Хайрцгийг нийлүүл. Үүнийг хийхэд хэцүү байж болох ч дараахь үр дүнд хүрэх нь илүү хялбар байдаг.
- Хоёр тавцанг хайрцагны хоёр талд байрлах хоёр том ангархай хооронд байрлуулна.
- Эхний гарыг дээд тавцангийн дээд хэсэгт байрлуулах.
- Гар эргүүлэгчийг гараараа, дараа нь дээд тавцангаар шургуулна.
- Хоёр дахь гараа доод тавцангийн дээд хэсэгт байрлуулах.
- Гар эргүүлэгчийг хоёр дахь гар, дараа нь доод тавцангаар шургуулна.
- 3 хэмжээст хэвлэсэн гар эргүүлэгчийн тэгш өнцөгт нээлхийгээр гар эргүүлэгчийг наах.
- Турникийн нөгөө үзүүр нь servo моторын дээд талд байрладаг.
- Дээд, доод, арын хэсгүүдийг хайрцагт нэмнэ.
Таны эцсийн угсарсан хайрцаг зургаа дахь зураг шиг харагдах ёстой. Одоо та үүнийг хоёр удаа давтах хэрэгтэй!
Энэ алхмын төгсгөлд та дээш/доош, зүүн/баруун тийш чиглэсэн гурван систем бүхий зургаан хайрцагтай байх ёстой.
Алхам 3: Биеэ барих … ХЭРХЭН?
Сайн асуулт! Тэр үед 3D хэвлэмэл бариултай эзэмшигчид орж ирдэг. Оруулсан.stl файлыг татаж аваад 3D принтер ашиглан хэвлэ. 6 өөр хайрцагт нийт 6 эзэмшигч хэвлэхээ мартуузай.
Хэрэв та дээрхи ховилтой эзэмшигчийн зургийг харсан бол гэнэтийн бэлэг сүйрсэн нь бидний Синусэ Лууны өнгө юм!
Алхам 4: Гэхдээ эдгээр хайрцгууд тийм ч хөөрхөн биш …
Тэгээд би зөвшөөрч байна! Ийм учраас бид лазер таслагч ашиглан эдгээр хайрцгуудыг багтаасан илүү дур булаам хайрцгийг хайчилж, нуух болно.
Adobe Illustrator файлуудыг татаж аваад лазер таслагч ашиглан хайчилж ав. Үүлний дизайныг хувь нэмэр оруулагчдын нэг нь гараар зурсан. Зураач файл дотроос арилгаж, өөрийн хүссэн загвараар өөрийн хүссэн загвараа нэмж оруулах замаар тэдгээрийг өөрчлөх боломжтой. Бүгдийг нэгтгэх талаар санал болгож буй алхамуудыг доор өгөв.
- Эхний файлаас (tashqiBoxFinal_1) бүх гурван хэсгийг нэгтгэн нааж болно.
- Хоёр дахь файлаас (tashqiBoxFinal_2) хараахан хэсгийг бүү нэмээрэй.
- Гурав дахь файлаас (tashqiBoxFinal_3) авсан хэсгийг хайрцгийн ёроолд тавь, энэ нь дээд талд хаагдах ёстой. ЗӨВХӨН хайрцгийн доод хэсэгт наа.
- InnerBoxesPlatform -ийг хоёр удаа хэвлэх. Том тэгш өнцөгт нүхтэй хоёр хэсгийг хооронд нь наа. Дараа нь үлдсэн гурван хэсгийг хооронд нь наа. Эцэст нь нүхтэй нөгөө наасан иж бүрдэл дээр наа.
- Платформыг том хайрцгийн доод хэсэгт байрлуул.
- Бүх 6 жижиг хайрцгийг тавцан дээрх харгалзах цэгүүдэд оруулна уу.
- Одоо хоёр дахь файлаас авсан хэсгийг (externalBoxFinal_2) хайрцгийн дээд талд байрлуулж ирмэгийг нь наа. Дээд хэсэг дээрх нүхнүүд нь жижиг хайрцагнуудын нүхнүүдтэй нийцэх ёстой. Үгүй бол жижиг хайрцагнуудаа өөрчил. Жижиг хайрцганд цавуу нэмж болохгүй.
- Хэрэв та доод талд наалдамхай хэсэг бүхий талхны хавтан ашиглаж байгаа бол хайрцгийг хаах үед талхны самбарыг фотонуудтай хамт алга болох газар байрлуулна уу. Доод хэсэг дээр жижиг ангархагууд байгаа бөгөөд та гаднаасаа Фотонтой холбогдоход хялбар болно.
Алхам 5: Slinky Toys ?? Өө, хонгор минь
Лууны бие:
1. Халуун цавуу эсвэл соронзон хальс ашиглан гурван slinkies -ийг нэгтгэнэ.
2. Залгуурын урт ба диаметрийг хэмжиж, гоёл чимэглэлийн даавууны хэсгийг хайчилж ав.
3. Даавууны хоёр үзүүрийг авчирч оёж оё.
4. Тэднийг оёж дууссаны дараа шаахайг оймс шиг шургуул.
5. Залгарсан үзүүрийг оёсон даавуунд оё.
Алхам 6: Луугаа хэвлэ
Лууны 3D хэвлэмэл хэсгүүд:
1. Эд ангиудыг https://www.thingiverse.com/thing:854575 хаягаар авсан болно.
2. Бид зөвхөн толгой, хөл, нүдийг ашигладаг байсан.
3. Хэсгийг 3D хэвлэсний дараа зүлгүүр, ацетон ашиглан тэгшлээрэй.
4. Хэсэг хэсгүүдийг хүссэнээрээ будаж чимэглээрэй.
Алхам 7: NeoPixels ашиглан луугаа дээшлүүлэх цаг боллоо
Гэрлийн сегмент:
1. Хэрэв та хүсвэл гэрэл үүсгэхийн тулд неопикселийн утас ашиглаж болно.
2. Бид 20 неопикселийн гэрэл ашиглаж, утас ашиглан холбосон. Эдгээр утаснууд дээр гагнаж, улаан утас ашиглан фотон руу холбосон бөгөөд энэ нь луугийн сэдэвтэй нийцэж байгаа юм.
3. Та мөн неопикселийн гэрлээ урт даавуун дээр оёж болно, гэхдээ бид металаар хийсэн ангархай байсан тул бид үүнийг ашиглаагүй.
Эд ангиудыг угсрах: Луугийн биеийн доторх гэрлийн хэсгийг утас эсвэл утас ашиглан бэхлээрэй. Суурь хайрцаг доторх гэрэлнүүдийг фотонтой холбох боломжтой эсэхийг шалгаарай. Толгой, хөл, сүүлийг цавуу ашиглан биед наалдана. Тэдгээрийг байрлуулсны дараа биеийг бидний өмнө нь хэвлүүлсэн слайдтай бэхэлгээнд бэхлээрэй. Одоо биеийг програмчлахад бэлэн боллоо.
Алхам 8: Програмчлалын цаг
Зургаан тусдаа servo мотортой ажиллахын тулд бид хоёр ширхэг бөөмийн фотоныг ашиглах болно (нэг фотон нь зөвхөн дөрвөн хөдөлгүүртэй ажиллах боломжтой) тул бид микроконтроллер дээр анивчуулахын тулд хоёр тусдаа боловч ижил төстэй код бичих болно.
Одоо анхны микроконтроллерын хувьд …
Arduino файлд (.ino) дараах сангуудыг оруулаад тодорхойлно.
#"neopixel.h" оруулах
#"ArduinoJson.h" -ийг оруулна уу
PIXEL_PIN D4 -ийг тодорхойлох
PIXEL_COUNT 18 -ийг тодорхойлох
Дараа нь дараах хувьсагчдыг зарлана.
Adafruit_NeoPixel зурвас = 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; // 0 -ээс 180 хооронд байх ёстой (градусаар) int positionUpDown_2 = 180; // 0 -ээс 180 хооронд байх ёстой (градусаар) int leftRight_2 = 1; // 0 = зүүн, 1 = баруун int upDown_2 = 1; // 0 = дээш, 1 = доош const size_t bufferSizeCurrent = JSON_ARRAY_SIZE (1) + JSON_OBJECT_SIZE (1) + 2*JSON_OBJECT_SIZE (2) + JSON_OBJECT_SIZE (4) + JSON_OBJEC_SIZE (4) + JSON_OBJEC_SIZE (4) + JSON_OBJEC_SIZE 390; const size_t bufferSizeForecast = 38*JSON_ARRAY_SIZE (1) + JSON_ARRAY_SIZE (38) + 2*JSON_OBJECT_SIZE (0) + 112*JSON_OBJECT_SIZE (1) + 39*JSON_OBJEC_SIZ_2_JIZ_ZIZ_ (2) (5) + 76*JSON_OBJECT_SIZE (8) + 12490; String цаг агаарArray [3]; хөвөх температурArray [3]; хөвөх чийгшилАррей [3]; swat windSpeedArray [3]; String timestampArray [3]; int upDownMaxDegree [3]; int leftRightSpeed [3]; AllData5DaysForecast мөр;
Webhooks хэрхэн тохируулах талаар энд дарж үзнэ үү. Дууссаны дараа дараах мэдэгдлүүд болон функцуудыг нэмж, шаардлагатай бол зохих өөрчлөлтүүдийг оруулна уу.
хүчингүй getWeather5DayForecast () {Particle.publish ("get_weather5DayForecast"); allData5DaysForecast = ""; } Цаг хэмжигчWeatherForecast (60000, getWeather5DayForecast); void getCurrentWeather () {Particle.publish ("get_currentWeather"); } Таймер таймерWeatherCurrent (60000, getCurrentWeather);
Дараах функцууд луугийн дээш/доош, зүүн/баруун хөдөлгөөнийг хянадаг.
void changeLeftRight1 () {if (leftRight_1) {positionLeftRight_1 = positionLeftRight_1 + leftRightSpeed [0]; if (positionLeftRight_1> 100) {leftRight_1 = 0; }} өөр {positionLeftRight_1 = positionLeftRight_1 - leftRightSpeed [0]; if (positionLeftRight_1 <0) {leftRight_1 = 1; }} servoLeftRight_1. бичих (positionLeftRight_1); }
хүчингүй өөрчлөлт LeftRight2 () {
if (leftRight_2) {positionLeftRight_2 = positionLeftRight_2 + leftRightSpeed [1]; if (positionLeftRight_2> 100) {leftRight_2 = 0; }} өөр {positionLeftRight_2 = positionLeftRight_2 - leftRightSpeed [1]; if (positionLeftRight_2 <0) {leftRight_2 = 1; }} servoLeftRight_2. бичих (positionLeftRight_2); }
хүчингүй өөрчлөлтUpDown1 () {
if (upDown_1) {positionUpDown_1 ++; if (positionUpDown_1> upDownMaxDegree [0]) {upDown_1 = 0; }} өөр {positionUpDown_1--; if (positionUpDown_1 <1) {upDown_1 = 1; }} servoUpDown_1.write (positionUpDown_1); }
хүчингүй өөрчлөлтUpDown2 () {
if (upDown_2) {positionUpDown_2 ++; if (positionUpDown_2> upDownMaxDegree [1]) {upDown_2 = 0; }} өөр {positionUpDown_2--; if (positionUpDown_2 <1) {upDown_2 = 1; }} servoUpDown_2.write (positionUpDown_2); }
Хөдөлгөөнийг интервалаар өөрчлөх чадвартай байхын тулд таймеруудыг бий болгодог.
Таймер таймерLeftRight1 (100, changeLeftRight1);
Цаг хэмжигчLeftRight2 (100, changeLeftRight2); Таймер таймерUpDown1 (10, changeUpDown1); Таймер таймерUpDown2 (10, changeUpDown2);
Тохируулах функцийг эцэст нь дараа нь нэмнэ. Webhooks -той холбоотой кодын мөрөнд зохих өөрчлөлт оруулахаа мартуузай.
void setup () {// цаг агаарын таймерыг эхлүүлэх timerWeatherForecast.start (); timerWeatherCurrent.start (); // Neopixels зурвас.begin (); // pinMode шиг эхлүүлэлтийг оруулаад энд функцийг эхлүүлнэ үү. // Micro Servo servoLeftRight_1.attach (D1) тохируулах; servoUpDown_1.attach (D0); servoLeftRight_2. хавсаргах (D3); servoUpDown_2. хавсаргах (D2); servoLeftRight_1. бичих (positionLeftRight_1); // servoUpDown_1.write (positionUpDown_1) servo байрлалыг эхлүүлэх; // servoLeftRight_2 -ийн servo байрлалыг эхлүүлэх.write (positionLeftRight_2); // servo байрлалыг эхлүүлэх servoUpDown_2.write (positionUpDown_2); // servo байрлалыг эхлүүлэх timerLeftRight1.start (); timerLeftRight2.start (); timerUpDown1.start (); timerUpDown2.start (); // Консол нээх Serial.begin (9600); саатал (2000); Serial.println ("Сайн байна уу!"); // get_weather5DayForecast ба get_currentWeather вэбhooks Particle-д бүртгүүлэх.subscribe ("hook-response/get_weather5DayForecast", gotWeather5DayForecast, MY_DEVICES); Particle.subscribe ("дэгээ-хариу/get_currentWeather/0", gotCurrentWeatherData, MY_DEVICES); getCurrentWeather (); getWeather5DayForecast (); }
Энэ төслийн хувьд давталтын функцийг ашигладаггүй. Webhooks -аас хүлээн авсан өгөгдлийг зохицуулах функцийг бид мартаж чадахгүй байна!
void gotWeather5DayForecast (const char *event, const char *data) {allData5DaysForecast += өгөгдөл; // бүх өгөгдлийг нэг мөрөнд хадгална. int allData5DaysForecastLen = allData5DaysForecast.length (); char буфер [allData5DaysForecastLen + 1]; allData5DaysForecast.toCharArray (буфер, allData5DaysForecastLen + 1); // мөрөнд буфер үүсгэх int bufferLength = sizeof (buffer); DynamicJsonBuffer jsonBufferWeather (bufferLength); JsonObject & root = jsonBufferWeather.parseObject (буфер); // Шинжилгээ амжилттай хийгдсэн эсэхийг шалгаарай. if (! root.success ()) {//Serial.println("5 хоногийн цаг агаарын урьдчилсан мэдээг нарийвчлан судлах нь … АЛДАА! "); буцах; } int i = 1; JsonArray & list = root ["жагсаалт"]; for (JsonObject & currentObject: list) {if (i <3) {JsonObject & main = currentObject ["main"]; хөвөх температур = үндсэн ["температур"]; int чийгшил = үндсэн ["чийгшил"]; JsonObject & weather = currentObject ["цаг агаар"] [0]; const char* weatherInfo = цаг агаар ["үндсэн"]; float windSpeed = currentObject ["салхи"] ["хурд"]; const char* timestamp = currentObject ["dt_txt"]; int tempFah = convertToFahrenheit (температур); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree = servoMaxDegree; int servoIncrement = updateleftRight (windSpeed); leftRightSpeed = servoIncrement; setColor (цаг агаарын мэдээлэл, i); temperatureArray = tempFah; чийгшилАррей = чийгшил; weatherArray = цаг агаарын мэдээлэл; windSpeedArray = салхины хурд; timestampArray = цагийн тэмдэг; би ++; } өөр {завсарлага; }}}
void gotCurrentWeatherData (const char *event, const char *data) {DynamicJsonBuffer jsonBufferWeather (bufferSizeCurrent); JsonObject & root = jsonBufferWeather.parseObject (өгөгдөл); // Шинжилгээ амжилттай хийгдсэн эсэхийг шалгаарай. if (! root.success ()) {//Serial.println("Одоогийн цаг агаарыг шинжилж байна … АЛДАА! "); буцах; } JsonObject & weather = root ["цаг агаар"] [0]; const char* weather_main = цаг агаар ["үндсэн"]; JsonObject & main = root ["үндсэн"]; float main_temp = main ["temp"]; int main_humidity = үндсэн ["чийгшил"]; float wind_speed = root ["салхи"] ["хурд"]; const char* timestamp = root ["dt_txt"]; int tempFah = convertToFahrenheit (main_temp); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree [0] = servoMaxDegree; int servoIncrement = updateleftRight (салхины хурд); leftRightSpeed [0] = servoIncrement; setColor (цаг агаарын_майн, 0); weatherArray [0] = цаг агаарын_майн; temperatureArray [0] = tempFah; чийгшил Арраэй [0] = үндсэн_ чийгшил; windSpeedArray [0] = салхины хурд; timestampArray [0] = цагийн тэмдэг; }
Доороос та servo моторын байрлалыг шинэчлэх, температурыг Келвинээс Фаренгейт рүү хөрвүүлэх, LED -ийн өнгийг тохируулах нэмэлт функцуудыг олох боломжтой.
int updateUpDown (float temp) {// Зэрэглэлийг [0, 180] float servoMaxDegree = temp * 45/31 + (990 /31) мужид тааруулж харуулна; Serial.print ("шинэ servo зэрэг:"); Serial.println (servoMaxDegree); servoMaxDegree -ийг буцаах; }
int updateleftRight (хөвөх windSpeed) {
// Салхины хурдыг [1, 100] хөвөх servoIncrement = windSpeed * 99 /26 + 1 хүртэлх хязгаарт зурна уу; Serial.print ("шинэ servo increment value:"); Serial.println (servoIncrement); буцах servoIncrement; }
int convertToFahrenheit (float tempKel) {
int tempFah = tempKel * 9.0 / 5.0 - 459.67; буцах tempFah; }
void setColor (String weatherDesc, int index) {
int ledIndex = 0; if (index == 0) {ledIndex = 0; } өөр бол (индекс == 1) {ledIndex = 6; } if if (index == 2) {ledIndex = 12; } өөр {буцах; } if (weatherDesc == "Clear") {// yellow for (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (253, 219, 62)); // шар зурвас.шоу (); саатал (20); }} else if (weatherDesc == "Clouds") {// grey for (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (223, 229, 237)); // саарал зурвас.show (); саатал (20); }} else if (weatherDesc == "Snow") {// white for (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (255, 225, 225)); // цагаан зурвас.шоу (); саатал (20); }} else if (weatherDesc == "Rain") {// blue for (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (119, 191, 246)); // цэнхэр зурвас.show (); саатал (20); }} else {// red for (int j = ledIndex; j <ledIndex+6; j ++) {strip.setPixelColor (j, strip. Color (254, 11, 5)); // улаан зурвас.шоу (); саатал (20); }}}
Та Arduino файлдаа бүх зүйлийг нэмж оруулсны дараа үүнийг эмхэтгээрэй. Хэрэв ямар ч алдаа байхгүй бол үргэлжлүүлээд кодыг анхны Photon руу асаана уу. Дараагийн алхам нь хоёрдахь Photon дээр харагдах ижил төстэй кодыг танд өгөх болно.
Алхам 9: Програмчлал үргэлжилж байна
Хоёрдахь Photon -ийн код нь эхнийхтэй бараг ижил байдаг тул кодыг бүхэлд нь хуулж буулгасан болно.
#"ArduinoJson.h" -ийг оруулна уу
Servo servoLeftRight_3;
Servo servoUpDown_3;
int positionLeftRight_3 = 45;
int positionUpDown_3 = 0; int leftRight_3 = 1; int upDown_3 = 1;
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_ (JOJ_SIZ)
const size_t bufferSizeForecast = 38*JSON_ARRAY_SIZE (1) + JSON_ARRAY_SIZE (38) + 2*JSON_OBJECT_SIZE (0) + 112*JSON_OBJECT_SIZE (1) + 39*JSON_OBJEC_SIZ_2_JIZ_ZIZ_ (2) (5) + 76*JSON_OBJECT_SIZE (8) + 12490;
String цаг агаарArray [3];
хөвөх температурArray [3]; хөвөх чийгшилАррей [3]; swat windSpeedArray [3]; String timestampArray [3]; int upDownMaxDegree [3]; int leftRightSpeed [3];
AllData5DaysForecast мөр;
void getWeather5DayForecast ()
{Particle.publish ("get_weather5DayForecast2"); allData5DaysForecast = ""; }
Цаг хэмжигчWeatherForecast (60000, getWeather5DayForecast); // 10, 800, 000 мс = 3 хоног
void getCurrentWeather ()
{Particle.publish ("get_currentWeather2"); }
Цаг хэмжигчWeatherCurrent (60000, getCurrentWeather);
хүчингүй өөрчлөлт LeftRight3 () {
if (leftRight_3) {positionLeftRight_3 = positionLeftRight_3 + leftRightSpeed [2]; if (positionLeftRight_3> 100) {leftRight_3 = 0; }} өөр {positionLeftRight_3 = positionLeftRight_3 - leftRightSpeed [2]; if (positionLeftRight_3 <0) {leftRight_3 = 1; }} servoLeftRight_3. бичих (positionLeftRight_3); }
хүчингүй өөрчлөлтUpDown3 () {
if (upDown_3) {positionUpDown_3 ++; if (positionUpDown_3> upDownMaxDegree [2]) {upDown_3 = 0; }} өөр {positionUpDown_3--; if (positionUpDown_3 <1) {upDown_3 = 1; }} servoUpDown_3.write (positionUpDown_3); }
Цаг хэмжигчLeftRight3 (100, changeLeftRight3);
Таймер таймерUpDown3 (10, changeUpDown3);
хүчингүй тохиргоо () {
// цаг агаарын таймерыг эхлүүлэх timerWeatherForecast.start (); timerWeatherCurrent.start (); // pinMode шиг эхлүүлэлтийг оруулаад энд функцийг эхлүүлнэ үү. // Micro Servo servoLeftRight_3.attach (D1) тохируулах; servoUpDown_3. хавсаргах (D0);
servoLeftRight_3. бичих (positionLeftRight_3); // servo байрлалыг эхлүүлэх
servoUpDown_3. бичих (positionUpDown_3); // servo байрлалыг эхлүүлэх
timerLeftRight3.start ();
timerUpDown3.start (); // Консол нээх Serial.begin (9600); саатал (2000); Serial.println ("Сайн байна уу!"); // get_weather5DayForecast ба get_currentWeather вэбhooks 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 *event, const char *data)
{allData5DaysForecast += өгөгдөл; // бүх өгөгдлийг нэг мөрөнд хадгална. int allData5DaysForecastLen = allData5DaysForecast.length (); char буфер [allData5DaysForecastLen + 1]; allData5DaysForecast.toCharArray (буфер, allData5DaysForecastLen + 1); // мөрөнд буфер үүсгэх int bufferLength = sizeof (buffer); DynamicJsonBuffer jsonBufferWeather (bufferLength); JsonObject & root = jsonBufferWeather.parseObject (буфер); //Serial.println(allData5DaysForecast); // Шинжилгээ амжилттай хийгдсэн эсэхийг шалгаарай. if (! root.success ()) {//Serial.println("5 хоногийн цаг агаарын урьдчилсан мэдээг нарийвчлан судлах нь … АЛДАА! "); буцах; } int i = 1; JsonArray & list = root ["жагсаалт"]; for (JsonObject & currentObject: list) {if (i <3) {JsonObject & main = currentObject ["main"]; хөвөх температур = үндсэн ["температур"]; int чийгшил = үндсэн ["чийгшил"]; JsonObject & weather = currentObject ["цаг агаар"] [0]; const char* weatherInfo = цаг агаар ["үндсэн"]; float windSpeed = currentObject ["салхи"] ["хурд"]; const char* timestamp = currentObject ["dt_txt"]; int tempFah = convertToFahrenheit (температур); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree = servoMaxDegree; int servoIncrement = updateleftRight (windSpeed); leftRightSpeed = servoIncrement; temperatureArray = tempFah; чийгшилАррей = чийгшил; weatherArray = цаг агаарын мэдээлэл; windSpeedArray = салхины хурд; timestampArray = цагийн тэмдэг; би ++; } өөр {завсарлага; }}}
void gotCurrentWeatherData (const char *үйл явдал, const char *өгөгдөл)
{DynamicJsonBuffer jsonBufferWeather (bufferSizeCurrent); JsonObject & root = jsonBufferWeather.parseObject (өгөгдөл); //Serial.println(data); // Шинжилгээ амжилттай хийгдсэн эсэхийг шалгаарай. if (! root.success ()) {//Serial.println("Одоогийн цаг агаарыг шинжилж байна … АЛДАА! "); буцах; } JsonObject & weather = root ["цаг агаар"] [0]; const char* weather_main = цаг агаар ["үндсэн"]; JsonObject & main = root ["үндсэн"]; float main_temp = main ["temp"]; int main_humidity = үндсэн ["чийгшил"]; float wind_speed = root ["салхи"] ["хурд"]; const char* timestamp = root ["dt_txt"]; int tempFah = convertToFahrenheit (main_temp); int servoMaxDegree = updateUpDown (tempFah); upDownMaxDegree [0] = servoMaxDegree; int servoIncrement = updateleftRight (салхины хурд); leftRightSpeed [0] = servoIncrement; weatherArray [0] = цаг агаарын_майн; temperatureArray [0] = tempFah; чийгшил Арраэй [0] = үндсэн_ чийгшил; windSpeedArray [0] = салхины хурд; timestampArray [0] = цагийн тэмдэг; }
int updateUpDown (хөвөх температур) {
// Зэрэглэлийг [0, 180] float servoMaxDegree = temp * 45/31 + (990 /31) мужид байршуулна уу; Serial.print ("шинэ servo зэрэг:"); Serial.println (servoMaxDegree); servoMaxDegree -ийг буцаах; }
int updateleftRight (хөвөх windSpeed) {
// Салхины хурдыг [1, 100] хөвөх servoIncrement = windSpeed * 99 /26 + 1 хүртэлх хязгаарт зурна уу; Serial.print ("шинэ servo increment value:"); Serial.println (servoIncrement); буцах servoIncrement; }
int convertToFahrenheit (float tempKel) {
int tempFah = tempKel * 9.0 / 5.0 - 459.67; буцах tempFah; }
Та үүнийг хийсэн! Та төслийн програмчлалын хэсгээр дамжуулж чадсан! Одоо servo мотор, неопикселээс талх болон микроконтроллер хүртэлх бүх утас, холболтыг хийхээ мартуузай. ТАЙЛБАР: биеийн зүүн ба баруун хөдөлгөөнд зориулж хайрцагны босоо завсраар нэмэлт алчуур/савх оруулах. Нөгөө үзүүр нь луугийн биетэй холбогдсон байх ёстой.
Алхам 10: Луугаа сайхан өнгөрүүлээрэй
Баяр хүргэе! Та Sine-ese Dragon-ийг эхнээс нь бүтээсэн! Одоо хийх ёстой зүйл бол эргэн тойрондоо суугаад хүрээлэн буй орчныхоо дэлгэцийг үзэх явдал юм!
ТАЙЛБАР: Энэхүү төслийг Жоан Бемпонг, Саундарья Мутювел нарын хийсэн ажлын нэг хэсэг болгон барьсан болно. Хичээлийн хуудсыг эндээс олж болно.
Зөвлөмж болгож буй:
Dragon Escape: 3 алхам
Dragon Escape: Үүнийг code.org дээр кодлох болно. Тоглоомын бүх үндэс нь луунаас зайлсхийж, хий үзэгдлийг олж авахын тулд тодорхой тооны удаа барих явдал юм. Та найзуудаа өөрийн хүссэнээр өөрчилж болох энэхүү гайхалтай тоглоомын санаагаар гайхшруулж чадна
Arduino Uno ашиглан акустик левитаци Алхам алхам (8 алхам): 8 алхам
Arduino Uno-тай акустик Levitation Алхам алхамаар (8 алхам): хэт авианы дууны дамжуулагч L298N Dc эмэгтэй адаптерийн эрэгтэй тэжээлийн тэжээлийн хангамж Arduino UNOBreadboard Энэ нь хэрхэн ажилладаг вэ: Нэгдүгээрт, та кодыг Arduino Uno-д байршуулдаг (энэ нь дижитал төхөөрөмжөөр тоноглогдсон микроконтроллер юм. кодыг хөрвүүлэх аналог портууд (C ++)
Болт - DIY утасгүй цэнэглэх шөнийн цаг (6 алхам): 6 алхам (зурагтай)
Болт - DIY утасгүй цэнэглэх шөнийн цаг (6 алхам): Индуктив цэнэглэгч (утасгүй цэнэглэх эсвэл утасгүй цэнэглэх гэж нэрлэдэг) нь утасгүй цахилгаан дамжуулах төрөл юм. Энэ нь цахилгаан соронзон индукцийг ашиглан зөөврийн төхөөрөмжүүдийг цахилгаан эрчим хүчээр хангадаг. Хамгийн түгээмэл програм бол Qi утасгүй цэнэглэгч юм
Arduino автомат сүүдэрлэх дэлгэцийн төсөлд алхам алхмаар мотор, жолооч сонгох: 12 алхам (зурагтай)
Arduino автоматжуулсан сүүдэртэй дэлгэцийн төслийн алхам ба моторыг сонгох: Энэхүү зааварчилгаанд би Автомат Сүүдэрт Дэлгэцийн прототипийн төслийн хувьд шаталсан мотор ба драйверыг сонгох алхамуудыг хийх болно. Сүүдэр дэлгэц нь гараар хийсэн хамгийн алдартай, хямд Coolaroo загварууд бөгөөд би үүнийг солихыг хүссэн
Dragon Rider 500 -ийг AVR Dragon -тойгоо хэрхэн ашиглах вэ: 10 алхам
Dragon Rider 500 -ийг AVR Dragon -тойгоо хэрхэн ашиглах вэ: Энэхүү зааварчилгаа нь Ecros Technologies -ийн Dragon Rider 500 -ийн зарим онцлог шинж чанаруудыг хэрхэн ашиглах талаар сурах болно. Ecros вэбсайт дээр маш дэлгэрэнгүй хэрэглэгчийн гарын авлага байдаг гэдгийг анхаарна уу. Dragon Rider бол интерфэйсийн самбар юм