Doddiin…
Arduino Uno + aloituspaketti tuli tilattua ja on tuossa nyt pyörinyt. Ledejä on vilkuteltu, potikan ja thermistorin arvoja luettu, servoja käännelty jne. yms. Youtuben varmaankin kaikki Arduino tutorialit on käyty läpi ja netistä löydettyjä “aloita tästä” oppaita on koodailtu ja selailtu. Kaikki ei tietenkään päässä pysy, mutta melkoisen hyvin perusteet hanskassa niin että tiedän mitä mikäkin kohta koodissa tekee / tarkoittaa.
Löysin erään toisen tekemän vastaavan projektin, otin siitä alustan ja muokkasin hieman. Sain nyt toimimaan servon liikkumisen lämpötilan mukaan + hienosäätö potikan avulla. Koodi ei vielä täysin aukene itselle, tutkiminen ja pohtiminen jatkuu.
Kyselenkin nyt seuraavaa…
Servo tuntuu helposti jäävän surisemaan koska ei pääse täysin haluamalleen kohdalle. Tämähän tietysti rasittaa servoa, joten olisiko askelmoottorin + potikan arvoa käyttäen asentotunnistus tässä kuitenkin kestävämpi / parempi ratkaisu? Mielipiteitä?
Koodi jolla nyt viimiseksi tullut kikkailtua ja jonka sisältöä selvittelen on tässä:
#include <Servo.h>
Servo myservo;
unsigned char temps = 0;
const unsigned char MAX_VAL = 10;
unsigned int T2 = 0;
unsigned int val = 0;
unsigned int updateAvgtemp(){
static int history[MAX_VAL]={0};
static unsigned char lastHist=0;
static unsigned char numHist=0;
unsigned int temp=0;
unsigned char counter=0;
unsigned char arcount=0;
history[lastHist] = analogRead(temps);
if(numHist<MAX_VAL)
++numHist;
arcount=lastHist;
++lastHist;
if(lastHist>=MAX_VAL)
lastHist=0;
temp=0;
counter=0;
do{
temp+=history[arcount];
arcount--;
if(arcount>MAX_VAL)
arcount=(MAX_VAL-1);
counter++;
}while(counter < numHist);
return (temp/numHist);
}
void setup()
{
myservo.attach(9);
Serial.begin(9600);
}
void loop()
{
val = updateAvgtemp();
T2 = val;
val = map(val, 350, 700, 180, 0);
myservo.write(val);
Serial.print(val);
Serial.print(" / ");
Serial.print(T2);
Serial.print(" \n ");
delay(500);
}
A0 liitännässä itsellä thermistori. Thermistorin maadoituksessa 2.2kOhm vastus sekä säätöpotikka (karkea hienosäätö).
Digipuolella pinnissä 9 servo.
Serial.printit otettu siksi, että näkee thermistorin arvon ja siihen suuntaavan servolle syötettävän arvon.
Tässä siis mennään tämän projektin suhteen…
Tuomo