Salve è la mia primissima domanda qui sul Forum, ed ho poca esperienza con Arduino, siate buoni ![]()
Cercherò di spiegarmi il meglio che posso, questo è un progetto che si prefigge di muovere un ingranaggio con vite senza fine per ruotare una fotocamere reflex alla velocità siderale, in poche parole un inseguitore per fotografare il cielo stellato
se sarete interessati metterò anche i disegni meccanici quando pronti per realizzarlo completamente
metto un paio di foto schema del progetto e la lista componenti.
A grandi linee il progetto si compone di un Arduino Nano, un driver per motori stopper che fa muovere un neme17 a 240" a giro che sono 75ms a impulso, ho aggiunto un potenziometro mappato che regola una variazione nel tempo dell'impulso da 70 a 80ms per aggiustare la velocità in base anche alle condizioni della serata, ho aggiunto sempre a questo scopo un termoresistore per fare da riferimento ed un giorno magari creare un codice di correlazione temperatura-velocità, ed in fine una lettura della tensione della batteria.
Il mio problema in questione e che ho tre dati da aggiornare sul LCD ed riesco ad aggiornare solo la posizione del potenziometro, quello che sul LCD si legge come "Precisione" la temperatura ed il voltaggio aggiornano soltanto al reset della scheda. ![]()
Non sono sicuro che il codice vada postato così ma non ho trovato la giusta icona ;D
#define ORARIO 2
#define ANTIOR 3
#define STEP 11
#define DIR 10
#define MODE0 12
// #define MODE1 11
// #define MODE2 12
#define ENABLE 13
#include <LiquidCrystal.h>
int POTENZ = A0;
int ora = 0;
int ant = 0;
int VALORE01 = 0;
int VALORE02 = 0;
int i = 0;
int tempPin = A1;
int analogInput = A2;
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0; // inserire valore esatto resistenza R1 (100K)
float R2 = 10000.0; // inserire valore esatto resistenza R2 (10K)
int value = 0;
// BS E D4 D5 D6 D7
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
void setup(){
lcd.begin(16, 2);
Serial.begin( 9600 );
// Serial.println(F("Tempo in Millisecondi per impulso"));
pinMode( ENABLE , OUTPUT );
pinMode( DIR , OUTPUT );
pinMode( STEP , OUTPUT );
pinMode( MODE0 , OUTPUT );
//pinMode( MODE1 , OUTPUT );
//pinMode( MODE2 , OUTPUT );
pinMode(POTENZ , INPUT );
pinMode(ORARIO , INPUT );
pinMode(ANTIOR , INPUT );
pinMode(tempPin , INPUT );
pinMode(analogInput, INPUT);
}
void loop(){
value = analogRead(analogInput);
vout = (value * 5.0) / 1024.0;
// inserire al posto di 5.0V l`uscita in volt tra i Pin 5V e GND del vostro Arduino
vin = vout / (R2/(R1+R2));
if (vin<0.09) {
vin=0.0;
}
int readPin = analogRead(POTENZ);
int delayTime=map(readPin,0,1024,70,80);
// Sensore temperatura e conversione
int tempReading = analogRead(tempPin);
double tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK )) * tempK ); // Temp Kelvin
float tempC = tempK - 273.15; // Conversione Kelvin a Celsius
float tempF = (tempC * 9.0)/ 5.0 + 32.0; // Conversione Celcius a Fahrenheit
digitalWrite( DIR , HIGH );
digitalWrite( STEP , LOW );
digitalWrite( MODE0 , HIGH );
//digitalWrite( MODE1 , HIGH );
//digitalWrite( MODE2 , LOW );
for( i=0; i<1600; i++){
digitalWrite( STEP, HIGH );
delay( delayTime);
digitalWrite( STEP, LOW );
delay( delayTime);
VALORE01 =analogRead(POTENZ);
VALORE02 =analogRead(value);
// tempPin =analogRead(tempC);
// Serial.println();
lcd.setCursor(0, 0);
lcd.print("Precisione ");
lcd.setCursor(11, 0);
lcd.print(VALORE01);
delay(1);
lcd.setCursor(0, 1);
lcd.print("Temp V ");
lcd.setCursor(4, 1);
lcd.print(tempC);
delay(1);
lcd.setCursor(11, 1);
// lcd.print("INPUT V= ");
lcd.print(vin);
delay(1);
ora = digitalRead(ORARIO);
ant = digitalRead(ANTIOR);
if (ora == HIGH) {
for( i=0; i<200; i++){}
digitalWrite( DIR , HIGH);
digitalWrite( STEP, HIGH );
delay( 1 );
digitalWrite( STEP, LOW );
delay( 1 );
}
if (ant == HIGH) {
for( i=0; i<200; i++){}
digitalWrite( DIR , LOW);
digitalWrite( STEP, HIGH );
delay( 1 );
digitalWrite( STEP, LOW );
delay( 1 );
}
}
}
Comunque penso di aver fatto dei casini nel codice, se mi date una mano ![]()
Grazie


