Input Devices
Magnetic Sensor
For this assignment I decided to build an electronic board equipped with a magnetic sensor that can detect magnetic fields.
DataSheet
This
is
the
datasheet
of
the
magnetic
sensor.
My Hall Sensor Board 2
As
I
have
learned
in
past
weeks,
to
create
my
electronic
board,
I
have
used
the
“
Eagle
”
software
to
prepare
the
schematic
(fig.1)
and
the
electrical
connections
named
Board
(fig.2).
For
this
board
I
decided
to
have
more
pins
available
for
further
development,
for
example
to
use
it
in
my
final
project.
I
think it is useful to multiply the power and ground pins in more contacts and also have extra pins available.
1 Eagle Schematic
2 Eagle Board
fig.3 “Traces”
fig.4 Outline and holes
Program the Board
To
program
my
electronic
card
I
have
used
the
“Arduino
ide”.
Before
proceeding
with
the
programming
I
verified
that
the
card
hardware
was
fully
functional.
I
used
avrdude
to
establish
the
contact
with
the
card
and
verified
that
it
was
working
and
ready
to
receive
data.
My
USB-tiny
programmer help me in this operation.
The Components
I chose ATMega328p TQFP card because it has many available pins. This choice comes from the fact that I would like that my card would be ready for
possible other use and expansions, ( e.g adding other sensors, servo motors ecc)
Partlist exported from C:/Users/UTENTE/Documents/eagle/HALL SENSOR 2/HALL SENSOR 2.sch
Qty
Value
Device
Package
Parts
Description
1
PINHD-1X1
1X01
JP4
PIN HEADER
1
PINHD-1X2
1X02
JP2
PIN HEADER
4
PINHD-1X3
1X03
JP3, JP5, JP6, JP7
PIN HEADER
1
PINHD-1X4
1X04
JP1
PIN HEADER
2
PINHD-2X3-SMD
2X03SMD
DEVICES, FTDI
PIN HEADER
2
100 Hom
RES-US1206FAB
R1206FAB
R2, R3
Resistor (US Symbol)
2
100nF
CAP-US1206FAB
C1206FAB
C1, C2
1
10K
RES-US1206FAB
R1206FAB
R1
Resistor (US Symbol)
1
A1302LH
A1302LH
SOT23-W
IC2
Linear Hall Effect Sensor ICs
1
ATMEGA88-THIN
ATMEGA88-THIN
TQFP32-08THIN
IC1
2
LEDFAB1206
LEDFAB1206
LED1206FAB
U$1, U$2
LED
1
RESONATOR
RESONATOR
EFOBM
U$4
Control of readiness of the Device
Having
connected
the
electronic
board
to
the
“Usbtinyisp”
programmer
(built
in
the
first
weeks
of
the
fablabcourse)
the
“Avrdudess
program”
confirms
that
everything
is
ready
for
programming.
At
this
point,
I
start
the
“Arduino
ide”
and
start
typing
the
code
of
my
software.
When
the
code
is
written,
I
connect the hall sensor board to the “usb to ttl serial converter”. Doing so, I can test
the data coming from the magnetic sensor.
Baud rate? unexplained mystery…
At this stage I encountered a very unusual problem .... I studied that in the serial protocol the transmission and reception’s speed should be the same.
The speed is measured in baud rate. Usually, the default value is 9600 with bit 8 no parity, bit stop 1..
Unexpectedly, when I connected my card programmed with a baud rate 9600, the arduino serial monitor did not receive any data! All was set to 9600,
even the usb to ttl serial converter.
however
it
did
not
work
...
the
serial
port
was
transmitting
but
the
computer
did
not
receive
the
data.
Then
I
installed
a
serial
port
monitoring
software
to
figure
out
where the problem was...
Unbelievable ...
I then tried to change some parameters. Changing the
reception speed, I saw strange symbols appearing on the
screen .... and tan error related to the frame uart ...
I then understood that something was misaligned and I kept
changing the values. Atbaud rate 600, everithing started to
work again.
Possibly the default value of 9600 was divided by 16 ... 9600/16
= 600.
Taking into consideration this, I modified the transmission
value accoridngly: 9600 * 16 = 153.600 and found the solution
to all the problems !!!
Everything was working well eceiving on the serial 9600 ... but I
could not understand the reason for this problem, maybe it
could be something
related to the
microcontroller.
I haven’t understood yet.
Final Conclusions
Reprocessing the card was a good job, and despite the problem of the baud rate my magnetic sensor
works very well. Obviously I tried the card on different computers and everything is fine.
Upgrade! 01/05/2018
finally I solved the problem, I realized that the error was in the processor clock settings. By searching the web, I found a library for arduino that allows you
to set the external clock to 20 MHZ. I have downloaded the library, reconfigured the fuses , and the card now works at 9600 regularly. Problem solved!
Supported Chips and Clocks
ATmega8/168: The chips used in early arduino boards (e.g. Arduino NG, Arduino Diecimila).
ATmega328p: The chips used in recent arduino boards (eg. Arduino Duemilanove, Arduino UNO).
ATmega168p/328: Different but functionally equivalent to the above. People sometimes buy these by mistake.
The
core
delay()
function
is
not
very
precise
for
clock
rates
other
than
external
8
and
16MHz.
The
internal
clock
should
provide
enough
precision
for
most
cases but external 12 and 20 MHz are useful only if your code does not depend on precision timing.
Install
Open the Arduino IDE preferences window and add the following URL to the Additional Boards Manager URLs list:
https://raw.githubusercontent.com/carlosefr/atmega/master/package_carlosefr_atmega_index.json
Now
go
to
Tools
>
Board
>
Boards
Manager
and
search
for
Barebones
ATmega
Chips.
Select
it
from
the
list
and
click
Install.
A
new
section
called
ATmega
Microcontrollers will immediately appear in the Tools > Board menu.
My Final Test
In
this
video
you
can
see
the
complete
test
of
my
card.
The
sensor’s
data
are
read
by
my
software
and
graphically
represented
on
the
screen
as
red
ellipses
that
are
synchronized
with
a
sound
in
relation
to
the
value
provided
.
See
More
details
on
the
output device page.
Next
step
is:
to
export
the
images
in
order
to
be
able
to
mill
the
copper
board
with
the
“Roland”
milling
machine,
export
the
files
in
.png
format
and
prepare
them
for
processing
with
the
fab
moduls
online.The
files
are
traces
(fig.3)
and
outline
and
Holes
(fig.4).(
Gimp
Software
help
me
to
draw
the
holes and outline).
Milling machine in action!
My Milled copper Board
I Start soldering!
I like to start to soldering with Avr microcontroller, in this case a ATmega 328p, so next all other components and at last the pin header.
Pinout of ATMega328p TQFP
My Board with AVR ATMega328p TQFP
My Board with all components
My Board and my Eagle project
Original Files and Useful Links
AVRDUDESS: the card is ready!
When
AVRDUDESS
is
started,
I
first
chose
the
correct
programmer
model
from the list. My USBtiny is on the list.
The
next
operation
is
Detecting
MCU
connected,
I
do
this
by
clicking
with
the
left
mouse
button
on
the
"Detect"
button.
Immediately
the
name
"ATMega328P"
of
MCU
appeared
on
the
field
and
I
am
very
happy
because
my electronic card is alive!
/* HALL SENSOR BOARD V.2.0
code written by Giuseppe Allocca
FabLab class 2018
Santa Chiara FabLab SIena Italy
*/
//leds pins definition
int powerled = 3;
//white led
int comled = 2;
//blu led
int sensor= 16;
//Analogic pin
int sensor_value=0;
int pinsound=5;
//digital pin
void setup() {
// initialize serial:
Serial.begin(153600,SERIAL_8N1);
/* my usb to ttl serial converter divide serial baud declared by 16
and so...153600/16 =9600 I really don't know why!!! */
// initialize digital pin LED as an output and pin Button as input
pinMode(powerled, OUTPUT);
pinMode(comled, OUTPUT);
pinMode(sensor, INPUT);
pinMode(pinsound, OUTPUT);
// turn LED on:
digitalWrite(powerled, HIGH);
//Board power-on
digitalWrite(comled,LOW);
//comled off
}
// end void setup
void loop() {
/* activates serial transmission and blinking led blue
when sensor value if different then normal status */
// read the sensor value from pin 16
sensor_value=analogRead(sensor);
// "or" operator to control low or high value change depending by polarity of magnet
if ((sensor_value)>511||(sensor_value)<508)
//blue led blinking synchronized to sensor_value
{digitalWrite(comled,HIGH);delay(map((sensor_value),20,1023,1,10));digitalWrite(comled,LOW);delay(map((sensor_value),20,1023,1,10));
//remap value of sensor to 1-100 scale and send the value to serial port
Serial.println(map((sensor_value),13,450,10,900));
//sound zone
digitalWrite(pinsound,HIGH);delay(map((sensor_value),20,1023,1,10));
//start beep
digitalWrite(pinsound,LOW);
//end beep
// the sound are synchronized to sensor_value than blue led
}
// end if
}
//end void loop
My Arduino code with Serial speed problem…
Useful PinOut of ATMEGA328p with Arduino pin number
Arduino plotter monitor function
Arduino serial monitor function
Assignment
Measure something:
add a sensor to a microcontroller board that you have designed and read it