Агуулгын хүснэгт:
- Алхам 1: Материал ба багаж хэрэгсэл
- Алхам 2: Цахилгаан хэлхээг угсрах
- Алхам 3: MCU -г анивчуулах
- Алхам 4: Хэлхээний бүрхүүлийг угсрах
- Алхам 5: Тоног төхөөрөмжийг хянагчтай холбох
- Алхам 6: Хянагчийг турших
- Алхам 7: Консолын оролтыг ашиглан I2C ашиглан тохируулах
- Алхам 8: Дараагийн алхамууд
Видео: IOT123 - Нарны тракер - Хянагч: 8 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Энэ бол зааварчилгааны өргөтгөл юм
IOT123 - SOLAR TRACKER - TILT/PANEL, PANEL FRAME, LDR MOUNTS RIG. Энд бид servo -ийн хянагч, нарны байршлын мэдрэгч дээр анхаарлаа төвлөрүүлдэг. Энэхүү загвар нь 2 MCU ашиглах болно гэдгийг анхаарах нь чухал юм: нэг нь (3.3V 8mHz Arduino Pro Mini) нарны трекер, таны мэдрэгч/жүжигчдэд зориулсан нэг бие даасан MCU.
Энэ бол 0.3 хувилбар юм
Сэтгэл ханамжийн дараа бүх төслүүдийг нийтлэхийн оронд би тасралтгүй нэгтгэх дасгал хийж, хүссэн зүйлээ өөрчилж, илүү олон удаа хүргэх болно. Батерей цэнэглэгчийн хувьд зааварчилгаа өгөх өөр зүйлийг бичих болно, хянагчийн програм хангамж/техник хангамжийн оновчлол дууссаны дараа. Үүнийг хийх явцад оновчлол хаана хэрэгтэй байгааг би хэлэх болно.
Энэхүү хандлагын нэг шалтгаан нь үйлчлүүлэгчдийн санал хүсэлт юм. Хэрэв залуус танд хэрэгтэй гэж бодож байгаа эсвэл илүү сайн арга барилтай байгаа бол саналаа хэлээрэй, гэхдээ би бүх зүйлийг танд өгч чадахгүй, магадгүй танд тохирсон хугацаанд хүргэж чадахгүй гэдгийг санаарай. Эдгээр тайлбар нь ач холбогдол багатай мэт санагдаж байгаа тул тэдгээрийг энэ нийтлэлээс устгах болно.
Үүнд юу багтдаг вэ:
- Нарны ойролцоо байршлыг мэдрэхийн тулд анхны зааварчилгааны LDR -ийг ашиглана уу.
- Сервуудыг нар руу харахын тулд хөдөлгө.
- Хөдөлгөөний мэдрэмжийн сонголтууд.
- Нар руу шилжих үед алхамын хэмжээг сонгох сонголтууд.
- Серво дээр ашигладаг өнцгийн хязгаарлалтын сонголтууд.
- Хөдөлгөөнийг хойшлуулах сонголтууд.
- MCU -ийн хооронд утгыг тохируулах/авах I2C интерфэйс.
- Хөдөлгөөний хооронд гүн нойрсох.
Үүнд юу ороогүй болно (мөн үүнийг цаг тухайд нь авч үзэх болно):
- Зөвхөн өдрийн цагаар цахилгаан хэрэглэдэг.
- Үүр цайх байрлалыг санаж, үдшийн бүрий болоход тийшээ очих.
- Зохицуулагчийг MCU -аас хасах.
- MCU дээрх LED (ууд) -ийг идэвхгүй болгох.
- Хүчийг RAW биш VCC -ээр дахин чиглүүлэх.
- USB -ээс Цуваа TTL хөрвүүлэгч рүү зохицуулалттай тэжээлгүйгээр анивчихад туслах арга замыг бий болгох.
- Батерейны хүчдэлийн хяналт.
ТҮҮХ
2017 оны 12 -р сарын 20 V0.1 КОД
Анхны хувилбар нь гэрлийн эх үүсвэрийг хянадаг, үргэлж асдаг, цэнэглэдэггүй
2018 оны 1 -р сарын 7 V0.2 КОД
-
ТОНОГ ТӨХӨӨРӨМЖИЙН ӨӨРЧЛӨЛТ
- I2C тээглүүрийг нэмнэ үү
- Servo GND -д шилжүүлэгчийг нэмнэ үү
- Хянагчийн хайрцгийн хайрцган дээр хэвлэсэн шошго
-
ПРОГРАММЫН ӨӨРЧЛӨЛТ
- EEPROM -ээс тохиргоог уншина уу
- I2C автобусыг өөр MCU -ийн боол болгон дэмждэг (3.3V)
- I2C ашиглан тохиргоог тохируулна уу
- I2C -ээр идэвхжүүлсэн тохиргоог хийнэ үү
- I2C ашиглан тохиргоог аваарай
- I2C (одоогоор идэвхжсэн, одоогийн гэрлийн эрч хүч) ашиглан ажиллах цагийн шинж чанарыг олж авах
- Цуваа бүртгэлийг устгах (энэ нь I2C утгуудад нөлөөлсөн)
2018 оны 1 -р сарын 19 V0.3 КОД
-
ТОНОГ ТӨХӨӨРӨМЖ
Шошго шинэчлэгдсэн. Switch нь CONFIG эсвэл TRACK горимыг сонгоход ашиглагддаг
-
ПРОГРАММ
- I2C нь зөвхөн тохиргоонд ашиглагддаг
- Хянагч нь хяналтыг эхлүүлэхээс өмнө 5 секунд хүлээдэг бөгөөд гараа хөдөлгөх боломжийг олгодог
- I2C тохиргоог ашиглахын тулд SPDT нь CONFIG дээр нэгжийн гутал хэлбэрээр байх ёстой
- Хөдөлгөөнийг хянах хооронд унтах горим нь унтах горимд байна.
Алхам 1: Материал ба багаж хэрэгсэл
Одоо Билл материал, эх сурвалжийн бүрэн жагсаалт байна.
- 3D хэвлэсэн эд анги.
- Arduino Pro Mini 3.3V 8 мГц
- 4х6 см хэмжээтэй хоёр талт прототип ПХБ -ийн бүх нийтийн хэвлэмэл хэлхээний самбар (талыг нь хасах болно)
- 40P эрэгтэй 1 толгой толгой (хэмжээгээр нь огтолно).
- 40P эмэгтэй толгойн 1 хэсгийг (хэмжээгээр нь огтолно).
- 4 унтраалттай 10K 1/4W хүчдэлийн резистор.
- Холбох утас.
- Гагнуур ба төмөр.
- 20 унтраалгатай 4G x 6мм хэмжээтэй зэвэрдэггүй хайрцагны толгой өөрөө түншдэг эрэг.
- 4 унтраалга 4G x 6мм зэвэрдэггүй тоолууртай өөрөө түншдэг эрэг.
- 1 унтраалттай 3.7V LiPo зай ба эзэмшигч (2P дупонт холбогчоор дуусгавар болно).
- 1 унтраах 2P эрэгтэй баруун өнцгийн толгой
- 1 унтраах SPDT унтраалга 3 зүү 2.54 мм давирхай
- Хүчтэй цианоакрилат цавуу
- Dupont холбогч эмэгтэй 1P толгой (1 цэнхэр унтраах, 1 ногоон унтраах).
Алхам 2: Цахилгаан хэлхээг угсрах
Одоогоор хэлхээнд хүчдэл хуваагч хэлхээ байхгүй байна (вольт тоолуур).
- 4х6 см хэмжээтэй хоёр талт прототип бүхий ПХБ -ийн бүх нийтийн хэвлэмэл хэлхээний самбарыг урт тэнхлэгээр нь хагасаар нь хайчилж ав.
-
40P эрэгтэй толгой хэсгийг хэсэг болгон хайчилж ав.
- 12 цагт 2 хямдралтай
- 3P 3P
- 2P -ээс 6 хямдралтай.
-
40P эмэгтэй толгой хэсгийг хэсэг болгон хайчилж ав.
- 12 цагт 2 хямдралтай
- 1 цаг 6P
- Solder 2 off 12Photale header -ийг харуулав.
- 3P эрэгтэй (нэмэлт) толгойноос салгасан тусгаарлагчийг SPDT шилжүүлэгчийн доод талд цианоакрилат цавуугаар наа.
- Нөгөө талд нь 6 унтраах 2P, 2 унтраалттай 3Pmale толгой ба SPDT унтраалгыг зураг дээр үзүүлсэн шиг гагнана.
- GND зүү толгой (#2 хар) ба A0 - A3 толгойн зүү (#5, #6, #7, #8), дараа нь нүхээр дамжуулж 10K резисторыг (A, B, C, D хар) 4 унтраана. шар) зураг шиг (3 зураг + 1 диаграм).
- LDR PINS гагнуурын PINS №4, #6, #8, #10 -аас 3.3V -ийг судалж, VCC толгойн толгой руу (ногоон) хүртэл нүх гарга.
- ПИНС #1, #12, #15 руу гагнах (улаан) зураг дээр үзүүлсэн шиг эмэгтэй толгойн талд 3.3V -ийг тэмдэглэ.
- 3.3V хажуу талаас (улаан) RAW толгойн PIN 1 дугаартай гагнасан нүхээр дамжуулна.
- Зургийн дагуу 11 -р ПИН дугаараас улбар шар өнгийн холболтыг нүхээр хийж, эмэгтэй зүүг нөгөө тал дээр гагнана.
- #20 -аас #30 хүртэл, 31 -ээс #13, #16 хүртэл цэнхэр өнгийн цэнхэр утсыг мөрдөж, гагнана.
- Гагнуурын эмэгтэй толгойн дугаар #11 -ийн эрэгтэй толгойн дугаар #11 -ийг нүхээр дамжуулна.
- Эмэгтэй 1P толгойтой (1 цэнхэр, ногоон 1 унтраалттай) 30 мм урттай 2 дупонт холбогчийг бэлтгэ. Тууз ба цагаан тугалганы нөгөө үзүүр.
- Гагнуурын цэнхэр Dupont утас #28; гагнуурын ногоон Dupont утас #29.
- Arduino -ийн дээд талд 6P эмэгтэй толгойг гагнаж засна.
- Arduino -ийн дээд талд 2 -р тэгш өнцөгт эмэгтэй толгойг #29 ба #30 -ийг засаад дараа нь гагнана.
- Arduino -ийн доод талд 12P -ийн 2 ба 1 -ийн 3P эрэгтэй тээглүүрийг бэхлээд дараа нь гагнана.
- ПХБ -ийн 12P эмэгтэй толгойн хэсэгт Arduino эрэгтэй 12P тээглүүрийг оруулна уу.
Алхам 3: MCU -г анивчуулах
Arduino Pro Mini нь FTDI232 USB -ээс TTL хөрвүүлэгч ашиглан 6P эмэгтэй толгой ашиглан хялбархан гэрэлтдэг. Дээрх зургийг үзээд 2 самбарын тохируулгыг үзнэ үү.
3.3V тохиргоог таны FTDI232 дээр сонгосон эсэхийг шалгаарай. Доорх кодыг ашиглан энд байгаа зааврыг дагана уу (GIST -ийн линкийг ашиглана уу).
Бага хүчирхэг номын санг (хавсаргасан ба https://github.com/rocketscream/Low-Power) суулгах шаардлагатай.
Arduino Pro Mini + ПХБ -ийг бүрхүүлд суулгасны дараа толгойн тээглүүр ил гарсан тул анивчих боломжтой хэвээр байна. Толгойг ил гаргадаг Panel Frame -аас Controller Unit -ийг салгахад л болно.
I2C/EEPROM тохиргоотой налалтын тогны нарны хэмжигч ба хөдөлгөөн хоорондын унтах мөчлөг. Унтах мөчлөгийн үргэлжлэх хугацаа нь үргэлжлэх тусам буурдаг боловч энэ нь хангалттай юм
/* |
* кодоос өөрчилсөн |
* Матиас Лерой |
* |
* V0.2 ӨӨРЧЛӨЛТ |
** I2C СЭТГЭХ |
** EEPROM -ийг тохируулах |
** ЦУВРАЛЫН ҮРГЭЛИЙГ ХАСАХ - НӨЛӨӨЛСӨН I2C |
** МӨРГӨЛИЙГ ИДЭВХ/ИДЭВХЖҮҮЛЭХ |
** Сервүүдийг I2C -ээр хязгаарлах |
** I2C -ээр дамжуулан одоогийн гүйдлийг уншаарай |
* V0.3 ӨӨРЧЛӨЛТ |
** 2 горимыг солих - TRACK (NO I2C) ба Тохиргоо (I2C -ийг ашигладаг) |
** ЗАМЫН ХЭРЭГЛЭЭД НИЙТЭХ (ХОЁРДУГААР БҮЛЭГТЭЙ БАЙДЛААС ӨМЧЛӨХ ХЭРЭГТЭЙ БАЙХ) |
** Нойрсох/СЭРЭХ ҮЙЛЧИЛГЭЭ/АТТАЦИЙН ҮЙЛЧИЛГЭЭ (Транзисторыг байнга ашигладаг) |
** Тохируулгатай анхны байрлалыг хасах (ХАМГААЛАХ) |
** Тохируулгатай СЭРЭХ СЕКУНДИЙГ ХАГАСГАХ (ХЭРЭГЛЭХ) |
** Тохиргоог идэвхжүүлж, идэвхгүй болгох (хасах) |
** ИДЭВХЖҮҮЛСЭН ТРЭГЖЭЭРИЙГ ХАГААХ (ТОНОГ ТӨХӨӨРМӨРИЙН ШИЛЖГЭЭГ АШИГЛАХ) |
** ХҮЧИРГЭЭГЭЭР ХААЛГАА АВАХ - I2C БҮТЭЭГДЭХҮҮНИЙГ ОНЦГОЙ ХЭЛЭХ болно |
** I2C -ийг ашиглахгүй байхад ЦУВРАЛЫН ЛОГГИОД НЭМЭХ |
*/ |
#оруулах |
#оруулах |
#оруулах |
#оруулах |
#оруулах |
#тодорхойлохEEPROM_VERSION1 |
#тодорхойлохI2C_MSG_IN_SIZE3 |
#тодорхойлохPIN_LDR_TL A0 |
#тодорхойлохPIN_LDR_TR A1 |
#тодорхойлохPIN_LDR_BR A3 |
#тодорхойлохPIN_LDR_BL A2 |
#тодорхойлохPIN_SERVO_V11 |
#тодорхойлохPIN_SERVO_H5 |
#тодорхойлох IDX_I2C_ADDR0 |
#тодорхойлох IDX_V_ANGLE_MIN1 |
#тодорхойлох IDX_V_ANGLE_MAX2 |
#тодорхойлох IDX_V_SENSITIVITY3 |
#тодорхойлох IDX_V_STEP4 |
#тодорхойлох IDX_H_ANGLE_MIN5 |
#тодорхойлох IDX_H_ANGLE_MAX6 |
#тодорхойлох IDX_H_SENSITIVITY7 |
#тодорхойлох IDX_H_STEP8 |
#тодорхойлох IDX_SLEEP_MINUTES9 |
#тодорхойлох IDX_V_DAWN_ANGLE10 |
#тодорхойлох IDX_H_DAWN_ANGLE11 |
#defineIDX_DAWN_INTENSITY12 // бүх LDRS -ийн дундаж |
#defineIDX_DUSK_INTENSITY13 // бүх LDRS -ийн дундаж |
#defineIDX_END_EEPROM_SET14 |
#defineIDX_CURRENT_INTENSITY15 // бүх LDRS -ийн дундаж - IDX_DAWN_INTENSITY орчны шууд бус гэрлийг тооцоолоход ашигладаг |
#defineIDX_END_VALUES_GET16 |
#тодорхойлох IDX_SIGN_117 |
#тодорхойлох IDX_SIGN_218 |
#тодорхойлох IDX_SIGN_319 |
Servo _servoH; |
Servo _servoV; |
байт _i2cVals [20] = {10, 10, 170, 20, 5, 10, 170, 20, 5, 20, 40, 10, 30, 40, 0, 0, 0, 0, 0, 0}; |
int _servoLoopDelay = 10; |
int _slowingDelay = 0; |
int _angleH = 90; |
int _angleV = 90; |
int _averageTop = 0; |
int _averageRight = 0; |
int _averageBottom = 0; |
int _averageLeft = 0; |
байт _i2cResponse = 0; |
bool _inConfigMode = худал; |
voidsetup () |
{ |
Цуваа.begin (115200); |
getFromEeprom (); |
if (inConfigMode ()) { |
Serial.println ("Тохируулах горим"); |
Serial.print ("I2C хаяг:"); |
Serial.println (_i2cVals [IDX_I2C_ADDR]); |
Wire.begin (_i2cVals [IDX_I2C_ADDR]); |
Wire.onReceive (хүлээн авахEvent); |
Wire.onRequest (requestEvent); |
} өөр { |
Serial.println ("Хяналтын горим"); |
саатал (5000); // батерейг холбох гэх мэт гараа салгах цаг. |
} |
} |
voidloop () |
{ |
getLightValues (); |
хэрэв (! _inConfigMode) { |
// ToDo: TRANSISTOR SWITCH -ийг асаах |
_servoH.attach (PIN_SERVO_H); |
_servoV.attach (PIN_SERVO_V); |
for (int i = 0; i <20; i ++) { |
хэрэв (би! = 0) { |
getLightValues (); |
} |
moveServos (); |
} |
саатал (500); |
_servoH.detach (); |
_servoV.detach (); |
// ToDo: TRANSISTOR SWITCH -ийг унтраах |
саатал (500); |
унтаж байхын тулд ((_ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8); |
} |
} |
// -------------------------------- Одоогийн горим |
boolinConfigMode () { |
pinMode (PIN_SERVO_H, INPUT); |
_inConfigMode = digitalRead (PIN_SERVO_H) == 1; |
буцаах _inConfigMode; |
} |
// -------------------------------- EEPROM |
voidgetFromEeprom () { |
хэрэв ( |
EEPROM.read (IDX_SIGN_1)! = 'S' || |
EEPROM.read (IDX_SIGN_2)! = 'T' || |
EEPROM.read (IDX_SIGN_3)! = EEPROM_VERSION |
) EEPROM_write_default_configuration (); |
EEPROM_read_configuration (); |
} |
voidEEPROM_write_default_configuration () { |
Serial.println ("EEPROM_write_default_configuration"); |
for (int i = 0; i <IDX_END_EEPROM_SET; i ++) { |
EEPROM.update (i, _i2cVals ); |
} |
EEPROM.update (IDX_SIGN_1, 'S'); |
EEPROM.update (IDX_SIGN_2, 'T'); |
EEPROM.update (IDX_SIGN_3, EEPROM_VERSION); |
} |
voidEEPROM_read_configuration () { |
Serial.println ("EEPROM_read_configuration"); |
for (int i = 0; i <IDX_END_EEPROM_SET; i ++) { |
_i2cVals = EEPROM.read (i); |
//Serial.println(String(i) + "=" + _i2cVals ); |
} |
} |
// -------------------------------- I2C |
voidreceiveEvent (int count) { |
хэрэв (тоолох == I2C_MSG_IN_SIZE) |
{ |
char cmd = Wire.read (); |
байтын индекс = Wire.read (); |
байтын утга = Wire.read (); |
солих (cmd) { |
case'G ': |
хэрэв (индекс <IDX_END_VALUES_GET) { |
_i2cResponse = _i2cVals [индекс]; |
} |
завсарлага; |
кейс ': |
хэрэв (индекс <IDX_END_EEPROM_SET) { |
_i2cVals [индекс] = утга; |
EEPROM.update (индекс, _i2cVals [индекс]); |
} |
завсарлага; |
анхдагч: |
буцах; |
} |
} |
} |
voidrequestEvent () |
{ |
Wire.write (_i2cResponse); |
} |
// -------------------------------- LDRs |
voidgetLightValues () { |
int valueTopLeft = analogRead (PIN_LDR_TL); |
int valueTopRight = analogRead (PIN_LDR_TR); |
int valueBottomRight = analogRead (PIN_LDR_BR); |
int valueBottomLeft = analogRead (PIN_LDR_BL); |
_averageTop = (valueTopLeft + valueTopRight) / 2; |
_averageRight = (valueTopRight + valueBottomRight) / 2; |
_averageBottom = (valueBottomRight + valueBottomLeft) / 2; |
_averageLeft = (valueBottomLeft + valueTopLeft) / 2; |
int avgIntensity = (valueTopLeft + valueTopRight + valueBottomRight + valueBottomLeft) / 4; |
_i2cVals [IDX_CURRENT_INTENSITY] = газрын зураг (avgIntensity, 0, 1024, 0, 255); |
} |
// -------------------------------- SERVOS |
voidmoveServos () { |
Serial.println ("moveServos"); |
if ((_averageLeft-_averageRight)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH-_i2cVals [IDX_H_STEP])> _ i2cVals [IDX_H_ANGLE_MIN]) { |
// зүүн тийш явна |
Serial.println ("moveServos зүүн тийш явах"); |
саатал (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) { |
_servoH. бичих (_angleH--); |
саатал (_servoLoopDelay); |
} |
} |
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH+_i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) { |
// зөв явж байна |
Serial.println ("moveServos зүүн тийш явах"); |
саатал (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) { |
_servoH.write (_angleH ++); |
саатал (_servoLoopDelay); |
} |
} |
өөр { |
// юу ч хийхгүй |
Serial.println ("moveServos юу ч хийхгүй"); |
саатал (_slowingDelay); |
} |
if ((_averageTop-_averageBottom)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV+_i2cVals [IDX_V_STEP]) <_ i2cVals [IDX_V_ANGLE_MAX]) { |
// хүртэл явах |
Serial.println ("moveServos дээшээ гарах"); |
саатал (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) { |
_servoV.write (_angleV ++); |
саатал (_servoLoopDelay); |
} |
} |
elseif ((_averageBottom-_averageTop)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV-_i2cVals [IDX_V_STEP])> _ i2cVals [IDX_V_ANGLE_MIN]) { |
// уруудаж байна |
Serial.println ("moveServos доош явж байна"); |
саатал (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) { |
_servoV.write (_angleV--); |
саатал (_servoLoopDelay); |
} |
} |
өөр { |
Serial.println ("moveServos юу ч хийхгүй"); |
саатал (_slowingDelay); |
} |
} |
// -------------------------------- Унтах |
voidasleepFor (гарын үсэг зураагүй найман секундын сегмент) { |
Serial.println ("унтаж байхын тулд"); |
for (unsignedint sleepCounter = найман секундын сегмент; sleepCounter> 0; sleepCounter--) |
{ |
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF); |
} |
} |
GitHub -аас ❤ -тай зохион байгуулагдсан rawtilt_pan_tracker_0.3.ino -г үзэх
Алхам 4: Хэлхээний бүрхүүлийг угсрах
- Ardiuno Pro Mini -ийг ПХБ дээрх толгой хэсэгт оруулсан эсэхийг шалгаарай.
- SOLAR TRACKER хянагчийн хайрцгийн суурийг SOLAR TRACKER хянагчийн хайрцгийн хананд хийж, 4G x 6мм хэмжээтэй зэвэрдэггүй тагтай өөрөө түншдэг эрэг бүхий 2 боолтоор бэхлэнэ.
- 6P толгойтой Ardiuno Pro Mini + ПХБ -ийг SOLAR TRACKER хянагчийн хайрцгийн сууринд хоосон зайнд оруулна уу.
- SOLAR TRACKER хянагчийн хайрцагны тагийг SOLAR TRACKER хянагчийн хайрцгийн хананд хийж, 4G x 6мм хэмжээтэй зэвэрдэггүй тагтай 2 өөрөө түншдэг эрэг бэхлэнэ.
- Дээрх угсралтыг 4G x 6мм хэмжээтэй зэвэрдэггүй тоолууртай өөрөө түншдэг эрэг бүхий 4 -р самбарын хавтангийн суурь дээр бэхлээрэй.
Алхам 5: Тоног төхөөрөмжийг хянагчтай холбох
Өмнөх зааварчилгаанаас бэлтгэсэн холбогдох холболтууд нь 4 унтраалттай 2P LDR холболт ба servo -аас 2 унтраалттай 3P холболт юм. Дахин цэнэглэх хүртэл түр зуурын зүйл бол зай юм. Одоогоор 2P DuPont холболтоор дуусдаг 3.7V LiPo ашиглана уу.
-
LDR холболтыг (туйлгүй) дээрээс оруулна уу:
- Баруун дээд
- Зүүн дээд
- Баруун доод
- Зүүн доод
-
Servo холболтуудыг (дохионы утсаар зүүн тийш) дээрээс нь оруулна уу.
- Хэвтээ
- Босоо
- Туршилт хийхэд бэлэн болтол хүлээнэ үү: 3.7V DC тэжээлийн залгуур +ба дээд хэсэгт, -ve доор байрлуулна.
Алхам 6: Хянагчийг турших
Өмнө дурьдсанчлан, програм хангамжийг нарны цэнэглэх ажлын урсгалд тохируулаагүй болно. Үүнийг байгалийн (нарны) болон байгалийн бус гэрлийн эх үүсвэр ашиглан туршиж, тохируулж болно.
Хяналттай орчинд хяналтыг шалгахын тулд SLEEP MINUTES -ийг бага утгад тохируулах нь тохиромжтой байж магадгүй (дараагийн алхамыг үзнэ үү).
Алхам 7: Консолын оролтыг ашиглан I2C ашиглан тохируулах
Энэ нь хянагчийг хоёр дахь MCU ашиглан тохируулах, консолын цонхонд тохиргоог оруулах талаар тайлбарлаж байна.
- Дараах скриптийг D1M WIFI BLOCK (эсвэл Wemos D1 Mini) дээр байршуулна уу.
- USB -ийг компьютерээс салга
-
ПИН ХОЛБОО: -ve (Controller) => GND (D1M)+ve (Controller) => 3V3 (D1M) SCL (Controller) => D1 (D1M)
SDA (хянагч) => D2 (D1M)
- SPDT унтраалгыг CONFIG болгон асаана уу
- USB -ийг компьютерт холбоно уу
- Arduino IDE -ээс зөв COM порт бүхий консол цонхыг эхлүүлнэ үү
- "Newline" ба "9600 baud" сонгогдсон эсэхийг шалгаарай
- Командыг Send Textbox руу оруулаад Enter товчийг дарна
- Тушаалууд нь Character byte byte форматтай байна
- Хэрэв хоёр дахь байт (гурав дахь сегмент) ороогүй бол скриптээр 0 (тэг) илгээгдэнэ
- Цуваа оролтыг ашиглахдаа болгоомжтой байх; "Enter" товчлуурыг дарахаас өмнө оруулсан зүйлээ шалгана уу. Хэрэв та түгжигдсэн бол (жишээлбэл, I2C хаягийг мартсан утга болгон өөрчлөх) хянагчийн програм хангамжийг дахин асаах шаардлагатай болно.
Командын эхний тэмдэгтийн дэмжигдсэн өөрчлөлтүүд нь:
- E (Servo tracking -ийг идэвхжүүлэх) нь тохиргооны явцад хөдөлгөөнийг зогсооход тустай. Энэ нь дараах тушаалыг ашиглана: E 0
- D (Servo tracking -ийг идэвхгүй болгох) нь төхөөрөмжийг дахин ачаалахгүй бол автоматаар хянах боломжийг олгодог. Энэ нь дараах тушаалыг ашиглана: D 0
- G (Тохиргооны утгыг авах) нь EEPROM болон IN -MEMORY -ийн утгыг уншдаг: Энэ нь дараах тушаалыг ашиглана: G (индекс нь 0 - 13 ба 15 гэсэн байт утгатай байна)
- S (EEPROM утгыг тохируулах) нь дахин ачаалсны дараа ашиглах боломжтой EEPROM утгыг тохируулдаг. Энэ нь оролтыг дараах байдлаар ашиглана: S (индекс нь 0 - 13 байтын утга, хүчинтэй байтын утга бөгөөд шинж чанар бүрт өөр өөр байна)
Код нь индексийн үнэний цэг боловч дараах утгыг зөв тайлбар/тайлбарыг ашиглах гарын авлагад ашигладаг.
- I2C ADDRESS 0 - хянагчийн боомтын хаяг, хянагчтай холбогдохын тулд мастерт энэ хэрэгтэй (анхдагч 10)
- ДОТОО БОХОО 1 - өнцгийн босоо servo доод хязгаар (анхдагч 10, хүрээ 0 - 180)
- Босоо өнцөг 2 - өнцгийн босоо servo дээд хязгаар (анхдагч 170, хүрээ 0 - 180)
- SENSITIVITY VERTICAL LDR 3 - Босоо LDR унших хязгаар (анхдагч 20, муж 0 - 1024)
- Босоо өнцгийн алхам 4 - тохируулга бүрийн өнцөг босоо servo алхамууд (анхдагч 5, муж 1 - 20)
- ДОТОР ХӨГЖҮҮЛТИЙН ДОТОО 5 - өнцгийн хэвтээ servo доод хязгаар (анхдагч 10, хүрээ 0 - 180)
- ДЭЛГЭРЭНТ ХӨГЖИЛТИЙН ӨНДӨР 6 - өнцгийн хэвтээ servo дээд хязгаар (анхдагч 170, хүрээ 0 - 180)
- SENSITIVITY HORIZONTAL LDR 7 - Хэвтээ LDR унших хязгаар (анхдагч 20, муж 0 - 1024)
- HORIZONTAL ANGLE STEP 8 - тохируулга бүрийн өнцөгт хэвтээ servo алхамууд (анхдагч 5, муж 1 - 20)
- SLEEP MINUTES 9 - хянах хоорондох унтах хугацаа (анхдагч 20, 1-255)
- БОСООН Үүрийн 10 -р өнцөг - ИРЭЭДҮЙН АШИГЛАЛ - нар жаргах үед эргэж очих босоо өнцөг.
- ХАВЬТАД ҮҮРИЙН ӨНДӨР 11 - ИРЭЭДҮЙН ХЭРЭГЛЭЭ - нар жаргах үед буцаж ирэх хэвтээ өнцөг
- DAWN INTENSITY 12 - ИРЭЭДҮЙН ХЭРЭГЛЭЭ - өдөр тутмын нарны хяналтыг эхлүүлдэг бүх LDR -ийн хамгийн бага дундаж утга.
- DUSK INTENSITY 13 - ИРЭЭДҮЙН ХЭРЭГЛЭЭ - өдөр тутмын нарны хяналтыг зогсооход хүргэдэг бүх LDR -ийн хамгийн бага дундаж утга.
- EEPROM -ийн ҮНЭ ТӨГСГӨЛ 14
- ӨНӨӨГИЙН ИНТЕНЦИ 15 - гэрлийн эрчмийн одоогийн дундаж хувь
- ДУРСАМЖ ДАХЬ ҮНЭ ЦЭНИЙ ТӨГСГӨЛ 16 - ҮНЭ ЦЭГЭЭГҮЙ.
Цуваа оролтыг (консолын цонхны гарын оролт) барьж, char, байт, байт форматаар I2C боол руу дамжуулдаг
#оруулах |
#defineI2C_MSG_IN_SIZE2 |
#defineI2C_MSG_OUT_SIZE3 |
#тодорхойлохI2C_SLAVE_ADDRESS10 |
boolean _newData = худал; |
const байт _numChars = 32; |
char _receivedChars [_numChars]; // хүлээн авсан өгөгдлийг хадгалах массив |
voidsetup () { |
Цуваа эхлэх (9600); |
Эхлэх утас (D2, D1); |
саатал (5000); |
} |
voidloop () { |
recvWithEndMarker (); |
parseSendCommands (); |
} |
voidrecvWithEndMarker () { |
статик байт ndx = 0; |
char endMarker = '\ n'; |
char rc; |
while (Serial.available ()> 0 && _newData == false) { |
rc = Serial.read (); |
хэрэв (rc! = endMarker) { |
_ хүлээн авсанChars [ndx] = rc; |
ndx ++; |
хэрэв (ndx> = _numChars) { |
ndx = _numChars - 1; |
} |
} өөр { |
_receivedChars [ndx] = '\ 0'; // мөрийг зогсоох |
ndx = 0; |
_newData = үнэн; |
} |
} |
} |
voidparseSendCommands () { |
хэрэв (_newData == үнэн) { |
constchar delim [2] = ""; |
char *жетон; |
жетон = strtok (_receivedChars, delim); |
char cmd = _receivedChars [0]; |
байтын индекс = 0; |
байтын утга = 0; |
int i = 0; |
while (токен! = NULL) { |
//Serial.println(давсан); |
би ++; |
шилжүүлэгч (i) { |
тохиолдол1: |
жетон = strtok (NULL, delim); |
индекс = atoi (жетон); |
завсарлага; |
тохиолдол2: |
жетон = strtok (NULL, delim); |
if (токен! = NULL) { |
утга = atoi (жетон); |
} |
завсарлага; |
анхдагч: |
жетон = NULL; |
} |
} |
sendCmd (cmd, индекс, утга); |
_newData = худал; |
} |
} |
voidsendCmd (char cmd, байтын индекс, байтын утга) { |
Serial.println ("-----"); |
Serial.println ("Илгээх тушаал:"); |
Serial.println ("\ t" + String (cmd) + "" + String (index) + "" + String (утга)); |
Serial.println ("-----"); |
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // төхөөрөмж рүү дамжуулах |
Утас. бичих (cmd); // тэмдэгт илгээдэг |
Wire.write (индекс); // нэг байт илгээдэг |
Wire.write (утга); // нэг байт илгээдэг |
Wire.endTransmission (); |
байтын хариу = 0; |
bool hadResponse = худал; |
хэрэв (cmd == 'G') { |
Wire.requestFrom (I2C_SLAVE_ADDRESS, 1); |
while (Wire.available ()) // боол нь хүссэн хэмжээнээс бага хэмжээгээр илгээж болно |
{ |
hadResponse = үнэн; |
хариу = Wire.read (); |
} |
хэрэв (hadResponse == үнэн) { |
Serial.println ("Хариу авч байна:"); |
Serial.println (хариулт); |
} өөр { |
Serial.println ("Хариулт байхгүй, хаяг/холболтыг шалгана уу"); |
} |
} |
} |
rawd1m_serial_input_i2c_char_byte_byte_v0.1.ino -г GitHub -аас ❤ -р зохион байгуулагдсан байдлаар үзэх
Алхам 8: Дараагийн алхамууд
Програм хангамж/техник хангамжид өөрчлөлт орсон эсэхийг шалгахын тулд үе үе шалгаарай.
Програм хангамж/техник хангамжийг өөрийн шаардлагад нийцүүлэн өөрчлөх.
Аливаа хүсэлт/оновчлолын талаар сэтгэгдэл бичих.
Зөвлөмж болгож буй:
Arduino Uno ашиглан акустик левитаци Алхам алхам (8 алхам): 8 алхам
Arduino Uno-тай акустик Levitation Алхам алхамаар (8 алхам): хэт авианы дууны дамжуулагч L298N Dc эмэгтэй адаптерийн эрэгтэй тэжээлийн тэжээлийн хангамж Arduino UNOBreadboard Энэ нь хэрхэн ажилладаг вэ: Нэгдүгээрт, та кодыг Arduino Uno-д байршуулдаг (энэ нь дижитал төхөөрөмжөөр тоноглогдсон микроконтроллер юм. кодыг хөрвүүлэх аналог портууд (C ++)
IOT123 - D1M BLOCK - 2xAMUX угсралт: 7 алхам (зурагтай)
IOT123 - D1M BLOCK - 2xAMUX угсралт: D1M BLOCKS нь алдартай Wemos D1 Mini SOC/Shields/Clones -ийн мэдрэгчтэй хайрцаг, шошго, туйлшралын хөтөч, таслагчийг нэмдэг. ESP8266 чиптэй холбоотой асуудлуудын нэг нь зөвхөн нэг аналог IO зүү авах боломжтой юм. Энэхүү зааварчилгаа нь 2xA -ийг хэрхэн яаж угсрахыг харуулж байна
IOT123 - D1M BLOCK - RFTXRX угсралт: 8 алхам
IOT123 - D1M BLOCK - RFTXRX угсралт: D1M BLOCKS нь алдартай Wemos D1 Mini SOC/Shields/Clones -ийн мэдрэгчтэй хайрцаг, шошго, туйлшралын хөтөч, таслагчийг нэмдэг. RF дамжуулагч/хүлээн авагч нь ESP8266 -ийг одоо байгаа гэр/үйлдвэрийн автоматжуулалтад нэвтрэх боломжийг олгодог. Энэхүү бүрхүүл нь 433
IOT123 - D1M BLOCK - GY521 угсралт: 8 алхам
IOT123 - D1M BLOCK - GY521 угсралт: D1M BLOCKS нь алдартай Wemos D1 Mini SOC/Shields/Clones -ийн мэдрэгчтэй хайрцаг, шошго, туйлшралын хөтөч, таслагчийг нэмдэг. Энэхүү D1M BLOCK нь Wemos D1 Mini болон GY-521 модулийн хооронд энгийн холболтыг өгдөг (Хаяг ба Таслах зүүг холбож болно
IOT123 - D1M BLOCK - ADXL345 угсралт: 8 алхам
IOT123 - D1M BLOCK - ADXL345 угсралт: D1M BLOCKS нь алдартай Wemos D1 Mini SOC/Shields/Clones -ийн мэдрэгчтэй хайрцаг, шошго, туйлшралын гарын авлага, таслагчийг нэмдэг. Энэхүү D1M BLOCK нь Wemos D1 Mini ба ADXL345 Accelerometer модулийн хооронд энгийн холболтыг өгдөг. Хөгжүүлэлтийн миний анхны сэдэл