Tässä on aurinkopanelin ohjaus

==
Tässä on toinen aurinkokennon säätölaiteisto.
Se ei tarvitse mitään akkua, kun aurinko paistaa jompikumpi pystykennoista saa enemmän virtaa ja kääntää panelia siten, että kolemmat kennot saavat yhtä paljon virtaa.
Sama juttu vaaka suuntaan.
Tässä laitteessa ei tarvita lainkaan prosessoria.
Huomaa, ettö mittausvalokennojen + ja - nastat on kytektty vastakkain.

Moottori löytyy vaikka täältä
https://www.banggood.com/N20-DC-Gear-Motor-Miniature-High-Torque-Electric-Gear-Box-Motor-p-924377.html?rmmds=search&ID=512745&cur_warehouse=CN
Katso kuinka aurinkokenno toimii
https://www.youtube.com/watch?v=wL9PcGu_xrA
Tässä on tuon ensimmäisen laitteen GreatCoWBasic ohjelma PIC16F886:lle
'Aurinkopaneli ohjelma
' Tämän laitteen hardware on esitetty http://remotesmart.wikidot.com/aurinko-panelinohjaus
''Siinä on 12V akku, jota ladataan aurinkokennolla
'12V:ll on 7805 regulaattori, joka antaa sähkön PIC16F886, jossa on sisäien 8MHz oskillattori
'PIC16F886:ssa kiinni kaksi LCD-vastusta ja niillä on 10k vastukset +5V
' näistä LCD:tä lasketaan erotukset ja sen mukaan ohjataan aurinkopanelia oikealle ja vasemmalle.
' Kun tulee ilta niin kummastaan lcd:tä ei tule kunnolla valoa ja laitettaan releet lepotilaan 10 minuutiksi kerrallaan
'Aurinkopanelin kääntömoottoria ajatetaan PIC16886 B-porttiin kiinnitetyllä ULN2803. Siinä on diodit releille
'--------------------------
'@author Pekka Ritamaki
'@date 7.2.2022
'
' c:\gcb@syn\probyte\aurinkopaneli.gcb
; -— Configuration chip and frquency in MHz
#chip 16F886, 8
#option explicit '
#config INTOSC_OSC_NOCLKOUT, BODEN_OFF 'tämä on tärkää GCB:ssä ja PICin sisäisessä oskillaattorissa
#define RS232Out PORTC.6 ' valitse sarjaliikenteen portti ulospäin, vielä 10k vastus ja BC847 transosori ennen RS232 liitimen nastaa 2
#define RS232In PORTC.7 ' valitse sarjaliikenteen portti sisäänpäin, RS232:n nastata 3 10k vastus ja BC847 transosori ennen PIC:n astaa PORTC.6
' Define the USART port
#define USART_BAUD_RATE 9600 ' määriteele Sarjaliikenteen nopeus
#define USART_BLOCKING 'If defined, this constant will cause the USART routines to wait until data can be sent or received.
#define USART_DELAY off 'This is the delay between characters.
#define SerInPort PORTC.7 ' valitse oikea sarjaportti ulospäin
#define SerOutPort PORTC.6 ' valitse oikea sarjaportti sisäämpäin
'Set pin directions
Dir SerOutPort Out '' valitse oikea sarjaportti ulospäin
Dir SerInPort In '' valitse oikea sarjaportti siäänpäin
Dir PortB Out '' B-portti ohjaa neljää relettä, kahta kerralla. laita koko portti annoksi
; define variabels
DIM ad_val1 as byte ' ADC0 muntimen arvo
DIM ad_val2 as byte ' ADC1 muntimen arvo
#define M0 as PORTB.0 ' moottori1
#define M1 as PORTB.1 ' moottori2
#define M2 as PORTB.2 ' moottori3
#define M3 as PORTB.3 ' moottori4
DIR PORTB.0 out ' tämä nasta on anto
DIR PORTB.1 out ' tämä nasta on anto
DIR PORTB.2 out ' tämä nasta on anto
DIR PORTB.3 out ' tämä nasta on anto
DIM summa as integer ' tähän lasketaan aurinoilmaisemen erot
'' tässä on muutama aliohjelma
'' ensimäinen aliohjelma pysäyttää kaikki relee 10 minuutiksi
sub pysayta
PORTB =0 ' laita kaikki B-portin annot nollille
HSerPrint "M=Seis" : HSERPRINTCRLF
WAIT 10 m 'pysäytä moottrinohjaus 10 minuutiksi
end sub
' mittaa LCD valovastuksen arvot ja vertaa
SUB readads ( ) ' lue ADC 0 ja 1 arvot ja laske niiden erotus 10 kertaa 1 s välein
DIM count as byte ' ota muutama muuttuja laskentaa varten
DIM ero as integer
Dir PORTA.0 In ' laita nämä nastat annoiksi
Dir PORTA.1 In ' laita nämä nastat annoiksi
DIM PIMEA as byte ' Kun on pimeä pitää pysäyttää siirto 10 min kerrallaan
DIM COUNT1 as byte ' Taas on vaikeuksia, negatiivisten lukujen kanssa
DIM COUNT2 as byte ' Taas on vaikeuksia, negatiivisten lukujen kanssa
#define pimearaja 200 ' maksimi pimeä on 255 , LCD on kytketttu portista maihin, Kun on täysin valoisaa, niin on 0V
summa =0 ' tässä on LCD:n summa
for count =0 to 10 ' mittaa adc arvot 10 kertaa kerrataa ja laske niiden erosta kessivarvo
ad_val1 = Readad(AN0) ' lue 1. ad-muunnin 0..255. Miten voi lukea 10 bitillä?
ad_val2 = Readad(AN1) ' lue 2. ad-muunnin 0..255
if ad_val1 > pimearaja then ' jos mittausarvo menee yli pimeärjan
PIMEA =1 'jos valo on jo yli pämeärajan, siis suurempin kun pimeäraja, laita Pimeä 1
end if
if ad_val2 > pimearaja then
PIMEA =PIMEA +1 ' jos valo on jo yli pämeärajan, siis suurempin kun pimeäraja, lissää Pimeärjaa 1:llä
end if
'' laske erotus
HSerPrint " M1= "
HSerPrint AD_Val1 : HSERPRINTCRLF
HSerPrint " M21= "
HSerPrint AD_Val2 : HSERPRINTCRLF
HSerSend 13
ero = AD_VAL1- AD_VAL2
summa = summa + ero ' laske erotuksen yhteen molemmat erikseen
wait 1 s ' odota mittauksia 1 s
next count ' tee mittaus uudestaan
Summa = Summa /10 'laske keeksiarvo
if PIMEA =2 then
HSerPrint "M=Seise ": HSERPRINTCRLF
pysayta 'mene pysyäyttämään mottorit
end if
end sub
' tässä on moottorin ohjaukset ULN2803 mikrpiirin ja releiden avulla.
Sub motorcontrol
PORTB =0 ' laita kaikki B-portin annot nollille
If summa < 0 then
PORTB.0 =1 ' laita enimmäinen rele M0 päälle, moottori saa + sähköä
PORTB.2 =1 'laita kolmas rele M2 päälle, moottori saa - sähköä
HSerPrint "M=Eteenpäin" : HSERPRINTCRLF
end if
If summa > 0 then
PORTB.1 =1 'laita toinen rele päälle, moottori M1 saa - sähköä
PORTB.3 =1 'laita Neljäs rele päälle, moottori M3 saa + sähköä
HSerPrint "M=Taakse" : HSERPRINTCRLF
end if
'laita kaikki releohjaukset 0:lle jos ei ole kumpikaan ohjaus päällä
end sub
' - Pääohjelma alkaa tästä.
Do Forever
HSerSend 13
HSerPrint "Probyte Aurinkopanelin ohjaus" : HSERPRINTCRLF
readads ' katso 1 minuutin LCD:n erotus
motorcontrol ' laita kaksi neljästä releestä päälle ja näin käännä mottoria oikealle tai vasemalle
HSerPrint "Ero="
HSerPrint summa : HSERPRINTCRLF
loop
Pekka OH3GDO





