Мазмұны:

IOT123 - КҮН ЖАЗУШЫ - БАСҚАРУШЫ: 8 қадам
IOT123 - КҮН ЖАЗУШЫ - БАСҚАРУШЫ: 8 қадам

Бейне: IOT123 - КҮН ЖАЗУШЫ - БАСҚАРУШЫ: 8 қадам

Бейне: IOT123 - КҮН ЖАЗУШЫ - БАСҚАРУШЫ: 8 қадам
Бейне: IOT123 - BYKO LIVE RIDE 2024, Қараша
Anonim
Image
Image
IOT123 - КҮН ЖАЗУШЫ - БАСҚАРУШЫ
IOT123 - КҮН ЖАЗУШЫ - БАСҚАРУШЫ
IOT123 - КҮН ЖАЗУШЫ - БАСҚАРУШЫ
IOT123 - КҮН ЖАЗУШЫ - БАСҚАРУШЫ

Бұл нұсқаулықтың кеңейтімі

IOT123 - SOLAR TRACKER - көлбеу/кастрөл, панель жақтауы, LDR MOUNTS RIG. Мұнда біз серво контроллері мен күннің орналасу сенсорларына назар аударамыз. Айта кету керек, бұл дизайнда 2 MCU пайдаланылады: күн трекері үшін бір (3,3 В 8 мГц Arduino Pro Mini) және сенсорлар/актерлер үшін бір тәуелсіз MCU.

Бұл 0.3 нұсқасы

Толық қанағаттанғаннан кейін барлық жобаларды жариялаудың орнына, мен үздіксіз интеграциямен айналысамын және бір нәрсені жиі жеткіземін, мен жеткізгенімді қажетіне қарай өзгертемін. Мен аккумуляторды зарядтау үшін тағы бір нұсқаулықты жазамын, контроллердің бағдарламалық жасақтамасын/аппараттық құралын оңтайландыру аяқталған кезде. Мен бұл қадамды оңтайландыру қажет екенін көрсетемін.

Бұл тәсілдің бір себебі - клиенттердің кері байланысы. Егер жігіттер сізге қажеттілікті көрсе немесе жақсы көзқарас болса, түсініктеме беріңіз, бірақ мен бәрін жеткізе алмайтынымды және мүмкін сізге сәйкес келетін уақытқа жеткізе алмайтынымды есте сақтаңыз. Бұл түсініктемелер маңызды емес сияқты, олар осы мақаладан жойылады.

Бұған не кіреді:

  1. Күннің жақын орналасқан жерін сезіну үшін нұсқаулықтың түпнұсқасындағы LDR -ді қолданыңыз.
  2. Серваларды күн көзіне қарай жылжытыңыз.
  3. Қозғалыс сезімталдығының нұсқалары.
  4. Күнге жылжу кезінде қадам өлшемінің параметрлері.
  5. Сервода қолданылатын бұрыштық шектеулерге арналған опциялар.
  6. Қозғалыстардың кешігуіне арналған опциялар.
  7. MCU арасындағы мәндерді орнатуға/алуға арналған I2C интерфейсі.
  8. Қозғалыс арасындағы терең ұйқы.

Бұған не жатпайды (және уақыт бойынша рұқсат етіледі):

  1. Қуатты тек күндізгі уақытта қолданыңыз.
  2. Таңертеңгі позицияны еске түсіру және ымырт жабылған кезде оған бару.
  3. MCU -дан реттеушіні шығару.
  4. MCU -дағы жарықдиодты сөндіру.
  5. Қуатты RAW емес, VCC арқылы қайта бағыттау.
  6. USB -ден сериялық TTL түрлендіргішіне реттелмейтін қуатсыз жыпылықтауға арналған шешімдерді қамтамасыз ету.
  7. Батарея кернеуінің мониторы.

ТАРИХ

2017 жылғы 20 желтоқсан V0.1 КОД

Бастапқы нұсқада жарық көзі бар, үнемі қосылады, зарядталмайды

7 қаңтар 2018 ж. V0.2 КОД

  • ЖАБДЫҚ ӨЗГЕРІСТЕРІ

    • I2C түйреуіштерін қосыңыз
    • Сервистік GND -ге қосқышты қосыңыз
    • Басқару тақтасының жапсырмасындағы жапсырма
  • БАҒДАРЛАМАЛЫҚ ӨЗГЕРТУЛЕР

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

19 қаңтар 2018 ж. V0.3 КОД

  • ЖАБДЫҚ

    Белгі жаңартылды. Коммутатор енді CONFIG немесе TRACK режимін таңдау үшін қолданылады

  • БАҒДАРЛАМА

    • I2C тек конфигурация үшін қолданылады
    • Контроллер қадағалауды бастамас бұрын 5 секунд күтеді, қолды жылжытуға мүмкіндік береді
    • I2C конфигурациясын пайдалану үшін SPDT бірлік етік ретінде CONFIG -те болуы керек
    • Қозғалысты қадағалау арасында құрылғы ұйқы режимінде болады, ұйқы режимінің ұйқы режимінде (ҰЙҚЫ МИНУТТАРЫ) (әдепкі 20 минут).

1 -қадам: материалдар мен құралдар

Құралдар мен материалдар
Құралдар мен материалдар
Құралдар мен материалдар
Құралдар мен материалдар
Құралдар мен материалдар
Құралдар мен материалдар

Қазір материалдар мен дереккөздердің толық тізімі бар.

  1. 3D басып шығарылған бөлшектер.
  2. Arduino Pro Mini 3.3V 8 мГц
  3. 4х6 см өлшемді екі жақты прототипі PCB әмбебап баспа схемасы (жартысында кесіледі)
  4. 1 өшіру 40P ерлер тақырыбы (өлшемі бойынша кесіледі).
  5. 1 өшіру 40P әйел тақырыбы (өлшемі бойынша кесіледі).
  6. 10K 1/4 Вт 4 өшіру.
  7. Қосылатын сым.
  8. Дәнекер және темір.
  9. 20 өшіру 4G x 6 мм баспайтын табаның басы өздігінен бұрап тұратын бұрандалар.
  10. 4 өшірулі 4G x 6 мм баспайтын өздігінен бұрап тұратын бұрандалар.
  11. 1 өшіру 3.7V LiPo аккумуляторы мен ұстағышы (2P дюпонды қосқыштарда ажыратылады).
  12. 1 өшірулі 2P ерлердің тік бұрышты тақырыбы
  13. 1 өшірілген SPDT қосқышы 3 істікшелі 2,54 мм қадам
  14. Күшті цианоакрилат желімі
  15. Dupont коннекторлары әйел 1P тақырыбы (1 өшірілген көк, 1 жасыл түссіз).

2 -қадам: тізбекті жинау

Тізбекті жинау
Тізбекті жинау
Тізбекті жинау
Тізбекті жинау
Тізбекті жинау
Тізбекті жинау

Қазіргі уақытта тізбекте кернеуді бөлу схемасы жоқ (вольт өлшегіш).

  1. Ұзын ось бойынша 4х6 см екі жақты прототипті ПХД әмбебап баспа схемасын екіге кесіңіз.
  2. 40P ерлер тақырыбын бөліктерге бөліңіз:

    1. 12 -ден 2 -ге дейін
    2. 3 сағ 3P
    3. 6 сағ 2P.
  3. 40P әйел тақырыбын бөліктерге бөліңіз:

    1. 12 -ден 2 -ге дейін
    2. 1 сағ 6P
  4. Дәнекер 2 өшірулі 12 Әйел тақырыбы көрсетілгендей.
  5. 3P ер (қосымша) тақырыпшасынан алынған аралықты SPDT қосқышының астына цианоакрилат желімімен жабыстырыңыз.
  6. Басқа жақта, суретте көрсетілгендей, 6 өшіру 2P, 2 өшіру 3 адамдық тақырып және SPDT қосқышы.
  7. Дәнекерлеуші 10K резисторларды 4 өшіру (A, B, C, D қара) арқылы GND түйреуішінің бастарына (No2 қара) және A0 - A3 бастарының түйреуіштеріне (#5, #6, #7, #8) саңылау арқылы (сары) көрсетілгендей (3 фото + 1 диаграмма).
  8. LDR PINS дәнекерлеу PINS №4, #6, #8, #10 3.3V жолын және VCC түйіспесінің жоғарғы жағына тесікке дейін тесік (жасыл).
  9. Әйелдің үстіңгі жағындағы 3.3В жолын PINS № 1, #12, #15 суретте көрсетілгендей (қызыл) дәнекерлеу.
  10. 3.3В саңылау арқылы қапталған (қызыл) RAW колонкасының PIN коды №1.
  11. №11 ПИН -ден қызғылт сары ілгекті суретте көрсетілгендей екінші жағынан аналық түйреуішке дейін тесіңіз.
  12. #20 -дан #30 -ға дейін және № 31 -ден #13 -ге дейін және 16 -ға дейінгі көк ілгекті сыммен байлаңыз.
  13. Дәнекерлеуші әйел тақырыпшасының PIN коды № 11 еркек тақырыптың PIN кодымен тесік арқылы.
  14. Ұзындығы 30 мм болатын 2 дюпонды қосқышты дайындаңыз, оның ішінде әйел 1P тақырыбы бар (1 өшірілген көк, 1 жасыл түссіз). Жолақ пен қаңылтырдың екінші ұшы.
  15. Көгілдір Dupont сымы #28 дейін; Dupont жасыл сымы #29.
  16. Arduino -дің жоғарғы жағында 6P әйел басын бекітіңіз, содан кейін дәнекерлеңіз.
  17. Arduino -ның үстіңгі жағына 2P тік бұрышты әйелге арналған №29 және #30 бекіткішін бекітіңіз, содан кейін дәнекерлеңіз.
  18. Arduino -ның астыңғы жағында 12P -дің 2 -ін және 3P -дегі 3 -ші еркек түйреуіштерді бекітіңіз, содан кейін дәнекерлеңіз.
  19. Arduino еркек 12P түйреуіштерін PCB 12P әйел тақырыптарына енгізіңіз.

3 -қадам: MCU жыпылықтайды

MCU жыпылықтайды
MCU жыпылықтайды
MCU жыпылықтайды
MCU жыпылықтайды
MCU жыпылықтайды
MCU жыпылықтайды

Arduino Pro Mini FTPI232 USB -ден TTL түрлендіргішінің көмегімен 6P әйел тақырыбы арқылы ыңғайлы түрде жыпылықтайды. 2 тақтаны туралау үшін жоғарыдағы суретті қараңыз.

3.3V параметрінің FTDI232 құрылғысында таңдалғанына көз жеткізіңіз. Төмендегі кодты қолданып нұсқауларды орындаңыз (GIST сілтемесін пайдаланыңыз).

Қуаты төмен кітапхананы (бекітілген және https://github.com/rocketscream/Low-Power) орнату қажет.

Arduino Pro Mini + ПХД корпусына орнатылғаннан кейін, оны түйреуіштер ашылған кезде жыпылықтауға болады. Тек тақырыпты көрсететін Панель жақтауынан контроллер блогын ажыратыңыз.

I2C/EEPROM конфигурациясы мен қозғалыстар арасындағы ұйқы циклы бар көлбеу панельдік күн сканері. Ұйқы циклінің ұзақтығы дәлдігі ұзақтығы жоғарылаған сайын төмендейді, бірақ бұл үшін жеткілікті

/*
* код бойынша өзгертілген
* Матиас Лерой
*
* V0.2 ӨЗГЕРТУЛЕР
** I2C ОРНАТУ
** EEPROM ОРНАТУ
** Сериялық шығуды алып тастаңыз - I2C әсер етеді
** БАҚЫЛАУДЫ ҚОСУ/ӨШІРУ
** Сервисті I2C арқылы шектеуге көшіңіз
** I2C арқылы ағымдағы орташа қарқындылықты оқыңыз
* V0.3 ӨЗГЕРТУЛЕР
** 2 РЕЖИМДІ ОРНАТУ - ТРЕКТ (NO2C) ЖӘНЕ КОНФИГУРАЦИЯ (I2C ПАЙДАЛАНАДЫ)
** ҰҚТАУ ЖҰМЫС РЕЖИМІНДЕ (8 ЕКІНШІ БӨЛІКТЕРДІҢ ӨТЕ ДӘЛДІЛДІГІ ӨТЕ төмен)
** ҰЙЫҚТАУ/ОЯТУ кезіндегі қызмет көрсету
** Конфигурацияланатын бастапқы орынды алып тастаңыз (РЕЗУНДЫ)
** Конфигурацияланатын ояту секундтарын алып тастаңыз (аз)
** ҚОНФИГУРАЦИЯЛАУ ҚОСУ/ӨШІРУ (РЕДУДАНТ) алып тастаңыз
** ҚОСЫЛҒАН ТУРАЛЫ ТРЕККОРДЫ АЛУ
** КЕРЕКТІЛІК ГЕТЕРІН ЖОЮ - I2C БӨЛІКШІСІН ПАЙДАЛАНАДЫ
** I2C пайдаланбайтын кезде сериялық логинді қосыңыз
*/
#қосу
#қосу
#қосу
#қосу
#қосу
#defineEEPROM_VERSION1
#defineI2C_MSG_IN_SIZE3
#PIN_LDR_TL A0 анықтаңыз
#PIN_LDR_TR анықтаңыз A1
#PIN_LDR_BR A3 анықтаңыз
#PIN_LDR_BL A2 анықтаңыз
#definePIN_SERVO_V11
#definePIN_SERVO_H5
#defineIDX_I2C_ADDR0
#defineIDX_V_ANGLE_MIN1
#defineIDX_V_ANGLE_MAX2
#IDID_V_SENSITIVITY3
#defineIDX_V_STEP4
#defineIDX_H_ANGLE_MIN5
#defineIDX_H_ANGLE_MAX6
#IDID_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 = жалған;
voidsetup ()
{
Serial.begin (115200);
getFromEeprom ();
if (inConfigMode ()) {
Serial.println («Конфигурация режимі»);
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: Транзисторлық қосқышты қосу
_servoH.attach (PIN_SERVO_H);
_servoV.attach (PIN_SERVO_V);
үшін (int i = 0; i <20; i ++) {
егер (мен! = 0) {
getLightValues ();
}
moveServos ();
}
кешіктіру (500);
_servoH.detach ();
_servoV.detach ();
// ToDo: ТРАНЗИСТОРЛЫҚ АУЫСТЫРУШЫ ӨШІРУ
кешіктіру (500);
sleepFor ((_ 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»);
үшін (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 [индекс];
}
үзіліс;
жағдай ':
егер (индекс <IDX_END_EEPROM_SET) {
_i2cVals [индекс] = мән;
EEPROM.update (индекс, _i2cVals [индекс]);
}
үзіліс;
әдепкі:
қайтару;
}
}
}
voidrequestEvent ()
{
Wire.write (_i2cResponse);
}
// --------------------------------- LDR
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 (белгісіз сегіз сегіз сегмент) {
Serial.println («ұйықтап жатқан үшін»);
үшін (unsignedint sleepCounter = сегізСекундСегменті; 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 контроллерінің қорапшасының қабырғаларына салыңыз және 4G x 6мм тот баспайтын болаттан жасалған 2 өздігінен бұрап тұратын бұрандалармен бекітіңіз.
  3. SOLAR TRACKER контроллерінің қорапшасындағы бос орынға 6P тақырыбы бар Ardiuno Pro Mini + PCB салыңыз.
  4. SOLAR TRACKER контроллерінің қорапшасының қақпағын SOLAR TRACKER контроллерінің қорапшасының қабырғаларына салыңыз және 4G x 6мм тот баспайтын, өздігінен бұрап тұратын бұрандалармен бекітіңіз.
  5. Құрылғыны 4G x 6мм тот баспайтын сырғытпалы өздігінен бұрап тұратын бұрандалармен панельдік жақтаудың негізіне бекітіңіз.

5 -қадам: Бұрғылау қондырғыларын контроллерге қосу

Бұрғылау қондырғыларын контроллерге қосу
Бұрғылау қондырғыларын контроллерге қосу
Бұрғылау қондырғыларын контроллерге қосу
Бұрғылау қондырғыларын контроллерге қосу
Бұрғылау қондырғыларын контроллерге қосу
Бұрғылау қондырғыларын контроллерге қосу

Алдыңғы Нұсқаулықтан дайын тиісті қосылымдар - бұл серверлерден 2 өшірулі 2P LDR қосылымы және 2 ажыратымды 3P қосылымы. Қайта зарядтау дайын болғанша уақытша нәрсе - бұл батарея. Әзірге 2P DuPont қосылымымен аяқталатын 3.7V LiPo пайдаланыңыз.

  1. LDR қосылымдарын (полярлықсыз) жоғарыдан салыңыз:

    1. Жоғарғы оң жақ
    2. Жоғарғы сол жақ
    3. Төменгі оң жақ
    4. Төменгі сол жақ
  2. Серво қосылымдарын (сигнал сымы солға) жоғарыдан салыңыз:

    1. Көлденең
    2. Вертикалды
  3. СЫНАУҒА ДАЙЫН КҮТІҢІЗ: 3.7 В тұрақты ток сымын +ve жоғары, төмен қарай қосыңыз.

6 -қадам: Контроллерді тестілеу

Image
Image

Жоғарыда айтылғандай, бағдарламалық қамтамасыз ету Solar Charging жұмыс процесі үшін оңтайландырылмаған. Табиғи (күн) және табиғи емес жарық көздерін қолдана отырып, оны тексеруге және реттеуге болады.

Бақыланатын ортада бақылауды тексеру үшін ҰЙҚЫ МИНУТТАРЫН төмен мәнге қою ыңғайлы болуы мүмкін (келесі қадамды қараңыз).

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

Бұл контроллерді екінші MCU арқылы конфигурациялауды, консоль терезесіне параметрлерді енгізуді түсіндіреді.

  1. Келесі сценарийді D1M WIFI BLOCK -ке (немесе Wemos D1 Mini) жүктеңіз.
  2. USB -ді компьютерден ажыратыңыз
  3. PIN қосылымдары: -ve (Controller) => GND (D1M)+ve (Controller) => 3V3 (D1M) SCL (Controller) => D1 (D1M)

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

  4. SPDT қосқышын CONFIG күйіне бұрыңыз
  5. USB -ді компьютерге қосыңыз
  6. Arduino IDE -ден дұрыс COM порты бар консоль терезесін іске қосыңыз
  7. «Newline» және «9600 baud» таңдалғанына көз жеткізіңіз
  8. Пәрмендер жіберу мәтін ұясына енгізіледі, содан кейін Enter пернесі
  9. Командалар Character byte byte форматында болады
  10. Егер екінші байт (үшінші сегмент) қосылмаған болса, 0 (нөл) сценарий арқылы жіберіледі
  11. Сериялық кірісті қолдануда абай болыңыз; «Enter» пернесін басудан бұрын енгізгендеріңізді қарап шығыңыз. Егер сіз құлыптаулы болсаңыз (мысалы, I2C мекенжайын ұмытып кеткен мәнге өзгерту) контроллердің микробағдарламасын қайтадан жыпылықтауыңыз қажет болады.

Пәрменнің бірінші таңбасындағы қолдау көрсетілетін вариациялар:

  • E (Серво бақылауын қосу) конфигурация кезінде қозғалысты тоқтату үшін пайдалы. Бұл енгізу: 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 BURLE 1 - бұрыштық тік серво төменгі шегі (әдепкі 10, диапазон 0 - 180)
  • ВЕРТИКАЛЫҚ БҰРЫҚ 2 - бұрыштық тік серво жоғарғы шегі (әдепкі 170, диапазон 0 - 180)
  • SENSITIVITY VERTICAL LDR 3 - Тік LDR оқу маржасы (әдепкі 20, диапазон 0 - 1024)
  • ТІК БҰРЫШ 4 -ҚАДАМ - әр реттеуге бұрыштық вертикальды серво қадамдары (әдепкі 5, диапазон 1 - 20)
  • МИНИМАЛДЫ ТҮЗДІК БҰРЫШ 5 - бұрыштық көлденең серво төменгі шегі (әдепкі 10, диапазон 0 - 180)
  • МАҚСАТТЫ ТҮЗДІК БҰРЫҚ 6 - бұрыштық көлденең серво жоғарғы шегі (әдепкі 170, диапазон 0 - 180)
  • SENSITIVITY HORIZONTAL LDR 7 - LDR көлденең оқу шегі (әдепкі 20, диапазон 0 - 1024)
  • ТҮЗДІК БҰРЫШ ҚАДАМЫ 8 - әр реттеуге бұрыштық көлденең серво қадамдары (әдепкі 5, диапазон 1 - 20)
  • ҰЙҚЫ МИНУТТАРЫ 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
#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 ();
егер (rc! = endMarker) {
_receivedChars [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(token);
i ++;
қосқыш (i) {
1 -жағдай:
токен = strtok (NULL, делим);
индекс = atoi (жетон);
үзіліс;
2 -жағдай:
токен = strtok (NULL, делим);
if (токен! = NULL) {
мән = atoi (жетон);
}
үзіліс;
әдепкі:
белгі = NULL;
}
}
sendCmd (cmd, индекс, мән);
_newData = жалған;
}
}
voidsendCmd (char cmd, байт индексі, байт мәні) {
Serial.println («-----»);
Serial.println («Команданы жіберу:»);
Serial.println («\ t» + Жол (cmd) + «» + Жол (индекс) + «» + Жол (мән));
Serial.println («-----»);
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // құрылғыға жіберу
Wire.write (cmd); // таңбаны жібереді
Wire.write (индекс); // бір байтты жібереді
Wire.write (мән); // бір байтты жібереді
Wire.endTransmission ();
байт жауап = 0;
boR hadResponse = жалған;
егер (cmd == 'G') {
Wire.requestFrom (I2C_SLAVE_ADDRESS, 1);
while (Wire.available ()) // құл сұралғаннан аз жібере алады
{
hadResponse = ақиқат;
жауап = Wire.read ();
}
егер (hadResponse == true) {
Serial.println («Жауап алу:»);
Serial.println (жауап);
} басқа {
Serial.println («Жауап жоқ, мекенжайды/қосылымды тексеріңіз»);
}
}
}

rawt1m_serial_input_i2c_char_byte_byte_v0.1.ino файлын GitHub ұсынған ❤ арқылы қараңыз

8 -қадам: Келесі қадамдар

Бағдарламалық жасақтаманың/аппараттық құралдардың өзгеруін тексеру үшін мезгіл -мезгіл тексеріп отырыңыз.

Бағдарламалық жасақтаманы/жабдықты сіздің талаптарыңызға сай өзгертіңіз.

Кез келген сұрауларға/оңтайландыруларға түсініктеме беріңіз.

Ұсынылған: