Consiglio servo

Salve, mi sapreste consigliare un servo capace di preme e far spruzzare una bomboletta spray. quello contenuto nello starter kit non ha abbastanza forza per farlo.

grazie

io consiglio di creare un "peso" da mettere sulla bomboletta, in modo che basti lo sforzo di un piccolo servo per farla spruzzare.
Altrimenti con questo metodo calcoli guanti grammi ci vogliono per spruzzare, e compri un servo che ne esprima di più :slight_smile:

ho fatto una prova con una bilancia la bomboletta spruzza con una pressione di circa 15 gr. il servo dello starter kit dovrebbe avere una capacità di 9gr.

forse potrei usare 2 servo contemporaneamente

con quello che costa un servo, tanto vale comprarne uno più tosto... prova su hobbyking, e fai attenzione a prendere le cose dall'europa se non vuoi aspettare un sacco di tempo

ferdard:
Salve, mi sapreste consigliare un servo capace di preme e far spruzzare una bomboletta spray. quello contenuto nello starter kit non ha abbastanza forza per farlo.

grazie

Prova a cannibalizzare uno spruzzaprofumo automatico (tipo il sense n spray)

ci avevo pensato, ma ha un motorino con un albero a camme.
ma se compro un servo diverso da quello di arduino, la libreria è la stessa?

ferdard:
ci avevo pensato, ma ha un motorino con un albero a camme.
ma se compro un servo diverso da quello di arduino, la libreria è la stessa?

Si, la libreria è la stessa.
Tempo fa comprai anche io un sense and spray, riuscii a far spruzzare a comando le stelle filanti al carnevale. Anche se si tratta di un motore DC non c'è problema, si può fare tutto anche con quello !

ho smontato il dispenser, praticamente il gruppo che aziona il comando è composto da un motore con degli ingranaggi che muovono la leva che fa spruzzare la bomboletta, dovrei creare un codice che da l'impulso al motore di girare in un senso e poi ritornare a zero girando nel senso opposto.

mi metto a lavoro...

ferdard:
ho smontato il dispenser, praticamente il gruppo che aziona il comando è composto da un motore con degli ingranaggi che muovono la leva che fa spruzzare la bomboletta, dovrei creare un codice che da l'impulso al motore di girare in un senso e poi ritornare a zero girando nel senso opposto.

mi metto a lavoro...

Prima del software devi fare un ponte ad H :wink: ci sono tanti tutorial online, se vuoi dopo ti posso aiutare con il codice

l'aiuto è ben accetto!!!

per la parte hardware sto pensando di utilizzare lo schema incluso nel libro di arduino, così ho già tutti i componenti, può andare bene anche il codice, solo che invece di usare i comandi con pulsante bisognerà impostare dei delay.

appena fatto posto schema e bozza del codice

allora posto lo schema che sostanzialmente è quello fornito con il libro dello starter kit di arduino, anche il codice è quello.

lo schema ed il programma sono strutturati in modo da far partire il motore con un bottone, l'altro bottone serve a cambiare il senso di rotazione.

per il progetto servirebbe che il motore parta in un senso per 2 secondi e poi ritorni nella posizone di inizio ovvero giri per 2 secondi nel senso opposto.

questo mi risulta abbastanza complicato.

const int controlPin1 = 2; // connected to pin 7 on the H-bridge
const int controlPin2 = 3; // connected to pin 2 on the H-bridge
const int enablePin = 9;   // connected to pin 1 on the H-bridge
const int directionSwitchPin = 4;  // connected to the switch for direction
const int onOffSwitchStateSwitchPin = 5; // connected to the switch for turning the motor on and off
const int potPin = A0;  // connected to the potentiometer's output

// create some variables to hold values from your inputs
int onOffSwitchState = 0;  // current state of the On/Off switch
int previousOnOffSwitchState = 0; // previous position of the on/off switch
int directionSwitchState = 0;  // current state of the direction switch
int previousDirectionSwitchState = 0;  // previous state of the direction switch

int motorEnabled = 0; // Turns the motor on/off
int motorSpeed = 0; // speed of the motor
int motorDirection = 1; // current direction of the motor

void setup(){
  // intialize the inputs and outputs
  pinMode(directionSwitchPin, INPUT);
  pinMode(onOffSwitchStateSwitchPin, INPUT);
  pinMode(controlPin1, OUTPUT);
  pinMode(controlPin2, OUTPUT);
  pinMode(enablePin, OUTPUT);

  // pull the enable pin LOW to start
  digitalWrite(enablePin, LOW);
}

void loop(){
  // read the value of the on/off switch
  onOffSwitchState = digitalRead(onOffSwitchStateSwitchPin);
  delay(1);
  
  // read the value of the direction switch
  directionSwitchState = digitalRead(directionSwitchPin);
  
  // read the value of the pot and divide by 4 to get 
  // a value that can be used for PWM
  motorSpeed = analogRead(potPin)/4; 

  // if the on/off button changed state since the last loop()
  if(onOffSwitchState != previousOnOffSwitchState){
    // change the value of motorEnabled if pressed
    if(onOffSwitchState == HIGH){
      motorEnabled = !motorEnabled;
    }
  }

  // if the direction button changed state since the last loop()
  if (directionSwitchState != previousDirectionSwitchState) {
    // change the value of motorDirection if pressed 
    if (directionSwitchState == HIGH) {
      motorDirection = !motorDirection;
    }
  }  

  // change the direction the motor spins by talking
  // to the control pins on the H-Bridge
  if (motorDirection == 1) {
    digitalWrite(controlPin1, HIGH);
    digitalWrite(controlPin2, LOW);
  } 
  else {
    digitalWrite(controlPin1, LOW);
    digitalWrite(controlPin2, HIGH);
  }  

  // if the motor is supposed to be on
  if (motorEnabled == 1) {
    // PWM the enable pin to vary the speed
    analogWrite(enablePin, motorSpeed);
  }
  else { // if the motor is not supposed to be on
    //turn the motor off
    analogWrite(enablePin, 0);
  }
  // save the current On/Offswitch state as the previous 
  previousDirectionSwitchState = directionSwitchState;
  // save the current switch state as the previous
  previousOnOffSwitchState = onOffSwitchState;
}

ferdard:
allora posto lo schema che sostanzialmente è quello fornito con il libro dello starter kit di arduino, anche il codice è quello.

lo schema ed il programma sono strutturati in modo da far partire il motore con un bottone, l'altro bottone serve a cambiare il senso di rotazione.

per il progetto servirebbe che il motore parta in un senso per 2 secondi e poi ritorni nella posizone di inizio ovvero giri per 2 secondi nel senso opposto.

questo mi risulta abbastanza complicato.

const int controlPin1 = 2; // connected to pin 7 on the H-bridge

const int controlPin2 = 3; // connected to pin 2 on the H-bridge
const int enablePin = 9;  // connected to pin 1 on the H-bridge
const int directionSwitchPin = 4;  // connected to the switch for direction
const int onOffSwitchStateSwitchPin = 5; // connected to the switch for turning the motor on and off
const int potPin = A0;  // connected to the potentiometer's output

// create some variables to hold values from your inputs
int onOffSwitchState = 0;  // current state of the On/Off switch
int previousOnOffSwitchState = 0; // previous position of the on/off switch
int directionSwitchState = 0;  // current state of the direction switch
int previousDirectionSwitchState = 0;  // previous state of the direction switch

int motorEnabled = 0; // Turns the motor on/off
int motorSpeed = 0; // speed of the motor
int motorDirection = 1; // current direction of the motor

void setup(){
  // intialize the inputs and outputs
  pinMode(directionSwitchPin, INPUT);
  pinMode(onOffSwitchStateSwitchPin, INPUT);
  pinMode(controlPin1, OUTPUT);
  pinMode(controlPin2, OUTPUT);
  pinMode(enablePin, OUTPUT);

// pull the enable pin LOW to start
  digitalWrite(enablePin, LOW);
}

void loop(){
  // read the value of the on/off switch
  onOffSwitchState = digitalRead(onOffSwitchStateSwitchPin);
  delay(1);
 
  // read the value of the direction switch
  directionSwitchState = digitalRead(directionSwitchPin);
 
  // read the value of the pot and divide by 4 to get
  // a value that can be used for PWM
  motorSpeed = analogRead(potPin)/4;

// if the on/off button changed state since the last loop()
  if(onOffSwitchState != previousOnOffSwitchState){
    // change the value of motorEnabled if pressed
    if(onOffSwitchState == HIGH){
      motorEnabled = !motorEnabled;
    }
  }

// if the direction button changed state since the last loop()
  if (directionSwitchState != previousDirectionSwitchState) {
    // change the value of motorDirection if pressed
    if (directionSwitchState == HIGH) {
      motorDirection = !motorDirection;
    }
  }

// change the direction the motor spins by talking
  // to the control pins on the H-Bridge
  if (motorDirection == 1) {
    digitalWrite(controlPin1, HIGH);
    digitalWrite(controlPin2, LOW);
  }
  else {
    digitalWrite(controlPin1, LOW);
    digitalWrite(controlPin2, HIGH);
  }

// if the motor is supposed to be on
  if (motorEnabled == 1) {
    // PWM the enable pin to vary the speed
    analogWrite(enablePin, motorSpeed);
  }
  else { // if the motor is not supposed to be on
    //turn the motor off
    analogWrite(enablePin, 0);
  }
  // save the current On/Offswitch state as the previous
  previousDirectionSwitchState = directionSwitchState;
  // save the current switch state as the previous
  previousOnOffSwitchState = onOffSwitchState;
}

Ciao,
da quello che vedo (sono con il cell.) devi fare così: metti ad High il pin 1 e 2 dell'integrato, delay di 2 secondi, Low il pin 2, high il pin 7 dell' integrato, delay 2 secondi, Pin 1 e 7 dell' integrato a Low