Arduino

Aperto da pasquale83, Febbraio 01, 2016, 16:56:11

Nick85

#15
non ci crederai ma sto facendo esattamente quello che vuoi tu per modellismo.
Sto comandando dei servi con arduino mega con un tasto.

In pratica sto cercando di fare un plastico ferroviario utilizzando i servi al posto dei motori x scambio e gestendo il pannello con arduino.

Dopo ti posto lo sketch che ho scritto
Somaro special parts Rulez!!!

Nick85

ecco qui, questo è ancora work in progress, cambierà molto




#include <Servo.h>
#include <SoftwareSerial.h>
#include <program.h>


Servo myservo;               //Classe servi
#define LED 13                // LED collegato al pin digitale 13
#define BUTTON 7              // pin di input dove è collegato il pulsante
int val = 0;                  // si userà val per conservare lo stato del pin di input
int vecchio_val = 0;          // si userà vecchio_val per conservare lo stato del pin di input al passo precedente
int stato = 0;                // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso
int maxpos = 170;             // max pos servo
int minpos = 10;               // min pos servo
int currpos =10;               //posizione corrente
int passo =2;
int i;

void setup() {
  pinMode(LED, OUTPUT);       // imposta il pin digitale come output
  pinMode(BUTTON, INPUT);     // imposta il pin digitale come input
  myservo.attach(8,700,2300);          //imposta il servo sulla porta nr 9
  Serial.begin(9600);
  myservo.write(currpos);
}
void loop() {
  val = digitalRead(BUTTON);  // legge il valore dell'input e lo conserva

  // controlla se è accaduto qualcosa
  if ((val == HIGH) && (vecchio_val == LOW)){
    stato = 1 - stato;
  }

  vecchio_val = val;            // ricordiamo il valore precedente di val
 
  Serial.print("stato ");
  Serial.println(stato);
 
 
  Serial.print("servo pos ");
  Serial.println(myservo.read());
 
 
  if (stato == 1){
    if (currpos <  maxpos) {
      currpos = currpos+passo;
      if (myservo.read() != currpos){
        myservo.write(currpos);
        }
    }
   digitalWrite(LED, HIGH);   // accende il led 
   delay(100);
   digitalWrite(LED, LOW);    //spegne il led
   
  } else{
    if (currpos >  minpos) {
      currpos = currpos-passo;
      if (myservo.read() != currpos){
        myservo.write(currpos);
      } 
    } 
  } 
  //myservo.write(currpos);   
  //delay(5);
Serial.print("currpos ");
Serial.println(currpos);
//Sleep(10);
delay(100);
}

void Sleep(int Time){
  Serial.println("TIME");
  for (i =0;i==Time;i+=1){
    if (stato == 1) {
      digitalWrite(LED, HIGH);   // accende il led 
      delay(100);
      digitalWrite(LED, LOW);    //spegne il led
      //myservo.write(currpos);
      Serial.println("blink "+i);
    }
  }
 
}
Somaro special parts Rulez!!!

pasquale83

La mia idea è quella di riuscire a tarare il PID  in modo tale da avere un'apertura di farfalla proporzionale all'assorbimento

Il quadro comandi sarà ridotto all'osso:
Interruttore  on-off
Pulsante  +
Pulsante  -
Interruttore auto

Per quanto riguarda l'alimentazione, in fase di test posso alimentarlo con una Powerbank tramite usb?
A lava' 'a cap' o' ciucc' s' perd o' tiemp', l' acqu' e o' sapon'!!
http://www.racing.unisa.it/

pasquale83

Citazione di: alura il Febbraio 02, 2016, 08:24:45
Tu devi mettere una resistenza di pull-up oppure un pull-down, da 10k va bene.... esempio



In realtà l'atmega puo' puo' farlo internamente su buona parte dei pin, quindi a te basta il pulsante.

https://www.arduino.cc/en/Tutorial/DigitalPins

Il pulsante puo' essere interessante collegarlo ad un digitale che permette di essere configurato come interrupt...
aspe' che mi sono appena affacciato alla programmazione in C reale...

Ho dato una veloce letta al link da te postato,
In pratica scelgo il Pin , gli dico che è un ingresso e gli do valore alto, così l'altro estremo dell'interruttore invece che collegarlo al 5V, lo collego al gnd ?
A lava' 'a cap' o' ciucc' s' perd o' tiemp', l' acqu' e o' sapon'!!
http://www.racing.unisa.it/

alura

Citazione di: pasquale83 il Febbraio 02, 2016, 15:19:37
aspe' che mi sono appena affacciato alla programmazione in C reale...

Ho dato una veloce letta al link da te postato,
In pratica scelgo il Pin , gli dico che è un ingresso e gli do valore alto, così l'altro estremo dell'interruttore invece che collegarlo al 5V, lo collego al gnd ?

si esatto  ;)
Kia Sorento = Oso nei Kart

Raven

io avevo una fidanzata che abitava in piazzale Arduino
Prima vengono i sorrisi, poi le bugie. Per ultimi gli spari.

THE KAISER

wow, un intero thread di cui ignoro totalmente l'argomento della discussione...ma per curiosità, di cosa parlate?! ;D
è un linguaggio di programmazione o cosa?
Nessun vento è favorevole per chi non sa dove andare, ma per noi che sappiamo, anche la brezza sarà preziosa.

&re@


Nick85

ma quel sensore come funziona?

è una resistenza variabile?

Se così fosse ti consiglio di prendere spunto da qua

http://www.mauroalfieri.it/elettronica/tutorial-arduino-led-rgb-e-potenziometri.html

nel caso in cui fosse un interruttore ti consiglio invece questo:
http://www.mcmajan.com/mcmajanwpr/?p=769

che spiega bene le resistenze di pull up e pull down
Somaro special parts Rulez!!!

alura

Citazione di: Nick85 il Febbraio 04, 2016, 08:39:34
ma quel sensore come funziona?


quel sensore esce con una tensione proporzionale alla pressione... lo puoi collegare direttamente ad un analogico.
Kia Sorento = Oso nei Kart

jimb0


&re@

Sono pieno di contraddizioni :P

Il fatto è che mi piace passare il tempo a smanettare sulle cose che fanno brum brum, l'elettronica è stata un "errore di gioventù" che non ha avuto seguito. Non nutro nessun interesse in queste cose.

pasquale83

Citazione di: Nick85 il Febbraio 04, 2016, 08:39:34
ma quel sensore come funziona?

è una resistenza variabile?

Se così fosse ti consiglio di prendere spunto da qua

http://www.mauroalfieri.it/elettronica/tutorial-arduino-led-rgb-e-potenziometri.html

nel caso in cui fosse un interruttore ti consiglio invece questo:
http://www.mcmajan.com/mcmajanwpr/?p=769

che spiega bene le resistenze di pull up e pull down
il trasduttore ha 3 connessioni, 2 per l'alimentazione (5V e GND), e la terza da in uscita un valore di tensione proporzionale, in questo caso, alla pressione,
0V a 0bar e 5V a fondo scala

che, se ho capito bene per quel po' che sto leggendo, arduino interpreta, sull'ingresso analogico,  con valori che vanno da 0 a 1024

Citazione di: alura il Febbraio 04, 2016, 09:05:41
quel sensore esce con una tensione proporzionale alla pressione... lo puoi collegare direttamente ad un analogico.
stavo pensando di sostituire i 2 pulsanti per il comando manuale, con un potenziometro, così da avere una programmazione più pulita (alias: un buon copia e incolla ;D )

dovrei uscirmene con un semplice if/else

del tipo:
se l'interruttore "auto" è down applica il controllo automatico dell'acceleratore
altrimenti leggi il potenziomentro e "sposta" il servocomando


altra fulminata di genio: (o fumata?!  :D )
durante i test userò il pc per leggere i valori in uscita al potenziometro per "tarare" il controllore, quindi l'alimentazione sarà fornita dal pc

ma una volta terminato il tutto, vorrei alimentare arduino con una dinamo di una bicicletta collegata alla cingha che collega il motore al compressore  ;D
ovviamente dovrò raddrizzare e stabilizzare l'uscita della dinamo (che in realtà è un alternatore a 4 bobine) e qui mi servirà un bel aiuto  :-\
so che ci vuole un ponte di greatz ed un condensatore di sicuro... ma dopo?  :-\
che condensatore? che capacità? ci vuole qualche resistenza per "aiutare" il condensatore? ???
A lava' 'a cap' o' ciucc' s' perd o' tiemp', l' acqu' e o' sapon'!!
http://www.racing.unisa.it/

jimb0

Citazione di: pasquale83 il Febbraio 04, 2016, 17:11:21
ma una volta terminato il tutto, vorrei alimentare arduino con una dinamo di una bicicletta collegata alla cingha che collega il motore al compressore  ;D
ovviamente dovrò raddrizzare e stabilizzare l'uscita della dinamo (che in realtà è un alternatore a 4 bobine) e qui mi servirà un bel aiuto  :-\
so che ci vuole un ponte di greatz ed un condensatore di sicuro... ma dopo?  :-\
che condensatore? che capacità? ci vuole qualche resistenza per "aiutare" il condensatore? ???

ma che marrazzo vi danno da fumare laggiu'?!? C'hai la 12 volt gia' in continua, no? Ti basta portarla a 5, che marrazzo te ne fai di una dinamo per bicicletta?!?!?!?

alura

Citazione di: pasquale83 il Febbraio 04, 2016, 17:11:21
ma una volta terminato il tutto, vorrei alimentare arduino con una dinamo di una bicicletta collegata alla cingha che collega il motore al compressore  ;D
ovviamente dovrò raddrizzare e stabilizzare l'uscita della dinamo (che in realtà è un alternatore a 4 bobine) e qui mi servirà un bel aiuto  :-\
so che ci vuole un ponte di greatz ed un condensatore di sicuro... ma dopo?  :-\
che condensatore? che capacità? ci vuole qualche resistenza per "aiutare" il condensatore? ???

A me pare un po' una cazzata questa  :P
Kia Sorento = Oso nei Kart