Përmbajtje:
- Hapi 1: Materialet dhe Mjetet
- Hapi 2: Montimi i qarkut
- Hapi 3: Ndezja e MCU
- Hapi 4: Montimi i zorrës së qarkut
- Hapi 5: Lidhja e drejtuesve të pajisjeve me kontrolluesin
- Hapi 6: Testimi i kontrolluesit
- Hapi 7: Konfigurimi përmes I2C duke përdorur hyrjen e tastierës
- Hapi 8: Hapat e ardhshëm
Video: IOT123 - Gjurmues diellor - KONTROLLUES: 8 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:27
Kjo është një shtrirje e Instructable
IOT123 - TRACKER SOLAR - TILT/PAN, KUADRI PANEL, LDR MOUNTS RIG. Këtu ne përqëndrohemi në kontrolluesin e servos, dhe sensorët e pozicionit të diellit. Importantshtë e rëndësishme të theksohet se ky dizajn supozon se do të përdoren 2 MCU: një (3.3V 8mHz Arduino Pro Mini) për gjurmuesin diellor dhe një MCU të pavarur për sensorët/aktorët tuaj.
Ky është Versioni 0.3
Në vend që të publikoj të gjitha projektet pas kënaqësisë së plotë, unë do të praktikoj integrim të vazhdueshëm dhe do të ofroj diçka më shpesh, duke modifikuar atë që kam ofruar sipas nevojës. Unë do të shkruaj një udhëzues tjetër për ngarkuesin e baterisë, _ kur_ të ketë përfunduar optimizimi i softverit/harduerit të kontrolluesit. Unë do të theksoj se ku nevojiten optimizimet ndërsa e kalojmë këtë.
Një pjesë e arsyes për këtë qasje janë reagimet e klientëve. Nëse djemtë shihni një nevojë ose keni një qasje më të mirë, ju lutemi komentoni, por mbani në mend se unë nuk mund të ofroj gjithçka dhe ndoshta jo në një afat kohor që ju përshtatet. Meqenëse këto shpjegime duken më pak të rëndësishme, ato do të fshihen nga ky artikull.
Çfarë përfshin kjo:
- Përdorni LDR nga Instructable origjinale për të kuptuar vendndodhjen e përafërt të diellit.
- Lëvizni servot për t'u përballur me diellin.
- Opsionet për ndjeshmërinë e lëvizjeve.
- Opsione për madhësinë e hapit kur lëvizni në diell.
- Opsionet për kufizimet këndore të përdorura në servos.
- Opsionet për vonesat e lëvizjeve.
- Ndërfaqja I2C për vendosjen/marrjen e vlerave midis MCU -ve.
- Gjumë i thellë midis lëvizjeve.
Çfarë nuk përfshin kjo (dhe do të adresohet si leje kohore):
- Përdorimi i energjisë vetëm gjatë orëve të ditës.
- Duke kujtuar pozicionin e agimit dhe duke shkuar atje në mbylljen e muzgut.
- Heqja e rregullatorit nga MCU.
- Çaktivizimi i LED -ve (ve) në MCU.
- Rivendosja e energjisë përmes VCC dhe jo RAW.
- Sigurimi i zgjidhjeve për ndezje pa energji të rregulluar nga konvertuesi USB në Serial TTL.
- Monitorues i tensionit të baterisë.
HISTORIA
20 Dhjetor 2017 V0.1 KOD
Versioni fillestar gjurmon burimin e dritës, gjithmonë i ndezur, pa karikim
7 janar 2018 V0.2 KODI
-
NDRYSHIMET HARDWARE
- Shtoni kunjat I2C
- Shtoni ndërprerës në servo GND
- Etiketë e Shtypur në magjinë e kutisë së kontrolluesit
-
NDRYSHIMET E SOFTUERIT
- Lexoni konfigurimin nga EEPROM
- Mbështetja e autobusit I2C si skllav i një MCU tjetër (3.3V)
- Vendosni konfigurimin përmes I2C
- Cilësimi i aktivizuar përmes I2C
- Merrni konfigurimin përmes I2C
- Merrni pronat e ekzekutimit përmes I2C (Aktualisht të Aktivizuara, dhe Intensiteti aktual i dritës)
- Hiq regjistrimet serike (ndikoi në vlerat e I2C)
19 janar 2018 V0.3 KODI
-
HARDWARE
Etiketa u përditësua. Switch tani përdoret për të zgjedhur modalitetin CONFIG ose TRACK
-
SOFTWARE
- I2C përdoret vetëm për konfigurim
- Kontrolluesi pret 5 sekonda para fillimit të gjurmimit, lejon lëvizjen e duarve
- Për të përdorur konfigurimin I2C, SPDT duhet të jetë në CONFIG si njësi çizme
- Në mes të gjurmimit të lëvizjes, njësia është në gjendje gjumi të thellë për vlerën e konfigurimit SLEEP MINUTES (parazgjedhje 20 minuta).
Hapi 1: Materialet dhe Mjetet
Tani ekziston një listë e plotë e Faturave të Materialeve dhe Burimeve.
- Pjesë të printuara 3D.
- Arduino Pro Mini 3.3V 8mHz
- 1 prej 4x6cm Prototip dopio anësor PCB Universal Printed Circuit Board (do të pritet përgjysmë)
- 1 kokë meshkuj 40P (për tu prerë në madhësi).
- 1 kokë femër 40P (për tu prerë në madhësi).
- 4 off restors 10K 1/4W.
- Teli lidhës.
- Solder dhe Hekuri.
- 20 vida 4G x 6mm me kokë tavani prej çeliku të vetë -përgjimit.
- 4 vida 4G x 6mm të pandryshkshme të vetë -përgjimit.
- 1 bateri dhe mbajtëse 3.7V LiPo (përfundon në lidhëset dupont 2P).
- 1 kokë kokë me kënd të drejtë mashkullor 2P
- 1 çelës SPDT me 3 pika katran 2.54mm
- Ngjitës i fortë Cyanoacrylate
- Lidhëset Dupont femra 1P kokë (1 me ngjyrë blu, 1 me ngjyrë jeshile).
Hapi 2: Montimi i qarkut
Qarku aktualisht nuk ka Qarkun e Ndarjes së Tensionit (voltmetër).
- Pritini Bordin e Qarkut të Shtypur Universal të Prototipit PCB Universal të Printuar 4x6cm përgjysmë përgjatë boshtit të gjatë.
-
Pritini kokën mashkullore 40P në copa:
- 2 me 12 p
- 3 zbritje 3P
- 6 zbritje në 2P.
-
Pritini kokën femër 40P në copa:
- 2 me 12 p
- 1 nga 6 p
- Ngjitës 2 me kokë 12Femërore siç tregohet.
- Ngjiteni ndarësin e hequr nga një kokë 3P mashkullore (shtesë) në pjesën e poshtme të çelësit SPDT me ngjitës cianoakrilat
- Në anën tjetër lidhni më pas 6 nga 2P, 2 nga 3Publetë mashkullore dhe çelësin SPDT siç tregohet.
- Ngjitni 4 rezistenca 10K (A, B, C, D e zezë) përmes plumbit në kokën e kokës GND (#2 e zezë) dhe në kunjat e kokës A0 - A3 (#5, #6, #7, #8) pastaj përmes vrimës (e verdhë) siç tregohet (3 fotografi + 1 diagram).
- Gjurmoni 3.3V nga PIN -et e saldimit të PIN -ve LDR #4, #6, #8, #10 dhe kaloni nëpër vrimën e kunjave VCC të kokës feamale (jeshile).
- Gjurmoni 3.3V në kokën e femrës siç tregohet (e kuqe) duke u bashkuar me PINS #1, #12, #15.
- 3.3V përmes vrimës së bashkuar nga ana tjetër (e kuqe) PIN -i i kokës RAW #1.
- Gjurmoni lidhjen portokalli nga PIN #11 përmes vrimës për të ngjitur kunjat Femra në anën tjetër siç tregohet.
- Gjurmoni dhe lidhni telin blu të lidhjes nga #20 në #30 dhe nga #31 në #13 dhe #16.
- PIN PIN #11 i kokës Femër të bashkuar në PIN të kokës Mashkull #11 përmes vrimës.
- Përgatitni 2 lidhës dupont 30 mm të gjatë me kokë femër 1P (1 me ngjyrë blu, 1 me ngjyrë jeshile). Rrip dhe kallaj në anën tjetër.
- Ngjitës tela blu Dupont në numrin 28; lidhni telin e gjelbër Dupont në numrin 29.
- Në pjesën e sipërme të Arduino fiksojeni kokën e femrës 6P pastaj lidhni.
- Në pjesën e sipërme të Arduino fiksoni kokën femërore me kënd të drejtë 2P int #29 dhe #30 pastaj lidhni.
- Në pjesën e poshtme të Arduino fiksojini 2 kunjat mashkullore 12P dhe 1 off 3P pastaj lidhini.
- Futni kunjat Arduino mashkullore 12P në titujt femra të PCB 12P.
Hapi 3: Ndezja e MCU
Arduino Pro Mini është ndezur në mënyrë të përshtatshme duke përdorur një konvertues FTDI232 USB në TTL duke përdorur kokën femër 6P. Shihni foton më lart për shtrirjen e 2 dërrasave.
Sigurohuni që cilësimi 3.3V të jetë zgjedhur në FTDI232 tuaj. Ndiqni udhëzimet këtu duke përdorur kodin më poshtë (përdorni lidhjen për GIST).
Biblioteka me fuqi të ulët (bashkangjitur dhe https://github.com/rocketscream/Low-Power) duhet të instalohet.
Pasi të jetë instaluar PCB Arduino Pro Mini + në kasë, ajo ende mund të ndizet ndërsa kunjat e kokës janë të ekspozuara. Thjesht shkëputni Njësinë e Kontrolluesit nga Korniza e Panelit duke ekspozuar kokën.
Gjurmues diellor me pjerrësi të pjerrët me konfigurim I2C/EEPROM dhe cikël gjumi midis lëvizjeve. Kohëzgjatja e ciklit të gjumit saktësia zvogëlohet me rritjen e kohëzgjatjes, por e mjaftueshme për këtë qëllim
/* |
* modifikuar nga kodi |
* nga Mathias Leroy |
* |
* V0.2 MODIFIKIMET |
** I2C SET MERRNI |
** EEPROM SET MERRNI |
** Hiqni daljen seriale - të ndikuar nga I2C |
** ÇAJTIM/ZGJIDHJE E PAKTUESHME |
** Lëvizni shërbimet në kufijtë përmes I2C |
** LEXONI INTENSITETIN AVG AKTUAL VIA I2C |
* V0.3 MODIFIKIMET |
** KALIM P FORR 2 MONDE - TRACK (JO I2C) dhe KONFIGURIM (PESRDORON I2C) |
** FLENI ND MDNYR TRN E RRUGS (PRECISION SHUM I ULT PR shkak të 8 copave të dyta) |
** DETACH/ATTACH SERVOS N S FLET/WAKIR (TRANSISTORI P USRDORET NGA EVENTUALISHT) |
** Hiq Pozicionin Fillestar të Konfigurueshëm (REDUNDANT) |
** Hiq sekondat e konfigurueshme të zgjimit (të tepërta) |
** HIQENI TF KONFIGURUESHME TNA FUNDSUAR/PAKTUAR (PEDRFUNDUES) |
** HIQONI NDACRGJEGJSIN E KONFIGURUESH (M T (KONFIGURUESH (M (PERDOR PWRDORIMIN E HARDWARE SWITCH) |
** Hiqni tensionin - do të përdorni një komponent të ndarë I2C |
** SHTO LOGOHJE SERIALE KUR NUK PINGRDORNI I2C |
*/ |
#përfshi |
#përfshi |
#përfshi |
#përfshi |
#përfshi |
#përcaktoEEPROM_VERSION1 |
#përcaktoI2C_MSG_IN_SIZE3 |
#përcaktoPIN_LDR_TL A0 |
#përcaktoPIN_LDR_TR A1 |
#përcaktoPIN_LDR_BR A3 |
#përcaktoPIN_LDR_BL A2 |
#përcaktoPIN_SERVO_V11 |
#përcaktoPIN_SERVO_H5 |
#defineIDX_I2C_ADDR0 |
#përcaktoIDX_V_ANGLE_MIN1 |
#përcaktoIDX_V_ANGLE_MAX2 |
#përcaktoIDX_V_SENSITIVITY3 |
#defineIDX_V_STEP4 |
#përcaktoIDX_H_ANGLE_MIN5 |
#përcaktoIDX_H_ANGLE_MAX6 |
#defineIDX_H_SENSITIVITY7 |
#përcaktoIDX_H_STEP8 |
#defineIDX_SLEEP_MINUTES9 |
#përcakto IDX_V_DAWN_ANGLE10 |
#defineIDX_H_DAWN_ANGLE11 |
#defineIDX_DAWN_INTENSITY12 // mesatarja e të gjitha LDRS |
#defineIDX_DUSK_INTENSITY13 // mesatarja e të gjitha LDRS |
#përcakto IDX_END_EEPROM_SET14 |
#defineIDX_CURRENT_INTENSITY15 // mesatarja e të gjitha LDRS - përdoret për llogaritjen e dritës ambjente jo të drejtpërdrejtë të IDX_DAWN_INTENSITY |
#përcakto IDX_END_VALUES_GET16 |
#përcakto IDX_SIGN_117 |
#përcakto IDX_SIGN_218 |
#përcakto IDX_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 _servoLoopVonesë = 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.fillo (115200); |
getFromEeprom (); |
nëse (inConfigMode ()) { |
Serial.println ("Mënyra e konfigurimit"); |
Serial.print ("Adresa I2C:"); |
Serial.println (_i2cVals [IDX_I2C_ADDR]); |
Wire.begin (_i2cVals [IDX_I2C_ADDR]); |
Wire.onReceive (merrniEvent); |
Wire.onRequest (requestEvent); |
} tjetër { |
Serial.println ("Mënyra e Ndjekjes"); |
vonesë (5000); // koha për të hequr dorë nga rruga nëse lidhni baterinë etj. |
} |
} |
voidloop () |
{ |
getLightValues (); |
nëse (! _inConfigMode) { |
// ToDo: HYRJE ÇELWSIN E TRANSISTORIT |
_servoH.tash (PIN_SERVO_H); |
_servoV.tash (PIN_SERVO_V); |
për (int i = 0; i <20; i ++) { |
nëse (i! = 0) { |
getLightValues (); |
} |
moveServos (); |
} |
vonesë (500); |
_servoH.detach (); |
_servoV.detach (); |
// ToDo: FIK OF FIKSIMIN E TRANSISTORIT |
vonesë (500); |
në gjumëFor ((_ _ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8); |
} |
} |
// --------------------------------- MDNYRA AKTUALE |
boolinConfigMode () { |
pinMode (PIN_SERVO_H, INPUT); |
_inConfigMode = digitalRead (PIN_SERVO_H) == 1; |
kthimi _inConfigMode; |
} |
// --------------------------------- EEPROM |
voidgetFromEeprom () { |
nëse ( |
EEPROM.lexo (IDX_SIGN_1)! = 'S' || |
EEPROM.lexo (IDX_SIGN_2)! = 'T' || |
EEPROM.lexo (IDX_SIGN_3)! = EEPROM_VERSION |
) EEPROM_write_default_configuration (); |
EEPROM_read_configuration (); |
} |
voidEEPROM_write_default_configuration () { |
Serial.println ("EEPROM_write_default_configuration"); |
për (int i = 0; i <IDX_END_EEPROM_SET; i ++) { |
EEPROM.ditëso (i, _i2cVals ); |
} |
EEPROM.ditësim (IDX_SIGN_1, 'S'); |
EEPROM.ditësim (IDX_SIGN_2, 'T'); |
EEPROM.ditësim (IDX_SIGN_3, EEPROM_VERSION); |
} |
voidEEPROM_read_configuration () { |
Serial.println ("EEPROM_read_configuration"); |
për (int i = 0; i <IDX_END_EEPROM_SET; i ++) { |
_i2cVals = EEPROM.lexo (i); |
//Serial.println(String(i) + "=" + _i2cVals ); |
} |
} |
// --------------------------------- I2C |
voidreceiveEvent (int count) { |
nëse (numëroni == I2C_MSG_IN_SIZE) |
{ |
char cmd = Wire.read (); |
indeksi i bajtit = Wire.read (); |
vlera e bajtit = Wire.read (); |
kaloni (cmd) { |
rasti 'G': |
nëse (indeksi <IDX_END_VALUES_GET) { |
_i2cResponse = _i2cVals [indeksi]; |
} |
pushim; |
rasti 'S': |
nëse (indeksi <IDX_END_EEPROM_SET) { |
_i2cVals [indeksi] = vlera; |
EEPROM.ditë (indeksi, _i2cVals [indeksi]); |
} |
pushim; |
parazgjedhje: |
kthim; |
} |
} |
} |
kërkesë e pavlefshme Event () |
{ |
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] = hartë (mesatarja e intensitetit, 0, 1024, 0, 255); |
} |
// --------------------------------- SERVOS |
voidmoveServos () { |
Serial.println ("moveServos"); |
nëse ((_averageLeft-_averageRight)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH-_i2cVals [IDX_H_STEP])> _ i2cVals [IDX_H_ANGLE_MIN]) { |
// duke shkuar majtas |
Serial.println ("moveServos shkon majtas"); |
vonesë (_slowingDelay); |
për (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) { |
_servoH.shkruaj (_angleH--); |
vonesë (_servoLoopDelay); |
} |
} |
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH+_i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) { |
// duke shkuar drejtë |
Serial.println ("moveServos shkon majtas"); |
vonesë (_slowingDelay); |
për (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) { |
_servoH.shkruaj (_angleH ++); |
vonesë (_servoLoopDelay); |
} |
} |
tjeter { |
// duke bërë asgjë |
Serial.println ("moveServos duke bërë asgjë"); |
vonesë (_slowingDelay); |
} |
nëse ((_averageTop-_averageBottom)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV+_i2cVals [IDX_V_STEP]) <_ i2cVals [IDX_V_ANGLE_MAX]) { |
// duke shkuar lart |
Serial.println ("moveServos going up"); |
vonesë (_slowingDelay); |
për (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) { |
_servoV.write (_angleV ++); |
vonesë (_servoLoopDelay); |
} |
} |
elseif ((_averageBottom-_averageTop)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV-_i2cVals [IDX_V_STEP])> _ i2cVals [IDX_V_ANGLE_MIN]) { |
// duke shkuar poshte |
Serial.println ("moveServos going down"); |
vonesë (_slowingDelay); |
për (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) { |
_servoV.write (_angleV--); |
vonesë (_servoLoopDelay); |
} |
} |
tjeter { |
Serial.println ("moveServos duke bërë asgjë"); |
vonesë (_slowingDelay); |
} |
} |
// -------------------------------- FLEJ |
voidasleepFor (pa shenjë tetëSecondSegmente) { |
Serial.println ("në gjumëPër"); |
për (gjumi i panënshkruarCounter = tetëSecondSegmente; sleepCounter> 0; sleepCounter--) |
{ |
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF); |
} |
} |
shikoni rawtilt_pan_tracker_0.3.ino të hostuar me ❤ nga GitHub
Hapi 4: Montimi i zorrës së qarkut
- Sigurohuni që Ardiuno Pro Mini të futet në titujt në PCB.
- Vendosni bazën e kutisë së kontrolluesit SOLAR TRACKER në muret e kutisë së kontrolluesit SOLAR TRACKER dhe ngjiteni me 2 vida 4 fikse 4G x 6mm të pandryshkshme të vetë -përgjimit.
- Fut Ardiuno Pro Mini + PCB me 6P Header të çarë në zbrazëti në bazën e kutisë së kontrolluesit SOLAR TRACKER.
- Vendosni kapakun e kutisë së kontrolluesit SOLAR TRACKER në muret e kutisë së kontrolluesit SOLAR TRACKER dhe ngjiteni me 2 vida 4 fikse 4G x 6mm të kundër -zhytura të vetë -përgjimit.
- Vendoseni montimin sipër në bazën e Kornizës së Panelit me 4 vida 4G x 6mm inox të kundërsulmuara të vetë -përgjimit.
Hapi 5: Lidhja e drejtuesve të pajisjeve me kontrolluesin
Lidhjet përkatëse të gatshme nga Instructable e mëparshme, janë 4 lidhje 2P LDR dhe 2 lidhje 3P nga servos. Ajo që është e përkohshme derisa rimbushja të jetë gati është bateria. Përdorni një LiPo 3.7V që përfundon në një lidhje 2P DuPont tani për tani.
-
Futni lidhjet LDR (pa polaritet) nga lart:
- Lart djathtas
- Majtas lart
- Poshtë djathtas
- Poshtë majtas
-
Futni lidhjet Servo (me tela sinjali në të majtë) nga lart:
- Horizontale
- Vertikale
- PRIT DERI Gati për provë PASTAJ: Futni prizën 3.7V DC Power +ve në krye, -ve në fund.
Hapi 6: Testimi i kontrolluesit
Siç u tha më parë, softueri nuk është optimizuar për rrjedhën e punës të Ngarkimit Diellor. Mund të testohet dhe ndryshohet duke përdorur burime drite natyrale (dielli) dhe të panatyrshme.
Për të testuar gjurmimin në një mjedis të kontrolluar, mund të jetë i përshtatshëm vendosja e MINUTAVE SLEEP në një vlerë më të ulët (shiko hapin tjetër).
Hapi 7: Konfigurimi përmes I2C duke përdorur hyrjen e tastierës
Kjo shpjegon konfigurimin e kontrolluesit përmes një MCU të dytë, duke futur cilësimet në një dritare të tastierës.
- Ngarko skriptin e mëposhtëm në një D1M WIFI BLOCK (ose Wemos D1 Mini).
- Shkëputeni USB -në nga kompjuteri
-
LIDHJET PIN: -ve (Kontrollues) => GND (D1M)+ve (Kontrollues) => 3V3 (D1M) SCL (Kontrollues) => D1 (D1M)
SDA (Kontrolluesi) => D2 (D1M)
- Kthejeni çelësin SPDT në CONFIG
- Lidhni USB me PC
- Nga Arduino IDE filloni një dritare të tastierës me Portën e duhur COM
- Sigurohuni që të jenë zgjedhur "Newline" dhe "9600 baud"
- Komandat futen në Dërgo Kutinë e Tekstit e ndjekur nga tasti Enter
- Komandat janë në formatin Bajti i karaktereve
- Nëse bajti i dytë (segmenti i tretë) nuk është përfshirë 0 (zero) dërgohet nga skripti
- Kini kujdes duke përdorur hyrje serike; rishikoni atë që keni futur para se të shtypni butonin "Enter". Nëse jeni të kyçur (për shembull duke ndryshuar adresën I2C në një vlerë që keni harruar) do t'ju duhet të ndizni përsëri firmware -in e kontrolluesit.
Variacionet e mbështetura në karakterin e parë të komandës janë:
- E (Aktivizo përcjelljen servo) e dobishme për ndalimin e lëvizjes gjatë konfigurimit. Kjo futet duke përdorur: E 0
- D (Çaktivizo përcjelljen servo) e dobishme për të filluar gjurmimin automatik nëse nuk rindiz pajisjen. Kjo futet duke përdorur: D 0
- G (Merr vlerën e konfigurimit) lexon vlerat nga EEPROM dhe IN -MEMORY: Kjo futet duke përdorur: G (indeksi është i vlefshëm vlerat e bajtit 0 - 13 dhe 15)
- S (Vendos vlerën EEPROM) vendos vlera në EEPROM të cilat janë të disponueshme pas rindezjes. Kjo futet duke përdorur: S (indeksi është vlerë e vlefshme e bajtit 0 - 13, vlera është vlerë e vlefshme e bajtit dhe ndryshon për vetinë)
Kodi është pika e së vërtetës për indekset, por në vijim përdoret për një udhëzues për vlerat/komentet e vlefshme:
- I2C ADRESA 0 - adresa e skllavit të kontrolluesit, masterit i duhet kjo për të komunikuar me kontrolluesin (parazgjedhja 10)
- KGNDI MINIMUM VERTIKAL 1 - kufiri i poshtëm i servo vertikal i këndit (i parazgjedhur 10, diapazoni 0 - 180)
- KGNDI MAXIMUM VERTIKAL 2 - kufiri i sipërm i servo vertikal i këndit (parazgjedhur 170, diapazoni 0 - 180)
- SENSITIVITETI LDR VERTIKAL 3 - Diferenca vertikale e leximit të LDR (e parazgjedhur 20, diapazoni 0 - 1024)
- KGNDI VERTIKAL HAPI 4 - hapa servo vertikale me kënd në çdo rregullim (parazgjedhje 5, diapazoni 1 - 20)
- KGNDI MINIMUM HORIZONTAL 5 - kufiri i poshtëm i servo horizontale me kënd (i parazgjedhur 10, diapazoni 0 - 180)
- KGNDI MAXIMUM HORIZONTAL 6 - kufiri i sipërm i servo horizontale i këndit (parazgjedhur 170, diapazoni 0 - 180)
- Sensibiliteti LDR HORIZONTAL 7 - Diferenca e leximit LDR horizontale (e parazgjedhur 20, diapazoni 0 - 1024)
- HAPI HORIZONTAL HAPI 8 - hapa servo horizontale servo në çdo rregullim (parazgjedhje 5, diapazoni 1 - 20)
- SLEEP MINUTES 9 - periudha e përafërt e gjumit midis gjurmimit (parazgjedhja 20, diapazoni 1 - 255)
- KGNDI VARTIKAL I AUTIT 10 - P USRDORIMI I ARDHSHME - këndi vertikal për tu kthyer kur perëndon dielli
- KGNDI HORIZONTAL I Agimit 11 - P USRDORIMI I ARDHSHME - këndi horizontal për t'u kthyer kur perëndon dielli
- Intensiteti i Agimit 12 - P USRDORIMI I ARDHSHME - mesatarja minimale e të gjitha LDR -ve që shkakton fillimin e përcjelljes ditore të diellit
- Intensiteti i errësirës 13 - P USRDORIMI I ARDHMS - mesatarja minimale e të gjitha LDR -ve që shkakton përfundimin e përcjelljes ditore të diellit
- P ENDRFUNDIMI I VLERAVE T E EEPROM MARKER 14 - VLERA NUK P USRDORET
- Intensiteti aktual 15 - përqindja mesatare aktuale e intensitetit të dritës
- P ENDRFUNDIMI I VLERAVE P -R PEMRKUJTSORE SH MNIMI 16 - VLERA NUK P USRDORET.
Regjistron hyrjen serike (hyrja e tastierës në dritaren e tastierës) dhe e përcjell atë në një skllav I2C në formatin char, bajt, bajt
#përfshi |
#përcaktoI2C_MSG_IN_SIZE2 |
#përcaktoI2C_MSG_OUT_SIZE3 |
#përcaktoI2C_SLAVE_ADDRESS10 |
boolean _newData = false; |
const byte _numChars = 32; |
char _receivedChars [_numChars]; // një grup për të ruajtur të dhënat e marra |
voidsetup () { |
Serial.filloj (9600); |
Wire.begin (D2, D1); |
vonesa (5000); |
} |
voidloop () { |
recvWithEndMarker (); |
parseSendCommands (); |
} |
voidrecvWithEndMarker () { |
bajt statik ndx = 0; |
char endMarker = '\ n'; |
char rc; |
ndërsa (Serial. i disponueshëm ()> 0 && _newData == false) { |
rc = Serial.read (); |
nëse (rc! = endMarker) { |
_receivedChars [ndx] = rc; |
ndx ++; |
nëse (ndx> = _numChars) { |
ndx = _numriChars - 1; |
} |
} tjetër { |
_receivedChars [ndx] = '\ 0'; // përfundoni vargun |
ndx = 0; |
_newData = e vërtetë; |
} |
} |
} |
voidparseSendCommands () { |
nëse (_newData == e vërtetë) { |
konstrukt delim [2] = ""; |
shenjë char *; |
shenjë = strtok (_pranoiChars, delim); |
char cmd = _pranuarChars [0]; |
indeksi i bajtit = 0; |
vlera e bajtit = 0; |
int i = 0; |
ndërsa (shenjë! = NULL) { |
//Serial.println (e thënë); |
i ++; |
kaloni (i) { |
rasti 1: |
token = strtok (NULL, delim); |
indeks = atoi (shenjë); |
pushim; |
rasti 2: |
token = strtok (NULL, delim); |
nëse (shenjë! = NULL) { |
vlera = atoi (shenjë); |
} |
pushim; |
parazgjedhje: |
shenjë = NULL; |
} |
} |
sendCmd (cmd, indeksi, vlera); |
_newData = false; |
} |
} |
voidsendCmd (char cmd, indeksi i bajtit, vlera e bajtit) { |
Serial.println ("-----"); |
Serial.println ("Dërgimi i komandës:"); |
Serial.println ("\ t" + varg (cmd) + "" + varg (indeks) + "" + varg (vlerë)); |
Serial.println ("-----"); |
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // transmetoni në pajisje |
Tela.shkruaj (cmd); // dërgon një shenjë |
Wire.write (indeksi); // dërgon një bajt |
Wire.write (vlera); // dërgon një bajt |
Wire.endTransmission (); |
përgjigje byte = 0; |
bool hadResponse = false; |
nëse (cmd == 'G') { |
Tela. KërkohetNga (I2C_SLAVE_ADDRESS, 1); |
ndërsa (Wire.available ()) // skllavi mund të dërgojë më pak se sa kërkohet |
{ |
hadResponse = e vërtetë; |
përgjigje = Wire.read (); |
} |
nëse (hadResponse == e vërtetë) { |
Serial.println ("Marrja e përgjigjes:"); |
Serial.println (përgjigje); |
} tjetër { |
Serial.println ("Asnjë përgjigje, kontrolloni adresën/lidhjen"); |
} |
} |
} |
shiko rawd1m_serial_input_i2c_char_byte_byte_v0.1.ino pritur me ❤ nga GitHub
Hapi 8: Hapat e ardhshëm
Kontrolloni periodikisht për të kontrolluar ndryshimet në softuer/harduer.
Ndryshoni softuerin/harduerin sipas kërkesave tuaja.
Komentoni çdo kërkesë/optimizim.
Recommended:
Regjistruesi i shpejtësisë së erës dhe rrezatimit diellor: 3 hapa (me fotografi)
Regjistruesi i shpejtësisë së erës dhe rrezatimit diellor: Më duhet të regjistroj shpejtësinë e erës dhe fuqinë e rrezatimit diellor (rrezatimi) në mënyrë që të vlerësoj se sa fuqi mund të nxirret me një turbinë me erë dhe/ose panele diellore. Do të mat për një vit, analizoj të dhënat dhe më pas hartoni një sistem jashtë rrjeti
Inverteri diellor më efikas jashtë rrjetit në botë: 3 hapa (me fotografi)
Inverteri diellor më efikas jashtë rrjetit në botë: Fuqia diellore është e ardhmja. Panelet mund të zgjasin për shumë dekada. Le të themi se keni një sistem diellor jashtë rrjetit. Ju keni një frigorifer/frigorifer dhe një mori gjërash të tjera për të punuar në kabinën tuaj të bukur të largët. Ju nuk mund të përballoni të hidhni energji!
Drita (et) LED me bateri me karikim diellor: 11 hapa (me fotografi)
Drita LED me bateri me karikim diellor: Gruaja ime u mëson njerëzve se si të bëjnë sapun, shumica e klasave të saj ishin në mbrëmje dhe këtu në dimër errësohet rreth orës 16:30, disa nga studentët e saj kishin probleme për të gjetur shtëpi. Kishim një shenjë para, por edhe me një lig të rrugës
Kopshti diellor Dritat në një sistem diellor më të madh: 6 hapa
Dritat Diellore të Kopshtit në një Sistem Diellor më të Madh: Unë po kërkoja një sistem ndriçimi të kopshtit 12v për oborrin tim. Ndërsa kërkoja në internet për sistemet asgjë nuk më kapi vërtet dhe nuk e dija se në cilën rrugë doja të shkoja. Nëse duhet të përdor një transformator në fuqinë time kryesore ose të shkoj në sistemin diellor. Une gjithmone
Pajisja e rrezatimit diellor (SID): një sensor diellor i bazuar në Arduino: 9 hapa
Pajisja e rrezatimit diellor (SID): një sensor diellor i bazuar në Arduino: Pajisja e rrezatimit diellor (SID) mat shkëlqimin e diellit dhe është krijuar posaçërisht për t'u përdorur në klasë. Ato janë ndërtuar duke përdorur Arduinos, i cili u lejon atyre të krijohen nga të gjithë, nga studentët e mesëm të rinj deri tek të rriturit. Ky inst