Orodha ya maudhui:

IOT123 - SOLAR TRACKER - UDHIBITI: Hatua 8
IOT123 - SOLAR TRACKER - UDHIBITI: Hatua 8

Video: IOT123 - SOLAR TRACKER - UDHIBITI: Hatua 8

Video: IOT123 - SOLAR TRACKER - UDHIBITI: Hatua 8
Video: Штукатурка стен - самое полное видео! Переделка хрущевки от А до Я. #5 2024, Julai
Anonim
Image
Image
IOT123 - SOLAR TRACKER - MDHIBITI
IOT123 - SOLAR TRACKER - MDHIBITI
IOT123 - SOLAR TRACKER - MDHIBITI
IOT123 - SOLAR TRACKER - MDHIBITI

Hiki ni kiendelezi cha kinachoweza kufundishwa

IOT123 - SOLAR TRACKER - TILT / PAN, fremu ya Paneli, LDR MOUNTS RIG. Hapa tunazingatia mtawala wa servos, na sensorer za nafasi ya jua. Ni muhimu kusema kuwa muundo huu unachukua 2 MCU zitatumika: moja (3.3V 8mHz Arduino Pro Mini) kwa tracker ya jua, na MCU moja huru kwa sensorer / watendaji wako.

Hii ni Toleo 0.3

Badala ya kuchapisha miradi yote baada ya kuridhika kabisa, nitafanya ujumuishaji unaoendelea na kutoa kitu mara nyingi zaidi, nikibadilisha kile nilichowasilisha kama ninahitaji. Nitaandika nyingine inayoweza kufundishwa kwa chaja ya betri, _ wakati utaftaji wa programu / vifaa vya mtawala imekamilika. Nitaonyesha ni wapi uboreshaji unahitajika tunapopitia hii.

Sehemu ya sababu ya njia hii ni maoni ya mteja. Ikiwa nyinyi mnaona hitaji au mna njia bora, tafadhali toa maoni, lakini kumbuka siwezi kutoa kila kitu na labda sio kwa wakati unaokufaa. Kwa kuwa maelezo haya yanaonekana hayafai sana yatafutwa kutoka kwa nakala hii.

Hii inajumuisha nini:

  1. Tumia LDR kutoka kwa asili inayoweza kufundishwa ili kuhisi eneo la jua.
  2. Sogeza servos kukabili jua.
  3. Chaguzi za unyeti wa harakati.
  4. Chaguzi za saizi ya hatua wakati unahamia jua.
  5. Chaguzi za vikwazo vya angular vilivyotumiwa kwenye servos.
  6. Chaguzi za ucheleweshaji wa harakati.
  7. Kiolesura cha I2C cha kuweka / kupata maadili kati ya MCU.

  8. Usingizi mzito kati ya harakati.

Kile ambacho hakijumuishi (na kitashughulikiwa kama muda unaruhusu):

  1. Kutumia tu nguvu wakati wa saa za mchana.
  2. Kukumbuka nafasi ya alfajiri na kwenda huko wakati wa kuzima kwa jioni.
  3. Kuondoa mdhibiti kutoka MCU.
  4. Inalemaza LED (s) kwenye MCU.
  5. Kuweka nguvu tena kupitia VCC badala ya RAW.
  6. Kutoa kazi za kuangaza bila umeme uliodhibitiwa kutoka kwa USB hadi kwa kubadilisha TTL ya serial.
  7. Mfuatiliaji wa voltage ya betri.

HISTORIA

Desemba 20, 2017 V0.1 CODE

Toleo la awali hufuata chanzo cha mwanga, ikiwashwa kila wakati, bila kuchaji

Januari 7, 2018 V0.2 CODE

  • MABADILIKO YA HABARI

    • Ongeza pini za I2C
    • Ongeza swichi kwa servo GNDs
    • Lebo iliyochapishwa kwenye sanduku la kidhibiti
  • MABADILIKO YA SOFTWA
    • Soma usanidi kutoka EEPROM
    • Msaada wa basi ya I2C kama mtumwa wa MCU nyingine (3.3V)

    • Weka usanidi kupitia I2C
    • Weka Imewezeshwa kupitia I2C
    • Pata usanidi kupitia I2C
    • Pata mali za wakati wa kukimbia kupitia I2C (sasa imewezeshwa, na Ukali wa Mwanga wa Sasa)
    • Ondoa ukataji miti (iliathiri maadili ya I2C)

Januari 19, 2018 V0.3 CODE

  • HARDWARE

    Lebo imesasishwa. Kubadilisha sasa kunatumiwa kuchagua hali ya CONFIG au TRACK

  • SOFTWARE

    • I2C ilitumika tu kwa usanidi
    • Mdhibiti anasubiri sekunde 5 kabla ya kuanza ufuatiliaji, inaruhusu kusonga mikono
    • Ili kutumia usanidi wa I2C, SPDT lazima iwe kwenye CONFIG kama buti za kitengo
    • Katikati ya harakati ya ufuatiliaji, kitengo kiko katika hali ya usingizi mzito kwa thamani ya usanidi SLEEP MINUTES (dakika 20 chaguomsingi).

Hatua ya 1: Vifaa na Zana

Vifaa na Zana
Vifaa na Zana
Vifaa na Zana
Vifaa na Zana
Vifaa na Zana
Vifaa na Zana

Sasa kuna orodha kamili ya Muswada wa Vifaa na Vyanzo.

  1. Sehemu zilizochapishwa za 3D.
  2. Arduino Pro Mini 3.3V 8mHz
  3. 1 ya 4x6cm Double Side Prototype PCB Universal Bodi ya Mzunguko Iliyochapishwa (kukatwa kwa nusu)
  4. 1 mbali 40P kichwa cha kiume (kitakatwa kwa saizi).
  5. 1 off 40P kichwa cha kike (kitakatwa kwa saizi).
  6. 4 off 10K 1 / 4W vizuizi.
  7. Kuunganisha waya.
  8. Solder na Iron.
  9. 20 off 4G x 6mm sufuria ya pua kichwa cha kugonga vis.
  10. 4 off 4G x 6mm screws self countingunk self.
  11. 1 off 3.7V betri ya LiPo na mmiliki (kukomesha katika viunganishi vya 2P dupont).
  12. 1 off 2P kichwa cha pembe ya kulia ya kiume
  13. 1 off SPDT kubadili 3 pin 2.54mm lami
  14. Gundi kali ya cyanoacrylate
  15. Viunganisho vya Dupont vichwa vya 1P vya kike (1 mbali na bluu, 1 mbali kijani).

Hatua ya 2: Kukusanya Mzunguko

Kukusanya Mzunguko
Kukusanya Mzunguko
Kukusanya Mzunguko
Kukusanya Mzunguko
Kukusanya Mzunguko
Kukusanya Mzunguko

Mzunguko kwa sasa hauna Mzunguko wa Mgawanyiko wa Voltage (mita ya volt).

  1. Kata 4x6cm Double Side Prototype PCB Universal Printed Circuit Board katika nusu ya mhimili mrefu.
  2. Kata kichwa cha kiume cha 40P vipande vipande:

    1. 2 mbali 12P
    2. 3 mbali 3P
    3. 6 kutoka 2P.
  3. Kata kichwa cha kike cha 40P vipande vipande:

    1. 2 mbali 12P
    2. 1 off 6P
  4. Solder 2 off 12 Kichwa cha kike kama inavyoonyeshwa.
  5. Gundi spacer imeondolewa kwenye kichwa cha kiume cha 3P (nyongeza) kwenye sehemu ya chini ya ubadilishaji wa SPDT na gundi ya cyanoacrylate
  6. Kwenye sehemu nyingine ya upande kisha solder 6 off 2P, 2 off 3Pmale header na switch ya SPDT kama inavyoonyeshwa.
  7. Solder 4 off 10K resistors (A, B, C, D nyeusi) kupitia risasi kwa kichwa cha pini cha GND (# 2 nyeusi) na kwa pini za kichwa cha A0 - A3 (# 5, # 6, # 7, # 8) kisha kupitia shimo (manjano) kama inavyoonyeshwa (picha 3 na mchoro 1).
  8. Fuatilia 3.3V kutoka kwa LDR PINS za kutengenezea PINS # 4, # 6, # 8, # 10 na uzi ingawa shimo kwa kichwa cha nguvu cha VCC siri (kijani).
  9. Fuatilia 3.3V upande wa kichwa cha kike kama inavyoonyeshwa (nyekundu) kuuzwa kwa PINS # 1, # 12, # 15.
  10. 3.3V kupitia shimo lililouzwa kwa upande (nyekundu) PIN ya kichwa RAW # 1.
  11. Fuatilia uunganisho wa rangi ya machungwa kutoka kwa PIN # 11 kupitia shimo hadi solder siri ya kike upande mwingine kama inavyoonyeshwa.
  12. Fuatilia na waya wa kuunganishia bluu kutoka # 20 hadi # 30 na kutoka # 31 hadi # 13 na # 16.
  13. Solder Header PIN # 11 kwa Kiini Header PIN # 11 kupitia shimo.
  14. Andaa kontakt 2 ya dupont urefu wa 30mm na kichwa cha kike cha 1P (1 mbali na bluu, 1 mbali kijani). Ukanda na bati mwisho mwingine.
  15. Waya ya Solder bluu Dupont kwa # 28; waya ya Dupont ya kijani kwa # 29.
  16. Kwenye upande wa juu wa Arduino rekebisha kichwa cha kike cha 6P kisha kiuza.
  17. Kwenye upande wa juu wa Arduino rekebisha kichwa cha 2P cha kulia cha kike ndani ya # 29 na # 30 kisha solder.
  18. Kwenye upande wa chini wa Arduino rekebisha 2 ya 12P na 1 mbali 3P pini za kiume kisha solder.
  19. Ingiza pini za kiume za Arduino 12P kwenye vichwa vya kike vya PCB 12P.

Hatua ya 3: Kuangaza MCU

Kuangaza MCU
Kuangaza MCU
Kuangaza MCU
Kuangaza MCU
Kuangaza MCU
Kuangaza MCU

Arduino Pro Mini imeangaza kwa urahisi kwa kutumia FTDI232 USB hadi kibadilishaji cha TTL kwa kutumia kichwa cha kike cha 6P. Tazama picha hapo juu kwa usawa wa bodi 2.

Hakikisha mipangilio ya 3.3V imechaguliwa kwenye FTDI232 yako. Fuata maagizo hapa ukitumia nambari iliyo hapa chini (tumia kiunga kwa GIST).

Maktaba ya nguvu ya chini (iliyoambatanishwa na https://github.com/rocketscream/Low-Power) inahitaji kusanikishwa.

Mara tu Arduino Pro Mini + PCB ikiwa imewekwa kwenye kabati bado inaweza kuwaka wakati pini za kichwa zinafunuliwa. Tenganisha tu Kitengo cha Mdhibiti kutoka kwa Mfumo wa Jopo ukifunua kichwa.

Tilt pan tracker ya jua na usanidi wa I2C / EEPROM na mzunguko wa kulala kati ya harakati. Usahihi wa muda wa mzunguko wa kulala hupungua kadiri muda unavyoongezeka, lakini inatosha kwa kusudi hili

/*
* Imebadilishwa kutoka kwa msimbo
* na Mathias Leroy
*
* V0.2 MABADILIKO
** I2C SET GET
** SETU YA EEPROM PATA
** ONDOA PATO LA HUDUMA - I2C ILIYOATHIRIKA
** WEWEZA / ZIMA Ufuatiliaji
** SONGA SERVOS KWA VIKOMO VIA I2C
** SOMA UKADILI WA AVG KWA SASA KUPITIA I2C
* V0.3 MABADILIKO
** BADILISHA MAMBO 2 - TRACK (NO I2C) na CONFIGURE (INATUMIA I2C)
** LALA KATIKA MFUMO WA KUFUATILIA (USAJILI WA chini sana KUTOKANA NA CHUNKS 8 ZA PILI)
** DETACH / GONGA SERVOS KWENYE USINGIZI / AMKA (TRANSISTOR AMETUMIWA KWA BURE)
** Ondoa Nafasi ya Mwanzo inayobadilika (REDUNDANT)
** Ondoa sekunde zinazowezekana za WAKE (REDUNDANT)
** Ondoa UWEZO WA KUWEZESHA / KULEmaza (REDUNDANT)
** Ondoa TRACKER inayobadilika imewezeshwa (TUMIA HARDWARE SWITCH)
** Ondoa GETTER YA VOLTAGE - ITATUMIA KITENGO CHA I2C
** ONGEZA UWANGILIOJI WA SEHEMU USIPOTUMIA I2C
*/
# pamoja
# pamoja
# pamoja
# pamoja
# pamoja
# fafanuaEEPROM_VERSION1
# fafanuaI2C_MSG_IN_SIZE3
#fafanuaPIN_LDR_TL A0
#fafanuaPIN_LDR_TR A1
#fafanuaPIN_LDR_BR A3
#fafanuaPIN_LDR_BL A2
# fafanuaPIN_SERVO_V11
# fafanuaPIN_SERVO_H5
# fafanuaIDX_I2C_ADDR0
# fafanuaIDX_V_ANGLE_MIN1
# fafanuaIDX_V_ANGLE_MAX2
# fafanuaIDX_V_SENSITIVITY3
# fafanuaIDX_V_STEP4
# fafanuaIDX_H_ANGLE_MIN5
# fafanuaIDX_H_ANGLE_MAX6
# fafanuaIDX_H_SENSITIVITY7
# fafanuaIDX_H_STEP8
# fafanuaID_KULALA_MINUTES9
# fafanuaIDX_V_DAWN_ANGLE10
# fafanuaIDX_H_DAWN_ANGLE11
# fafanuaIDX_DAWN_INTENSITY12 // wastani wa LDRS zote
# fafanuaIDX_DUSK_INTENSITY13 // wastani wa LDRS zote
# fafanuaIDX_END_EEPROM_SET14
# defineIDX_CURRENT_INTENSITY15 // wastani wa LDRS zote - zinazotumiwa kuhesabu IDX_DAWN_INTENSITY ambiant taa isiyo ya moja kwa moja
# fafanuaIDX_END_VALUES_GET16
# fafanuaIDX_SIGN_117
# fafanuaIDX_SIGN_218
# fafanuaIDX_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 _a wastaniTop = 0;
int _a wastaniRight = 0;
int _averageBottom = 0;
int _a wastaniLeft = 0;
byte _i2cResponse = 0;
bool _inConfigMode = uwongo;
voidetup ()
{
Serial. Kuanza (115200);
pataFromEeprom ();
ikiwa (inConfigMode ()) {
Serial.println ("Sanidi Njia");
Serial.print ("Anwani ya I2C:");
Serial.println (_i2cVals [IDX_I2C_ADDR]);
Wire.begin (_i2cVals [IDX_I2C_ADDR]);
Waya. Pokea (pokea Tukio);
Wire.onRequest (ombiEvent);
} mwingine {
Serial.println ("Njia ya Kufuatilia");
kuchelewesha (5000); // wakati wa kumaliza mikono ikiwa unganisha betri nk.
}
}
voidloop ()
{
kupataLightValues ();
ikiwa (! _inConfigMode) {
// ToDo: WASHA ZUA YA TRANSISTOR
_servoH.ambatanisha (PIN_SERVO_H);
_servoV. ambatisha (PIN_SERVO_V);
kwa (int i = 0; i <20; i ++) {
ikiwa (i! = 0) {
kupataLightValues ();
}
hojaServos ();
}
kuchelewesha (500);
_servoH.detach ();
_servoV.detach ();
// ToDo: ZIMA TRANSISTOR SWITCH
kuchelewesha (500);
kulalaFor ((_ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8);
}
}
// --------------------------------- MODI YA SASA
boolinConfigMode () {
pinMode (PIN_SERVO_H, INPUT);
_inConfigMode = Soma dijitali (PIN_SERVO_H) == 1;
kurudi _inConfigMode;
}
// --------------------------------- EEPROM
voidgetFromEeprom () {
kama(
Soma EEPROM (IDX_SIGN_1)! = 'S' ||
Soma EEPROM (IDX_SIGN_2)! = 'T' ||
Soma EEPROM (IDX_SIGN_3)! = EEPROM_VERSION
) EEPROM_andika_default_configuration ();
Usanidi wa EEPROM_read_read ();
}
voidEEPROM_andika_default_configuration () {
Serial.println ("EEPROM_write_default_configuration");
kwa (int i = 0; i <IDX_END_EEPROM_SET; i ++) {
Sasisho la EEPROM (i, _i2cVals );
}
Sasisho la EEPROM (IDX_SIGN_1, 'S');
Sasisho la EEPROM (IDX_SIGN_2, 'T');
Sasisho la EEPROM (IDX_SIGN_3, EEPROM_VERSION);
}
batiliEEPROM_read_configuration () {
Serial.println ("EEPROM_read_configuration");
kwa (int i = 0; i <IDX_END_EEPROM_SET; i ++) {
_i2cVals = soma EEPROM (i);
//Serial.println(String(i) + "=" + _i2cVals );
}
}
// --------------------------------- I2C
voidreceiveEvent (hesabu kamili) {
ikiwa (hesabu == I2C_MSG_IN_SIZE)
{
char cmd = Wire.read ();
fahirisi ya byte = Wire.read ();
thamani ya byte = Wire.read ();
kubadili (cmd) {
kesi'G ':
ikiwa (faharasa <IDX_END_VALUES_GET) {
_i2cResponse = _i2cVals [index];
}
kuvunja;
kesi'S ':
ikiwa (faharasa <IDX_END_EEPROM_SET) {
_i2cVals [index] = thamani;
Sasisho la EEPROM (index, _i2cVals [index]);
}
kuvunja;
chaguomsingi:
kurudi;
}
}
}
voidrequestEvent ()
{
Andika Wire (_i2cResponse);
}
// --------------------------------- LDRs
voidgetLightValues () {
thamani ya juuTopLeft = AnalogRead (PIN_LDR_TL);
thamani ya juuTopRight = AnalogRead (PIN_LDR_TR);
thamani ya intBottomRight = AnalogRead (PIN_LDR_BR);
thamani ya intBottomLeft = AnalogRead (PIN_LDR_BL);
_a wastaniTop = (valueTopLeft + valueTopRight) / 2;
_AverageRight = (thamaniTopRight + thamaniBottomRight) / 2;
_averageBottom = (thamaniBottomRight + thamaniBottomLeft) / 2;
_AverageLeft = (valueBottomLeft + valueTopLeft) / 2;
int avgIntensity = (valueTopLeft + valueTopRight + valueBottomRight + valueBottomLeft) / 4;
_i2cVals [IDX_CURRENT_INTENSITY] = ramani (avgIntensity, 0, 1024, 0, 255);
}
// --------------------------------- SERVOS
voidmoveServos () {
Serial.println ("hojaServos");
ikiwa ((_averageLeft-_averageRight)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH-_i2cVals [IDX_H_STEP])> _ i2cVals [IDX_H_ANGLE_MIN]) {
// kwenda kushoto
Serial.println ("hojaServos kwenda kushoto");
kuchelewesha (_slowingDelay);
kwa (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.andika (_angleH--);
kuchelewesha (_servoLoopDelay);
}
}
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH + _i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) {
// kwenda sawa
Serial.println ("hojaServos kwenda kushoto");
kuchelewesha (_slowingDelay);
kwa (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) {
_servoH.write (_angleH ++);
kuchelewesha (_servoLoopDelay);
}
}
mwingine {
// kufanya chochote
Serial.println ("hojaServos haifanyi chochote");
kuchelewesha (_slowingDelay);
}
ikiwa ((_averageTop-_averageBottom)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV + _i2cVals [IDX_V_STEP]) <_ i2cVals [IDX_V_ANGLE_MAX]) {
// kwenda juu
Serial.println ("hojaServos kwenda juu");
kuchelewesha (_slowingDelay);
kwa (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.andika (_angleV ++);
kuchelewesha (_servoLoopDelay);
}
}
elseif ((_averageBottom-_averageTop)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV-_i2cVals [IDX_V_STEP])> _ i2cVals [IDX_V_ANGLE_MIN]) {
// kwenda chini
Serial.println ("hojaServos kwenda chini");
kuchelewesha (_slowingDelay);
kwa (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) {
_servoV.andika (_angleV--);
kuchelewesha (_servoLoopDelay);
}
}
mwingine {
Serial.println ("hojaServos haifanyi chochote");
kuchelewesha (_slowingDelay);
}
}
// --------------------------------- KULALA
voidasleepFor (unsignedint eightSecondSegment) {
Serial.println ("AmelalaFor");
kwa (unsignedint sleepCounter = sehemu nane za sekunde; sleepCounter> 0; sleepCounter--)
{
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
}
}

tazama rawtilt_pan_tracker_0.3.ino iliyohifadhiwa na ❤ na GitHub

Hatua ya 4: Kukusanya Kitanda cha Mzunguko

Kukusanya Kitengo cha Mzunguko
Kukusanya Kitengo cha Mzunguko
Kukusanya Kitengo cha Mzunguko
Kukusanya Kitengo cha Mzunguko
Kukusanya Kitengo cha Mzunguko
Kukusanya Kitengo cha Mzunguko
  1. Hakikisha Ardiuno Pro Mini imeingizwa kwenye vichwa kwenye PCB.
  2. Ingiza msingi wa sanduku la mdhibiti wa SOLAR TRACKER kwenye kuta za sanduku la SOLAR TRACKER na ubandike na 2 off 4G x 6mm screws self strapping self.
  3. Ingiza Ardiuno Pro Mini + PCB na kichwa cha 6P kinachopiga batili kwenye msingi wa sanduku la SOLAR TRACKER.
  4. Ingiza kifuniko cha sanduku la mdhibiti wa SOLAR TRACKER ndani ya kuta za sanduku la SOLAR TRACKER na ubandike na 2 off 4G x 6mm screws za kugonga za kibinafsi.
  5. Unganisha mkutano hapo juu kwa msingi wa Jopo la Jopo na 4 off 4G x 6mm visu za kujipiga visivyo na waya.

Hatua ya 5: Kuunganisha Rig Inasababisha Mdhibiti

Kuunganisha Rig Inasababisha Mdhibiti
Kuunganisha Rig Inasababisha Mdhibiti
Kuunganisha Rig Inasababisha Mdhibiti
Kuunganisha Rig Inasababisha Mdhibiti
Kuunganisha Rig Inasababisha Mdhibiti
Kuunganisha Rig Inasababisha Mdhibiti

Uunganisho unaofaa tayari kutoka kwa inayoweza kufundishwa hapo awali, ni 4 mbali 2P unganisho la LDR na 2 mbali unganisho la 3P kutoka kwa servos. Kilicho cha muda hadi recharging iko tayari ni betri. Tumia LiPo ya 3.7V ambayo inakoma katika unganisho la 2P la DuPont kwa sasa.

  1. Ingiza miunganisho ya LDR (hakuna polarity) kutoka juu:

    1. Juu kulia
    2. Juu Kushoto
    3. Chini kulia
    4. Chini Kushoto
  2. Ingiza unganisho la Servo (na waya wa ishara kushoto) kutoka juu:

    1. Usawa
    2. Wima
  3. Subiri TAYARI TAYARI KWA Jaribio;

Hatua ya 6: Kumjaribu Mdhibiti

Image
Image

Kama ilivyoelezwa hapo awali, programu hiyo haijaboreshwa kwa mtiririko wa kuchaji kwa jua. Inaweza kupimwa na kupunguzwa kwa kutumia vyanzo vya asili (jua) na visivyo vya asili.

Ili kujaribu ufuatiliaji katika mazingira yaliyodhibitiwa inaweza kuwa rahisi kuweka SLEEP MINUTES kwa thamani ya chini (angalia hatua inayofuata).

Hatua ya 7: Kusanidi Via I2C Kutumia Ingizo la Dashibodi

Hii inaelezea kusanidi mdhibiti kupitia MCU ya pili, kuingia mipangilio kwenye dirisha la kiweko.

  1. Pakia hati ifuatayo kwenye D1M WIFI BLOCK (au Wemos D1 Mini).
  2. Tenganisha USB kutoka kwa PC
  3. Uunganisho wa PIN: -ve (Mdhibiti) => GND (D1M) + ve (Mdhibiti) => 3V3 (D1M) SCL (Mdhibiti) => D1 (D1M)

    SDA (Mdhibiti) => D2 (D1M)

  4. Badili swichi ya SPDT kuwa CONFIG
  5. Unganisha USB kwenye PC
  6. Kutoka Arduino IDE anza dirisha la kiweko na Bandari sahihi ya COM
  7. Hakikisha "Newline" na "9600 baud" zimechaguliwa
  8. Amri zinaingia kwenye Tuma sanduku la maandishi ikifuatiwa na kitufe cha Ingiza
  9. Amri ziko katika muundo wa Tabia baiti
  10. Ikiwa baiti ya pili (sehemu ya tatu) haijajumuishwa 0 (sifuri) imetumwa na hati
  11. Kuwa mwangalifu kwa kutumia uingizaji wa serial; kagua kile ulichoingiza kabla ya kugonga kitufe cha "Ingiza". Ikiwa umefungwa (kwa mfano kubadilisha anwani ya I2C kuwa thamani uliyosahau) utahitaji kuwasha firmware ya mtawala tena.

Tofauti zilizosaidiwa katika amri ya kwanza ni:

  • E (Wezesha ufuatiliaji wa servo) muhimu kwa kusimamisha harakati wakati wa usanidi. Hii ni pembejeo kwa kutumia: E 0
  • D (Lemaza ufuatiliaji wa servo) muhimu kuanza ufuatiliaji wa kiatomati ikiwa sio kuwasha tena kifaa. Hii ni pembejeo kwa kutumia: D 0
  • G (Pata thamani ya usanidi) inasoma maadili kutoka kwa EEPROM na IN-MEMORY: Hii ni pembejeo kwa kutumia: G (faharasa ni maadili halali ya baiti 0 - 13 na 15)
  • S (Weka thamani ya EEPROM) huweka maadili kwa EEPROM ambayo hupatikana baada ya kuanza upya. Huu ni uingizaji kwa kutumia: S (faharasa ni halali ya maadili 0 - 13, thamani ni halali ya ka na hutofautiana kwa kila mali)

Nambari ni ukweli wa ukweli kwa faharisi lakini yafuatayo hutumiwa kwa mwongozo wa maadili / maoni halali:

  • Anwani ya I2C 0 - anwani ya mtumwa, bwana anahitaji hii kuwasiliana na mdhibiti (chaguo-msingi 10)
  • KIWANGO KIWANGO KIWANGO CHA CHINI 1 - kikomo cha chini cha servo wima ya chini (chaguo-msingi 10, masafa 0 - 180)
  • MAXIMUM VERTICAL ANGLE 2 - kikomo cha juu cha servo wima ya juu (chaguo-msingi 170, masafa 0 - 180)
  • SENSITIVITY VERTICAL LDR 3 - Wima LDR kusoma margin (chaguo-msingi 20, masafa 0 - 1024)
  • HATUA YA WIMA HATUA YA 4 - hatua za wima za servo kwenye kila marekebisho (chaguo-msingi 5, masafa ya 1 - 20)
  • KIWANGO CHA CHINI KIWANGO KIWANGO 5 - kikomo cha chini cha usawa cha servo (default 10, fungu la 0 - 180)
  • MAXIMUM HORIZONTAL ANGLE 6 - kikomo cha juu cha usawa wa servo (default 170, masafa 0 - 180)
  • SENSITIVITY HORIZONTAL LDR 7 - Kiwango cha kusoma cha LDR usawa (chaguo-msingi 20, masafa 0 - 1024)
  • HATUA YA HORIZONI HATUA YA 8 - hatua za usawa za servo kwenye kila marekebisho (chaguomsingi 5, masafa 1 - 20)
  • DALILI DAKIKA 9 - takriban kipindi cha kulala kati ya ufuatiliaji (chaguo-msingi 20, masafa 1 - 255)
  • KIWANGO CHA KIWANGO KIWANGO 10 - MATUMIZI YA BAADAYE - pembe ya wima kurudi wakati jua linapozama
  • MANGO YA KIWANJA KIWANGO 11 - MATUMIZI YA BAADAYE - pembe ya usawa kurudi wakati jua linapozama
  • UKALI WA DAWN 12 - MATUMIZI YA BAADAYE - wastani wa chini wa LDR zote ambazo husababisha mwanzo wa ufuatiliaji wa jua kila siku
  • DUSK INITSSEN 13 - MATUMIZI YA BAADAYE - wastani wa chini wa LDR zote ambazo husababisha mwisho wa ufuatiliaji wa jua kila siku
  • MWISHO WA MAADILI YA EEPROM ALAMA YA 14 - THAMANI ISIYOTUMIWA
  • UKALI WA SASA 15 - asilimia ya sasa ya kiwango cha mwangaza
  • MWISHO WA MAADILI YA KUMBUKUMBU ALAMA YA 16 - THAMANI ISIYOTUMIWA.

Inakamata uingizaji wa serial (uingizaji wa kibodi kwenye kidirisha cha dashibodi) na kuipeleka kwa mtumwa wa I2C katika muundo wa char, byte, byte

# pamoja
# fafanuaI2C_MSG_IN_SIZE2
# fafanuaI2C_MSG_OUT_SIZE3
# fafanuaI2C_SLAVE_ADDRESS10
boolean _newData = uwongo;
const byte _numChars = 32;
char _receivedChars [_numChars]; // safu ya kuhifadhi data iliyopokea
voidetup () {
Serial. Kuanza (9600);
Waya.anza (D2, D1);
kuchelewesha (5000);
}
voidloop () {
recvWithEndMarker ();
parseSendCommands ();
}
voidrecvWithEndMarker () {
tuli byte ndx = 0;
char endMarker = '\ n';
char rc;
wakati (Serial.available ()> 0 && _newData == uongo) {
rc = mfululizo.read ();
ikiwa (rc! = endMarker) {
_kupokeaChars [ndx] = rc;
ndx ++;
ikiwa (ndx> = _numChars) {
ndx = _numChars - 1;
}
} mwingine {
_kupokeaChars [ndx] = '\ 0'; // kumaliza kamba
ndx = 0;
_NewData = kweli;
}
}
}
voidparseSendCommands () {
ikiwa (_newData == kweli) {
ukomo wa constchar [2] = "";
ishara ya char *;
ishara = strtok (_ImepokeaChars, delim);
char cmd = _ zilizopokelewaChars [0];
faharisi ya baiti = 0;
thamani ya baiti = 0;
int i = 0;
wakati (ishara! = NULL) {
//Serial.println (ishara);
i ++;
badilisha (i) {
kesi1:
ishara = strtok (NULL, delim);
index = atoi (ishara);
kuvunja;
kesi2:
ishara = strtok (NULL, delim);
ikiwa (ishara! = NULL) {
thamani = atoi (ishara);
}
kuvunja;
chaguomsingi:
ishara = NULL;
}
}
tumaCmd (cmd, faharisi, thamani);
_NewData = uwongo;
}
}
voidsendCmd (char cmd, faharisi ya baiti, thamani ya baiti) {
Serial.println ("-----");
Serial.println ("Kutuma amri:");
Serial.println ("\ t" + String (cmd) + "" + String (index) + "" + String (thamani));
Serial.println ("-----");
Waya.anza Usafirishaji (I2C_SLAVE_ADDRESS); // kusambaza kwa kifaa
Andika waya (cmd); // hutuma char
Andika waya (faharisi); // hutuma baiti moja
Andika waya (thamani); // hutuma baiti moja
Uwasilishaji wa waya ();
jibu la byte = 0;
bool hadResponse = uongo;
ikiwa (cmd == 'G') {
Ombi la Wire. Toka (I2C_SLAVE_ADDRESS, 1);
wakati (Wire.available ()) // mtumwa anaweza kutuma chini ya ombi
{
hadResponse = kweli;
majibu = Wire.read ();
}
ikiwa (hadResponse == kweli) {
Serial.println ("Kupata majibu:");
Serial.println (majibu);
} mwingine {
Serial.println ("Hakuna majibu, angalia anwani / unganisho");
}
}
}

tazama rawd1m_serial_input_i2c_char_byte_byte_v0.1.ino iliyoshikiliwa na ❤ na GitHub

Hatua ya 8: Hatua Zifuatazo

Angalia mara kwa mara kuangalia mabadiliko katika programu / vifaa.

Rekebisha programu / vifaa kwa mahitaji yako.

Toa maoni yako juu ya maombi / uboreshaji wowote.

Ilipendekeza: