Show Posts
Pages: [1]
1  International / Hardware / Re: ArduPollaio - automatizzare il pollaio con Arduino :) on: June 06, 2013, 09:05:50 am
Il fatto di fare lo sportello verticale od orizzontale dipende anche da com'è strutturato il pollaio stesso.
esatto, per me l'unica porta possibile è quella che ho rappresentato nello schema, devo solo capire se riesco, viste le mie scarse conoscenze elettroniche, a realizzarla  smiley-mr-green
2  International / Hardware / Re: ArduPollaio - automatizzare il pollaio con Arduino :) on: June 06, 2013, 08:12:29 am
Dalla bassezza della mia ignoranza in materia di motori, mi permetto di suggerire l'uso di un motoriduttore:
riducendo la velocità si moltiplica la coppia per cui anche un motore non esageratamente potente potrebbe servire allo scopo.
Dai miei studi di fisica vorrei anche suggerire l'uso di un sistema composto di carrucole, ogni carrucola dimezza lo sforzo se non ricordo male.

Altra cosa, tenere un motore acceso tutto il giorno consuma un sacco di corrente. Io suggerisco l'uso di un piccolo fermo che potrebbe essere anche un attuatore lineare. Quando il pannello deve salire/scendere, l'attuatore viene ritratto. Quando il pannello è arrivato in alto, l'attuatore lineare viene esteso ed il pannello appoggiato sopra ad esso. In questo modo si può staccare l'alimentazione.


wow davvero interessante la storia delle carrucole, mi sono informato, e con due carrucole posso ridurre il carico del 50%  smiley-eek
anche l'idea del blocco non è male, con un servo anche economico potrei bloccare la porta aperta, e un motoriduttore servirebbe allo scopo di sollevare e far scendere la porta...
Riassumendo:

un motoriduttore possibilmente pilotato direttamente da arduino, così da non diventare scemo per invertirne la marcia
un servo per bloccare la porta aperta
uno o due finecorsa
arduino uno  smiley-cool

Che ne dite?

edit:
ho trovato questa scheda di cui si parla molto bene, con cui piloterei il motoriduttore, così non rischio di friggere i pins dell'arduino
http://www.pololu.com/catalog/product/2136

La prendo?  smiley
3  International / Hardware / Re: ArduPollaio - automatizzare il pollaio con Arduino :) on: June 06, 2013, 06:46:30 am
il contrappeso lo devo lasciar stare, la porta si apre con il filo che viene riavvolto su una spoletta...
I motoriduttori, ok, quelli con encoder costano di più, ma se devo usare dei finecorsa che me ne faccio degli encoder? prendendo un motoriduttore semplice, se non ho capito male, più alto è il fattore di demoltiplicazione, più riuscirà a trattenere la porta alzata con facilità anche senza corrente giusto?

http://www.robot-italy.com/it/298-1-mini-metal-gear-motor.html
o
http://www.robot-italy.com/it/30-1-mini-metal-gear-motor.html


4  International / Hardware / Re: ArduPollaio - automatizzare il pollaio con Arduino :) on: June 06, 2013, 05:49:02 am
interessante.... non potrei usare un comune filo di nylon però, servirebbe qualcosa più "ruvido"...
ma per tenere la porta sollevata, come fareste voi?
5  International / Hardware / Re: ArduPollaio - automatizzare il pollaio con Arduino :) on: June 06, 2013, 05:22:06 am
mmmhhh si in effetti avete ragione, forse i finecorsa li devo usare per forza, adesso che ci penso... a questo punto forse basta un motoriduttore come avete suggerito, ma ho un dubbio:
pensate che comunque sia in grado di mantenere la porta sollevata? logicamente, come dovrei gestirlo, mando corrente fino anche non arriva al finecorsa, ma se poi taglio la corrente, la porta mi scende... sbaglio? o hanno un freno?
Intanto stavo studiando le soluzioni per i motori stepper, ed ho trovato delle schede BigEasyDriver e EasyDriver che smbrano fantastiche!
6  International / Hardware / Re: ArduPollaio - automatizzare il pollaio con Arduino :) on: June 06, 2013, 04:47:26 am
grazie ratto93, ma con il motoriduttore non potrei sapere in che posizione si trova la porta senza usare dei finecorsa, che vorrei evitare per avere un circuito semplice e con il minor numero di componenti, per quello pensavo ai motori stepper... sbaglio? Inoltre, un motoriduttore si danneggerebbe nel tenere sospeso il carico per le ore di luce?
Mi hai fatto venire in mente un dubbio, come invertire la rotazione del motore stepper :-/
7  International / Hardware / Re: ArduPollaio - automatizzare il pollaio con Arduino :) on: June 06, 2013, 04:30:51 am
Vi allego questo schema per farvi capire il progetto:



la porta è leggera, un foglio di legno di 20x25 cm circa, ma deve essere tenuta su dal motore o dal servo per tutto il giorno...
credo che andrò su un motore passo passo, ho visto che ci sono delle schede driver per pilotarli che si trovano a 10 euro su ebay, basate su L298, esempio:
http://www.ebay.it/itm/Scheda-L298-per-motori-passo-passo-stepper-shield-arduino-pic-/261219316629?pt=Componenti_elettronici_attivi&hash=item3cd1e27395&_uhb=1#ht_2278wt_996

Pensate sia fattibile?
8  International / Hardware / Re: ArduPollaio - automatizzare il pollaio con Arduino :) on: June 06, 2013, 03:44:41 am
Normalmente entrano da soli, a meno che non siano nuovi ed allora i primi due tre gg bisogna controllare di persona, io per lo meno faccio così...
si, è esattamente così smiley-wink
potreste indicarmi il servo più potente in termini di coppia e di tenuta del carico che potrei pilotare direttamente con arduino?
per i motori passo passo con una discreta coppia, se non ho capito male, devo per forza acquistare una shield o un modulo esterno per pilotarli....
9  International / Hardware / Re: ArduPollaio - automatizzare il pollaio con Arduino :) on: June 05, 2013, 10:03:54 am
per il servo, ma quanto dovrebbe essere potente? lo sfrutterei sempre per sollevare la porticina, quindi avvolgendoci intorno il cavo? però poi avrei bisogno dei finecorsa....
per le altre domance, con l'orario non va bene, i polli escono quando sorge il sole, e non posso certo pensare a un calendario che tenga presente di orari di alba e tramonto  smiley-cool e la sera sono sicuro che i polli siano dentro se è buio.
Per le persone no problem, si parla di una porticina di 20x25cm, al massimo schiaccio un puffo  smiley-mr-green
10  International / Hardware / ArduPollaio - automatizzare il pollaio con Arduino :) on: June 05, 2013, 09:17:21 am
Lo so, magari è una cosa che sembra strana, ma vorrei semplificare la vita dei miei, che ogni mattina ed ogni sera devono aprire e chiudere la porticina del pollaio. Pensavo di automatizzarla con arduino, ne ho uno che al momento non sto utilizzando, arduino uno.
La porta è una lastra di legno dal peso di circa 400/500 grammi, che va sollevata arrotolando un filo su un rocchetto, e pensavo di utilizzare uno stepper motor, pilotato da arduino. La mattina (fotoresistenza) arduino fa uscire i polli, quando è sufficientemente buio, chiude la porta.
Pensate che si possa fare senza acquistare una motor shield? ancora non ho neanche capito quale motore potrebbe andar bene, se fosse possibile ne vorrei uno che si pilotasse senza alimentazione esterna, ma forse non è semplicissimo.

Voi cosa ne pensate?  smiley

forse l'utilizzo di un servo a rotazione continua renderebbe il tutto più economico, o poi dovrei utilizzare dei fine corsa?
11  Forum 2005-2010 (read only) / Development / Re: Trying to build DHCP for arduino0019 and more on: November 25, 2010, 03:54:34 pm
yes i see other libraries, but they're based on old version of ethernet library.

I do some progress, but don't understand why, when serial monitor is opened, program does not receive the udp, as i close the serial monitor popup the led light up.
see the sketch attached, any help is approached (it's a study sketch, so don't take care by comments  :-[ )

Code:
#include <SPI.h>
#include <Ethernet.h>
#include <Udp.h>

#define DEBUG

/* DHCP state machine. */
#define STATE_DHCP_START        0
#define      STATE_DHCP_DISCOVER      1
#define      STATE_DHCP_REQUEST      2
#define      STATE_DHCP_LEASED      3
#define      STATE_DHCP_REREQUEST      4
#define      STATE_DHCP_RELEASE      5

#define DHCP_FLAGSBROADCAST      0x8000

/* UDP port numbers for DHCP */
#define      DHCP_SERVER_PORT      67
#define DHCP_CLIENT_PORT      68

/* DHCP message OP code */
#define DHCP_BOOTREQUEST      1
#define DHCP_BOOTREPLY            2

/* DHCP message type */
#define      DHCP_DISCOVER            1
#define DHCP_OFFER            2
#define      DHCP_REQUEST            3
#define      DHCP_DECLINE            4
#define      DHCP_ACK            5
#define DHCP_NAK            6
#define      DHCP_RELEASE            7
#define DHCP_INFORM            8

#define DHCP_HTYPE10MB            1
#define DHCP_HTYPE100MB            2

#define DHCP_HLENETHERNET      6
#define DHCP_HOPS            0
#define DHCP_SECS            0

#define dhcpSIZE                240

#define zap(x) if(x){free(x); x=0;}

/**
 * @brief            for the DHCP message
 */
typedef struct RIP_MSG{
      byte              op;
      byte              htype;
      byte              hlen;
      byte              hops;
      unsigned long      xid;
      unsigned int      secs;
      unsigned int      flags;
      byte              ciaddr[4];
      byte              yiaddr[4];
      byte          siaddr[4];
      byte              giaddr[4];
      byte          chaddr[16];
      byte          sname[64];
      byte          file[128];
        byte            magic[4];
      byte          OPT[];
};

/**
 * @brief      DHCP option and value (cf. RFC1533)
 */
enum{
   DhcpOptionPadding            = 0,
   DhcpOptionSubnetMask         = 1,
   DhcpOptionRoutersOnSubnet    = 3,
   DhcpOptionDNS                = 6,
   DhcpOptionHostName           = 12,
   DhcpOptionDomainName         = 15,
   DhcpOptionRequestedIPaddr      = 50,
   DhcpOptionIPAddrLeaseTime      = 51,
   DhcpOptionOptionOverload      = 52,
   DhcpOptionMessageType      = 53,
   DhcpOptionServerIdentifier      = 54,
   DhcpOptionParamRequest      = 55,
   DhcpOptionMsg            = 56,
   DhcpOptionMaxMsgSize       = 57,
   DhcpOptionT1value                  = 58,
   DhcpOptionT2value            = 59,
   DhcpOptionClassIdentifier      = 60,
   DhcpOptionClientIdentifier      = 61,
   DhcpOptionEnd                 = 255
};

byte mac[] = { 0xDE, 0xAF, 0xAE, 0xDF, 0xFE, 0xED };
byte ip[] = { 0,0,0,0 };

unsigned int dhcp_state;
unsigned long startTime;
unsigned long lastTime;
unsigned long _dhcpTransactionId = 123456; /* todo */

byte broadcastIp[] = { 255,255,255,255 };
byte dhcpServerIp[4];

// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,


void setup() {
  Serial.begin(9600);
  // start the Ethernet and UDP:
  Ethernet.begin(mac,ip);
  Udp.begin(DHCP_CLIENT_PORT);
  startTime = millis();
  lastTime = startTime;

  dhcp_state = STATE_DHCP_START;
  
  pinMode(9, OUTPUT);
  digitalWrite(9, LOW);
}

void loop() {
  if(dhcp_state == STATE_DHCP_START) {
    #ifdef DEBUG
    Serial.println("STATE_DHCP_START");
    #endif
    
    RIP_MSG *packet = (RIP_MSG *)malloc(dhcpSIZE +4 * sizeof(byte *));
    packet->op = DHCP_BOOTREQUEST;
    packet->htype = DHCP_HTYPE10MB;
    packet->hlen = DHCP_HLENETHERNET;
    packet->hops = DHCP_HOPS;
    packet->xid = dhcp_swapl(_dhcpTransactionId);
    packet->secs = 0;
    packet->flags = dhcp_swaps(DHCP_FLAGSBROADCAST);
    memset(packet->ciaddr, 0, 4);
    memset(packet->yiaddr, 0, 4);
    memset(packet->siaddr, 0, 4);
    memset(packet->giaddr, 0, 4);
    memset(packet->sname, 0, 64);
    memset(packet->file, 0, 128);
    memcpy(packet->chaddr, mac, sizeof(mac));
    packet->magic[0] = 99;
    packet->magic[1] = 130;
    packet->magic[2] = 83;
    packet->magic[3] = 99;
    
    unsigned int ptr = 0;
    // OPTION: message type
    packet->OPT[ptr] = DhcpOptionMessageType;
    ptr += 1;
    packet->OPT[ptr] = 1;
    ptr += 1;
    packet->OPT[ptr] = 1; //DhcpMessageDiscover
    ptr += 1;
    packet->OPT[ptr] = DhcpOptionEnd;
    ptr += 1;
    
    Udp.sendPacket((byte *)packet,dhcpSIZE +4,broadcastIp,DHCP_SERVER_PORT);
    #ifdef DEBUG
    Serial.println("STATE_DHCP_DISCOVER");
    Serial.print("send pack size: ");
    Serial.println(sizeof(*packet));
    #endif
    dhcp_state = STATE_DHCP_DISCOVER;
    zap(packet);
  }
  
  if(Udp.available()) {
    
    // Get packet size and allocate memory
    int packetSize = Udp.available()-8;
    RIP_MSG *packet = (RIP_MSG *)malloc(packetSize * sizeof(byte *));
    Udp.readPacket((byte *)packet,packetSize);
  
  // Find real size and make copy of incoming options
  // Attempt to handle missing 'DhcpOptionEnd' - corrupted line?
    int optLoc = 0;
    while(packet->OPT[optLoc] != DhcpOptionEnd && optLoc < packetSize-dhcpSIZE){
      optLoc = 2+optLoc+packet->OPT[optLoc+1];
    }
    int optSize = optLoc;
    byte *options = (byte *)malloc(optSize * sizeof(byte *));
    memcpy( options , packet->OPT , optSize);
    digitalWrite(9, HIGH);
  
    #ifdef DEBUG
    Serial.print("Packet size ");
    Serial.println(packetSize, DEC);
    Serial.print("Options size ");
    Serial.println(optSize, DEC);
    Serial.println("Fetched");
    for(int i = 0;i < (optSize);i++){
      Serial.print(options[i], DEC);
      Serial.print(" ");
    }
    Serial.println();
    #endif

  }
  
  
  #ifdef DEBUG
  /*
  if( millis()-lastTime > 1000 ){
    Serial.print(".");
    lastTime = millis();
  }
  */
  #endif
}


uint16_t dhcp_swaps(uint16_t i) {
      uint16_t ret=0;
      ret = (i & 0xFF) << 8;
      ret |= ((i >> 8)& 0xFF);
      return ret;      
}

uint32_t dhcp_swapl(uint32_t l) {
      uint32_t ret=0;
      ret = (l & 0xFF) << 24;
      ret |= ((l >> 8) & 0xFF) << 16;
      ret |= ((l >> 16) & 0xFF) << 8;
      ret |= ((l >> 24) & 0xFF);
      return ret;
}
12  Forum 2005-2010 (read only) / Development / Trying to build DHCP for arduino0019 and more on: November 25, 2010, 05:28:59 am
Hi everyone,
i'm an italian software developer (objective-c, java, php), just started playing with arduino a week ago.
I want to build a DHCP library for the new arduino release, at this moment i was able to send the DHCPDISCOVER packet well composed, and the dhcp server reply with a packet, but i can't receive that packet with the UDP library in arduino.
Probably i miss something, are here someone able with udp and dhcp and want to collaborate in this library?
thanks
 smiley-wink

Pages: [1]