Obsah:

IOT123 - SOLÁRNY SLEDOVAČ - OVLÁDAČ: 8 krokov
IOT123 - SOLÁRNY SLEDOVAČ - OVLÁDAČ: 8 krokov

Video: IOT123 - SOLÁRNY SLEDOVAČ - OVLÁDAČ: 8 krokov

Video: IOT123 - SOLÁRNY SLEDOVAČ - OVLÁDAČ: 8 krokov
Video: Solar Tracker System using Arduino and LDR #shorts #charger 2024, Júl
Anonim
Image
Image
IOT123 - SOLÁRNY SLEDOVAČ - REGULÁTOR
IOT123 - SOLÁRNY SLEDOVAČ - REGULÁTOR
IOT123 - SOLÁRNY SLEDOVAČ - REGULÁTOR
IOT123 - SOLÁRNY SLEDOVAČ - REGULÁTOR

Toto je rozšírenie Instructable

IOT123 - SOLÁRNY SLEDOVAČ - SKLON/PAN, RÁM PANELU, RIG. Tu sa zameriavame na ovládač serv a senzory polohy slnka. Je dôležité zdôrazniť, že tento dizajn predpokladá, že budú použité 2 MCU: jeden (3,3 V 8 mHz Arduino Pro Mini) pre solárny sledovač a jeden nezávislý MCU pre vaše senzory/herce.

Toto je verzia 0.3

Namiesto publikovania všetkých projektov po úplnej spokojnosti budem praktizovať nepretržitú integráciu a dodávať niečo častejšie a upravovať to, čo som dodal, ako potrebujem. Napíšem ďalší návod na nabíjačku batérií, _ak_ je dokončená optimalizácia softvéru/hardvéru ovládača. Keď týmto krokom prechádzame, poukážem na to, kde sú potrebné optimalizácie.

Jedným z dôvodov tohto prístupu je spätná väzba od klientov. Ak vidíte potrebu alebo máte lepší prístup, napíšte komentár, ale majte na pamäti, že nemôžem dodať všetko a možno nie v časovom rámci, ktorý vám vyhovuje. Pretože sa tieto vysvetlenia zdajú menej relevantné, budú z tohto článku vymazané.

Čo to zahŕňa:

  1. Na zistenie približnej polohy Slnka použite LDR z pôvodného Instructable.
  2. Posuňte servá tvárou k slnku.
  3. Možnosti citlivosti pohybov.
  4. Možnosti pre veľkosť kroku pri pohybe na slnko.
  5. Možnosti uhlových obmedzení použitých na servách.
  6. Možnosti oneskorenia pohybov.
  7. Rozhranie I2C na nastavenie/získavanie hodnôt medzi MCU.

  8. Medzi pohybmi hlboký spánok.

Čo to nezahŕňa (a bude sa to riešiť podľa časových možností):

  1. Používajte iba energiu počas denného svetla.
  2. Pamätať si polohu úsvitu a ísť tam za súmraku.
  3. Demontáž regulátora z MCU.
  4. Vypnutie LED diód na MCU.
  5. Presmerovanie energie cez VCC namiesto RAW.
  6. Poskytuje alternatívne riešenia pre blikanie bez regulovaného napájania z prevodníka USB na sériový TTL.
  7. Monitor napätia batérie.

HISTÓRIA

20. december 2017 V0.1 KÓD

Pôvodná verzia sleduje svetelný zdroj, vždy zapnutý, bez nabíjania

7. januára 2018 V0.2 KÓD

  • ZMENY HARDWARU

    • Pridajte piny I2C
    • Pridajte prepínač do servo GND
    • Vytlačený štítok na palubnej doske ovládača
  • ZMENY SOFTWARU

    • Prečítajte si konfiguráciu z EEPROM
    • Podpora zbernice I2C ako podradená k inému MCU (3,3 V)
    • Nastavte konfiguráciu cez I2C

    • Nastavte Zapnuté cez I2C
    • Získajte konfiguráciu cez I2C
    • Získajte vlastnosti runtime cez I2C (aktuálne povolené a aktuálna intenzita svetla)
    • Odstrániť sériové protokolovanie (malo to vplyv na hodnoty I2C)

19. januára 2018 V0.3 KÓD

  • HARDWARE

    Štítok aktualizovaný. Prepínač sa teraz používa na výber režimu CONFIG alebo TRACK

  • SOFTVÉR

    • I2C sa používa iba na konfiguráciu
    • Ovládač čaká 5 sekúnd pred inicializáciou sledovania a umožňuje pohyb rukou
    • Na použitie konfigurácie I2C musí byť SPDT na CONFIG ako bootovanie jednotiek
    • Medzi sledovaním pohybu je jednotka v režime hlbokého spánku pre konfiguračnú hodnotu SLEEP MINUTES (predvolené nastavenie je 20 minút).

Krok 1: Materiály a nástroje

Materiály a nástroje
Materiály a nástroje
Materiály a nástroje
Materiály a nástroje
Materiály a nástroje
Materiály a nástroje

Teraz je k dispozícii úplný zoznam kusovníkov a zdrojov.

  1. 3D tlačené diely.
  2. Arduino Pro Mini 3,3 V 8 MHz
  3. 1 x 4 x 6 cm obojstranná prototypová doska plošných spojov s plošnými spojmi (skráti sa na polovicu)
  4. 1 vypnutá hlavička 40P mužského pohlavia (bude narezané na veľkosť).
  5. 1 vypnutá hlavička 40P (skracuje sa na mieru).
  6. 4 vypnuté 10K 1/4W rezistory.
  7. Pripojovací drôt.
  8. Spájka a železo.
  9. 20 off samorezných skrutiek z nehrdzavejúcej ocele s hlavou a hlavou 4G x 6 mm.
  10. 4 off nerezové zapustené skrutky 4G x 6 mm.
  11. 1 vypnutá 3,7 V batéria LiPo a držiak (zakončené 2P dupontovými konektormi).
  12. 1 vypnutá 2P hlavička mužského pravého uhla
  13. 1 vypnutý prepínač SPDT, 3 kolíky s rozstupom 2,54 mm
  14. Silné kyanoakrylátové lepidlo
  15. Konektory Dupont, zásuvka 1P, zásuvka (1 modrá, 1 zelená).

Krok 2: Zostavenie obvodu

Zostavenie obvodu
Zostavenie obvodu
Zostavenie obvodu
Zostavenie obvodu
Zostavenie obvodu
Zostavenie obvodu

Okruh v súčasnosti nemá obvod rozdeľovača napätia (voltmetr).

  1. Univerzálnu dosku s plošnými spojmi s prototypom plošných spojov 4x6 cm s obojstrannou stranou rozrezajte na polovicu pozdĺž dlhej osi.
  2. Rozrežte mužskú hlavičku 40P na kúsky:

    1. 2 z 12P
    2. 3 z 3P
    3. 6 z 2P.
  3. Rozrežte ženskú hlavičku 40P na kúsky:

    1. 2 z 12P
    2. 1 z 6P
  4. Spájkujte 2 vypnutú hlavičku 12Pemale podľa obrázku.
  5. Kyanoakrylátovým lepidlom prilepte rozperu odstránenú z 3P vidlice (prídavnej) na spodnú stranu spínača SPDT
  6. Na druhej strane umiestnite spájku 6 off 2P, 2 off 3Pmale header a prepínač SPDT podľa obrázku.
  7. Spájkujte 4 vypnuté 10K odpory (A, B, C, D čierne) cez vývod na kolíkový konektor GND (#2 čierny) a na kolíky záhlavia A0 - A3 (#5, #6, #7, #8) potom cez otvor (žltý), ako je znázornené (3 fotografie + 1 diagram).
  8. Zaznamenajte 3,3 V z spájkovacích PINOV LDR PINS #4, #6, #8, #10 a prevlečte otvorom do kolíka VCC kolíka (zelený).
  9. Sledujte 3,3 V na strane ženskej hlavičky, ako je znázornené (červené), spájkovanie na PINS #1, #12, #15.
  10. 3,3 V cez otvor spájkovaný cez stranu (červený) RAW záhlavie PIN #1.
  11. Stopujte oranžovú prípojku od PINu č. 11 cez otvor k spájkovaciemu kolíku na druhej strane, ako je to znázornené.
  12. Sledujte a spájkujte modrý prepojovací drôt od č. 20 do #30 a od #31 do #13 a #16.
  13. Pájecí konektor PIN #11 k hlavičke #11 spájkujte cez otvor.
  14. Pripravte si 2 dupontové konektory dlhé 30 mm so zásuvkou 1P (1 modrá, 1 zelená). Pruhujte a opečte druhý koniec.
  15. Spájkujte modrý vodič Dupont na #28; spájkujte zelený vodič Dupont na #29.
  16. Na vrchnú stranu Arduina pripevnite 6P zásuvku a potom spájkujte.
  17. Na vrchnú stranu Arduina pripevnite 2P pravouhlú zásuvku s vnútorným konektorom č. 29 a #30 a potom spájkujte.
  18. Na spodnej strane Arduina pripevnite 2 samčie piny 12P a 1 vypnutý 3P a potom spájkujte.
  19. Vložte samčie 12P kolíky Arduino do 12P zásuviek PCB.

Krok 3: Blikanie MCU

Bliká MCU
Bliká MCU
Bliká MCU
Bliká MCU
Bliká MCU
Bliká MCU

Arduino Pro Mini sa pohodlne bliká pomocou prevodníka FTDI232 USB na TTL pomocou 6P zásuvky. Zarovnanie 2 dosiek nájdete na fotografii vyššie.

Zaistite, aby bolo na vašom FTDI232 zvolené nastavenie 3,3 V. Postupujte podľa pokynov tu pomocou nižšie uvedeného kódu (použite odkaz na GIST).

Je potrebné nainštalovať nízkoenergetickú knižnicu (priloženú a

Keď je doska plošných spojov Arduino Pro Mini + nainštalovaná v kryte, je možné ju stále blikať, pretože sú odkryté kolíky záhlavia. Odpojte riadiacu jednotku od rámu panela, čím sa odkryje hlavička.

Výklopný solárny sledovač s konfiguráciou I2C/EEPROM a cyklom spánku medzi pohybmi. Presnosť trvania cyklu spánku sa so zvyšovaním trvania znižuje, ale na tento účel postačuje

/*
* upravené z kódu
* od Mathiasa Leroya
*
* V0.2 ÚPRAVY
** ZÍSKAJTE I2C
** ZÍSKAJTE EEPROM
** ODSTRÁNIŤ SÉRIOVÝ VÝSTUP - OVPLYVNENÝ I2C
** POVOLIŤ/ZAKÁZAŤ SLEDOVANIE
** POSUNTE SLUŽBY NA OMEZENIA POMOCOU I2C
** PREČÍTAJTE SI AKTUÁLNU AVG INTENZITU PRI I2C
* V0.3 ÚPRAVY
** SPÍNAČ PRE 2 REŽIMY - TRASA (ŽIADNA I2C) a KONFIGURÁCIA (POUŽÍVA I2C)
** SPÁNOK V REŽIME SLEDOVANIA (VEĽMI NÍZKA PRESNOSŤ V DÔKAZU 8 DRUHÝCH ČASOV)
** DETACH/ATTACH SERVOS ON SLEEP/WAKE (TRANSISTOR POUŽITÝ NAVŽDY)
** ODSTRÁNIŤ KONFIGUROVATEĽNÚ počiatočnú pozíciu (nadbytočné)
** ODSTRÁNIŤ KONFIGUROVATEĽNÉ SEKUNDY (Zbytočné)
** ODSTRÁNIŤ KONFIGUROVATEĽNÉ POVOLIŤ/ZAKÁZAŤ (OPATRENIA)
** ODSTRÁNIŤ KONFIGUROVATEĽNÝ TRACKER POVOLENÝ (POUŽÍVAŤ HARDWAROVÝ SPÍNAČ)
** ODSTRÁNTE NAPÄTIE ZÍSKEJTE - POUŽÍVAJTE ODDELENÝ KOMPONENT I2C
** PRI NEPOUŽÍVANÍ I2C PRIDAJTE SÉRIOVÝ ZÁBER
*/
#zahrnúť
#zahrnúť
#zahrnúť
#zahrnúť
#zahrnúť
#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 // priemer všetkých LDRS
#defineIDX_DUSK_INTENSITY13 // priemer všetkých LDRS
#defineIDX_END_EEPROM_SET14
#defineIDX_CURRENT_INTENSITY15 // priemer všetkých LDRS - používa sa na výpočet IDX_DAWN_INTENSITY ambiantné nepriame svetlo
#defineIDX_END_VALUES_GET16
#defineIDX_SIGN_117
#defineIDX_SIGN_218
#defineIDX_SIGN_319
Servo _servoH;
Servo _servoV;
byte _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;
byte _i2cResponse = 0;
bool _inConfigMode = false;
voidsetup ()
{
Serial.begin (115200);
getFromEeprom ();
if (inConfigMode ()) {
Serial.println ("Režim konfigurácie");
Serial.print ("Adresa I2C:");
Serial.println (_i2cVals [IDX_I2C_ADDR]);
Wire.begin (_i2cVals [IDX_I2C_ADDR]);
Wire.onReceive (receiveEvent);
Wire.onRequest (requestEvent);
} else {
Serial.println („režim sledovania“);
delay (5000); // čas dostať sa z cesty pri pripájaní batérie atď.
}
}
voidloop ()
{
getLightValues ();
if (! _inConfigMode) {
// ToDo: ZAPNITE SPÍNAČ TRANZISTORA
_servoH.attach (PIN_SERVO_H);
_servoV.attach (PIN_SERVO_V);
pre (int i = 0; i <20; i ++) {
ak (i! = 0) {
getLightValues ();
}
moveServos ();
}
oneskorenie (500);
_servoH.detach ();
_servoV.detach ();
// ToDo: VYPNITE SPÍNAČ TRANSISTORU
oneskorenie (500);
sleepFor ((_ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8);
}
}
// --------------------------------- SÚČASNÝ REŽIM
boolinConfigMode () {
pinMode (PIN_SERVO_H, INPUT);
_inConfigMode = digitalRead (PIN_SERVO_H) == 1;
vrátiť _inConfigMode;
}
// --------------------------------- EEPROM
voidgetFromEeprom () {
keby (
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");
pre (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");
pre (int i = 0; i <IDX_END_EEPROM_SET; i ++) {
_i2cVals = EEPROM.read (i);
//Serial.println(String(i) + "=" + _i2cVals );
}
}
// --------------------------------- I2C
voidreceiveEvent (počet int)
ak (počet == I2C_MSG_IN_SIZE)
{
char cmd = Wire.read ();
index bajtu = Wire.read ();
bajtová hodnota = Wire.read ();
prepínač (cmd) {
case'G ':
if (index <IDX_END_VALUES_GET) {
_i2cResponse = _i2cVals [index];
}
prestávka;
prípad 'S':
if (index <IDX_END_EEPROM_SET) {
_i2cVals [index] = hodnota;
EEPROM.update (index, _i2cVals [index]);
}
prestávka;
predvolené:
návrat;
}
}
}
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] = mapa (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]) {
// idúc doľava
Serial.println ("moveServos ísť doľava");
delay (_slowingDelay);
pre (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH--);
oneskorenie (_servoLoopDelay);
}
}
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH+_i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) {
// idem doprava
Serial.println ("moveServos ísť doľava");
delay (_slowingDelay);
pre (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH ++);
oneskorenie (_servoLoopDelay);
}
}
inak {
// ničnerobenie
Serial.println ("moveServos nič nerobenie");
delay (_slowingDelay);
}
if ((_averageTop-_averageBottom)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV+_i2cVals [IDX_V_STEP]) <_ i2cVals [IDX_V_ANGLE_MAX]) {
// ísť hore
Serial.println ("moveServos up up");
delay (_slowingDelay);
pre (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.write (_angleV ++);
oneskorenie (_servoLoopDelay);
}
}
elseif ((_averageBottom-_averageTop)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV-_i2cVals [IDX_V_STEP])> _ i2cVals [IDX_V_ANGLE_MIN]) {
// ísť dole
Serial.println ("moveServos ísť dole");
delay (_slowingDelay);
pre (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.write (_angleV--);
oneskorenie (_servoLoopDelay);
}
}
inak {
Serial.println ("moveServos nič nerobenie");
delay (_slowingDelay);
}
}
// --------------------------------- SPÁNOK
voidasleepFor (bez znamienka osemsekundových segmentov) {
Serial.println ("sleepFor");
pre (unsignedint sleepCounter = eightSecondSegment; sleepCounter> 0; sleepCounter--)
{
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
}
}

zobraziť rawtilt_pan_tracker_0.3.ino hostiteľom ❤ od GitHub

Krok 4: Zostavenie puzdra obvodu

Zostavenie puzdra obvodu
Zostavenie puzdra obvodu
Zostavenie puzdra obvodu
Zostavenie puzdra obvodu
Zostavenie puzdra obvodu
Zostavenie puzdra obvodu
  1. Zaistite, aby bol Ardiuno Pro Mini vložený do hlavičiek na doske plošných spojov.
  2. Vložte základňu skrinky ovládača SOLAR TRACKER do stien skrinky ovládača SOLAR TRACKER a pripevnite 2 vypúšťacími samoreznými skrutkami z nehrdzavejúcej ocele 4G x 6 mm.
  3. Vložte dosku Ardiuno Pro Mini + s drážkou pre záhlavie 6P do medzery v základni skrinky radiča SOLAR TRACKER.
  4. Vložte veko skrinky ovládača SOLAR TRACKER na steny skrinky ovládača SOLAR TRACKER a pripevnite 2 vypúšťacími samoreznými skrutkami z nehrdzavejúcej ocele 4G x 6 mm.
  5. Upevnite zostavu vyššie k základni panelového rámu pomocou 4 ks nerezových zapustených skrutiek 4G x 6 mm.

Krok 5: Pripojenie káblov súpravy k ovládaču

Pripojenie káblov súpravy k ovládaču
Pripojenie káblov súpravy k ovládaču
Pripojenie káblov súpravy k ovládaču
Pripojenie káblov súpravy k ovládaču
Pripojenie káblov súpravy k ovládaču
Pripojenie káblov súpravy k ovládaču

Príslušné pripojenia pripravené z predchádzajúceho pokynu sú 4 vypnuté 2P pripojenia LDR a 2 vypnuté 3P pripojenia zo serva. Čo je dočasné, kým nie je nabíjanie pripravené, je batéria. Použite 3,7 V LiPo, ktorý zatiaľ končí v 2P spojení DuPont.

  1. Pripojenia LDR (bez polarity) vložte zhora:

    1. Hore vpravo
    2. Hore v ľavo
    3. Vpravo dole
    4. Vľavo dole
  2. Pripojenie serva (signálnym vodičom vľavo) vložte zhora:

    1. Horizontálne
    2. Vertikálne
  3. POČKEJTE, ABY STE POTREBENÍ TESTU: Potom zapojte napájací kábel +7 V 3,7 V hore, -ve dole.

Krok 6: Testovanie ovládača

Image
Image

Ako už bolo uvedené, softvér nebol optimalizovaný pre pracovný postup solárneho nabíjania. Môže sa však testovať a upravovať pomocou prírodných (slnečných) a neprirodzených svetelných zdrojov.

Na testovanie sledovania v kontrolovanom prostredí môže byť vhodné nastaviť SLEEP MINUTES na nižšiu hodnotu (pozri ďalší krok).

Krok 7: Konfigurácia cez I2C pomocou vstupu konzoly

To vysvetľuje konfiguráciu ovládača prostredníctvom druhého MCU, zadávanie nastavení do okna konzoly.

  1. Nasledujúci skript nahrajte na D1M WIFI BLOCK (alebo Wemos D1 Mini).
  2. Odpojte USB od počítača
  3. PRIPOJENIA PINU: -ve (ovládač) => GND (D1M)+ve (ovládač) => 3V3 (D1M) SCL (ovládač) => D1 (D1M)

    SDA (ovládač) => D2 (D1M)

  4. Otočte prepínač SPDT do polohy CONFIG
  5. Pripojte USB k počítaču
  6. Z Arduino IDE spustite okno konzoly so správnym portom COM
  7. Uistite sa, že sú vybraté možnosti „Nový riadok“a „9600 baudov“
  8. Príkazy sa zadávajú do textového poľa Odoslať a za ním kláves Enter
  9. Príkazy sú vo formáte Character byte byte
  10. Ak nie je zahrnutý druhý bajt (tretí segment), skript pošle 0 (nula)
  11. Buďte opatrní pri použití sériového vstupu; pred stlačením klávesu „Enter“skontrolujte, čo ste zadali. Ak ste zablokovaný (napríklad zmenou adresy I2C na hodnotu, ktorú ste zabudli), budete musieť firmvér ovládača znova aktualizovať.

Podporované variácie prvého znaku príkazu sú:

  • E (Povoliť sledovanie serva) užitočné na zastavenie pohybu počas konfigurácie. Toto sa zadáva pomocou: E 0
  • D (Vypnúť sledovanie serva) je užitočné na spustenie automatického sledovania, ak zariadenie nereštartujete. Toto sa zadáva pomocou: D 0
  • G (Získať konfiguračnú hodnotu) číta hodnoty z EEPROM a IN -MEMORY: Toto sa zadáva pomocou: G (index je platný pre bajtové hodnoty 0 - 13 a 15)
  • S (Set EEPROM value) nastavuje hodnoty na EEPROM, ktoré sú k dispozícii po reštarte. Toto sa zadáva pomocou: S (index sú platné hodnoty bajtov 0 - 13, hodnota sú platné hodnoty bajtov a líšia sa podľa vlastníctva)

Kód je bodom pravdy pre indexy, ale pre sprievodcu platnými hodnotami/komentármi sa používa nasledujúci text:

  • I2C ADDRESS 0 - adresa slave ovládača, master to potrebuje na komunikáciu s ovládačom (predvolené 10)
  • MINIMÁLNY ZVISLÝ ÚHEL 1 - dolný limit vertikálneho servo uhla (predvolené nastavenie 10, rozsah 0 - 180)
  • MAXIMÁLNY VERTIKÁLNY ÚHEL 2 - horný limit vertikálneho serva (predvolené 170, rozsah 0 - 180)
  • CITLIVOSŤ VERTIKÁLNY LDR 3 - vertikálny okraj LDR na čítanie (predvolené nastavenie 20, rozsah 0 - 1024)
  • KROK VERTIKÁLNEHO ÚHLA 4 - uhlové vertikálne kroky serva pri každom nastavení (predvolené 5, rozsah 1 - 20)
  • MINIMÁLNY HORIZONTÁLNY ÚHEL 5 - uhol horizontálneho spodného limitu serva (predvolené 10, rozsah 0 - 180)
  • MAXIMÁLNY HORIZONTÁLNY ÚHEL 6 - uhol horizontálneho horného limitu serva (štandardne 170, rozsah 0 - 180)
  • CITLIVOSTNÁ HORIZONTÁLNA LDR 7 - Horizontálna hranica čítania LDR (predvolená hodnota 20, rozsah 0 - 1024)
  • KROK HORIZONTÁLNOM UHLU 8 - uhlové horizontálne kroky serva pri každom nastavení (predvolené 5, rozsah 1 - 20)
  • SLEEP MINUTES 9 - približná doba spánku medzi sledovaním (predvolená hodnota 20, rozsah 1 - 255)
  • VERTIKÁLNY ÚHOL 10 - BUDÚCE POUŽITIE - zvislý uhol, do ktorého sa budete vracať, keď slnko zapadne.
  • HORIZONTÁLNY DAWN ANGLE 11 - BUDÚCE POUŽITIE - horizontálny uhol, do ktorého sa budete vracať pri západe slnka.
  • DAWN INTENSITY 12 - BUDÚCE POUŽITIE - minimálny priemer všetkých LDR, ktorý spustí každodenné sledovanie slnka
  • INTENZITA DUSKU 13 - BUDÚCE POUŽITIE - minimálny priemer všetkých LDR, ktorý spúšťa koniec denného sledovania slnka
  • KONIEC ZNAČKY HODNOT EEPROM 14 - HODNOTA SA NEPOUŽÍVA
  • SÚČASNÁ INTENZITA 15 - aktuálne priemerné percento intenzity svetla
  • KONIEC V PAMÄTI HODNOTY ZNAČKA 16 - HODNOTA NEPOUŽITÁ.

Zachytáva sériový vstup (vstup z klávesnice v okne konzoly) a presmeruje ho na slave I2C vo formáte char, byte, byte

#zahrnúť
#defineI2C_MSG_IN_SIZE2
#defineI2C_MSG_OUT_SIZE3
#defineI2C_SLAVE_ADDRESS10
boolean _newData = false;
const byte _numChars = 32;
char _receivedChars [_numChars]; // pole na uloženie prijatých údajov
voidsetup () {
Serial.begin (9600);
Wire.begin (D2, D1);
oneskorenie (5 000);
}
voidloop () {
recvWithEndMarker ();
parseSendCommands ();
}
voidrecvWithEndMarker () {
statický bajt ndx = 0;
char endMarker = '\ n';
char rc;
while (Serial.available ()> 0 && _newData == false) {
rc = Serial.read ();
if (rc! = endMarker) {
_receivedChars [ndx] = rc;
ndx ++;
if (ndx> = _numChars) {
ndx = _numChars - 1;
}
} else {
_receivedChars [ndx] = '\ 0'; // ukončenie reťazca
ndx = 0;
_newData = true;
}
}
}
voidparseSendCommands () {
if (_newData == true) {
constchar delim [2] = "";
char *token;
token = strtok (_receivedChars, delim);
char cmd = _receivedChars [0];
index bajtov = 0;
bajtová hodnota = 0;
int i = 0;
while (token! = NULL) {
//Serial.println(token);
i ++;
prepínač (i) {
prípad 1:
token = strtok (NULL, delim);
index = atoi (token);
prestávka;
prípad 2:
token = strtok (NULL, delim);
if (token! = NULL) {
hodnota = atoi (token);
}
prestávka;
predvolené:
token = NULL;
}
}
sendCmd (cmd, index, hodnota);
_newData = false;
}
}
voidsendCmd (char cmd, byte byte, hodnota bytu) {
Serial.println ("-----");
Serial.println ("Príkaz na odoslanie:");
Serial.println ("\ t" + String (cmd) + "" + String (index) + "" + String (hodnota));
Serial.println ("-----");
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // prenos do zariadenia
Wire.write (cmd); // pošle znak
Wire.write (index); // pošle jeden bajt
Wire.write (hodnota); // pošle jeden bajt
Wire.endTransmission ();
bajtová odozva = 0;
bool hadResponse = false;
if (cmd == 'G') {
Wire.requestFrom (I2C_SLAVE_ADDRESS, 1);
while (Wire.available ()) // slave môže odoslať menej, ako sa požaduje
{
hadResponse = true;
odpoveď = Wire.read ();
}
if (hadResponse == true) {
Serial.println ("Získanie odpovede:");
Serial.println (odpoveď);
} else {
Serial.println („Žiadna odpoveď, skontrolujte adresu/pripojenie“);
}
}
}

zobraziť rawd1m_serial_input_i2c_char_byte_byte_v0.1.ino hostované s ❤ od GitHub

Krok 8: Ďalšie kroky

Pravidelne sa sem vracajte a kontrolujte zmeny softvéru/hardvéru.

Upravte softvér/hardvér podľa svojich požiadaviek.

Pripomienky k akýmkoľvek požiadavkám/optimalizáciám.

Odporúča: