Visualizzazione post con etichetta arduino. Mostra tutti i post
Visualizzazione post con etichetta arduino. Mostra tutti i post

sabato 25 maggio 2019

Come collaborare con tinkercad circuits

Un modo molto semplice ed efficace di collaborare su progetti Arduino in questo gruppo e' tramite l'uso di Tinkercad Circuits

https://www.tinkercad.com/dashboard?type=circuits

Vediamo i passi per condividere un progetto con il gruppo al fine di collaborare sullo stesso circuito e codice.

Si assume che il lettore abbia gia' un account su tinkercad

Passo #1

Creare un nuovo progetto




Passo #2

Assegnare un nome sensato al progetto



Passo #3

Creare il circuito con Arduino ed i componenti passivi, creando delle connessioni ordinate pulite.




Passo #4

Fare click su Code e scegliere Text per passare alla modalita' codice C++








Selezionare Continue

Passo #5

Creare il proprio codice in maniera pulita ed ordinata, utilizzando  un'indentazione con 4 spazi

Se necessario, inserire commenti, in modo pulito ed ordinato, per spiegare o richiedere supporto.
 Viene utilizzato come mezzo di collaborazione



Passo #6

Una volta terminato, tornare alla libreria di circuiti





Passo #7

Selezionare le proprieta' del proprio progetto





Passo #8

Impostare il proprio progetto come Pubblico



Salvare le proprita'




Passo #9

Rientrare nel proprio progetto e generare il link di condivisione selezionando share





Poi selezionare Invite People





Copiare il link generato e condividerlo sul gruppo per collaborare sul progetto.

In questo modo sia l'autore del circuito che qualsiasi membro del gruppo Facebook possono collaborare sullo stesso progetto.

Le modifiche fatte da una persona sono vista da tutti.


mercoledì 28 febbraio 2018

L298N Driver Motori con Arduino








Oggi mi e' capitato sotto mano una scheda driver motore basata sull'integrato L298N.

In questo post faccio la prova della scheda e la interfaccio ad Arduino.


Scheda Motori L298N


La schedina e' un controller/driver per 2 motori DC che si può' interfacciare ad Arduino e ESP8266 e ovviamente a moltissimi altri micro o schede di sviluppo.

Questa scheda può' essere usata anche per controllare dei motori passo passo ma non e' oggetto di questo post.











La scheda si basa sull'integrato L298N che e' un doppio H-Bridge e può' controllare 2 motori DC per un totale di 4A.



Scheda L298N Piedinatura


In foto vediamo i pin ed i connettori disponibili sulla scheda




I due connettori laterali sono dedicati alla connessione dei due motori DC. L'ordine di connessione dei fili non e' importante.

Il connettore frontale serve per l'alimentazione:

  • +12V: alimentazione fino a 12V
  • GND
  • +5V: questo pin e' un uscita e fornisce 5 Volt. L'uscita e' attiva solo se il relativo ponticello (+5V Enable) e' presente

Il successivo connettore e' formato da 2 ponticelli e 4 pin:

  • Enable Output A: abilita il motore A
  • IN1 - IN2: controllo rotazione motore A
  • IN3 - IN4: controllo rotazione motore B
  • Enable Output B: abilita motore B


E' importante notare come i pin di Enable Output A/B permettano di controllare la velocità' di rotazione dei due motore.










Rotazione senza controllo di velocità


Vediamo ora l'utilizzo di questa scheda driver con Arduino.

Nell'esempio sotto riportato vediamo come effettuare il circuito su breadboard per controllare la rotazione in senso orario e antiorario di un motore DC.






Qui la realizzazione su breadboard






Come si può' osservare in questo case ho lasciato il ponticello su Enable Output A.

Vediamo ora un semplice codice di controllo




Come si vede ci sono tre stati per i GPIO 7 e 8:


  1. GPIO 7 = HIGH - GPIO 8 = LOW --> il motore ruota in senso orario
  2. GPIO 7 = LOW - GPIO 8 = HIGH --> il motore ruota in senso antiorario
  3. GPIO 7 = LOW - GPIO 8 = LOW --> il motore e' fermo

Quindi questa scheda ci permette di controllare la rotazione di uno o due motori DC in maniera semplicissima utilizzando solamente 2 GPIO per motore.

I motori ovviamente sono controllabili indipendentemente l'uno dall'altro. 

Questo per esempio e' molto utile nei classici progetti di RobotCar o simili














Rotazione con controllo di velocità'


Nell'esempio sotto riportato vediamo come effettuare il circuito su breadboard per controllare la rotazione in senso orario e antiorario di un motore DC con controllo di velocità'.

Nello sketch vedremo come e' possibile anche variare la velocità' di rotazione del motore permettendo di accelerare e decelerare (io lo faccio vedere con accelerazione costante per semplicità').





Come si vede l'unica differenza con lo schema precedente e' che ho rimosso il ponticello Enable Output A ed ho collegato il pin and un GPIO PWM (#9) di Arduino.

E' importante che sia connesso ad un GPIO con uscita PWM, solo cosi' potremo controllare la velocità' proporzionalmente al valore in uscita sul pin PWM.


Qui la realizzazione su breadboard






Vediamo ora un semplice codice di controllo




Come si vede la gestione dei GPIO 7 e 8 e' uguale al caso precedente.

Nella funzione motor_accel ho aggiunto il controllo della velocità' accelerando in modo uniforme da zero alla massima velocità' e analogamente decelerando fino a zero prima di cambiare senso di rotazione.

Nella funzione si vede chiaramente che il controllo della velocità' di rotazione e' determinato dalla scrittura sul GPIO 9 di un valore tra 0 (fermo) e 255 (massima velocità').












martedì 20 febbraio 2018

Programmare ESP8266-01 con Arduino Uno








Con il passaggio a Windows 10 l'adattatore USB to TTL (1x PL2302HX USB to TTL converter) che usavo per programmare lo ESP8266-01 non funziona più'.

Questo perché'  il chip usato nell'adattatore e' "falso" e non riconosciuto dal driver di windows.

A questo punto avevo due cose da fare: o comprare un nuovo adattatore o ingegnarmi.
Allora ho pensato: "ma in fondo ho una scheda Arduino a casa che sicuramente potrà' aiutarmi"

In effetti dopo un po' di prove ecco come ho rimpiazzato l'adattatore USB - TTL con una scheda Arduino Uno (simile per altre schede Arduino)


Arduino come adattatore Seriale


L'idea e' di utilizzare l'adattatore USB - Serial già' a bordo di Arduino Uno per poter programmare lo ESP8266-01 tramite l'IDE Arduino.

Per fare cio' e' necessario bypassare il bootloader dell'Atmega e far si che su Arduino non giri nessun programma.

Cio' si fa' semplicemente collegando il pin RST (Reset) a  GND. 

Sotto lo schema su breadboard dei collegamenti necessari per poter programmare correttamente lo ESP8266-01 con Arduino.


Nota:

lo ESP8266-01 e' perfettamente tollerante a segnali seriali da 5V

Il lettore che per qualche ragione pensasse che ciò' non e' sicuro e' invitato a non realizzare il circuito.

In ogni caso la responsabilità' del buon funzionamento di Arduino e dello ESP8266 e' demandata al lettore.














Qui sotto il relativo schema elettrico







e la realizzazione su breadboard






Uso dei pulsanti

Come e' possibile notare dallo schema elettrico sono presenti due pulsanti collegati nel seguente modo:


  • SW Reset: sul pin RST di ESP8266
  • SW Flash: sul pin GPIO0 di ESP8266


Questo e' necessario in quanto per poter programmare correttamente lo ESP8266-01 e' necessario portarlo nello stato UART Download Mode (piu' informazioni qui)


Questo si ottiene con la seguente procedura:


  1. si mantiene premuto il pulsante SW Flash
  2. si preme e si rilascia il pulsante SW Reset
  3. si rilascia il pulsante SW Flash

Suggerisco di effettuare tale procedura solo alcuni secondi prima dell'inizio del caricamento dello sketch dal PC allo ESP8266-01










ESP8266-01 Dev Board

Siccome i pin dello ESP8266-01 non sono compatibili con una breadboard io utilizzo una dev board realizzata da me.

Potete trovare tutti i dettagli qui se volete divertirvi a costruirla.






Test

Qui un semplice Sketch di test per verificare che in effetti si riesce a caricare uno sketch su EPS8266-01




Qui sotto il dettaglio di cosa dovreste ottenere nel vostro ambiente se il caricamene avviene con successo.














venerdì 16 febbraio 2018

Arduino e Demultiplexer SN74LS138








Quando si inizia a realizzare i primissimi progetti con Arduino i dispositivi esterni da controllare sono pochi (1 o 2 Led oppure 1 motore DC) e i GPIO forniti da Arduino sono sufficienti.

Tuttavia quando si inizia a realizzare progetti più complessi con un numero maggiore di dispositivi da controllare (un numero di led superiore ai GPIO di Arduino) iniziano le prime perplessità'. La domanda tipica  é : "Come faccio a controllare 20 led se ho solo 8 GPIO?"

Ci sono vari modi ed il più comune é utilizzare un Demultiplexer.

Demultiplexer

Il demultiplexer e' circuito elettronico che permette di selezionare una delle N uscite tramite M pin di controllo o indirizzo.

dove

M  = log2(N)


Quindi all'atto pratico un demultiplexer ad 8 uscite si controlla con 3 pin d'indirizzo.

Questa proprietà'  ci fa immediatamente capire che in questo modo si può' ridurre notevolmente l'uso dei GPIO di Arduino.

Quindi senza demultiplexer per controllare 8 Led devo impiegare 8 GPIO di Arduino.
Al contrario tramite l'uso di un demultiplexer sono necessari solo 3 GPIO di Arduino, lasciandone 5 liberi per altri scopi.

Chiaramente i demultiplexer si possono collegare in cascata per controllare un numero ancora maggiore di uscite. Questo post non tratta la cascata di demultiplexer

SN74LS138

Sul mercato ci sono moltissimi tipi di demultiplexer forniti dai vari produttori con molte sigle, ma fondamentalmente funzionano tutti nello stesso modo e seguendo lo stesso principio.

Io ho in casa un SN74LS138 e quindi lo uso in quest post e faccio vedere come pilotare 8 Led con 3 GPIO di Arduino Uno.

Se voi avete un demultiplexer con un'altra sigla, niente paura: controllate il suo datasheet per vedere come sono disposti e chiamati i pin.


Qui il datasheet del SN74L38




In figura riporto la disposizione dei pin sul chip.

I piedini hanno la seguente funzione:

  • A - B - C: 3 pin di indirizzo per selezionare una delle 8 uscite Y0-Y7
  • G2A - G2B : Input Enable attivi LOW controllano lo stato delle uscite
  • G1: Input Enable attivo HIGH controlla lo stato delle uscite
  • Y7: uscita #8
  • GND 
  • VCC
  • Y0- Y6: uscita da #1 a #7







Gli input enable sono utilizzati quando si crea una cascata.

Nel nostro caso di demultiplexer singolo gli Input Enable devono assumere questi stati:


  • G2A: LOW
  • G2B: LOW
  • G1: HIGH


Qui sotto la "tabella di verità'" che indica chiaramente come vengono attivate le uscite al variare dei pin di indirizzo.

Da notare che i pin sono chiamati C,B, A corrispondono ai pin A, B, C della figura sopra






Quindi da questa tabella si vede che per attivare l'uscita #1 (Y0) bisogna settare i pin di indirizzo in questo modo:


  • A: LOW
  • B: LOW
  • C: LOW
mentre per attivare l'uscita #6 (Y5) bisogna settare i pin di indirizzo in questo modo:


  • A: HIGH
  • B: LOW
  • C: HIGH

Realizzazione con Arduino

Sotto vedete lo schema dei collegamenti su breadboard per usare il demultiplexer con Arduino.




Da datasheet il SN74LS138 puo' assorbire al max 8mA per uscita, quindi ho dimensionato al resistenza a 470 Ohm rimanendo perciò' sotto il limite massimo.







Qui la mia realizzazione





Codice di prova

Qui un semplice codice di prova che implementa la classica barra a led scorrevole usando solo 3 GPIO di Arduino





Qui un codice "naive" per chi mastica poco il C.


 Qui il video di funzionamento










venerdì 2 febbraio 2018

Pulsanti e Resistenze di Pull Up-Down con Arduino







In questo post tratto un tema base per chi si avvicina ad Arduino ed in particolare come leggere correttamente lo stato di un pulsante ed accendere un led di conseguenza.

Il tema puo' sembrare banale ma ho visto sul gruppo Facebook che moltissime persone che si avvicinano ad Arduino non hanno ben chiaro il concetto di Resistenza di Pull-Up e di Pull-Down.

In questo post spiego questo concetto e lo applico ad un pulsante. 

Questo e' un concetto base che poi e' utilizzato in altri scenari nell'uso di Arduino e nella realizzazione di progetti.


Alta Impedenza

Quando in uno sketch impostiamo (tipicamente nel setup) un digital pin a input




Il pin in questione viene portato in uno stato di Alta Impedenza,  come se in serie al pin ci sia una resistenza da 100 MOhM. In tale stato il pin in ingresso richiede una piccolissima corrente per cambiare stato logico.

In altre parole il pin in alta impedenza si comporta come una "semplicissima "antenna" e puo' captare qualsiasi tipo di rumore o perturbazione e di conseguenza cambiare stato logico in maniera casuale e non controllabile.




Per esempio nel codice qui sopra in cui accendiamo un led in base allo stato di un pulsante, non riusciremo a raggiungere l'effetto desiderato in quanto il led si accenderà' anche senza una pressione del pulsante.


Pull-Up e Pull-Down

Il problema sopra evidenziato si risolve collegando opportunamente una resistenza al pin in question.







Piu' nello specifico ci sono due configurazioni possibili:

  • Pull-Up: si inserisce un'opportuna resistenza (10-100K Ohm) tra il piedino e l'alimentazione (VCC)
  • Pull-Down:si inserisce un'opportuna resistenza (10-100K Ohm) tra il piedino e la massa (GND)


Vediamo piu' in dettaglio il funzionamento (la linea blu rappresenta il flusso di corrente).





Pull-Up


In questo caso si vede che con il pulsante OFF (non premuto) il pin assume stato logico stabile 1 (HIGH).
Contrariamente al caso in cui la resistenza non e' presente lo stato logico 1 permane all'ingresso del pin di arduino in modo stabile e permanente.





In questo caso si vede che alla pressione del pulsante la corrente fluisce verso massa portando il pin allo stato logico 0 (LOW).

Pull-Down





In questo caso si vede che con il pulsante OFF (non premuto) il pin assume stato logico stabile 0 (LOW).
Contrariamente al caso in cui la resistenza non e' presente lo stato logico 0 permane all'ingresso del pin di arduino in modo stabile e permanente.






In questo caso si vede che alla pressione del pulsante la corrente fluisce verso massa portando il pin allo stato logico 1 (HIGH).



Circuito con Pulsante e resistenza di Pull-Up

Qui il classico schema elettrico per il collegamento di un pulsante ad arduino in modo corretto (a meno del bouncing)





Qui lo schema su breadboard





Qui un semplice codice di test.





Circuito con Pulsante e resistenza di Pull-Down

Qui il classico schema elettrico per il collegamento di un pulsante ad arduino in modo corretto (a meno del bouncing)



Qui lo schema su breadboard






Qui un semplice codice di test







Circuito con Pulsante senza Resistenza

Ora che il concetto di Pull-Up e Pull-Down e' chiaro possiamo sfruttare una caratteristica del micro Atmel 328 (quello di arduino).
In particolare questo micro controllore fornisce internamente per ogni pin di I/O digitale una resistenza di Pull-Up.

Questo e' un grande vantaggio in quanto ci permette di risparmiare una resistenza e di semplificare il nostro circuito.

Qui il classico schema elettrico per il collegamento di un pulsante ad arduino in modo corretto (a meno del bouncing) senza resistenza di Pull.









Qui un semplice codice di test



Come si vede basta durante la configurazione del pin di input usare il valore INPUT_PULLUP e la resistenza interna al micro viene abilitata.

Si fa notare che la resistenza interna e' solo di Pull-UP.
Se si vuole usare la configurazione Pull-Down e' necessario inserire la resistenza esternamente come mostrato sopra.

Spero con questo post di fare un po' di chiarezza per chi e' alle prime armi e non ha le nozioni base di elettronica ed elettrotecnica.





venerdì 5 gennaio 2018

The DrawingBot







In this post I describe the making of a small robot called DrawingBot which draws some simple shapes or lines on a sheet of paper using a simple felt tip pen.





For the impatient one below the video of the making and the video of drawing executed by DrawingBot.

















Project


The project is intended for everyone that want to realize a small robot from scratch and the ones with the main purpose to learn and experiment.

Once realized the DrawingBot it is possible to draw some simple drawing which are not really accurate. However the main goal is not to draw but to build and understand how the DrawingBot works from mechanical, electrical and software point of view.


The project is made by the major elements:
  • the  STL files for the 3D printing of the chassis 






  • the Arduino code (sketch) to control the robot
  • a simple python app which allow the user to pro grammatically generate drawings on screen  and that automatically generates the DrawingBot commands

All the files are available on my github [here]

Making

Let's now see the steps to build and make the DrawingBot


1- Printing of the  DrawingBot


Download the STL file for each component from my  github [here] and print them with your 3D printer


2- DrawingBot Assembling- Mechanical part


In the initial video I have assembled the DrawingBot from scratch hence all the steps are available in the video.

Below the Bill of Material of the  DrawingBot containing all the necessary components







The assembling of the mechanical parts is quite simple and can be complete with a normal screw driver and just few bolt and nuts.


3- DrawingBot Assembling- Electrical part

Once all the 3D printed components are assembled it is time for the electronics which is based on standard and inexpensive components: 1x Arduino Uno, 2x stepper and  1x Servo.

The assembling of the circuit is very simple and it is done through the use of few rainbow DuPont wires, hence using a color code. For this reason this circuit can be made by everyone including kids and beginners.















In order to achieve a quite clean and ordered cabling I have realized a simple connection board by using a small strip board.
















Software forArduino

The DrawingBot's software is avaiable on my github [here].


There are few parameters that can be tweaked based on your specific needs:

  • PEN_DOWN:  rotation angle of the servo when the pen is down (drawing)
  • PEN_UP: rotation angle of the servo when the pen is up (moving)
  • wheel_dia: wheel's diameter in mm
  • wheel_dia_correction: correction factor to make the DrawingBot more accurate
  • wheel_base: width wheel-to-wheel in mm

Drawing Software

The drawingbot.py file contains a simple app in python that allow:

  • create and show on screen a programmatic drawing
  • automatically generate the commands for the DrawingBot

The programmatic drawing should be included in the following method: def drawing()





This generates a drawing on the screen





and in the console the DrawingBot's command will be printed




Now in the  drawingbot.ino file, after the below line just add the commands generated in the previous step

/* Insert here the drawing commands */


Compile and upload your sketch and after 5 seconds the DrawingBot will automatically start to execute the drawing

Happy DrawingBot-ting!!!! :)