Jago Inserito: 30 dicembre 2014 Segnala Share Inserito: 30 dicembre 2014 Ciao a tutti, avrei bisogno del vostro prezioso aiuto. Ho costruito una bilancia utilizzando una cella di carico da 100Kg f.s. , una interfaccia Hx711 ( e un Arduino Uno con LCD. Modificando la libreria, come suggerito, l'ho tarata e tutto funziona benone. Lo sketch da caricare è in effetti molto semplice https://drive.google.com/file/d/0BxddEF_i_qGGa2tLVXJXQ3huNTQ/view?usp=sharing A questo punto vorrei fare una modifica per ottenere in realtà quello per cui la bilancia è stata costruita. Vorrei aggiungere un tasto (collegato a una I/O o a un interrupt?) che alla pressione proceda con: - Azzerare il valore (come fa all'inizio, una sorta di TARA) - Mandi a livello alto una uscita (per attivare una elettrovalvola che farà lentamente svuotare il contenitore sul piatto) - Pesi (con numeri negativi ovviamente) il decremento del peso sul piatto fino al raggiungimento di una cifra (es 3000 g.) da impostare come dato nello sketch stesso. - Al raggiungimento del valore (-3000 g) disattivi la porta preposta chiudendo l'elettrovalvola. - Dopo un delay di qualche secondo, torni possibilmente alla funzione Peso originale con il nuovo valore efficace. Una sorta di dipenser che eroga lo stesso quantitativo in peso. E' fattibile secondo voi senza troppe complicazioni? Suggerimenti? Vorrei capire per imparare… Grazie 1000, Bye Link al commento Condividi su altri siti More sharing options...
dkmorb Inserita: 30 dicembre 2014 Segnala Share Inserita: 30 dicembre 2014 (modificato) Certo che è fattibile... 1) L'apertura e la chiusura dell'elettrovalvola (non alimentata direttamente da arduino) potrebbe essere pilotata da un pin digitale qualsiasi tramite l'istruzione digitalWrite(nr_Pin, HIGH) o digitalWrite(nr_Pin, LOW) -> http://arduino.cc/en/Reference/digitalWrite 2) Per il bottone (pulsante / switch che dir si voglia)...andiamo subito al problema: il debounce (l'anti-rimbalzo), toh leggi -> http://arduino.cc/en/Tutorial/Debounce 3) Se vuoi interrompere il flusso del programma per gestire quanto da te descritto, si dovrebbe utilizzare un interrupt (argomento complesso) -> http://playground.arduino.cc/Code/Interrupts Io direi di evitare il per il momento il punto 3, magari si potrebbe utilizzare una variabile di stato per modificare il flusso del programma di arduino e gestire con essa la fase di peso e la fase di svuotamento. Questa variabile cambia alla pressione del tuo tasto-bottone-pulsante Modificato: 30 dicembre 2014 da dkmorb Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 30 dicembre 2014 Segnala Share Inserita: 30 dicembre 2014 La fattibilità è semplice. Ora dipende da te e da quello che vuoi fare e, soprattutto, da come intendi procedere anche per il futuro. I link che ti ha messo dkmorb portano ad usare arduino sempre come un giocattolo. Se invece intendi affrontare lo sviluppo in modo più "professionale" dovresti rivedere un po' tutto. Cominciare con l'idea che i pulsanti son periferiche che si acquiscono a tempi fissi, con bassa priorità, e l'antirimbalzo lo si effettua direttamente all'acquisizione. Gli interrupts non sono strumenti diabolici e complessi, ma vanno usati solo quando netecessario. I ritardi bloccanti, ovvero le funzioni delay, non andrebbero ami usate. I programmi non si mettono assieme aggiungendo pezzi a pezzi, ma si progettano prima, si suddividono in funzioni, poi si scrivono lo funzioni e si assemblano secondo logica. Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 30 dicembre 2014 Segnala Share Inserita: 30 dicembre 2014 puoi usare la macchina a stati finiti , crei i tuoi passi magari in una struttura e con una union li azzeri tutti in un colpo ed eventualmente verifichi se almeno uno e' attivo dal valore dell'intero associato nella union . Credo che si possa fare tutto , o quasi , l'importante e' conoscere la tecnologia e le tecniche Poi qua sei in mani sicure , ci sono dei maghi dell'elettronica , intendo qua sopra Link al commento Condividi su altri siti More sharing options...
dkmorb Inserita: 30 dicembre 2014 Segnala Share Inserita: 30 dicembre 2014 I link che ti ha messo dkmorb portano ad usare arduino sempre come un giocattolo. Beh, aveva chiesto di capire per imparare...e con un giocattolo come arduino si impara anche così..assemblando i "pezzi" di codice. Magari lavorando per "successive approssimazioni", si ha anche qualche soddisfazione per quello che si sta realizzando... Mi sembra, fra l'altro, si stia parlando di un esperimento e non di una imminente commercializzazione di un prodotto finito. Cominciare con l'idea che i pulsanti son periferiche che si acquiscono a tempi fissi, con bassa priorità, e l'antirimbalzo lo si effettua direttamente all'acquisizione. Ammetto le mie lacune...che cosa vuol dire? Ciao, dkmorb. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 30 dicembre 2014 Segnala Share Inserita: 30 dicembre 2014 (modificato) Beh, aveva chiesto di capire per imparare...e con un giocattolo come arduino si impara anche così..assemblando i "pezzi" di codice. Il mio non voleva essere un appunto ma un chiarimento. Anche un esperimento hobbistico può essere fatto bene o male. Farlo bene, nel modo corretto, è sempre più utile che raffazzonare un qualche cosa che gira alla meno peggio, quasi senza sapere bene come, e che rischia di andare a catafascio alla prima necessità di modifica. Ammetto le mie lacune...che cosa vuol dire? Senza entrare nelle masturbazioni mentali come propone Walter (Walter ti fa male studire troppo e tutto assieme ) Quando si comincia a fare qualche cosa di più di unpulsante che accende e spegne una lampadina, è meglio cominciare a far le cose per bene. Credo che ci sia anche uno sketch negli esempi di ardyuino per fare schedulazioni. Normalmente si usa fare un clock di sistema con il quale schedulare alcuni jobs, anche in modo semplice semplice. Ad esempio usi un interrupt di TM1 a 10ms (vedi la discussione di Roberto), ad ogni interrupt leggi gli ingressi, li confronti con lo stato precedente e setti un flag qaundo sono coincidenti. In questo modo hai già il tuo filtro antirimbalzo. Nel main loop o nelle funzoni in cui usi gli ingressi verifichi se il flag è alto, se è alto puoi usare lo statomemorizzato dell'ingresso per la tua elaborazione. Idem, in questo caso, per la lettura del peso puoi leggere ogni 20 ms, o 100 ms, o altro tempo che si ritenga congruo con il processo da controllare. Quello che ho esposto sopra, in modo sintetico e semplificato, non è altro che il nucleo di una schedulazione di processi. Vedi il software si può approcciare in molti modi, ma solo uno di questi è corretto. Il modo corretto prevede lo studio preliminare di cosa dovrà fare il programma. Questa fase si dice analisi del problema. Da questa fase discende l'analisi delle singole funzioni. Una volta che son state analizzate le singole funzioni si procede a specificarle. Solo dopo averle specificate si può iniziare a codificarle. Più aumenta l'esperienza meno è necesario scrivere funzioni. Per lo più basta scrivere del software per connettere le varie funzioni. Oltre a risparmiare tempo di codifica e debugging, si aumenta l'affidabilità del software perchè più una funzione è stata impiegata con successo in applicazioni differenti, minori sono le possiiblità che contenga errori. Modificato: 30 dicembre 2014 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 30 dicembre 2014 Segnala Share Inserita: 30 dicembre 2014 (modificato) Livio , fa più male non studiare e non sapere niente e chiedere e soprattutto aspettare che qualcuno ti aiuti sul plcfrum Le macchine a stati finiti le implemento da circa 15 anni , diciamo quando ero ancora un elettricista Se si vogliono creare situazioni a catena con scelte ect e' l'unica cosa da fare , Setta e resetta , resetta e setta oppure con una variabile int che mantiene lo stato , e' sempre una FSM , s enon sai chiedi pure che dico cosa vuol dire l'acronimo Modificato: 30 dicembre 2014 da walterword Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 30 dicembre 2014 Segnala Share Inserita: 30 dicembre 2014 Walter stiamo parlando di un giochino con 2-3 I/O non di 200 I/O Setta e resetta , resetta e setta oppure con una variabile int che mantiene lo stato , e' sempre una FSM , s enon sai chiedi pure che dico cosa vuol dire l'acronimo Walter non ti hanno mai detto che non si deve cercare di insegnare a gatti come arrampicare? Se va bene ti ridono in faccia, se va male ti graffiano. Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 30 dicembre 2014 Segnala Share Inserita: 30 dicembre 2014 se va male a loro invece trovano un bel cagnaccio ....poi si senton suoni tipo cr**k crick crock .... Link al commento Condividi su altri siti More sharing options...
gabri-z Inserita: 30 dicembre 2014 Segnala Share Inserita: 30 dicembre 2014 Se va bene ti ridono in faccia, se va male ti graffiano. Sarai arrabbiato con me , ma questa Te la ''porto via '' , darò ai miei amici , amanti di battute , il nome del autore , se lo pretendi ! E davvero FORTE ! Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 31 dicembre 2014 Segnala Share Inserita: 31 dicembre 2014 darò ai miei amici , amanti di battute , il nome del autore , se lo pretendi No, quello che scrivo sul forum è di uso pubblico. Però per dire tutta la verità, la battuta risale a mio padre che la faceva risalire a suo padre; certamente fa parte del repertorio tipico livornese, ed è anche una delle più.....soffici. Solitamente il livornesa taglia, graffia e poi, per sicurezza, ci sparge anche il sale. Link al commento Condividi su altri siti More sharing options...
Jago Inserita: 31 dicembre 2014 Autore Segnala Share Inserita: 31 dicembre 2014 Ragazzi siete forti…! Grazie per i link e l'incoraggiamento. Proverò, con l'aiuto di un bel libro a scrivere qualcosa con il sistema: "Se una cosa va quanto basta… non toccarla se no guasta!" Vi aggiornerò o vi disturberò ancora. Per ora un sincero augurio di Buon Anno e Felice anno nuovo!!! Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 31 dicembre 2014 Segnala Share Inserita: 31 dicembre 2014 (modificato) Livio non pensavo tu fossi di origine livornese. Tra tutti i toscani , i livornesi , sono i miei preferiti Meglio livornese che rettiliano yankee appartenente al gruppo Bilderberg Modificato: 31 dicembre 2014 da walterword Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 31 dicembre 2014 Segnala Share Inserita: 31 dicembre 2014 (modificato) JAgo , la teoria del " Tuca nient seno' va pu nient " e' la pratica dei falliti .Ho conosciuto molti programmatori ed informatici che parlano sempre in terza persona " Lui adesso non mi vede questo ..."...."ecco vedi adesso lui mi alza l'uscita...." , rivolto al plc , come se il pcl o un pc fossero entità a se stanti che prendono decisioni e si programma da solo come una macchina infernale...assurdo no. Devi toccare e modificare , e' la vita.Ma lo devi fare solo se in possesso di informazioni e sapere altrimenti si che fai disastri Un cliente un giorno chiese ad un programmatore collega "Mi scusi potrebbe farmi accendere una lampadina quando c'e 'questo allarme" e il programmatore rispose" Ma non so , meglio di no , lui adesso accende le lampadine cosi ...." ....questo programmatore l'ho cacciato via a calci nel cu*o , chiaro e tondo ho fatto solo una domanda "o rimane lui o vado via io , voglio risposta semplice ed immediata , io non ho tempo da perdere con i dementi" ......e' andato via lui accompagnato dai miei calci , in kulo ovviamente.... Modificato: 31 dicembre 2014 da walterword Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 31 dicembre 2014 Segnala Share Inserita: 31 dicembre 2014 (modificato) Livio non pensavo tu fossi di origine livornese. Sono nato a Vedano Olona (VA) da madre indigena e padre livornese. Degli 8 bisnonni 4 son o livornesi, 3 varesini ed una cadorina., però la nonna materna è nacque a New york City. Modificato: 31 dicembre 2014 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 31 dicembre 2014 Segnala Share Inserita: 31 dicembre 2014 c'e' qualcosa di massonico ....possiedi qualche anello oppure oggetto con "occhio che vede tutto " o stelle strane ? Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 1 gennaio 2015 Segnala Share Inserita: 1 gennaio 2015 c'e' qualcosa di massonico ... Solo una certa simpatia.... Link al commento Condividi su altri siti More sharing options...
Jago Inserita: 6 gennaio 2015 Autore Segnala Share Inserita: 6 gennaio 2015 Ciao a tutti, dopo prove su prove, Wikipedia, testi scolastici ecc... sono riuscito a fare qualcosa che FUNZIONA! L'apparecchio avrà questo comportamento e questa procedura di utilizzo: 1) All'accenzione, la cella si resetta portandosi a 0,00 kg (ho provveduto a trasformare i grammi in chili con due sole cifre dopo la virgola per eliminare le fastidiose oscillazioni dei grammi - poco rilevanti su pesate intorno ai 50 kg!) 2) Metto la bombola sulla bilancia e ne peso il totale per una informazione di massima 3) Resetto l'Arduino e al nuovo avvio elimina la tara, riportandosi su 0,00 kg. 4) Tengo premuto il tasto che ho aggiunto al circuito, portando a livello alto il PIN9 che azionerà per mezzo di un fotoaccoppiatore l'elettrovalvola. Contemporaneamente sul display apparirà sulla seconda riga (sotto alla pesata) la parola CARICAMENTO 5) Il peso complessivo a questo punto diminuirà lentamente misurando coi numeri negativi il puro quantitativo sottratto alla pesata. 6) Al raggiungimento del peso desiderato basta ripremere il tasto e l'elettrovalvola si chiuderà eliminando la parola CARICAMENTO dal display. Sicuramente non sarà una scrittura da manuale, e sicuramente è perfettibile, ma funziona... una sorta di frankeinstein di due sketch con qualche IF di mia invenzione. Potrebbe sembrare una bestemmia informatica, ma non so fare di meglio. Devo accantonare l'idea di impostare -3,00 kg come dato da confrontare per portare a livello basso il PIN9 perchè occorre una padronanza della sintassi che mi manca. Per ora sono molto contento e procederò con l'hardware perchè le basette sperimantali mi indispongono e i contatti a volte lasciano a desiderare. Bye e grazie per i consigli. // Hx711.DOUT - pin #A1 // Hx711.SCK - pin #A0 // LCD.RS - pin 7 // LCD.En - pin 6 // LCD.D4 - pin 5 // LCD.D5 - pin 4 // LCD.D6 - pin 3 #include <LiquidCrystal.h> #include <Hx711.h> const int buttonPin = 8; // the number of the pushbutton pin const int ledPin = 9; // the number of the LED pin const int ledPin1 = 10; // the number of the LED pin LiquidCrystal lcd(7, 6, 5, 4, 3, 2); Hx711 scale(A1, A0); // Variables will change: int ledState = LOW; // the current state of the output pin int buttonState; // the current reading from the input pin int lastButtonState = HIGH; // the previous reading from the input pin // the following variables are long's because the time, measured in miliseconds, // will quickly become a bigger number than can be stored in an int. long lastDebounceTime = 0; // the last time the output pin was toggled long debounceDelay = 10; // the debounce time; increase if the output flickers void setup() { lcd.begin(16, 2); scale.setScale(43.5); pinMode(buttonPin, INPUT); pinMode(ledPin, OUTPUT); pinMode(ledPin1, OUTPUT); // set initial LED state digitalWrite(ledPin, ledState); digitalWrite(ledPin1, ledState); } void loop() { // read the state of the switch into a local variable: int reading = digitalRead(buttonPin); // check to see if you just pressed the button // (i.e. the input went from LOW to HIGH), and you've waited // long enough since the last press to ignore any noise: // If the switch changed, due to noise or pressing: if (reading != lastButtonState) { // reset the debouncing timer lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { // whatever the reading is at, it's been there for longer // than the debounce delay, so take it as the actual current state: // if the button state has changed: if (reading != buttonState) { buttonState = reading; // only toggle the LED if the new button state is HIGH if (buttonState == HIGH) { ledState = !ledState; } } } // set the LED: digitalWrite(ledPin, ledState); digitalWrite(ledPin1, ledState); // save the reading. Next time through the loop, // it'll be the lastButtonState: lastButtonState = reading; if (ledState == HIGH) { lcd.setCursor(0, 1); lcd.print("CARICAMENTO"); } if (ledState == LOW) { lcd.setCursor(0, 1); lcd.print(" "); } lcd.setCursor(0, 0); lcd.print(scale.getGram() / 1000, 2); lcd.print(" kg"); lcd.print(" "); delay(10); } Link al commento Condividi su altri siti More sharing options...
Jago Inserita: 12 gennaio 2015 Autore Segnala Share Inserita: 12 gennaio 2015 FINITO! Software modificato. Sono riuscito a mandare a livello alto un PIN al valore –3,00 Kg, quindi una volta prelevato il quantitativo di 3 chili parte un buzzer e il display mostra la scritta PIENO. L'uscita è a transistor e dovrebbe pilotare agilmente solenoidi e o relè allo stato solido in caso volessimo usare la 220 AC. L'Arduino l'ho integrato sulla scheda. E' veramente divertente imparare a scrivere gli sketch... Bye Bye e grazie dei preziosi consigli. https://drive.google.com/file/d/0BxddEF_i_qGGcVA5MExJVVN0ems/view?usp=sharing https://drive.google.com/file/d/0BxddEF_i_qGGUjJJeXE3di1JbzQ/view?usp=sharing Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 12 gennaio 2015 Segnala Share Inserita: 12 gennaio 2015 (modificato) Una curiosità. per quale ragione hai posizionato il microcontrollore in obliquo sul circuito stampato? E' un vezzo artistico? Ti è uscito così? C'è una ragione particolare? Modificato: 12 gennaio 2015 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
Jago Inserita: 12 gennaio 2015 Autore Segnala Share Inserita: 12 gennaio 2015 Lo so, non è molto elegante, ma in effetti, a cercare in rete, è uno dei pochi modi per riprodurre le esatte dimensioni di un Arduino originale con tutte le uscite funzionanti… nella stessa posizione per eventuali shield. Il merito non è mio ma di questo signore: http://vonkonow.com/wordpress/2012/10/nanino-the-diy-friendly-arduino/ Io non ho fatto altro che aggiungere a questo arduino, sulla medesima PCB, la parte di alimentazione (7805 e ciarpame vario), la parte del tasto di destra con la circuiteria per il TIP29C e l'LCD con potenziometro contrasto e resistenza per la retroilluminazione. Il mio solito Frankeinstein, ma è compatto, senza troppi fili e questo mi piace. Trovo che l'arduino UNO originale vada bene solo per esperimenti e prove su sketch, ma in pratica è scomodissimo messo a dimora dentro ad una scatola, i contatti sono instabili e la parrucca di fili mi indispone... Sarò strano, ma con 3 euro di Atmega su cui carichi il bootloader, si lavora molto meglio e non hai paura di falsi contatti o di pin che si sfilano ecc. Non trovi? Bye Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 13 gennaio 2015 Segnala Share Inserita: 13 gennaio 2015 Trovo che l'arduino UNO originale vada bene solo per esperimenti e prove su sketch, ma in pratica è scomodissimo messo a dimora dentro ad una scatola, i contatti sono instabili e la parrucca di fili mi indispone... Si hai ragione. Infatti è stato progettato come scheda per lo sviluppo del Sw. Se ti può interessare esistono delle minishields che adattano i connettori ad innesto in morsettiere. Tu che tool usi per caricare poi i programmi sul micro che inserisci nella tua scheda? Link al commento Condividi su altri siti More sharing options...
Jago Inserita: 13 gennaio 2015 Autore Segnala Share Inserita: 13 gennaio 2015 (modificato) Sì Livio, li ho visti su internet e penso che prima o poi me ne costruisco uno, ho lo .sch e il .brd di Eagle e quindi fare uno shield con i morsetti potrebbe venirmi utile. Grazie per il suggerimento. Per caricare il SW sui micro uso per prima cosa un piccolo shield che ho costruito con il quarzo, i condensatori da 22p e la resistenza del reset per caricare il bootloader sui chip vergini. Installo lo sketch "optiloader" sul mio ArduinoUNO originale e con quello carico il bootloader sul micro. Poi metto a dimora l'Atmega sul circuito e uso la connessione FDTI (4 pin sotto il tasto del reset in questo caso) e con un cavo USB -> Seriale (TX - RX - 5V - GND) carico gli sketch tramite l'IDE di Arduino. L'unica seccatura è quella di premere il Reset manuale per 3 secondi durante primissima fase di caricamento del file. Funziona senza diventare matto e poi quando il software va sul chip è già stato collaudato più e più volte su un Arduino originale con USB nativo (sicuramente più pratico). C'è di buono che con questo sistema il chip non lo estraggo più (col rischio di danneggiarlo nei piedini) e la connessione FDTI mi consente facili aggiornamenti futuri. Nei casi in cui ho solo l'HEX ma non gli sketch originali, uso "Arduino Builder" che è in grado di caricarli su Arduino (cosa che il suo IDE originale non è in grado di fare!) Bye Modificato: 13 gennaio 2015 da Jago Link al commento Condividi su altri siti More sharing options...
cioccospak Inserita: 2 febbraio 2015 Segnala Share Inserita: 2 febbraio 2015 ciao jago ho comperato anche io un' interfaccia hx711 per celle di carico solo che io sto riscontrando problemi nello sketch con la libreria infatti il programma di arduino me la riconosce compare nelle lista delle librerie ,ma non la include, ho letto che bisogna modificare il programma .h della libreria ,ho guardato e ,se ho capito bene cosa dovevo fare , nella mia versione della libreria era gia a posto, quindi non so cosa fare , mi puoi dare qualche suggerimento? grazie un altra cosa come risulta la stabilità del segnale di questo amplificatore? perche io prima avevo fatto esperimenti con un 'ina 125 e una cella da 20 kg ma sono rimasto abbastanza insoddisfatto dell' instabilità del segnale. ciao Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 2 febbraio 2015 Segnala Share Inserita: 2 febbraio 2015 Accodarsi a discussioni si rischia di far confusione con le risposte, per questo motivo il regolamento lo vieta. Apri una tua discussione sull'argomento di tuo interesse. Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati