Adafruit trinket + acceleleometer + low power transmitter - arduino

I need to make a device where there has to be the following components:
1. An accelerometer chip ( as thin and small as possible)
2. A bluetooth or low power data transmitter
The device will be attached to an object and if the object is moved in a certain way, a small amount of data needs to be transmitted indicating that the object has moved.
Restriction: The whole device has to be as thin as possible.
The transmitter can be low powered because the receiver will be within a few feet(4-5 feet). The amount of data transmitted is also very small (a few bytes).
Can you guys give me a suggestion what are the devices I can use?
I am thinking about an MPU-6050 3-Axis Gyroscope + 3-Axis Accelerometer 6-DOF Module (Arduino Compatible Core Module) and an adafruit trinket. But I do not know what module I can use to trasmit the data.
Any suggestions will be greatly appreciated.

Try this one:
http://www.aliexpress.com/item/nrf51822-MPU6050-6pixs/32456095618.html?ws_ab_test=201407_1%2C201444_6_3_2_1_5_4%2C201409_1&spm=2114.01020208.3.2.MJWube
It is a module with Bluetooth (nRF51822)/6-DOF Gyroscope/Accelerometer as well as a wireless charging module. The size is only 16 mm and the module is super thin.
I used this for my project and worked very well.
A lot of tools can be used for programming it like MK20 USB from redbearlab or just nRF51822-mKIT.

Related

How do I use device registers to configure the operation of a device?

So I'm building a device to measure pressure in a clean room and using a Raspberry Pi Pico with a pressure sensor. I'm writing the code in Micropython and while the sensor is designed to be used right out of the box, I'm interested in how I use the device registers to modify it's operation (as well as other peripherals I have attatched). I understand the registers are 8-bit and how how the hex translates to binary and back. However, the code for the lists all the editable registers and their hex addresses but I have no idea how to modify the bits to turn off/on the features represented by each bit.
Does flipping each bit on/off just change the binary and thus changes the device register hex?
Thank you!

Max TX power Classic bluetooth for ESP32

I have been using esp32 for some projects.
Now i want to include classic bluetooth with a serial profile for one of our old projects.
In theory ESP32 is class 1,2,3 Bluetooth and in theory it supports 100meters.
I have been trying to raise the TX power for bluetooth playing with function esp_bredr_tx_power_set.
I have been able to raise it a bit passing params:
esp_bredr_tx_power_set(ESP_PWR_LVL_P9,ESP_PWR_LVL_P9);
But it is not enough. I have another bluetooth class 1 device with serial profile with more power (one from bluegiga).
Power consumption is not a problem in this project but distance is critical.
Is it possible to raise the power of classic bluetooth more on ESP32?
To check that power is assigned right, i used the get fuction
esp_power_level_t min,max;
esp_ble_tx_power_set(ESP_BLE_PWR_TYPE_ADV,ESP_PWR_LVL_P9 );
esp_bredr_tx_power_set(ESP_PWR_LVL_P9,ESP_PWR_LVL_P9 );
delay(1000);
esp_bredr_tx_power_get(&min,&max);
Serial.printf("min %d max %d",min,max);
The pause is used to be sure that power is changed (if you do it without delay, you see the old value). Probably 1s is too much, but this is just a test.
Thanks.
The highest TX output for an ESP32 is +9dbm, which falls in-between BT class 1 (+12dbm) and class 2 (+4dbm). So you have what it seems already set your TX power output to the maximum. It's not clear if you are using an PCB antenna or an external antenna, the latter will of course increase the range.
For the different BT power classes see this link
See Espressive document (scroll down to section with ESP_PWR_LVL_P9)

Using an Arduino as EMG sensor

When I search online for EMG sensors, I often see these sensors are just made of a few transistors, resistors and sometimes diodes. Also I once read on a site that EMG sensors are some kind of modified voltmeters. But while I managed to make a voltmeter from an Arduino, I haven't been able to make an EMG sensor from an Arduino.
Does someone know whether it is possible to make an EMG sensor from an Arduino and how they did achieve this?
I think the biggest problem here is that of dynamic range. EMG signals are AC voltages typically in the low mV range and would need a gain of 100 or so to get them up to +/-2.5V, then a simple offset circuit to convert that to 0-5V for the Arduino analog inputs. However, that's not the whole story, since the small EMG signals can ride up and down on large low-frequency background voltages. Your AC amplifier would need a high-pass filter to remove those, or they could drive it off-scale which would prevent the EMG from getting through. If you reduce the gain to keep things in range, the EMG will be a rather small part of the 10-bit ADC range on the Arduino.
So the thing to ask is what is the point of using the Arduino in the first place? If you are going to connect it to a computer in order to look at the EMG signals, then why not just skip the Arduino and use the computer's sound card? The Mic input probably has enough gain already, and you get at least 16-bit resolution to handle any large non-EMG background that wasn't filtered out.
IMPORTANT! EMG measurements require direct electrical connection to the body. For safety, you should make certain that your recording equipment is electrically isolated. If you use only a standalone Arduino, you should power it from batteries. If you use a computer, it should be a laptop running on batteries, with no other connections to ground.
I often see these sensors are just made of a few transistors,
resistors and sometimes diodes.
That's true for pretty much all electronics devices...
Does someone know whether it is possible to make an EMG sensor from an
Arduino and how they did achieve this?
You cannot build an EMG sensor from an Arduino. But you read sensor values with an Arduino either through serial interfaces or by measuring voltages.
With a bare Arduino you can neither measure negative voltages nor can you amplify small signals. (we're in the µV range here...)
Just buy something ready or learn more on electronics

Power problems stacked Arduino shields

I have a weird problem. I am currently building a BB-8. Therefore, I am using an Arduino Uno. On top, I have stacked an Adafruit Motor Shield v2.3 and, again, on top of this, I have stacked the Sparkfun USB Host Shield. The Arduino is powered by a 9V-Block battery, the motors are powered separately by two 18650 Li-Ion batteries. To control the two Pololu motors, which have a stall current of 1.6 amps each, I use a Xbox 360 wireless controller, where the receiver is connected to the USB Host Shield.
Now to my problem. Every seems to work fine, until i cover everything with a styrofoam hemisphere. Yes, you've read right. If that happens, the controller signals is lost and does not connect again, unless I restart the Arduino. I have uploaded a small video on youtube, where you can see the problem.
I guess, this is a power problem, since this issue does not occur, when I connect the Xbox receiver to my Mac. Has anyone an idea, how to solve this problem?
I already tried another power source. And the USB host shield should give enough power, since the specs are saying, that 500 mA is no problem, and hit is exactly the USB 2.0 spec. The combination of the shield shouldn't be a problem, too. I carefully chose this shields, because the motor shield is just using the pins A4 and A5, the USB host shield is using some of the digital pins, so I think there is no interference.
Thank you for your help.
EDIT
I have tested it a bit more now and i think i can reduce the probable reasons. First, i tried some other power supplies, from AA batteries on the VIN pin to external power adaptors. Next, i tried other xbox receivers and controllers. I also tried a playstation 3 controller with a Bluetooth dongle. Nothing solved the problem. I also covered the Arduino with other things than styrofoam, like a garbage can, cardboard and some metal box. This worked, so the problem was only with styrofoam. Now i haven't covered the Arduino, but i slowly got closer. About 20 cm from the Arduino, it stopped working. My clue: static electricity. Do you think this can be a problem? And if yes, how can i solve this?
Try use single battery + separate voltage regulators for every load. Otherwise if one of the batteries discharges while other are ok, it can take all power of the system, something like short-circuit. Also you can receive a trouble if do error in ground connections.
Select good battery, which can provide enough power. If cant find a battery which can supply enough current think about using low current batteries in series to achieve extra voltage. Then reduce voltage using dc-dc step down converter.
For example if you have a battery of 24V which provides 1A (power p1 = 24*1). It can provide 5A if reduce the voltage to 5V using dc-dc. (power p2 = 5*5). Because p1*h=p2, where [h=0.8 - efficiency].
So, I solved the problem. As is mentioned in my question, the problem was static electricity. I primed the styrofoam sphere with some special primer to make the styrofoam a little more stable and so on. That's it. Luckily I didn't touch the Arduino with the sphere. I think it would have damaged the Arduino.

Is it stable to change I/O direction on microcontroller repeatedly?

I'm new to microcontroller programming and I have interfaced my microcontroller board to another device that provides a status based on the command send to it but, this status is provided on the same I/O pin that is used to provide data. So basically, I have an 8-bit data line that is used as an output from the microcontroller, but for certain commands I get a status back on one of the data lines if I choose to read it. So I would be required to change the direction of this one line to read the status thus converting this line as an ouput to an input and then back to an output. Is this acceptable programming or will this changing of the I/O pin this frequently cause instability?
Thanks.
There should not be any problem with changing the direction of the I/O line to read the status returned by the peripheral provided that you change the state of the line to an input before the peripheral starts to drive the line and then do not try to drive the line as an output until the peripheral stops driving it. What you must try to avoid is contention between the two driver devices, i.e. having the two ends being driven to opposite states by the processor and peripheral. This would result in, at best a large spike in the power consumption or worse blown pin driver circuitry in the processor, peripheral or both.
You do not say what the processor or peripheral are so I cannot tell whether there are any control bits in the interface that enable the remote device to output the status so that you can know whether the peripheral is driving the line at any time.
I've done this on digital I/O pins without any problems but I'm very far from an expert on this. It probably depends entirely on which microcontroller you are using though.
Yes, it's perfectly fine to change I/O direction on microcontroller repeatedly.
That's the standard method of communicating over open-collector buses such as I2C and the iButton. (see PICList: busses for links to assembly-language code examples).
transmit 0 bit: set output LATx bit to 0, and then set TRISx bit to OUTPUT.
transmit 1 bit: keep output LATx bit at 0, and set TRIS bit to INPUT (let external resistor pull-up line to high)
listen for response from peripheral: keep output LATx bit at 0, and set TRIS bit to INPUT. Let external resistor pull-up line to high when peripheral is transmitting a 1, or let the peripheral pull the line low when peripheral is transmitting a 0. Read the bit from the PORTx pin.
If both ends of the bus correctly follow this protocol (in particular, if neither end actively drives the line to high), then you never have to worry about contention or current spikes.
It`s important to remember that any IO switching in high speed generates EMI.
Depending of switching frequency, board layout and devices sensibilities, this EMI can affect performance and reliability of your application.
If you are having problems in your application use an oscilloscope to check for irradiated EMI in your board lanes.

Resources