Мазмуну:

IOT123 - SOLAR TRACKER - КОНТРОЛЛЕР: 8 кадам
IOT123 - SOLAR TRACKER - КОНТРОЛЛЕР: 8 кадам

Video: IOT123 - SOLAR TRACKER - КОНТРОЛЛЕР: 8 кадам

Video: IOT123 - SOLAR TRACKER - КОНТРОЛЛЕР: 8 кадам
Video: IOT123 - SOLAR TRACKER CONTROLLER TEST 0 3 2024, Июль
Anonim
Image
Image
IOT123 - SOLAR TRACKER - КОНТРОЛЛЕР
IOT123 - SOLAR TRACKER - КОНТРОЛЛЕР
IOT123 - SOLAR TRACKER - КОНТРОЛЛЕР
IOT123 - SOLAR TRACKER - КОНТРОЛЛЕР

Бул Нускаманын кеңейтүүсү

IOT123 - КҮН ТРЕККЕРИ - ТИЛТ/ПАН, ПАНЕЛДИН ЖЕКЕСИ, LDR MOUNTS RIG. Бул жерде биз серволордун контроллерине жана күндүн жайгашуу сенсорлоруна көңүл бурабыз. Белгилей кетчү нерсе, бул дизайн 2 MCU колдонулат: күн трекери үчүн бирөө (3.3V 8mHz Arduino Pro Mini) жана сенсорлоруңуз/актерлоруңуз үчүн бир көз карандысыз MCU.

Бул 0.3 версиясы

Толук канааттангандан кийин бардык долбоорлорду жарыялоонун ордуна, мен үзгүлтүксүз интеграция менен машыгам жана бир нерсени тез -тез жеткирип турам, керектүү нерселерди жеткирем. Мен батарейканын кубаттагычы үчүн дагы бир көрсөтмө жазам, контроллердин программалык камсыздоосун/жабдууларын оптималдаштыруу бүткөндө. Мен муну басканда оптималдаштыруу керек болгон жерди көрсөтөм.

Бул ыкманын бир себеби - кардарлардын пикири. Эгер балдар муктаждыкты көрүп же жакшыраак мамиле кылсаңыз, комментарий бериңиз, бирок унутпаңыз, мен баарын жеткире албайм жана сизге ылайыктуу убакытка чейин жеткире албайм. Бул түшүндүрмөлөр анча маанилүү эмес көрүнгөндүктөн, алар бул макаладан өчүрүлөт.

Бул эмнени камтыйт:

  1. Күндүн болжолдуу жайгашуусун сезүү үчүн баштапкы Instructableден LDRs колдонуңуз.
  2. Серваларды күнгө каратып жылдырыңыз.
  3. Кыймылдардын сезгичтиги үчүн тандоолор.
  4. Күнгө жылганда кадамдын өлчөмү үчүн параметрлер.
  5. Серводо колдонулган бурчтук чектөөлөрдүн параметрлери.
  6. Кыймылдардын кечигүүсүнүн варианттары.
  7. MCU'лардын ортосундагы баалуулуктарды орнотуу/алуу үчүн I2C интерфейси.
  8. Кыймылдардын ортосунда терең уйку.

Буга эмнелер кирбейт (жана убакыттын өтүшү менен каралат):

  1. Күндүзгү саатта гана электр кубатын колдонуу.
  2. Таңдын абалын эстеп, күүгүм келгенде ал жакка баруу.
  3. MCUдан жөндөгүчтү алып салуу.
  4. MCUдагы LED (лерди) өчүрүү.
  5. Күчтү RAW ордуна VCC аркылуу өзгөртүү.
  6. USBден Serial TTL конвертерине жөнгө салынбаган кубаттуулуксуз жаркыроо үчүн чечимдерди берүү.
  7. Батареядагы чыңалуу монитору.

ТАРЫХ

Dec 20, 2017 V0.1 КОД

Баштапкы версия жарыктын булагын көзөмөлдөйт, ар дайым күйүп турат, кубатталбайт

Jan 7, 2018 V0.2 КОД

  • ЖАБДУУ ӨЗГӨРТҮҮЛӨРҮ

    • I2C казыктарын кошуу
    • GVO серверлерине которууну кошуу
    • Контроллердин кутусунун капкагында басылган этикетка
  • ПРОГРАММА ӨЗГӨРТҮҮЛӨРҮ

    • EEPROMдан конфигурацияны окуңуз
    • I2C автобусун башка MCUга кул катары колдоо (3.3V)
    • I2C аркылуу конфигурацияны орнотуңуз
    • I2C аркылуу иштетилген
    • I2C аркылуу конфигурацияны алыңыз
    • Иш убактысынын касиеттерин I2C аркылуу алыңыз (учурда иштетилген жана учурдагы жарык интенсивдүүлүгү)
    • Сериялык журналды алып салуу (I2C маанилерине таасирин тийгизди)

Jan 19, 2018 V0.3 КОД

  • ЖАБДУУ

    Энбелги жаңыртылды. Switch азыр CONFIG же TRACK режимин тандоо үчүн колдонулат

  • ПРОГРАММА

    • I2C конфигурация үчүн гана колдонулат
    • Контроллер көзөмөлдөөнү баштоо үчүн 5 секунд күтөт, колуңузду жылдырууга мүмкүндүк берет
    • I2C конфигурациясын колдонуу үчүн, SPDT бирдиктүү өтүк катары CONFIGде болушу керек
    • Кыймылды көзөмөлдөө ортосунда, бирдик терең уйку режиминде, SLEEP MINUTES конфигурациясынын мааниси үчүн (демейки 20 мүнөт).

1 -кадам: материалдар жана инструменттер

Материалдар жана куралдар
Материалдар жана куралдар
Материалдар жана куралдар
Материалдар жана куралдар
Материалдар жана куралдар
Материалдар жана куралдар

Азыр материалдар жана булактардын толук тизмеси бар.

  1. 3D басылган бөлүктөр.
  2. Arduino Pro Mini 3.3V 8мГц
  3. 4x6cm Double Side Prototype PCB универсалдуу басылган схемасынын 1и (жарымында кесилет)
  4. 1 өчүрүү 40P эркек баш (өлчөмүнө чейин кесилет).
  5. 1 өчүрүү 40P аял башы (өлчөмүнө чейин кесилет).
  6. 4 өчүрүү 10K 1/4W restistors.
  7. Кошуу зымы.
  8. Лайнер жана Темир.
  9. 20 өчүрүү 4G х 6мм дат баспас көмөч башы өз алдынча таптоочу бурамалар.
  10. 4 өчүрүү 4G х 6мм дат баспаган эсептегич өз алдынча таптоочу бурамалар.
  11. 1 өчүрүү 3.7V LiPo батарейкасы жана кармагычы (2P дюпондук туташтыргычтарда токтотулат).
  12. 1 өчүрүү 2P эркектин оң бурчтуу башы
  13. 1 өчүрүү SPDT которгуч 3 пин 2,54мм чайыр
  14. Күчтүү цианоакрилат клейи
  15. Dupont коннекторлору аял 1P баш (1 өчүрүү көк, 1 жашыл өчүрүлгөн).

2 -кадам: Районду чогултуу

Циркти чогултуу
Циркти чогултуу
Циркти чогултуу
Циркти чогултуу
Циркти чогултуу
Циркти чогултуу

Учурда чынжырда чыңалуу бөлүштүргүч схемасы жок (вольт метр).

  1. 4x6cm Double Side Prototype PCB Universal Print Circuit Board узун огу боюнча жарымын кесип.
  2. 40P эркек башын бөлүктөргө бөлүңүз:

    1. 2 өчүрүү 12P
    2. 3 өчүрүү 3P
    3. 6 өчүрүү 2P.
  3. 40P аял башын бөлүктөргө бөлүңүз:

    1. 2 өчүрүү 12P
    2. 1 өчүрүү 6P
  4. Solder 2 өчүрүлгөн 12Pfemale header көрсөтүлгөндөй.
  5. 3P эркек (кошумча) аталышынан алынган аралыкты SPDT которгучунун астына цианоакрилат клейи менен чаптаңыз
  6. Башка тарапта, анда 2 өчүрүлгөн 2P, 2 өчүрүү 3Pmale башы жана көрсөтүлгөндөй SPDT которуштуруу.
  7. Solder 4 өчүрүү 10K каршылыгы (A, B, C, D кара) аркылуу GND пин башына (#2 кара) жана A0 - A3 баштык казыктарына (#5, #6, #7, #8) тешик аркылуу (сары) көрсөтүлгөндөй (3 сүрөт + 1 диаграмма).
  8. 3.3V LDR PINS ширетүүчү PINS #4, #6, #8, #10 изинен жана жиптен фемалдын башына VCC пинине чейин (жашыл).
  9. Аялдын баш жагында 3.3V изи PINS #1, #12, #15ке көрсөтүлгөндөй (кызыл).
  10. 3.3V тешик аркылуу капталга (кызыл) RAW баш PIN #1.
  11. Пинк #11ден кызгылт сары түстөгү туташууну тешик аркылуу, башка жагындагы ургаачы пинге көрсөтүү үчүн, көрсөтүлгөндөй.
  12. #20дан #30га чейин жана #31ден #13кө чейин жана #16га чейин көк туташтыргыч зымдын изин байлап коюңуз.
  13. Solder Women Header PIN #11 Эркек баш PIN #11 тешик аркылуу.
  14. Аялдын 1P башы менен 30мм узундукта 2 дюпондук туташтыргычты даярдаңыз (1 көк, 1 жашыл өчүк). Strip жана калай башка учу.
  15. Solder blue Dupont зымы #28ге; жашыл Dupont зымы #29га.
  16. Arduino үстү жагында 6P аялдын башын оңдоп, андан кийин ширетүү керек.
  17. Arduino үстү жагында int #29 жана #30 2P тик бурчтуу аял башын оңдоңуз.
  18. Arduino астынкы жагында 12P жана 2 өчүрүүчү 3P эркек казыктарын оңдоп, андан кийин ширетүү керек.
  19. PCU 12P аял башына Arduino эркек 12P төөнөгүчтөрүн салыңыз.

3 -кадам: MCUду күйгүзүү

MCU жаркырап турат
MCU жаркырап турат
MCU жаркырап турат
MCU жаркырап турат
MCU жаркырап турат
MCU жаркырап турат

Arduino Pro Mini 6P аялдын башын колдонуп FTDI232 USBдан TTL конвертерине ылайыктуу түрдө жаркырап турат. 2 тактайдын тегизделиши үчүн жогорудагы сүрөттү караңыз.

3.3V жөндөөсү FTDI232 түзмөгүңүздө тандалганын текшериңиз. Төмөндөгү кодду колдонуу менен бул жердеги көрсөтмөлөрдү аткарыңыз (GISTке шилтемени колдонуңуз).

Аз кубаттуу китепкананы (тиркелген жана https://github.com/rocketscream/Low-Power) орнотуу керек.

Arduino Pro Mini + PCB корпусуна орнотулгандан кийин, баштыктын төөнөгүчтөрү ачык болгондуктан, аны дагы эле жаркырата берсе болот. Жөн гана Башкаруучу Бөлүмдү Баштыкты көрсөткөн Панелдин Рамкасынан ажыратыңыз.

I2C/EEPROM конфигурациясы жана кыймылдар ортосундагы уйку цикли менен күн панелиндеги трекер. Уйку циклинин узактыгынын тактыгы узактыгы жогорулаган сайын азаят, бирок бул үчүн жетиштүү

/*
* коддон өзгөртүлгөн
* Матиас Лерой тарабынан
*
* V0.2 ӨЗГӨРТҮҮЛӨР
** I2C SET Get
** EEPROM ЖӨНДӨӨ
** СЕРИАЛДЫК ЧЫГУУНУ АЛЫП КӨРҮҢҮЗ - Таасирленген I2C
** Көз салууну иштетүү/ӨЧҮРҮҮ
** I2C аркылуу ЧЕКТӨӨЛӨРГӨ КЫЗМАТ КӨЧҮРҮҮ
** I2C аркылуу учурдагы орточо интенсивдүүлүктү окуңуз
* V0.3 ӨЗГӨРТҮҮЛӨР
** 2 РЕЖИМГЕ КӨЧҮРҮҢҮЗ - ТРЕК (I2C ЖОК) ЖАНА КОНФИГУРУЦИЯ (I2C КОЛДОНОТ)
** УКТАП КӨЛҮҮ РЕЖИМИНДЕ (8 ЭКИНЧИ БӨЛҮКТӨРДӨН ӨТӨ ТӨМӨН)
** УКТОО/ОЙГОТУУ БОЮНЧА ДЕТАЧ/АТТАШ ТЕРВИСИ
** КОНФИГУРАЦИЯЛАНГАН ПОЗИЦИЯНЫ АЛЫҢЫЗ (РЕЗУНДУК)
** КОНФИГУРАЦИЯЛАНГАН ОЙГОНУУЛУК СЕКУНДДАРЫН АЛЫҢЫЗ (РЕЗУНДУУ)
** КОНФИГУРАЦИЯЛАНДЫРУУНУ ӨЧҮРҮҮ/ӨЧҮРҮҮ (РЕЗУНДУУ)
** КОНФИГУРАЦИЯЛАНГАН ТРЕККЕРДИ ӨЧҮРҮҮНҮ ЧЫКТЫРЫҢЫЗ (ТЕХНИКАЛЫК ӨЧҮРГҮЧТҮ КОЛДОНУҢУЗ)
** Чыңалуу катарын алып салуу - I2C КОМПОНЕНТИН БӨЛҮНӨТ
** I2C КОЛДОНБОГОНДО СЕРИЯЛЫК ЛОГИНДИ КОШУУ
*/
#кошуу
#кошуу
#кошуу
#кошуу
#кошуу
#defineEEPROM_VERSION1
#defineI2C_MSG_IN_SIZE3
#depinePIN_LDR_TL A0
#dePine_LDR_TR A1
#definePIN_LDR_BR A3
#depinePIN_LDR_BL A2
#definePIN_SERVO_V11
#definePIN_SERVO_H5
#defineIDX_I2C_ADDR0
#defineIDX_V_ANGLE_MIN1
#defineIDX_V_ANGLE_MAX2
#defineIDX_V_SENSITIVITY3
#defineIDX_V_STEP4
#defineIDX_H_ANGLE_MIN5
#defineIDX_H_ANGLE_MAX6
#defineIDX_H_SENSITIVITY7
#defineIDX_H_STEP8
#defineIDX_SLEEP_MINUTES9
#defineIDX_V_DAWN_ANGLE10
#defineIDX_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
#defineIDX_SIGN_117
#defineIDX_SIGN_218
#defineIDX_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 = false;
voidsetup ()
{
Serial.begin (115200);
getFromEeprom ();
if (inConfigMode ()) {
Serial.println ("Config Mode");
Serial.print ("I2C дареги:");
Serial.println (_i2cVals [IDX_I2C_ADDR]);
Wire.begin (_i2cVals [IDX_I2C_ADDR]);
Wire.onReceive (receiveEvent);
Wire.onRequest (requestEvent);
} башка {
Serial.println ("Байкоо режими");
кечиктирүү (5000); // батареяны туташтырып койсоңуз, жолдон чыгууга убакыт
}
}
voidloop ()
{
getLightValues ();
эгер (! _inConfigMode) {
// ToDo: TRANSISTOR SWITCHти күйгүзүү
_servoH.attach (PIN_SERVO_H);
_servoV.attach (PIN_SERVO_V);
үчүн (int i = 0; i <20; i ++) {
эгер (i! = 0) {
getLightValues ();
}
moveServos ();
}
кечигүү (500);
_servoH.detach ();
_servoV.detach ();
// ToDo: TRANSISTOR SWITCH өчүрүү
кечигүү (500);
uxlabFor ((_ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8);
}
}
// -------------------------------- УЧУРДАГЫ РЕЖИМ
boolinConfigMode () {
pinMode (PIN_SERVO_H, INPUT);
_inConfigMode = digitalRead (PIN_SERVO_H) == 1;
return _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");
үчүн (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");
үчүн (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 [индекс];
}
тыныгуу;
case'S:
эгер (индекс <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);
үчүн (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH--);
кечигүү (_servoLoopDelay);
}
}
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH+_i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) {
// туура баратат
Serial.println ("moveServos солго кетет");
кечигүү (_slowingDelay);
үчүн (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);
үчүн (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);
үчүн (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.write (_angleV--);
кечигүү (_servoLoopDelay);
}
}
башка {
Serial.println ("moveServos эч нерсе кылбайт");
кечигүү (_slowingDelay);
}
}
// --------------------------------- УКТА
voidasleepFor (unsignedint eightSecondSegments) {
Serial.println ("uxlabFor");
үчүн (unsignedint sleepCounter = сегизSecondSegments; sleepCounter> 0; sleepCounter--)
{
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
}
}

GitHub тарабынан ❤ менен хостинг rawtilt_pan_tracker_0.3.ino көрүү

4 -кадам: Райондук корпусту чогултуу

Райондук корпусту чогултуу
Райондук корпусту чогултуу
Райондук корпусту чогултуу
Райондук корпусту чогултуу
Райондук корпусту чогултуу
Райондук корпусту чогултуу
  1. Ardiuno Pro Mini ПКБнын аталыштарына киргизилгенин текшериңиз.
  2. SOLAR TRACKER контроллер кутусунун базасын SOLAR TRACKER контроллер кутусунун дубалдарына салыңыз жана 2 өчүрүүчү 4G x 6мм дат баспас, өз алдынча таптоочу бурамалар менен чаптаңыз.
  3. 6P Header менен Ardiuno Pro Mini + ПХБны SOLAR TRACKER контроллеринин кутусунун базасындагы боштукка салыңыз.
  4. SOLAR TRACKER контроллер кутусунун капкагын SOLAR TRACKER контроллеринин кутусунун дубалдарына салыңыз жана 4G x 6mm дат баспаган эсептегич өз алдынча таптоочу бурамалар менен жабыңыз.
  5. Панелдин алкагынын үстүнө 4G x 6мм дат баспас эсептегич өз алдынча таптоочу бурамалар менен жыйынды орнотуңуз.

5 -кадам: Контролду контролдоочу аппаратка туташтыруу

Контроллерге бургучту туташтыруу
Контроллерге бургучту туташтыруу
Контроллерге бургучту туташтыруу
Контроллерге бургучту туташтыруу
Контроллерге бургучту туташтыруу
Контроллерге бургучту туташтыруу

Мурунку Нускамадан даяр болгон тиешелүү байланыштар - бул серверлерден 4P 2 LDR жана 2P 3P өчүрүү. Заряддоо даяр болгонго чейин убактылуу нерсе - бул батарея. Азырынча 2P DuPont туташуусу менен бүткөн 3.7V LiPo колдонуңуз.

  1. LDR байланыштарын (полярдык жок) жогору жактан кыстарыңыз:

    1. Жогорку оң
    2. Жогорку Сол
    3. Төмөнкү Оң
    4. Төмөнкү Сол
  2. Серво байланыштарын (сигнал зымы солго) жогору жактан кыстарыңыз:

    1. Горизонталдуу
    2. Vertical
  3. СЫНООГО ДАЯР КҮТКҮЛӨ: Андан кийин 3.7V DC Power +жана жогорку жагына, -ve түбүнө киргизиңиз.

6 -кадам: Контроллерди тестирлөө

Image
Image

Жогоруда айтылгандай, программалык камсыздоо Solar Charging жумуш агымы үчүн оптималдаштырылган эмес. Бул табигый (күн) жана табигый эмес жарык булактарын колдонуу менен сыналышы жана өзгөртүлүшү мүмкүн.

Көзөмөлдү контролдонуучу чөйрөдө текшерүү үчүн УКТОО МҮНӨТТӨРҮН төмөнкү мааниге коюу ыңгайлуу болушу мүмкүн (кийинки кадамды караңыз).

7 -кадам: Консолдук киргизүү аркылуу I2C аркылуу конфигурациялоо

Бул контроллерди экинчи MCU аркылуу конфигурациялоону, консоль терезесине орнотууларды киргизүүнү түшүндүрөт.

  1. Төмөнкү скриптти D1M WIFI BLOCKко (же Wemos D1 Mini) жүктөңүз.
  2. USBди PCтен ажыратыңыз
  3. ПИН туташуусу: -ve (Controller) => GND (D1M)+ve (Controller) => 3V3 (D1M) SCL (Controller) => D1 (D1M)

    SDA (Контроллер) => D2 (D1M)

  4. SPDT которуштурууну CONFIGга буруңуз
  5. USBди PCке туташтырыңыз
  6. Arduino IDEден туура COM порту бар консоль терезесин баштаңыз
  7. "Newline" жана "9600 baud" тандалганын текшериңиз
  8. Буйруктар Жөнөтүү кутусуна киргизилет, андан кийин Enter баскычы басылат
  9. Буйруктар Character byte байт форматында
  10. Эгерде экинчи байт (үчүнчү сегмент) киргизилбесе, 0 (нөл) скрипт аркылуу жөнөтүлөт
  11. Сериялык киргизүүнү колдонууда этият болуңуз; "Enter" баскычын басуудан мурун эмне жазганыңызды карап чыгыңыз. Эгерде сиз кулпуланып калсаңыз (мисалы, I2C дарегин унутуп койгон мааниге өзгөртүү), контроллердин микрофонун кайра жаркыратышыңыз керек болот.

Буйруктун биринчи белгисинде колдоого алынган вариациялар:

  • E (servo tracking иштетүү) конфигурация учурунда кыймылды токтотуу үчүн пайдалуу. Бул киргизүү менен киргизилет: E 0
  • D (Серво көзөмөлдөөнү өчүрүү), түзмөктү өчүрүп -күйгүзбөсөңүз, автоматтык көзөмөлдү баштоо үчүн пайдалуу. Бул киргизүү аркылуу киргизилет: D 0
  • G (конфигурация маанисин алуу) EEPROM жана IN -MEMORY маанилерин окуйт: Бул: G (индекс 0 - 13 жана 15 жарактуу байт мааниси)
  • S (EEPROM маанисин коюу) кайра жүктөөлөрдөн кийин жеткиликтүү болгон баалуулуктарды EEPROMго коёт. Бул киргизүү жолу менен киргизилет: S (индекс жарактуу байт мааниси 0 - 13, мааниси жарактуу байт мааниси жана касиетке жараша өзгөрөт)

Код индекстер үчүн чындыктын чекити, бирок төмөнкүлөр жарактуу баалуулуктар/комментарийлер үчүн колдонмо үчүн колдонулат:

  • I2C ADDRESS 0 - контроллердин кул дареги, кожоюн контролер менен байланышуу үчүн керек (демейки 10)
  • MINIMUM VERTICAL ANGLE 1 - бурч вертикалдуу серво төмөнкү чеги (демейки 10, диапазон 0 - 180)
  • MAXIMUM VERTICAL ANGLE 2 - бурч вертикалдуу серво жогорку чеги (демейки 170, диапазон 0 - 180)
  • SENSITIVITY VERTICAL LDR 3 - Vertical LDR окуу маржасы (демейки 20, диапазон 0 - 1024)
  • VERTICAL ANGLE STEP 4 - ар бир тууралоо боюнча бурч вертикалдуу серво кадамдары (демейки 5, диапазон 1 - 20)
  • MINIMUM HORIZONTAL ANGLE 5 - бурч горизонталдуу сервонун төмөнкү чеги (демейки 10, диапазон 0 - 180)
  • MAXIMUM HORIZONTAL ANGLE 6 - бурч горизонталдуу серво жогорку чеги (демейки 170, диапазон 0 - 180)
  • SENSITIVITY HORIZONTAL LDR 7 - Горизонталдуу LDR окуу чеги (демейки 20, диапазон 0 - 1024)
  • HORIZONTAL ANGLE STEP 8 - ар бир тууралоо боюнча бурч горизонталдуу серво кадамдары (демейки 5, диапазон 1 - 20)
  • УКТОО МҮНӨТҮ 9 - көз салуунун ортосундагы болжолдуу уйку мезгили (демейки 20, диапазон 1 - 255)
  • VERTICAL DAWN BURC 10 - КЕЛЕЧЕКТИ КОЛДОНУУ - күн батканда кайтып келүү үчүн тик бурч
  • Горизонталдык бурч 11 - КЕЛЕЧЕКТИ КОЛДОНУУ - күн батканда кайтып келүүчү горизонталдык бурч
  • DAWN INTENSITY 12 - КЕЛЕЧЕКТИ КОЛДОНУУ - күнүмдүк күндү көзөмөлдөөнү баштоочу бардык LDRлердин минималдуу орточо көрсөткүчү
  • DUSK INTENSITY 13 - КЕЛЕЧЕКТИ КОЛДОНУУ - күнүмдүк күндү көзөмөлдөөнү токтотуучу бардык LDRлердин минималдуу орточо көрсөткүчү
  • EEPROM БААЛЫКТАРЫНЫН МАРКЕРИ 14 - БААСЫ КОЛДОНУЛБАЙТ
  • Учурдагы интенсивдүүлүк 15 - жарыктын интенсивдүүлүгүнүн учурдагы орточо пайызы
  • ЭСКЕРМЕ БААЛУУЛУКТАРЫНЫН АЯГЫ 16 - БААЛУУ КОЛДОНУЛБАЙТ.

Сериялык кирүүнү (консоль терезесиндеги клавиатура) басып, char, байт, байт форматындагы I2C кулуна жөнөтөт

#кошуу
#defineI2C_MSG_IN_SIZE2
#defineI2C_MSG_OUT_SIZE3
#defineI2C_SLAVE_ADDRESS10
логикалык _newData = жалган;
const байт _numChars = 32;
char _receivedChars [_numChars]; // алынган маалыматтарды сактоо үчүн массив
voidsetup () {
Serial.begin (9600);
Wire.begin (D2, D1);
кечигүү (5000);
}
voidloop () {
recvWithEndMarker ();
parseSendCommands ();
}
voidrecvWithEndMarker () {
статикалык байт ndx = 0;
char endMarker = '\ n';
char rc;
while (Serial.available ()> 0 && _newData == false) {
rc = Serial.read ();
if (rc! = endMarker) {
_receivedChars [ndx] = rc;
ndx ++;
эгер (ndx> = _numChars) {
ndx = _numChars - 1;
}
} башка {
_receivedChars [ndx] = '\ 0'; // сапты токтотуу
ndx = 0;
_newData = чын;
}
}
}
voidparseSendCommands () {
if (_newData == true) {
constchar delim [2] = "";
char *токен;
токен = strtok (_receivedChars, delim);
char cmd = _receivedChars [0];
байт индекси = 0;
байт мааниси = 0;
int i = 0;
while (токен! = NULL) {
//Serial.println(token);
i ++;
которуу (i) {
иши 1:
токен = strtok (NULL, delim);
индекс = атои (токен);
тыныгуу;
case2:
токен = 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 (value));
Serial.println ("-----");
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // түзмөккө берүү
Wire.write (cmd); // чар жөнөтөт
Wire.write (индекс); // бир байт жөнөтөт
Wire.write (маани); // бир байт жөнөтөт
Wire.endTransmission ();
байт жообу = 0;
bool hadResponse = false;
эгер (cmd == 'G') {
Wire.requestFrom (I2C_SLAVE_ADDRESS, 1);
while (Wire.available ()) // кул суралгандан азыраак жөнөтө алат
{
hadResponse = true;
жооп = Wire.read ();
}
if (hadResponse == true) {
Serial.println ("Жооп алуу:");
Serial.println (жооп);
} башка {
Serial.println ("Жооп жок, даректи/байланышты текшериңиз");
}
}
}

rawt1m_serial_input_i2c_char_byte_byte_v0.1.ino hosted менен GitHub тарабынан уюштурулганын көрүү

8 -кадам: Кийинки кадамдар

Программада/жабдыкта өзгөрүүлөрдү текшерүү үчүн мезгил -мезгили менен текшерип туруңуз.

Программалык камсыздоону/жабдыкты сиздин талаптарыңызга өзгөртүү.

Бардык сурамдарга/оптималдаштырууга комментарий жазыңыз.

Сунушталууда: