Sisällysluettelo:

IOT123 - SOLAR TRACKER - OHJAIN: 8 vaihetta
IOT123 - SOLAR TRACKER - OHJAIN: 8 vaihetta

Video: IOT123 - SOLAR TRACKER - OHJAIN: 8 vaihetta

Video: IOT123 - SOLAR TRACKER - OHJAIN: 8 vaihetta
Video: Zeitgeist: Moving Forward (2011) 2024, Marraskuu
Anonim
Image
Image
IOT123 - SOLAR TRACKER - OHJAIN
IOT123 - SOLAR TRACKER - OHJAIN
IOT123 - SOLAR TRACKER - OHJAIN
IOT123 - SOLAR TRACKER - OHJAIN

Tämä on Instructable -ohjelman laajennus

IOT123 - SOLAR TRACKER - KALLISTUS/PANEELI, PANEELIKEHYKSET, LDR -KIINNIKKEET RIG. Täällä keskitymme servojen ohjaimeen ja auringon aseman antureihin. On tärkeää huomata, että tässä suunnittelussa oletetaan, että käytetään 2 MCU: ta: yksi (3,3 V: n 8 MHz: n Arduino Pro Mini) aurinkokennolle ja yksi riippumaton MCU antureille/toimijoille.

Tämä on versio 0.3

Sen sijaan, että julkaisin kaikki projektit täydellisen tyytyväisyyden jälkeen, aion harjoittaa jatkuvaa integraatiota ja toimittaa jotain useammin, muuttamalla toimitustani tarpeen mukaan. Kirjoitan toisen ohjeen akkulaturille _ kun_ohjaimen ohjelmiston/laitteiston optimointi on valmis. Kerron, missä optimointeja tarvitaan, kun siirrymme tämän läpi.

Yksi syy tähän lähestymistapaan on asiakaspalaute. Jos näet tarvetta tai sinulla on parempi lähestymistapa, kommentoi, mutta muista, etten voi toimittaa kaikkea ja mahdollisesti ei sinulle sopivaa aikataulua. Koska nämä selitykset näyttävät vähemmän merkityksellisiltä, ne poistetaan tästä artikkelista.

Mitä tämä sisältää:

  1. Käytä alkuperäisen Instructable -laitteen LDR -tunnisteita auringon likimääräisen sijainnin tunnistamiseen.
  2. Siirrä servot aurinkoa vasten.
  3. Vaihtoehdot liikkeiden herkkyydelle.
  4. Vaihtoehdot askelkoon, kun siirrytään aurinkoon.
  5. Vaihtoehdot servoissa käytettäville kulmarajoille.
  6. Vaihtoehdot liikkeiden viivästymisille.
  7. I2C -liitäntä arvojen asettamiseen/saamiseen MCU: iden välillä.
  8. Syvä uni liikkeiden välillä.

Mitä tämä ei sisällä (ja se käsitellään aikalisänä):

  1. Käytä virtaa vain päiväsaikaan.
  2. Muistetaan aamunkoittoasento ja mennään sinne hämärässä.
  3. Säätimen irrottaminen MCU: sta.
  4. MCU: n LED -valojen poistaminen käytöstä.
  5. Virran uudelleenohjaus VCC: n kautta RAW: n sijaan.
  6. Tarjoaa ratkaisuja vilkkumiseen ilman säädettyä virtaa USB -sarja -TTL -muuntimesta.
  7. Akun jännitteen valvonta.

HISTORIA

20. joulukuuta 2017 V0.1 -KOODI

Alkuperäinen versio seuraa valonlähdettä, aina päällä, ei latausta

7. tammikuuta 2018 V0.2 -KOODI

  • LAITTEISTON MUUTOKSET

    • Lisää I2C -nastat
    • Lisää kytkin servo GND: hen
    • Painettu tarra ohjainkotelon kotelossa
  • OHJELMISTON MUUTOKSET

    • Lue määritykset EEPROMista
    • I2C -väylätuki toisen MCU: n orjana (3.3V)
    • Aseta kokoonpano I2C: n kautta
    • Ota käyttöön I2C: n kautta
    • Hanki kokoonpano I2C: n kautta
    • Hanki ajonaikaisia ominaisuuksia I2C: n kautta (tällä hetkellä käytössä ja nykyinen valovoima)
    • Poista sarjakirjaus (se vaikutti I2C -arvoihin)

19. tammikuuta 2018 V0.3 -KOODI

  • LAITTEISTO

    Tunniste päivitetty. Kytkintä käytetään nyt joko CONFIG- tai TRACK -tilan valitsemiseen

  • OHJELMISTO

    • I2C: tä käytetään vain kokoonpanoon
    • Ohjain odottaa 5 sekuntia ennen seurannan alustamista, mahdollistaa käsien liikuttamisen
    • Jos haluat käyttää I2C -kokoonpanoa, SPDT: n on oltava käytössä CONFIG -yksikön käynnistyksenä
    • Liikkeen seurannan välillä laite on syvässä lepotilassa konfiguraatioarvoa SLEEP MINUTES (oletus 20 minuuttia) varten.

Vaihe 1: Materiaalit ja työkalut

Materiaalit ja työkalut
Materiaalit ja työkalut
Materiaalit ja työkalut
Materiaalit ja työkalut
Materiaalit ja työkalut
Materiaalit ja työkalut

Materiaalit ja lähteet on nyt täynnä.

  1. 3D -painetut osat.
  2. Arduino Pro Mini 3.3V 8mHz
  3. 1/4 x 6 cm: n kaksipuolinen prototyyppinen PCB -yleispiirilevy (leikattava puoliksi)
  4. 1 pois 40P urospuolinen otsikko (leikattava kokoon).
  5. 1 off 40P naarasliitin (leikattava kokoon).
  6. 4 off 10K 1/4W vastusta.
  7. Liitäntäjohto.
  8. Juotos ja rauta.
  9. 20 kpl 4G x 6mm ruostumattomasta pannusta valmistettuja ruuveja.
  10. 4 off 4G x 6mm ruostumatonta upotettua itsekelausruuvia.
  11. 1 pois 3,7 V LiPo -akku ja pidike (päättyy 2P -dupontiliittimiin).
  12. 1 pois 2P uros suorakulma otsikko
  13. 1 pois SPDT -kytkin 3 -nastainen 2,54 mm: n askel
  14. Vahva syanoakrylaattiliima
  15. Dupont -liittimien naaras 1P -otsikko (1 pois sinistä, 1 pois vihreää).

Vaihe 2: Piirin kokoaminen

Piirin kokoaminen
Piirin kokoaminen
Piirin kokoaminen
Piirin kokoaminen
Piirin kokoaminen
Piirin kokoaminen

Piirissä ei tällä hetkellä ole jännitteenjakajapiiriä (voltimittaria).

  1. Leikkaa 4x6 cm: n kaksipuolinen prototyyppinen PCB -yleispiirilevy puoliksi pitkän akselin poikki.
  2. Leikkaa 40P -urosliitin paloiksi:

    1. 2 pois päältä 12P
    2. 3 pois päältä 3P
    3. 6 pois päältä 2P.
  3. Leikkaa 40P -naarasliitin paloiksi:

    1. 2 pois päältä 12P
    2. 1 pois päältä 6P
  4. Juotos 2 pois 12 naarasliitin kuvan mukaisesti.
  5. Liimaa 3P -uroksen (lisä) otsikosta irrotettu välikappale SPDT -kytkimen alapuolelle syanoakrylaattiliimalla
  6. Aseta toiselle puolelle sitten juote 6 pois 2P, 2 pois 3Pmale -otsikko ja SPDT -kytkin kuvan mukaisesti.
  7. Juotos 4 pois 10K -vastuksista (A, B, C, D, musta) johdon kautta GND -nastan otsikkoon (#2 musta) ja A0 -A3 -nastatappeihin (#5, #6, #7, #8) ja sitten reiän läpi (keltainen) kuten kuvassa (3 kuvaa + 1 kaavio).
  8. Jäljitä 3.3V LDR -PINS -juotos -PINS #4, #6, #8, #10 ja pujota reikä feamale -otsikon VCC -nastaan (vihreä).
  9. Jäljitä 3.3V naaraspuolisen otsikon puolella, kuten on esitetty (punainen), juottamalla PINS #1, #12, #15.
  10. 3.3V läpimenevä reikä juotettu sivun yli (punainen) RAW -otsikon PIN #1.
  11. Seuraa oranssia kytkentää PIN -nro 11 reiästä juotokseen Naarasnappi toisella puolella kuvan osoittamalla tavalla.
  12. Jäljitä ja juota sininen kytkentälanka #20 - #30 ja #31 - #13 ja #16.
  13. Juotos naarasotsikon PIN #11 urosotsikon PIN #11 reikään.
  14. Valmistele kaksi 30 mm pitkää dupont -liitintä naaraspuolisella 1P -liittimellä (1 pois sinisestä, yksi vihreästä). Kaista ja tina toinen pää.
  15. Juotos sininen Dupont -lanka numeroon 28; juota vihreä Dupont -johto numeroon 29.
  16. Kiinnitä Arduinon yläpuolelle 6P -naarasliitin ja sitten juota.
  17. Kiinnitä Arduinon yläpuolelle 2P: n suorakulmainen naarasotsikko int #29 ja #30 ja sitten juota.
  18. Kiinnitä Arduinon alapuolelle 2 12P ja 1 3P urosnasta ja sitten juota.
  19. Aseta Arduino -urospuoliset 12P -nastat piirilevyn 12P -naaraspäähän.

Vaihe 3: MCU: n vilkkuminen

MCU vilkkuu
MCU vilkkuu
MCU vilkkuu
MCU vilkkuu
MCU vilkkuu
MCU vilkkuu

Arduino Pro Mini välähtää kätevästi käyttämällä FTDI232 USB -TTL -muunninta 6P -naarasotsikon avulla. Katso yllä olevasta kuvasta kahden levyn kohdistus.

Varmista, että FTDI232 -laitteessa on valittu 3.3V -asetus. Seuraa ohjeita alla olevan koodin avulla (käytä GIST -linkkiä).

Lowpower-kirjasto (liitteenä ja https://github.com/rocketscream/Low-Power) on asennettava.

Kun Arduino Pro Mini + -piirilevy on asennettu koteloon, sitä voidaan silti vilkuttaa, kun otsikkotapit paljastuvat. Irrota vain ohjausyksikkö paneelikehyksestä paljastamalla otsikko.

Kallista aurinkokenno, jossa on I2C/EEPROM -kokoonpano ja lepotila liikkeiden välillä. Leposyklin keston tarkkuus pienenee keston kasvaessa, mutta riittävä tähän tarkoitukseen

/*
* muutettu koodista
* Mathias Leroy
*
* V0.2 MUUTOKSET
** I2C SET GET
** EEPROM SET GET
** POISTA SARJALÄHTÖ - AFFECTED I2C
** SEURANTAA KÄYTÖSSÄ/KÄYTÖSSÄ
** SIIRRÄ SERVOT RAJOILLE I2C: N KANSSA
** LUE NYKYINEN AVG INTENSITEETI I2C
* V0.3 MUUTOKSET
** KYTKIN 2 TILAA - TRACK (NO I2C) ja CONFIGURE (USES I2C)
** NUKKU RAITATILASSA (ERITTÄIN MATKA TARKKUUS 8 SEKUNNIN TAKANA)
** IRROTA/LIITÄ PALVELUJA NUKUTTAMISESSA/KÄYTÄ (TAPAHTUMASSA KÄYTETTY TRANSISTORI)
** POISTA MÄÄRITETTÄVÄ ALKUPOSITIO (REDUNDANTTI)
** POISTA MUKAUTETTAVAT WAKE SECONDS (REDUNDANT)
** POISTA MÄÄRITETTÄVÄ KÄYTÖSSÄ/KÄYTÖSSÄ (REDUNDANT)
** POISTA MUKAUTETTAVA SEURANTAA KÄYTÖSSÄ (KÄYTÄ LAITTEISTOKYTKINTÄ)
** POISTA JÄNNITTEET - KÄYTETÄÄN I2C -KOMPONENTTIA
** LISÄÄ SERIAL LOGGING, kun et käytä I2C: tä
*/
#sisältää
#sisältää
#sisältää
#sisältää
#sisältää
#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 // kaikkien LDRS -tietojen keskiarvo
#defineIDX_DUSK_INTENSITY13 // kaikkien LDRS -tietojen keskiarvo
#defineIDX_END_EEPROM_SET14
#defineIDX_CURRENT_INTENSITY15 // kaikkien LDRS -arvojen keskiarvo - käytetään IDX_DAWN_INTENSITY -ympäristön epäsuoran valon laskemiseen
#defineIDX_END_VALUES_GET16
#defineIDX_SIGN_117
#defineIDX_SIGN_218
#defineIDX_SIGN_319
Servo _servoH;
Servo _servoV;
tavu _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 _kulmaH = 90;
int _kulmaV = 90;
int _verageTop = 0;
int _verageRight = 0;
int _verageBottom = 0;
int _verageLeft = 0;
tavu _i2cResponse = 0;
bool _inConfigMode = epätosi;
voidsetup ()
{
Sarja.alku (115200);
getFromEeprom ();
if (inConfigMode ()) {
Serial.println ("Konfigurointitila");
Serial.print ("I2C -osoite:");
Sarja.println (_i2cVals [IDX_I2C_ADDR]);
Wire.begin (_i2cVals [IDX_I2C_ADDR]);
Wire.onRecept (ReceiveEvent);
Wire.onRequest (requestEvent);
}muu{
Serial.println ("Seurantatila");
delay (5000); // aika päästä käsistä tieltä, jos liität akun jne.
}
}
voidloop ()
{
getLightValues ();
if (! _inConfigMode) {
// Tehtävät: KÄYTÄ TRANSISTORIN KYTKIN
_servoH.attach (PIN_SERVO_H);
_servoV.attach (PIN_SERVO_V);
(int i = 0; i <20; i ++) {
jos (i! = 0) {
getLightValues ();
}
moveServos ();
}
viive (500);
_servoH.detach ();
_servoV.detach ();
// Tehtävät: PÄÄLTÄ TRANSISTORIN KYTKIN
viive (500);
sleepFor ((_ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8);
}
}
// --------------------------------- NYKYINEN TILA
boolinConfigMode () {
pinMode (PIN_SERVO_H, INPUT);
_inConfigMode = digitalRead (PIN_SERVO_H) == 1;
return _inConfigMode;
}
// --------------------------------- EEPROM
voidgetFromEeprom () {
jos(
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);
//Sarja.println(String(i) + "=" + _i2cVals );
}
}
// --------------------------------- I2C
voidreceptEvent (int count) {
jos (määrä == I2C_MSG_IN_SIZE)
{
char cmd = Wire.read ();
tavu -indeksi = Wire.read ();
tavun arvo = Wire.read ();
kytkin (cmd) {
tapaus G:
jos (hakemisto <IDX_END_VALUES_GET) {
_i2cResponse = _i2cVals [hakemisto];
}
tauko;
tapaus:
jos (indeksi <IDX_END_EEPROM_SET) {
_i2cVals [indeksi] = arvo;
EEPROM.update (indeksi, _i2cVals [hakemisto]);
}
tauko;
oletus:
palata;
}
}
}
voidrequestEvent ()
{
Wire.write (_i2cResponse);
}
// --------------------------------- LDR: t
voidgetLightValues () {
int valueTopLeft = analoginenLuku (PIN_LDR_TL);
int valueTopRight = analoginenLuku (PIN_LDR_TR);
int valueBottomRight = analoginenLuku (PIN_LDR_BR);
int valueBottomLeft = analoginenLuku (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] = kartta (keskiarvo, 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]) {
// menee vasemmalle
Serial.println ("moveServos menee vasemmalle");
delay (_slowingDelay);
for (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH--);
delay (_servoLoopDelay);
}
}
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH+_i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) {
// menee oikein
Serial.println ("moveServos menee vasemmalle");
delay (_slowingDelay);
for (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH ++);
delay (_servoLoopDelay);
}
}
muu {
// tekemättä mitään
Serial.println ("moveServos ei tee mitään");
delay (_slowingDelay);
}
jos ((_averageTop-_averageBottom)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV+_i2cVals [IDX_V_STEP]) <_ i2cVals [IDX_V_ANGLE_MAX]) {
// menossa ylös
Serial.println ("moveServos nousee");
delay (_slowingDelay);
for (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.write (_angleV ++);
delay (_servoLoopDelay);
}
}
elseif ((_averageBottom-_averageTop)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV-_i2cVals [IDX_V_STEP])> _ i2cVals [IDX_V_ANGLE_MIN]) {
// menee alas
Serial.println ("moveServos menee alas");
delay (_slowingDelay);
for (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.write (_angleV--);
delay (_servoLoopDelay);
}
}
muu {
Serial.println ("moveServos ei tee mitään");
delay (_slowingDelay);
}
}
//---------------------------------NUKKUA
voidasleepFor (unsignedint eightSecondSegments) {
Serial.println ("sleepFor");
for (unsignedint sleepCounter = eightSecondSegments; sleepCounter> 0; sleepCounter--)
{
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
}
}

katso rawtilt_pan_tracker_0.3.ino, jota isännöi GitHub ❤ kanssa

Vaihe 4: Piirikotelon kokoaminen

Piirikotelon kokoaminen
Piirikotelon kokoaminen
Piirikotelon kokoaminen
Piirikotelon kokoaminen
Piirikotelon kokoaminen
Piirikotelon kokoaminen
  1. Varmista, että Ardiuno Pro Mini on asetettu piirilevyn otsikoihin.
  2. Aseta SOLAR TRACKER -ohjainkotelon pohja SOLAR TRACKER -ohjainkotelon seiniin ja kiinnitä 2 ruostumattomalla 4G x 6 mm: n upotetulla itsekelausruuvilla.
  3. Aseta Ardiuno Pro Mini + -piirilevy, jossa on 6P -otsikko, SOLAR TRACKER -ohjainkotelon pohjassa olevaan tyhjyyteen.
  4. Aseta SOLAR TRACKER -ohjainkotelon kansi SOLAR TRACKER -ohjainkotelon seiniin ja kiinnitä 2: lla 4G x 6 mm: n ruostumattomalla upotetulla itsekelausruuvilla.
  5. Kiinnitä kokoonpano paneelikehyksen pohjaan neljällä 4G x 6mm ruostumattomalla upotetulla itsekelausruuvilla.

Vaihe 5: Rig -johtojen liittäminen ohjaimeen

Rig -johtojen liittäminen ohjaimeen
Rig -johtojen liittäminen ohjaimeen
Rig -johtojen liittäminen ohjaimeen
Rig -johtojen liittäminen ohjaimeen
Rig -johtojen liittäminen ohjaimeen
Rig -johtojen liittäminen ohjaimeen

Edellisestä Instructable -ohjelmasta valmiit liitännät ovat 4 off 2P LDR -yhteydet ja 2 off 3P -liitännät servoista. Akku on väliaikainen, kunnes lataus on valmis. Käytä toistaiseksi 3,7 V LiPo -liitäntää, joka päättyy 2P DuPont -yhteyteen.

  1. Aseta LDR -liitännät (ei napaisuutta) ylhäältä:

    1. Yläoikea
    2. Ylävasen
    3. Ala oikea
    4. Alhaalla vasemmalla
  2. Aseta servoliitännät (signaalijohto vasemmalle) ylhäältä:

    1. Vaakasuora
    2. Pystysuora
  3. ODOTA VALMIS TESTAAMISEKSI SITTEN: Työnnä 3,7 V: n tasavirtajohto +ve ylhäälle, -ve alas.

Vaihe 6: Säätimen testaus

Image
Image

Kuten aiemmin todettiin, ohjelmistoa ei ole optimoitu Solar Charging -työnkulkuun. Sitä voidaan kuitenkin testata ja säätää käyttämällä luonnollisia (aurinko) ja epäluonnollisia valonlähteitä.

Jos haluat testata seurantaa kontrolloidussa ympäristössä, saattaa olla kätevää asettaa SLEEP MINUTES -arvo pienemmäksi (katso seuraava vaihe).

Vaihe 7: Konfigurointi I2C: n kautta konsolitulon avulla

Tämä selittää ohjaimen määrittämisen toisen MCU: n kautta, asetusten syöttämisen konsoli -ikkunaan.

  1. Lataa seuraava komentosarja D1M WIFI BLOCK (tai Wemos D1 Mini) -laitteeseen.
  2. Irrota USB tietokoneesta
  3. PIN-LIITÄNNÄT: -ve (ohjain) => GND (D1M)+ve (ohjain) => 3V3 (D1M) SCL (ohjain) => D1 (D1M)

    SDA (ohjain) => D2 (D1M)

  4. Käännä SPDT -kytkin asentoon CONFIG
  5. Liitä USB tietokoneeseen
  6. Käynnistä Arduino IDE -konsolista oikea COM -portti
  7. Varmista, että "Newline" ja "9600 baud" on valittu
  8. Komennot syötetään Lähetä tekstikenttään ja sen jälkeen Enter -näppäintä
  9. Komennot ovat muodossa Merkkitavu
  10. Jos toinen tavu (kolmas segmentti) ei sisälly, komentosarja lähettää 0 (nolla)
  11. Ole varovainen sarjatulon kanssa; tarkista syöttämäsi tiedot ennen Enter -näppäimen painamista. Jos olet lukittu (esimerkiksi muutat I2C -osoitteen arvoksi, jonka olet unohtanut), sinun on vilkkuttava ohjaimen laiteohjelmisto uudelleen.

Tuetut muunnelmat komennon ensimmäisessä merkissä ovat:

  • E (Ota servoseuranta käyttöön) hyödyllinen pysäyttämään liike määrityksen aikana. Tämä syötetään käyttämällä: E 0
  • D (Poista servoseuranta käytöstä) hyödyllinen automaattisen seurannan aloittamiseksi, jos et käynnistä laitetta uudelleen. Tämä syötetään käyttämällä: D 0
  • G (Hae kokoonpanoarvo) lukee arvot EEPROMista ja IN -MEMORY: Tämä syötetään käyttämällä: G (indeksi on kelvollinen tavuarvot 0 - 13 ja 15)
  • S (Aseta EEPROM -arvo) asettaa arvoiksi EEPROM, jotka ovat käytettävissä uudelleenkäynnistyksen jälkeen. Tämä syötetään käyttämällä: S (indeksi on kelvollinen tavuarvo 0-13, arvo on kelvollinen tavuarvo ja vaihtelee ominaisuuden mukaan)

Koodi on totuuspiste indekseille, mutta seuraavaa käytetään oppaana kelvollisille arvoille/kommenteille:

  • I2C -OSOITE 0 - ohjaimen orjaosoite, isäntä tarvitsee tämän kommunikoidakseen ohjaimen kanssa (oletus 10)
  • MINIMAALINEN PYSTYKULMA 1 - pystysuoran servokulman alaraja (oletus 10, alue 0-180)
  • MAXIMUM Pystysuora kulma 2 - kulma pystysuora servo yläraja (oletus 170, alue 0-180)
  • SENSITIVITY VERTICAL LDR 3 - Pystysuora LDR -lukumarginaali (oletus 20, alue 0-1024)
  • PYSTYKULMA VAIHE 4 - kulma pystysuorat servoaskeleet jokaisella säädöllä (oletus 5, alue 1-20)
  • MINIMAALI VAAKAKULMA 5 - kulma vaakasuora servo alaraja (oletus 10, alue 0-180)
  • MAKSIMI VAAKA KULMA 6 - kulma vaakasuora servo yläraja (oletus 170, alue 0-180)
  • SENSITIVITY HORIZONTAL LDR 7 - Vaakasuora LDR -lukumarginaali (oletus 20, alue 0-1024)
  • VAAKA KULMAVAIHE 8 - vaakasuorat servovaiheet jokaisessa säädössä (oletus 5, alue 1-20)
  • SLEEP MINUTES 9 - likimääräinen uniaika seurannan välillä (oletus 20, alue 1-255)
  • PYSTYSUORA KULMA 10 - TULEVA KÄYTTÖ - pystykulma, johon palataan auringon laskiessa
  • VAAKA KÄYTTÖKULMA 11 - TULEVA KÄYTTÖ - vaakasuora kulma, johon palataan auringon laskiessa
  • DAWN INTENSITY 12 - TULEVA KÄYTTÖ - kaikkien LDR: ien vähimmäiskeskiarvo, joka käynnistää päivittäisen auringonseurannan
  • DUSK INTENSITY 13 - TULEVA KÄYTTÖ - kaikkien LDR: ien vähimmäiskeskiarvo, joka käynnistää päivittäisen auringonseurannan
  • EEPROM -ARVOJEN LOPPU MERKKI 14 - ARVO EI KÄYTETTY
  • CURRENT INTENSITY 15 - nykyinen keskimääräinen prosenttiosuus valon voimakkuudesta
  • MUISTIIN LIITTYVIEN ARVOJEN LOPPU MERKKI 16 - ARVO EI KÄYTETTY.

Sieppaa sarjatulon (näppäimistötulo konsoli -ikkunassa) ja välittää sen I2C -orjalle muodossa char, tavu, tavu

#sisältää
#defineI2C_MSG_IN_SIZE2
#defineI2C_MSG_OUT_SIZE3
#defineI2C_SLAVE_ADDRESS10
boolean _newData = epätosi;
const tavu _numChars = 32;
char _receivedChars [_numChars]; // matriisi vastaanotetun datan tallentamiseksi
voidsetup () {
Sarja.alku (9600);
Wire.begin (D2, D1);
viive (5000);
}
voidloop () {
recvWithEndMarker ();
parseSendCommands ();
}
voidrecvWithEndMarker () {
staattinen tavu ndx = 0;
char endMarker = '\ n';
char rc;
while (Serial.available ()> 0 && _newData == false) {
rc = Serial.read ();
jos (rc! = endMarker) {
_receivedChars [ndx] = rc;
ndx ++;
jos (ndx> = _numChars) {
ndx = _numerohahmot - 1;
}
} muuta {
_receivedChars [ndx] = '\ 0'; // lopettaa merkkijono
ndx = 0;
_newData = totta;
}
}
}
voidparseSendCommands () {
if (_newData == true) {
constchar delim [2] = "";
char *-merkki;
merkki = strtok (_receivedChars, delim);
char cmd = _saanutChars [0];
tavuindeksi = 0;
tavun arvo = 0;
int i = 0;
while (merkki! = NULL) {
//Serial.println(token);
i ++;
kytkin (i) {
tapaus 1:
merkki = strtok (NULL, delim);
indeksi = atoi (merkki);
tauko;
tapaus 2:
merkki = strtok (NULL, delim);
jos (merkki! = NULL) {
arvo = atoi (merkki);
}
tauko;
oletus:
merkki = NULL;
}
}
sendCmd (cmd, indeksi, arvo);
_newData = epätosi;
}
}
voidsendCmd (char cmd, tavuindeksi, tavuarvo) {
Sarja.println ("-----");
Serial.println ("Lähetyskomento:");
Serial.println ("\ t" + merkkijono (cmd) + "" + merkkijono (hakemisto) + "" + merkkijono (arvo));
Sarja.println ("-----");
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // lähettää laitteelle
Wire.write (cmd); // lähettää merkin
Wire.write (hakemisto); // lähettää yhden tavun
Wire.write (arvo); // lähettää yhden tavun
Wire.endTransmission ();
tavuvaste = 0;
bool hadResponse = epätosi;
jos (cmd == 'G') {
Wire.requestFrom (I2C_SLAVE_ADDRESS, 1);
kun taas (Wire.available ()) // orja voi lähettää vähemmän kuin pyydetty
{
hadResponse = totta;
vastaus = Wire.read ();
}
jos (hadResponse == true) {
Serial.println ("Vastauksen saaminen:");
Serial.println (vastaus);
}muu{
Serial.println ("Ei vastausta, tarkista osoite/yhteys");
}
}
}

Näytä rawd1m_serial_input_i2c_char_byte_byte_v0.1.ino isännöi GitHub ❤

Vaihe 8: Seuraavat vaiheet

Tarkista säännöllisesti, onko ohjelmistossa/laitteistossa muutoksia.

Muokkaa ohjelmistoa/laitteistoa tarpeidesi mukaan.

Kommentoi mahdollisia pyyntöjä/optimointeja.

Suositeltava: