Indholdsfortegnelse:
- Trin 1: Materialer og værktøjer
- Trin 2: Samling af kredsløbet
- Trin 3: Blinker MCU'en
- Trin 4: Montering af kredsløbshuset
- Trin 5: Tilslutning af Rig Leads til controlleren
- Trin 6: Test af controlleren
- Trin 7: Konfiguration via I2C ved hjælp af konsolindgang
- Trin 8: Næste trin
Video: IOT123 - SOLAR TRACKER - CONTROLLER: 8 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Dette er en forlængelse af Instructable
IOT123 - SOLAR TRACKER - TILT/PAN, PANEL RAM, LDR MOUNTS RIG. Her koncentrerer vi os om servoenes controller og sensorer af solens position. Det er vigtigt at påpege, at dette design forudsætter, at der bruges 2 MCU'er: en (3,3V 8mHz Arduino Pro Mini) til solar trackeren og en uafhængig MCU til dine sensorer/aktører.
Dette er version 0.3
I stedet for at offentliggøre alle projekterne efter fuld tilfredshed, vil jeg øve kontinuerlig integration og levere noget oftere og ændre det, jeg har leveret, efter behov. Jeg vil skrive en anden instruerbar til batteriopladeren, _når_ optimeringen af controllersoftwaren/hardwaren er fuldført. Jeg vil påpege, hvor optimeringerne er nødvendige, når vi går igennem dette.
En del af grunden til denne tilgang er klientfeedback. Hvis du ser et behov eller har en bedre tilgang, bedes du kommentere, men husk, at jeg ikke kan levere alt og muligvis ikke til en tidsramme, der passer dig. Da disse forklaringer synes mindre relevante, vil de blive slettet fra denne artikel.
Hvad dette omfatter:
- Brug LDR'erne fra den originale Instructable til at mærke solens omtrentlige placering.
- Flyt servoerne mod solen.
- Muligheder for bevægelsens følsomhed.
- Muligheder for trinstørrelsen, når du flytter til solen.
- Muligheder for de vinkelbegrænsninger, der bruges på servoerne.
- Muligheder for forsinkelser af bevægelserne.
- I2C -interface til indstilling/hentning af værdier mellem MCU'er.
- Dyb søvn mellem bevægelser.
Hvad dette ikke inkluderer (og vil blive behandlet, når tiden tillader det):
- Brug kun strøm i dagslys.
- Husker daggrypositionen og gik der i skumringen.
- Fjernelse af regulatoren fra MCU'en.
- Deaktivering af LED (er) på MCU'en.
- Omdirigerer strømmen via VCC frem for RAW.
- Tilbyder løsninger til at blinke uden reguleret strøm fra USB til seriel TTL -konverter.
- Batterispændingsmonitor.
HISTORIE
20. dec. 2017 V0.1 KODE
Den oprindelige version sporer lyskilden, altid tændt, ingen opladning
7. jan. 2018 V0.2 KODE
-
HARDWARE ÆNDRINGER
- Tilføj I2C -ben
- Tilføj switch til servo GND'er
- Trykt etiket på controller boks fascia
-
SOFTWARE ÆNDRINGER
- Læs konfiguration fra EEPROM
- I2C busstøtte som slave til en anden MCU (3.3V)
- Indstil konfiguration via I2C
- Indstil aktiveret via I2C
- Få konfiguration via I2C
- Få egenskaber for runtime via I2C (aktuelt aktiveret og aktuel lysintensitet)
- Fjern seriel logning (det påvirkede I2C -værdier)
19. jan. 2018 V0.3 KODE
-
HARDWARE
Etiket opdateret. Omskifteren bruges nu til at vælge enten CONFIG- eller TRACK -tilstand
-
SOFTWARE
- I2C bruges kun til konfiguration
- Controlleren venter 5 sekunder før initialisering af sporing, giver mulighed for at flytte hænder
- For at bruge I2C -konfiguration skal SPDT være på CONFIG som enhedsstøvler
- Mellem sporingsbevægelsen er enheden i dyb dvaletilstand for konfigurationsværdien SLEEP MINUTES (standard 20 minutter).
Trin 1: Materialer og værktøjer
Der er nu en fuld liste over materialer og kilder.
- 3D -printede dele.
- Arduino Pro Mini 3.3V 8mHz
- 1 af 4x6cm dobbeltsideprototype PCB universal printkort (skal skæres i halve)
- 1 off 40P hanhoved (skal skæres i størrelse).
- 1 off 40P kvindelig header (skal skæres i størrelse).
- 4 off 10K 1/4W restistorer.
- Tilslutningstråd.
- Lodde og jern.
- 20 off 4G x 6 mm rustfrie pandehoved selvskærende skruer.
- 4 off 4G x 6 mm rustfrit forsænket selvskærende skruer.
- 1 slukket 3,7V LiPo -batteri og holder (slutter i 2P dupont -stik).
- 1 off 2P hanhøjrehoved
- 1 off SPDT switch 3 pin 2,54 mm pitch
- Kraftig cyanoacrylatlim
- Dupont -stik hun 1P header (1 off blue, 1 off green).
Trin 2: Samling af kredsløbet
Kredsløbet har i øjeblikket ikke Voltage Divider Circuit (voltmeter).
- Skær 4x6cm dobbeltsideprototype PCB -universelt printkort i halve på tværs af den lange akse.
-
Skær 40P hanhovedet i stykker:
- 2 fra 12P
- 3 fra 3P
- 6 fra 2P.
-
Skær 40P hunhovedet i stykker:
- 2 fra 12P
- 1 fra 6P
- Lodde 2 fra 12 Kvindeoverskrift som vist.
- Lim afstandsstykket fjernet fra en 3P han (ekstra) header på undersiden af SPDT -kontakten med cyanoacrylatlim
- På den anden side skal du derefter lodde 6 fra 2P, 2 fra 3Pmale header og SPDT -kontakten som vist.
- Lodde 4 fra 10K modstande (A, B, C, D sort) via ledning til GND pin header (#2 sort) og til A0 - A3 header pins (#5, #6, #7, #8) derefter gennem hul (gul) som vist (3 fotos + 1 diagram).
- Spor 3.3V fra LDR PINS lodning PINS #4, #6, #8, #10 og træk hullet til feamale header VCC pin (grøn).
- Spor 3.3V på kvindelig overskriftsside som vist (rød) lodning til PINS #1, #12, #15.
- 3.3V gennem hul, loddet på siden (rød) RAW header PIN #1.
- Spor orange tilslutning fra PIN #11 gennem hul til lodning Kvindestift på den anden side som vist.
- Spor og loddet blåt tilslutningstråd fra #20 til #30 og fra #31 til #13 og #16.
- Lodde Kvinde Header PIN #11 til Male Header PIN #11 gennem hul.
- Forbered 2 dupont -stik 30 mm langt med 1P kvindelig header (1 off blå, 1 off green). Striml og hæld den anden ende.
- Loddemetal blå Dupont wire til #28; loddet grønt Dupont wire til #29.
- På toppen af Arduino fastgør 6P hunhovedet derefter loddetin.
- På toppen af Arduino fastgør 2P retvinklet kvindelig overskrift int #29 og #30 derefter loddetin.
- På undersiden af Arduino fastgør du 2 af 12P og 1 off 3P hanstifter og lodder derefter.
- Sæt Arduino han 12P pins i PCB 12P hunhoveder.
Trin 3: Blinker MCU'en
Arduino Pro Mini blinker bekvemt ved hjælp af en FTDI232 USB til TTL -konverter ved hjælp af 6P kvindelig header. Se billedet ovenfor for justering af de 2 brædder.
Sørg for, at 3.3V -indstillingen er valgt på din FTDI232. Følg instruktionerne her ved hjælp af koden herunder (brug link til GIST).
Lowpower-biblioteket (vedhæftet og https://github.com/rocketscream/Low-Power) skal installeres.
Når Arduino Pro Mini + PCB er installeret i kabinettet, kan det stadig blinke, når overskriftsstifterne udsættes. Afbryd bare controllerenheden fra panelrammen, hvor hovedet vises.
Tilt pan solar tracker med I2C/EEPROM konfiguration og søvncyklus mellem bevægelser. Søvncyklussens varighed præcision falder, når varigheden øges, men tilstrækkelig til dette formål
/* |
* ændret fra kode |
* af Mathias Leroy |
* |
* V0.2 ÆNDRINGER |
** I2C SET GET |
** EEPROM SET GET |
** FJERN SERIALUTGANG - BERØRET I2C |
** Aktiver/deaktiveret sporing |
** FLYT SERVOS TIL GRÆNSER VIA I2C |
** LÆS AKTUEL AVG INTENSITET VIA I2C |
* V0.3 ÆNDRINGER |
** SKIFT TIL 2 TILSTAND - TRACK (NO I2C) og CONFIGURE (USES I2C) |
** SOV I SPORETILSTAND (MEGET LAV PRÆCISION PÅ 8 ANDRE CHUNKS) |
** DETACH/SÆT SERVOS PÅ SLEEP/WAKE (TRANSISTOR BRUGES EVENTUELT) |
** FJERN KONFIGURERBAR OPGANGSPOSITION (REDUNDANT) |
** FJERN KONFIGURERBARE WAKE SECONDS (REDUNDANT) |
** FJERN KONFIGURERBAR AKTIVER/Deaktiver (REDUNDANT) |
** FJERN KONFIGURERBAR TRACKER AKTIVERET (BRUG HARDWARESKIFT) |
** FJERN SPÆNDNINGSGETTER - VIL BRUGE SEPARAT I2C -KOMPONENT |
** TILFØJ SERIELOGGING, NÅR I2C IKKE BRUGES |
*/ |
#omfatte |
#omfatte |
#omfatte |
#omfatte |
#omfatte |
#defineEEPROM_VERSION1 |
#defineI2C_MSG_IN_SIZE3 |
#definePIN_LDR_TL A0 |
#definePIN_LDR_TR A1 |
#definePIN_LDR_BR A3 |
#definePIN_LDR_BL A2 |
#definerePIN_SERVO_V11 |
#definerePIN_SERVO_H5 |
#definereIDX_I2C_ADDR0 |
#definereIDX_V_ANGLE_MIN1 |
#definereIDX_V_ANGLE_MAX2 |
#definereIDX_V_SENSITIVITY3 |
#definereIDX_V_STEP4 |
#definereIDX_H_ANGLE_MIN5 |
#definereIDX_H_ANGLE_MAX6 |
#defineIDX_H_SENSITIVITY7 |
#definereIDX_H_STEP8 |
#definereIDX_SLEEP_MINUTES9 |
#definereIDX_V_DAWN_ANGLE10 |
#definereIDX_H_DAWN_ANGLE11 |
#defineIDX_DAWN_INTENSITY12 // gennemsnit af alle LDRS |
#defineIDX_DUSK_INTENSITY13 // gennemsnit af alle LDRS |
#definereIDX_END_EEPROM_SET14 |
#defineIDX_CURRENT_INTENSITY15 // gennemsnit af alle LDRS - bruges til at beregne IDX_DAWN_INTENSITY ambiant ikke -direkte lys |
#definereIDX_END_VALUES_GET16 |
#definereIDX_SIGN_117 |
#definereIDX_SIGN_218 |
#definereIDX_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 = falsk; |
voidsetup () |
{ |
Serial.begin (115200); |
getFromEeprom (); |
hvis (inConfigMode ()) { |
Serial.println ("Config Mode"); |
Serial.print ("I2C -adresse:"); |
Serial.println (_i2cVals [IDX_I2C_ADDR]); |
Wire.begin (_i2cVals [IDX_I2C_ADDR]); |
Wire.onReceive (modtageevent); |
Wire.onRequest (requestEvent); |
}andet{ |
Serial.println ("Sporingstilstand"); |
forsinkelse (5000); // tid til at få hænderne af vejen, når batteriet tilsluttes osv. |
} |
} |
voidloop () |
{ |
getLightValues (); |
hvis (! _inConfigMode) { |
// ToDo: TÆND FOR TRANSISTORSKIFT |
_servoH.attach (PIN_SERVO_H); |
_servoV.attach (PIN_SERVO_V); |
for (int i = 0; i <20; i ++) { |
hvis (i! = 0) { |
getLightValues (); |
} |
moveServos (); |
} |
forsinkelse (500); |
_servoH.detach (); |
_servoV.detach (); |
// ToDo: SLUK TRANSISTORSKIFT |
forsinkelse (500); |
sleepFor ((_ i2cVals [IDX_SLEEP_MINUTES] * 60) / 8); |
} |
} |
// --------------------------------- AKTUEL TILSTAND |
boolinConfigMode () { |
pinMode (PIN_SERVO_H, INPUT); |
_inConfigMode = digitalRead (PIN_SERVO_H) == 1; |
return _inConfigMode; |
} |
// --------------------------------- EEPROM |
voidgetFromEeprom () { |
hvis( |
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); |
//Serial.println(String(i) + "=" + _i2cVals ); |
} |
} |
// --------------------------------- I2C |
voidreceiveEvent (int count) { |
hvis (count == I2C_MSG_IN_SIZE) |
{ |
char cmd = Wire.read (); |
byte indeks = Wire.read (); |
byte værdi = Wire.read (); |
switch (cmd) { |
case'G ': |
hvis (indeks <IDX_END_VALUES_GET) { |
_i2cResponse = _i2cVals [indeks]; |
} |
pause; |
sagens: |
hvis (indeks <IDX_END_EEPROM_SET) { |
_i2cVals [indeks] = værdi; |
EEPROM.update (indeks, _i2cVals [indeks]); |
} |
pause; |
Standard: |
Vend tilbage; |
} |
} |
} |
voidrequestEvent () |
{ |
Wire.write (_i2cResponse); |
} |
// --------------------------------- LDR'er |
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] = map (avgIntensity, 0, 1024, 0, 255); |
} |
// --------------------------------- SERVOS |
voidmoveServos () { |
Serial.println ("moveServos"); |
hvis ((_averageLeft-_averageRight)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH-_i2cVals [IDX_H_STEP])> _ i2cVals [IDX_H_ANGLE_MIN]) { |
// gå til venstre |
Serial.println ("moveServos går til venstre"); |
forsinkelse (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) { |
_servoH.write (_angleH--); |
forsinkelse (_servoLoopDelay); |
} |
} |
elseif ((_averageRight-_averageLeft)> _ i2cVals [IDX_H_SENSITIVITY] && (_angleH+_i2cVals [IDX_H_STEP]) <_ i2cVals [IDX_H_ANGLE_MAX]) { |
// går rigtigt |
Serial.println ("moveServos går til venstre"); |
forsinkelse (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_H_STEP]; i ++) { |
_servoH.write (_angleH ++); |
forsinkelse (_servoLoopDelay); |
} |
} |
andet { |
// laver ingenting |
Serial.println ("moveServos gør ingenting"); |
forsinkelse (_slowingDelay); |
} |
hvis ((_averageTop-_averageBottom)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV+_i2cVals [IDX_V_STEP]) <_ i2cVals [IDX_V_ANGLE_MAX]) { |
// går op |
Serial.println ("moveServos går op"); |
forsinkelse (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) { |
_servoV.write (_angleV ++); |
forsinkelse (_servoLoopDelay); |
} |
} |
elseif ((_averageBottom-_averageTop)> _ i2cVals [IDX_V_SENSITIVITY] && (_angleV-_i2cVals [IDX_V_STEP])> _ i2cVals [IDX_V_ANGLE_MIN]) { |
// går ned |
Serial.println ("moveServos går ned"); |
forsinkelse (_slowingDelay); |
for (int i = 0; i <_i2cVals [IDX_V_STEP]; i ++) { |
_servoV.write (_angleV--); |
forsinkelse (_servoLoopDelay); |
} |
} |
andet { |
Serial.println ("moveServos gør ingenting"); |
forsinkelse (_slowingDelay); |
} |
} |
//---------------------------------SØVN |
voidasleepFor (unsignedint eightSecondSegments) { |
Serial.println ("sleepFor"); |
for (unsignedint sleepCounter = eightSecondSegments; sleepCounter> 0; sleepCounter--) |
{ |
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF); |
} |
} |
se rawtilt_pan_tracker_0.3.ino hostet af ❤ af GitHub
Trin 4: Montering af kredsløbshuset
- Sørg for, at Ardiuno Pro Mini er indsat i overskrifterne på printkortet.
- Sæt SOLAR TRACKER -controllerboksens base i SOLAR TRACKER -controllerboksens vægge, og fastgør med 2 off 4G x 6mm forsænkede selvskærende skruer.
- Sæt Ardiuno Pro Mini + PCB med 6P Header i hullet i SOLAR TRACKER controller box base.
- Sæt låget til SOLAR TRACKER -controllerboksen i SOLAR TRACKER -controllerboksens vægge, og fastgør med 2 off 4G x 6 mm selvforsænkende skruer i rustfrit forsænket.
- Fastgør forsamlingen ovenfor til bunden af panelrammen med 4 off 4G x 6 mm forsænket selvskærende skruer.
Trin 5: Tilslutning af Rig Leads til controlleren
De relevante forbindelser, der er klar fra den tidligere instruerbare, er 4 fra 2P LDR -forbindelser og 2 fra 3P -forbindelser fra servoerne. Det, der er midlertidigt, indtil opladningen er klar, er batteriet. Brug en 3,7V LiPo, der afsluttes i en 2P DuPont -forbindelse for nu.
-
Indsæt LDR -forbindelserne (ingen polaritet) ovenfra:
- Øverst til højre
- Øverst til venstre
- Nederst til højre
- Nederst til venstre
-
Indsæt Servo -forbindelserne (med signalkablet til venstre) ovenfra:
- Vandret
- Lodret
- VENT TIL Klar til test derefter: Indsæt 3,7V DC strømkabel +ve til toppen, -ve til bunden.
Trin 6: Test af controlleren
Som tidligere nævnt er softwaren ikke optimeret til Solar Charging workflow. Det kan dog testes og finjusteres ved hjælp af naturlige (sol) og unaturlige lyskilder.
For at teste sporing i et kontrolleret miljø kan det være praktisk at indstille SLEEP MINUTES til en lavere værdi (se næste trin).
Trin 7: Konfiguration via I2C ved hjælp af konsolindgang
Dette forklarer konfiguration af controlleren via en anden MCU, indtastning af indstillinger i et konsolvindue.
- Upload følgende script til en D1M WIFI BLOCK (eller Wemos D1 Mini).
- Afbryd USB fra pc'en
-
PIN-TILSLUTNINGER: -ve (Controller) => GND (D1M)+ve (Controller) => 3V3 (D1M) SCL (Controller) => D1 (D1M)
SDA (controller) => D2 (D1M)
- Drej SPDT -kontakten til CONFIG
- Tilslut USB til pc
- Start et konsolvindue med den korrekte COM -port fra Arduino IDE
- Sørg for, at "Newline" og "9600 baud" er valgt
- Kommandoerne bliver indtastet i tekstboksen Send efterfulgt af Enter -tasten
- Kommandoerne er i formatet Tegnbyte -byte
- Hvis den anden byte (tredje segment) ikke er inkluderet, sendes 0 (nul) af scriptet
- Vær forsigtig med at bruge seriel input; gennemgå, hvad du har indtastet, inden du trykker på "Enter" -tasten. Hvis du er låst ude (f.eks. Ændring af I2C -adressen til en værdi, du har glemt), skal du blinke controllerens firmware igen.
De understøttede variationer i kommandoens første tegn er:
- E (Aktiver servosporing) nyttig til at standse bevægelse under konfiguration. Dette indtastes ved hjælp af: E 0
- D (Deaktiver servosporing) nyttig til at starte automatisk sporing, hvis enheden ikke genstartes. Dette indtastes ved hjælp af: D 0
- G (Hent konfigurationsværdi) læser værdier fra EEPROM og IN -MEMORY: Dette indtastes ved hjælp af: G (indeks er gyldige byteværdier 0 - 13 og 15)
- S (Indstil EEPROM -værdi) indstiller værdier til EEPROM, som er tilgængelige efter genstart. Dette indtastes ved hjælp af: S (indeks er gyldige byteværdier 0 - 13, værdien er gyldige byteværdier og varierer pr. Egenskab)
Koden er sandhedens punkt for indekserne, men følgende bruges til en vejledning til gyldige værdier/kommentarer:
- I2C ADRESSE 0 - controller -slave -adresse, masteren har brug for dette for at kommunikere med controlleren (standard 10)
- MINIMUM VERTIKAL VINKEL 1 - lodret vinkel på servo nedre grænse (standard 10, område 0 - 180)
- MAKSIMAL VERTIKAL VINKEL 2 - vertikal vinkel på servo øvre grænse (standard 170, område 0 - 180)
- SENSITIVITET VERTICAL LDR 3 - Vertikal LDR -læsemargin (standard 20, område 0 - 1024)
- VERTIKALVINKEL TRIN 4 - lodrette vinkel servotrin ved hver justering (standard 5, område 1 - 20)
- MINIMUM HORIZONTAL VINKEL 5 - vinkel horisontal servo nedre grænse (standard 10, område 0 - 180)
- MAKSIMAL HORIZONTAL VINKEL 6 - vandret horisontal servo øvre grænse (standard 170, område 0 - 180)
- Følsomhed HORIZONTAL LDR 7 - Horisontal LDR -læsemargin (standard 20, område 0 - 1024)
- HORISONTAL VINKEL TRIN 8 - vandrette horisontale servotrin ved hver justering (standard 5, område 1-20)
- SLEEP MINUTES 9 - den omtrentlige søvnperiode mellem tracking (standard 20, område 1 - 255)
- VERTICAL DAWN ANGLE 10 - FREMTIDIG BRUG - den lodrette vinkel at vende tilbage til, når solen går ned
- HORIZONTAL DAWN ANGLE 11 - FREMTIDIG BRUG - den vandrette vinkel at vende tilbage til når solen går ned
- DAWN INTENSITY 12 - FREMTIDIG BRUG - minimumsgennemsnittet for alle LDR'er, der udløser en start på daglig solsporing
- DUSK INTENSITY 13 - FREMTIDIG BRUG - minimumsgennemsnittet for alle LDR'er, der udløser en afslutning på daglig solsporing
- AFSLUTNING AF EEPROM VÆRDIER MÆRKER 14 - VÆRDI IKKE BRUGT
- AKTUEL INTENSITET 15 - den aktuelle gennemsnitlige procentdel af lysintensiteten
- AFSLUT PÅ HUSMÆRKESVÆRDIER MÆRKER 16 - VÆRDI IKKE BRUGT.
Fanger seriel input (tastaturindgang i konsolvinduet) og videresender det til en I2C -slave i formatet char, byte, byte
#omfatte |
#defineI2C_MSG_IN_SIZE2 |
#defineI2C_MSG_OUT_SIZE3 |
#defineI2C_SLAVE_ADDRESS10 |
boolsk _newData = falsk; |
const byte _numChars = 32; |
char _receivedChars [_numChars]; // en matrix til lagring af de modtagne data |
voidsetup () { |
Serial.begin (9600); |
Wire.begin (D2, D1); |
forsinkelse (5000); |
} |
voidloop () { |
recvWithEndMarker (); |
parseSendCommands (); |
} |
voidrecvWithEndMarker () { |
statisk byte ndx = 0; |
char endMarker = '\ n'; |
char rc; |
mens (Serial.available ()> 0 && _newData == false) { |
rc = Serial.read (); |
hvis (rc! = endMarker) { |
_receivedChars [ndx] = rc; |
ndx ++; |
hvis (ndx> = _numChars) { |
ndx = _numChars - 1; |
} |
} andet { |
_receivedChars [ndx] = '\ 0'; // afslut strengen |
ndx = 0; |
_newData = true; |
} |
} |
} |
voidparseSendCommands () { |
hvis (_newData == true) { |
constchar delim [2] = ""; |
char *token; |
token = strtok (_receivedChars, delim); |
char cmd = _receivedChars [0]; |
byte indeks = 0; |
byte værdi = 0; |
int i = 0; |
mens (token! = NULL) { |
//Serial.println(token); |
i ++; |
skift (i) { |
case1: |
token = strtok (NULL, delim); |
indeks = atoi (token); |
pause; |
case2: |
token = strtok (NULL, delim); |
hvis (token! = NULL) { |
værdi = atoi (token); |
} |
pause; |
Standard: |
token = NULL; |
} |
} |
sendCmd (cmd, indeks, værdi); |
_newData = falsk; |
} |
} |
voidsendCmd (char cmd, byte indeks, byte værdi) { |
Serial.println ("-----"); |
Serial.println ("Sender kommando:"); |
Serial.println ("\ t" + streng (cmd) + "" + streng (indeks) + "" + streng (værdi)); |
Serial.println ("-----"); |
Wire.beginTransmission (I2C_SLAVE_ADDRESS); // overføre til enhed |
Wire.write (cmd); // sender en forkælelse |
Wire.write (indeks); // sender en byte |
Wire.write (værdi); // sender en byte |
Wire.endTransmission (); |
bytesvar = 0; |
bool hadResponse = false; |
hvis (cmd == 'G') { |
Wire.requestFrom (I2C_SLAVE_ADDRESS, 1); |
mens (Wire.available ()) // slave kan sende mindre end ønsket |
{ |
hadResponse = true; |
svar = Wire.read (); |
} |
hvis (hadResponse == true) { |
Serial.println ("Få svar:"); |
Serial.println (svar); |
}andet{ |
Serial.println ("Intet svar, tjek adressen/forbindelsen"); |
} |
} |
} |
se rawd1m_serial_input_i2c_char_byte_byte_v0.1.ino hostet med ❤ af GitHub
Trin 8: Næste trin
Tjek regelmæssigt tilbage for at kontrollere, om der er ændringer i software/hardware.
Rediger softwaren/hardwaren til dine krav.
Kommenter eventuelle anmodninger/optimeringer.
Anbefalede:
GPS -tracker: 6 trin
GPS -tracker: Hey fyre i denne video laver vi en GPS -tracker ved hjælp af Esp 8266 (nodemcu) og et neo 6m GPS -modul, så lad os komme i gang
LoRa GPS Tracker Tutorial - LoRaWAN Med Dragino og TTN: 7 trin
LoRa GPS Tracker Tutorial | LoRaWAN Med Dragino og TTN: Hey, hvad sker der, fyre! Akarsh her fra CETech. Et par projekter tilbage kiggede vi på LoRaWAN Gateway fra Dragino. Vi forbandt forskellige noder til Gateway og overførte data fra noderne til Gateway ved hjælp af TheThingsNetwork som s
Desktop COVID19 -tracker med ur! Raspberry Pi Powered Tracker: 6 trin
Desktop COVID19 -tracker med ur! Raspberry Pi Powered Tracker: Vi ved, at vi kan dø når som helst, selv jeg kan dø, mens jeg skriver dette indlæg, trods alt, jeg mig, du, vi er alle dødelige. Hele verden rystede på grund af COVID19 -pandemien. Vi ved, hvordan vi kan forhindre dette, men hej! vi ved, hvordan vi skal bede, og hvorfor vi skal bede, gør vi det
Akustisk levitation med Arduino Uno trin for trin (8 trin): 8 trin
Akustisk levitation med Arduino Uno Step-by Step (8-trin): ultralyds lydtransducere L298N Dc kvindelig adapter strømforsyning med en han-DC-pin Arduino UNOBreadboard Sådan fungerer det: Først uploader du kode til Arduino Uno (det er en mikrokontroller udstyret med digital og analoge porte til konvertering af kode (C ++)
Movie Tracker - Raspberry Pi Powered Theatrical Release Tracker: 15 trin (med billeder)
Movie Tracker - Raspberry Pi Powered Theatrical Release Tracker: Movie Tracker er et clapperboard -formet, Raspberry Pi -powered Release Tracker. Den bruger TMDb API til at udskrive plakaten, titlen, udgivelsesdatoen og oversigten over kommende film i din region i et bestemt tidsinterval (f.eks. Filmudgivelser i denne uge) den