Satura rādītājs:

IOT123 - SOLAR TRACKER - CONTROLLER: 8 soļi
IOT123 - SOLAR TRACKER - CONTROLLER: 8 soļi

Video: IOT123 - SOLAR TRACKER - CONTROLLER: 8 soļi

Video: IOT123 - SOLAR TRACKER - CONTROLLER: 8 soļi
Video: Subway Surfers in REAL LIFE. 🤣😂 #shorts 2024, Jūlijs
Anonim
Image
Image
IOT123 - SOLAR TRACKER - KONTROLERIS
IOT123 - SOLAR TRACKER - KONTROLERIS
IOT123 - SOLAR TRACKER - KONTROLERIS
IOT123 - SOLAR TRACKER - KONTROLERIS

Tas ir Instructable paplašinājums

IOT123 - SOLAR TRACKER - TILT/PAN, PANEL FRAME, LDR MOUNTS RIG. Šeit mēs koncentrējamies uz servo kontrolieri un saules stāvokļa sensoriem. Ir svarīgi norādīt, ka šajā dizainā tiek pieņemts, ka tiks izmantoti 2 MCU: viens (3.3V 8mHz Arduino Pro Mini) saules izsekotājam un viens neatkarīgs MCU jūsu sensoriem/aktieriem.

Šī ir versija 0.3

Tā vietā, lai publicētu visus projektus pēc pilnīgas apmierinātības, es praktizēšu nepārtrauktu integrāciju un sniegšu kaut ko biežāk, mainot savu sniegto pēc vajadzības. Es uzrakstīšu vēl vienu pamācību akumulatora lādētājam, _ kad_ ir pabeigta kontroliera programmatūras/aparatūras optimizācija. Es norādīšu, kur ir nepieciešama optimizācija, kad mēs to darām.

Daļa no šīs pieejas iemesla ir klientu atsauksmes. Ja jūs, puiši, redzat vajadzību vai jums ir labāka pieeja, lūdzu, komentējiet, taču paturiet prātā, ka es nevaru piegādāt visu un, iespējams, ne jums piemērotā termiņā. Tā kā šie skaidrojumi šķiet mazāk atbilstoši, tie tiks izdzēsti no šī raksta.

Kas tas ietver:

  1. Izmantojiet LDR no sākotnējā Instructable, lai saprastu saules aptuveno atrašanās vietu.
  2. Pārvietojiet servos pret sauli.
  3. Kustību jutīguma iespējas.
  4. Pakāpiena lieluma iespējas, pārejot uz sauli.
  5. Servos izmantoto leņķisko ierobežojumu iespējas.
  6. Kustību kavēšanās iespējas.
  7. I2C interfeiss vērtību iestatīšanai/iegūšanai starp MCU.
  8. Dziļš miegs starp kustībām.

Kas tajā nav iekļauts (un tiks izskatīts kā atļauts laiks):

  1. Strāvas izmantošana tikai dienasgaismas stundās.
  2. Atceroties rītausmas stāvokli un dodoties tur, kad krēsla tiek izslēgta.
  3. Regulatora noņemšana no MCU.
  4. Atspējojiet gaismas diodi (-es) MCU.
  5. Jaudas novirzīšana caur VCC, nevis RAW.
  6. Nodrošina risinājumus mirgošanai bez regulētas barošanas no USB uz seriālo TTL pārveidotāju.
  7. Akumulatora sprieguma monitors.

VĒSTURE

2017. gada 20. decembris V0.1 KODS

Sākotnējā versija izseko gaismas avotu, vienmēr ieslēgts, bez uzlādes

2018. gada 7. janvāris V0.2 KODS

  • Aparatūras izmaiņas

    • Pievienojiet I2C tapas
    • Pievienojiet slēdzi servo GND
    • Drukāta etiķete uz vadības bloka fasādes
  • PROGRAMMATŪRAS IZMAIŅAS

    • Lasīt konfigurāciju no EEPROM
    • I2C kopnes atbalsts kā cita MCU vergs (3.3V)
    • Iestatiet konfigurāciju, izmantojot I2C
    • Iestatiet Iespējots, izmantojot I2C
    • Iegūstiet konfigurāciju, izmantojot I2C
    • Iegūstiet izpildlaika rekvizītus, izmantojot I2C (pašlaik iespējota un pašreizējā gaismas intensitāte)
    • Noņemt sērijveida reģistrēšanu (tas ietekmēja I2C vērtības)

2018. gada 19. janvāris V0.3 KODS

  • Aparatūra

    Iezīme ir atjaunināta. Slēdzis tagad tiek izmantots, lai izvēlētos režīmu CONFIG vai TRACK

  • PROGRAMMATŪRA
    • I2C tiek izmantots tikai konfigurēšanai
    • Kontrolieris nogaida 5 sekundes pirms izsekošanas inicializācijas, ļauj kustināt rokas
    • Lai izmantotu I2C konfigurāciju, SPDT jābūt ieslēgtam CONFIG kā vienības sāknēšanas
    • Kustību izsekošanas laikā iekārta atrodas dziļā miega režīmā konfigurācijas vērtībai SLEEP MINUTES (noklusējuma 20 minūtes).

1. darbība: materiāli un instrumenti

Materiāli un instrumenti
Materiāli un instrumenti
Materiāli un instrumenti
Materiāli un instrumenti
Materiāli un instrumenti
Materiāli un instrumenti

Tagad ir pieejams pilns materiālu un avotu saraksts.

  1. 3D drukātas detaļas.
  2. Arduino Pro Mini 3.3V 8mHz
  3. 1 no 4x6 cm dubultās puses prototipa PCB universālās iespiedshēmas plates (jāsamazina uz pusēm)
  4. 1 off 40P vīriešu galvene (jāsamazina pēc izmēra).
  5. 1 off 40P sieviešu galvene (jāsamazina pēc izmēra).
  6. 4 izslēgti 10K 1/4 W rezistori.
  7. Savienojuma vads.
  8. Lodmetāls un dzelzs.
  9. 20 off 4G x 6mm nerūsējošās pannas galvas pašvītņojošās skrūves.
  10. 4 izslēgtas 4G x 6 mm nerūsējošas pašvītņojošas skrūves.
  11. 1 izslēgts 3,7 V LiPo akumulators un turētājs (beidzas ar 2P dupont savienotājiem).
  12. 1 izslēgta 2P vīriešu taisnā leņķa galvene
  13. 1 izslēgts SPDT slēdzis 3 kontaktu 2,54 mm solis
  14. Spēcīga ciānakrilāta līme
  15. Dupont savienotāju mātītes 1P galvene (1 zilā krāsā, 1 zaļā krāsā).

2. solis: shēmas montāža

Ķēdes montāža
Ķēdes montāža
Ķēdes montāža
Ķēdes montāža
Ķēdes montāža
Ķēdes montāža

Ķēdei pašlaik nav sprieguma dalītāja ķēdes (voltmetrs).

  1. Pārgrieziet 4x6 cm dubultās puses prototipa PCB universālo iespiedshēmas plāksni uz pusēm gar garo asi.
  2. Izgrieziet 40P vīrieša galviņu gabalos:

    1. 2 off 12P
    2. 3 izslēgts 3P
    3. 6 izslēgts 2P.
  3. Izgrieziet 40P sieviešu galveni gabalos:

    1. 2 off 12P
    2. 1 izslēgts 6P
  4. Lodēšana 2 izslēgta no 12Pievietes galvenes, kā parādīts attēlā.
  5. Ar ciānakrilāta līmi pielīmējiet starpliku, kas noņemts no 3P tēviņa (papildu) galvenes, uz SPDT slēdža apakšpuses
  6. No otras puses novietojiet lodēt 6 pie 2P, 2 off 3Pmale header un SPDT slēdzi, kā parādīts attēlā.
  7. Lodējiet 4 off 10K rezistorus (A, B, C, D melns), izmantojot vadu uz GND tapas galveni (#2 melns) un uz A0 - A3 galvenes tapām (#5, #6, #7, #8), pēc tam caur caurumu (dzeltens), kā parādīts (3 fotoattēli + 1 diagramma).
  8. Izsekojiet 3.3V no LDR PINS lodēšanas PINS #4, #6, #8, #10 un vītņojiet caurumu līdz feamale header VCC tapai (zaļa).
  9. Izsekojiet 3.3V sieviešu galvenes pusē, kā parādīts (sarkanā krāsā), lodējot uz PINS #1, #12, #15.
  10. 3.3V caurums, kas pielodēts pāri sānu (sarkanajam) RAW galvenes PIN Nr. 1.
  11. Izsekojiet oranžo savienošanu no PIN #11 caur caurumu līdz lodēšanai. Sievietes tapa otrā pusē, kā parādīts attēlā.
  12. Izsekojiet un pielodējiet zilo savienojuma vadu no #20 līdz #30 un no #31 līdz #13 un #16.
  13. Lodēšanas sievietes galvenes PIN Nr. 11 uz vīrieša galvenes PIN #11 caur caurumu.
  14. Sagatavojiet divus 30 mm garus dupont savienotājus ar sieviešu 1P galviņu (1 zilā krāsā, 1 zaļā krāsā). Sloksne un skārda otrs gals.
  15. Lodēt zilu Dupont vadu līdz #28; lodēt zaļā krāsā Dupont vadu līdz #29.
  16. Arduino augšpusē nostipriniet 6P sieviešu galviņu un pēc tam lodējiet.
  17. Arduino augšpusē nostipriniet 2P taisnā leņķa sieviešu galvu int #29 un #30, pēc tam lodējiet.
  18. Arduino apakšpusē piestipriniet 2 no 12P un 1 pie 3P vīriešu tapām, pēc tam lodējiet.
  19. Ievietojiet Arduino vīriešu kārtas 12P tapas PCB 12P sieviešu galvenēs.

3. darbība: MCU mirgošana

Mirgo MCU
Mirgo MCU
Mirgo MCU
Mirgo MCU
Mirgo MCU
Mirgo MCU

Arduino Pro Mini ir ērti mirgot, izmantojot FTDI232 USB uz TTL pārveidotāju, izmantojot 6P sieviešu galveni. Skatiet iepriekš redzamo fotoattēlu, lai izlīdzinātu 2 dēļus.

Pārliecinieties, vai FTDI232 ir izvēlēts 3.3V iestatījums. Izpildiet šeit sniegtos norādījumus, izmantojot zemāk esošo kodu (izmantojiet saiti uz GIST).

Jāinstalē zemas jaudas bibliotēka (pievienota un

Kad Arduino Pro Mini + PCB ir ievietots korpusā, to joprojām var mirgot, jo ir redzamas galvenes tapas. Vienkārši atvienojiet vadības bloku no paneļa rāmja, atklājot galveni.

Noliekamās pannas saules izsekotājs ar I2C/EEPROM konfigurāciju un miega cikls starp kustībām. Miega cikla ilguma precizitāte samazinās, palielinoties ilgumam, bet pietiek šim nolūkam

/*
* modificēts no koda
* Matiass Lerojs
*
* V0.2 MODIFIKĀCIJAS
** I2C SET GET
** EEPROM SET GET
** NOŅEMT SĒRIJAS IZEJU - IETEKMĒTA I2C
** IESPĒJOT/IZSLĒGT izsekošanu
** PĀRVIETOJIET SERVOS IEROBEŽOJUMIEM I2C
** LASIET PAŠREIZĒJO AVG INTENSITĀTI I2C
* V0.3 MODIFIKĀCIJAS
** PĀRSLĒGT 2 REŽĪMUS - TRACK (NO I2C) un CONFIGURE (LIETO I2C)
** MIEGS TREKA REŽĪMS (ĻOTI ZEMA PRECIZITĀTE 8 SEKUNDU PĀRBAUDES dēļ)
** ATŅEMT/PIEVIENOT SERVOS UZ MIEGU/PAMOST (TRANSISTORS, KAS IZMANTO PASĀKUMI)
** NOŅEMT KONFIGURĒJAMO SĀKOTNĒJO POZĪCIJU (REDUNDANT)
** NOŅEMT KONFIGURĒJAMOS PAMODINĀŠANAS SECONDS (REDUNDANT)
** NOŅEMT KONFIGURĒJAMU IESPĒJAM/IZSLĒGT (REDUNDANT)
** NOŅEMT IESLĒGTU KONFIGURĒJAMU TRACKER (LIETOT Aparatūras slēdzi)
** NOŅEMT SPRIEDZES GETTERI - LIETOS ATKĀRTU I2C KOMPONENTU
** PIEVIENOT SERIĀLO REĢISTRĀCIJU, NEIZMANTOJOT I2C
*/
#iekļaut
#iekļaut
#iekļaut
#iekļaut
#iekļaut
#defineEEPROM_VERSION1
#defineI2C_MSG_IN_SIZE3
#definePIN_LDR_TL A0
#definePIN_LDR_TR A1
#definePIN_LDR_BR A3
#definePIN_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 // visu LDRS vidējais rādītājs
#defineIDX_DUSK_INTENSITY13 // visu LDRS vidējais rādītājs
#defineIDX_END_EEPROM_SET14
#defineIDX_CURRENT_INTENSITY15 // visu LDRS vidējais - tiek izmantots, lai aprēķinātu IDX_DAWN_INTENSITY apkārtējo tiešo gaismu
#defineIDX_END_VALUES_GET16
#defineIDX_SIGN_117
#defineIDX_SIGN_218
#defineIDX_SIGN_319
Servo _servoH;
Servo _servoV;
baits _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 _stūrisH = 90;
int _stūrisV = 90;
int _verageTop = 0;
int _verageRight = 0;
int _verageBottom = 0;
int _verageLeft = 0;
baits _i2cResponse = 0;
bool _inConfigMode = nepatiess;
voidsetup ()
{
Serial.begin (115200);
getFromEeprom ();
if (inConfigMode ()) {
Serial.println ("Konfigurācijas režīms");
Serial.print ("I2C adrese:");
Sērijas.println (_i2cVals [IDX_I2C_ADDR]);
Wire.begin (_i2cVals [IDX_I2C_ADDR]);
Wire.onRecept (ReceiveEvent);
Wire.onRequest (requestEvent);
} vēl {
Serial.println ("Izsekošanas režīms");
kavēšanās (5000); // laiks, lai izvairītos no rokām, ja tiek pievienots akumulators utt.
}
}
voidloop ()
{
getLightValues ();
ja (! _inConfigMode) {
// Uzdevums: IESLĒGT TRANSISTORA SLĒDZI
_servoH.attach (PIN_SERVO_H);
_servoV.attach (PIN_SERVO_V);
par (int i = 0; i <20; i ++) {
ja (i! = 0) {
getLightValues ();
}
moveServos ();
}
kavēšanās (500);
_servoH.detach ();
_servoV.detach ();
// Uzdevums: IZSLĒGT TRANSISTORA SLĒDZI
kavēšanās (500);
aizmidzis par ((_ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8);
}
}
// --------------------------------- AKTUĀLAIS REŽĪMS
boolinConfigMode () {
pinMode (PIN_SERVO_H, INPUT);
_inConfigMode = digitalRead (PIN_SERVO_H) == 1;
return _inConfigMode;
}
// --------------------------------- EEPROM
voidgetFromEeprom () {
ja (
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");
par (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");
par (int i = 0; i <IDX_END_EEPROM_SET; i ++) {
_i2cVals = EEPROM.lasījums (i);
//Serial.println(String(i) + "=" + _i2cVals );
}
}
// --------------------------------- I2C
voidreceptEvent (int count) {
ja (skaits == I2C_MSG_IN_SIZE)
{
char cmd = Wire.read ();
baitu indekss = Wire.read ();
baitu vērtība = Wire.read ();
slēdzis (cmd) {
gadījums "G":
ja (indekss <IDX_END_VALUES_GET) {
_i2cResponse = _i2cVals [indekss];
}
pārtraukums;
lieta 'S':
ja (indekss <IDX_END_EEPROM_SET) {
_i2cVals [indekss] = vērtība;
EEPROM.update (indekss, _i2cVals [indekss]);
}
pārtraukums;
noklusējums:
atgriešanās;
}
}
}
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] = karte (avgIntensity, 0, 1024, 0, 255);
}
// -------------------------------- SERVOS
voidmoveServos () {
Serial.println ("moveServos");
ja ((_averageLeft-_averageRight)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH-_i2cVals [IDX_H_STEP])> _ i2cVals [IDX_H_ANGLE_MIN]) {
// iet pa kreisi
Serial.println ("moveServos iet pa kreisi");
kavēšanās (_slowingDelay);
par (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH--);
kavēšanās (_servoLoopDelay);
}
}
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH+_i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) {
// iet pareizi
Serial.println ("moveServos iet pa kreisi");
kavēšanās (_slowingDelay);
par (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH ++);
kavēšanās (_servoLoopDelay);
}
}
cits {
// neko nedarot
Serial.println ("moveServos nedarot neko");
kavēšanās (_slowingDelay);
}
ja ((_averageTop-_averageBottom)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV+_i2cVals [IDX_V_STEP]) <_ i2cVals [IDX_V_ANGLE_MAX]) {
// Doties augšup
Serial.println ("moveServos iet uz augšu");
kavēšanās (_slowingDelay);
par (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.write (_angleV ++);
kavēšanās (_servoLoopDelay);
}
}
elseif ((_averageBottom-_averageTop)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV-_i2cVals [IDX_V_STEP])> _ i2cVals [IDX_V_ANGLE_MIN]) {
// iet uz leju
Serial.println ("moveServos iet uz leju");
kavēšanās (_slowingDelay);
par (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.write (_angleV--);
kavēšanās (_servoLoopDelay);
}
}
cits {
Serial.println ("moveServos nedarot neko");
kavēšanās (_slowingDelay);
}
}
//---------------------------------GULĒT
voidasleepFor (unsignedint eightSecondSegments) {
Serial.println ("aizmidzis");
par (unsignedint sleepCounter = eightSecondSegments; sleepCounter> 0; sleepCounter--)
{
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
}
}

apskatīt rawtilt_pan_tracker_0.3.ino, ko mitina GitHub ar ❤

4. solis: ķēdes korpusa salikšana

Ķēdes korpusa salikšana
Ķēdes korpusa salikšana
Ķēdes korpusa salikšana
Ķēdes korpusa salikšana
Ķēdes korpusa salikšana
Ķēdes korpusa salikšana
  1. Pārliecinieties, vai Ardiuno Pro Mini ir ievietots PCB galvenēs.
  2. Ievietojiet SOLAR TRACKER vadības bloka pamatni SOLAR TRACKER kontrollera kārbas sienās un piestipriniet ar 2 izslēgtām 4G x 6 mm nerūsējošām pašvītņojošām skrūvēm.
  3. Ievietojiet Ardiuno Pro Mini + PCB ar 6P galvenes spraugu tukšumā SOLAR TRACKER kontroliera kārbas pamatnē.
  4. Ievietojiet SOLAR TRACKER kontrollera kārbas vāku SOLAR TRACKER kontrollera kārbas sienās un piestipriniet ar 2 izslēgtām 4G x 6 mm nerūsējošām pašvītņojošām skrūvēm.
  5. Piestipriniet montāžu pie paneļa rāmja pamatnes ar 4 izslēgtām 4G x 6 mm nerūsējošām pašvītņojošām skrūvēm.

5. solis: platformas vadu pievienošana kontrolierim

Ierīces vadu pievienošana kontrolierim
Ierīces vadu pievienošana kontrolierim
Ierīces vadu pievienošana kontrolierim
Ierīces vadu pievienošana kontrolierim
Ierīces vadu pievienošana kontrolierim
Ierīces vadu pievienošana kontrolierim

Attiecīgie savienojumi, kas ir gatavi no iepriekšējā Instructable, ir 4 izslēgti 2P LDR savienojumi un 2 izslēgti 3P savienojumi no servo. Akumulators ir īslaicīgs, līdz uzlāde ir gatava. Pagaidām izmantojiet 3,7 V LiPo, kas beidzas ar 2P DuPont savienojumu.

  1. Ievietojiet LDR savienojumus (bez polaritātes) no augšas:

    1. Augšā pa labi
    2. Augšējais kreisais
    3. Apakšā pa labi
    4. Apakšā pa kreisi
  2. Ievietojiet servo savienojumus (ar signāla vadu pa kreisi) no augšas:

    1. Horizontāli
    2. Vertikāli
  3. GAIDIET LĪDZ GATAVAM TESTAM: tad ievietojiet 3.7V līdzstrāvas barošanas vadu +ve uz augšu, -ve līdz apakšai.

6. darbība: kontroliera pārbaude

Image
Image

Kā minēts iepriekš, programmatūra nav optimizēta saules uzlādes darbplūsmai. Tomēr to var pārbaudīt un pielāgot, izmantojot dabiskus (saules) un nedabiskus gaismas avotus.

Lai pārbaudītu izsekošanu kontrolētā vidē, var būt ērti iestatīt SLEEP MINUTES zemāku vērtību (skat. Nākamo soli).

7. darbība: konfigurēšana, izmantojot I2C, izmantojot konsoles ievadi

Tas izskaidro kontroliera konfigurēšanu, izmantojot otru MCU, iestatījumu ievadīšanu konsoles logā.

  1. Augšupielādējiet šo skriptu D1M WIFI BLOCK (vai Wemos D1 Mini).
  2. Atvienojiet USB no datora
  3. PIN SAVIENOJUMI: -ve (kontrolieris) => GND (D1M)+ve (kontrolieris) => 3V3 (D1M) SCL (kontrolieris) => D1 (D1M)

    SDA (kontrolieris) => D2 (D1M)

  4. Pagrieziet SPDT slēdzi uz CONFIG
  5. Savienojiet USB ar datoru
  6. No Arduino IDE atveriet konsoles logu ar pareizo COM portu
  7. Pārliecinieties, vai ir atlasīti "Newline" un "9600 baud"
  8. Komandas tiek ievadītas teksta lodziņā Sūtīt, kam seko taustiņš Enter
  9. Komandas ir rakstzīmju baitu formātā
  10. Ja otrais baits (trešais segments) nav iekļauts, skripts nosūta 0 (nulle)
  11. Esiet piesardzīgs, izmantojot seriālo ievadi; pirms nospiežat taustiņu "Enter", pārskatiet ievadīto. Ja esat bloķēts (piemēram, mainot I2C adresi uz vērtību, kuru esat aizmirsis), jums atkal būs jāatspīd kontroliera programmaparatūra.

Komandas pirmās rakstzīmes atbalstītās variācijas ir šādas:

  • E (Iespējot servo izsekošanu), kas noder kustības apturēšanai konfigurācijas laikā. To ievada, izmantojot: E 0
  • D (Atspējot servo izsekošanu) ir noderīgi, lai sāktu automātisko izsekošanu, ja ierīce netiek restartēta. To ievada, izmantojot: D 0
  • G (iegūt konfigurācijas vērtību) nolasa vērtības no EEPROM un IN -MEMORY: tas tiek ievadīts, izmantojot: G (indekss ir derīgas baitu vērtības 0 - 13 un 15)
  • S (Set EEPROM value) iestata EEPROM vērtības, kas ir pieejamas pēc pārstartēšanas. To ievada, izmantojot: S (indekss ir derīgas baitu vērtības 0 - 13, vērtība ir derīgas baitu vērtības un atšķiras atkarībā no rekvizīta)

Kods ir indeksu patiesība, bet derīgu vērtību/komentāru rokasgrāmatā tiek izmantots šāds:

  • I2C ADRESE 0 - kontroliera verga adrese, kapteinim tas ir nepieciešams, lai sazinātos ar kontrolieri (noklusējuma 10)
  • MINIMĀLAIS VERTIKĀLAIS LEŅĶIS 1 - leņķa vertikālā servo apakšējā robeža (noklusējuma 10, diapazons 0 - 180)
  • MAKSIMĀLAIS VERTIKĀLAIS LEŅĶIS 2 - leņķa vertikālā servo augšējā robeža (noklusējuma vērtība 170, diapazons no 0 līdz 180)
  • SENSITIVITY VERTICAL LDR 3 - Vertikālā LDR nolasījuma mala (noklusējuma vērtība 20, diapazons no 0 līdz 1024)
  • VERTIKĀLAIS LEŅĶIS 4. SOLIS - leņķa vertikālie servo soļi katrā regulējumā (noklusējuma 5, diapazons 1 - 20)
  • MINIMĀLAIS HORIZONTĀLAIS leņķis 5 - leņķa horizontālā servo apakšējā robeža (noklusējuma 10, diapazons 0 - 180)
  • MAKSIMĀLAIS HORIZONTĀLAIS LEŅĶIS 6 - leņķa horizontālā servo augšējā robeža (noklusējums 170, diapazons no 0 līdz 180)
  • SENSITIVITY HORIZONTAL LDR 7 - horizontāla LDR nolasījuma mala (noklusējuma 20, diapazons no 0 līdz 1024)
  • HORIZONTĀLAIS LEŅĶIS 8. SOLIS - horizontālie servo soļi katrā regulējumā (noklusējuma 5, diapazons 1 - 20)
  • SLEEP MINUTES 9 - aptuvenais miega periods starp izsekošanu (noklusējuma 20, diapazons 1–255)
  • 10. VERTIKĀLS RĪTAS LEŅĶIS - TURPMĀKĀ LIETOŠANA - vertikālais leņķis, kurā atgriezties, kad saule noriet
  • HORIZONTĀLS RĪTAS 11. LEŅĶIS - TURPMĀKĀ LIETOŠANA - horizontālais leņķis, kurā atgriezties, kad saule noriet
  • DAWN INTENSITY 12 - TURPMĀKĀ LIETOŠANA - visu LDR minimālais vidējais, kas izraisa ikdienas saules izsekošanas sākumu
  • DUSK INTENSITY 13 - TURPMĀKĀ LIETOŠANA - visu LDR minimālais vidējais, kas izraisa ikdienas saules izsekošanas pārtraukšanu
  • EEPROM VĒRTĪBU BEIGAS MARKER 14 - VĒRTĪBA NELIETO
  • KĀRTĒJĀ INTENSITĀTE 15 - pašreizējais vidējais gaismas intensitātes procents
  • ATMIŅAS VĒRTĪBU BEIGAS MARĶĒTĀJS 16 - VĒRTĪBA NELIETO.

Notver sērijveida ievadi (tastatūras ievade konsoles logā) un pārsūta to I2C vergam formātā char, baits, baits

#iekļaut
#defineI2C_MSG_IN_SIZE2
#defineI2C_MSG_OUT_SIZE3
#defineI2C_SLAVE_ADDRESS10
Būla _newData = nepatiess;
const baits _numChars = 32;
char _receivedChars [_numChars]; // masīvs saņemto datu glabāšanai
voidsetup () {
Sērijas sākums (9600);
Wire.begin (D2, D1);
kavēšanās (5000);
}
voidloop () {
recvWithEndMarker ();
parseSendCommands ();
}
voidrecvWithEndMarker () {
statiskais baits ndx = 0;
char endMarker = '\ n';
char rc;
kamēr (Serial.available ()> 0 && _newData == false) {
rc = Sērijas.lasījums ();
ja (rc! = endMarker) {
_receivedChars [ndx] = rc;
ndx ++;
ja (ndx> = _numChars) {
ndx = _numuru skaits - 1;
}
} vēl {
_receivedChars [ndx] = '\ 0'; // izbeigt virkni
ndx = 0;
_newData = taisnība;
}
}
}
voidparseSendCommands () {
ja (_jaunie dati == taisnība) {
constchar delim [2] = "";
char *žetons;
žetons = strtok (_saņēmaChars, delim);
char cmd = _saņemtas rakstzīmes [0];
baitu indekss = 0;
baitu vērtība = 0;
int i = 0;
while (marķieris! = NULL) {
//Serial.println(token);
i ++;
slēdzis (i) {
1. gadījums:
žetons = strtok (NULL, delim);
indekss = atoi (žetons);
pārtraukums;
2. gadījums:
žetons = strtok (NULL, delim);
ja (marķieris! = NULL) {
vērtība = atoi (žetons);
}
pārtraukums;
noklusējums:
marķieris = NULL;
}
}
sendCmd (cmd, indekss, vērtība);
_newData = nepatiess;
}
}
voidsendCmd (char cmd, baitu indekss, baitu vērtība) {
Sērijas.println ("-----");
Serial.println ("Sūtīšanas komanda:");
Serial.println ("\ t" + virkne (cmd) + "" + virkne (indekss) + "" + virkne (vērtība));
Sērijas.println ("-----");
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // pārsūtīt uz ierīci
Wire.write (cmd); // nosūta char
Wire.write (indekss); // nosūta vienu baitu
Wire.write (vērtība); // nosūta vienu baitu
Wire.endTransmission ();
baitu atbilde = 0;
bool hadResponse = nepatiess;
ja (cmd == 'G') {
Wire.requestFrom (I2C_SLAVE_ADDRESS, 1);
kamēr (Wire.available ()) // vergs var nosūtīt mazāk, nekā pieprasīts
{
hadResponse = taisnība;
atbilde = Wire.read ();
}
ja (hadResponse == true) {
Serial.println ("Atbildes iegūšana:");
Serial.println (atbilde);
} vēl {
Serial.println ("Nav atbildes, pārbaudiet adresi/savienojumu");
}
}
}

skatīt rawd1m_serial_input_i2c_char_byte_byte_v0.1.ino, ko mitina GitHub ar ❤

8. darbība. Nākamās darbības

Periodiski pārbaudiet, vai nav izmaiņas programmatūrā/aparatūrā.

Pārveidojiet programmatūru/aparatūru atbilstoši savām prasībām.

Komentējiet visus pieprasījumus/optimizāciju.

Ieteicams: