Is iBeacon detection within another iBeacon range possible? BLE - bluetooth-lowenergy

iBeacon Question. Is this possible ..
Can I have 4 iBeacon’s that are used on the corners of a stage that is say 10ft by 25ft. This is used so I can detect this stage area in the App. (Are 4 iBeacon’s needed to do this or can it be done with 3?)
I Then need the App to detect 2 things ...
The app needs to detect if it’s inside or outside of the area, and how close it is to the area it is outside of, and on what side of the area it is.
If a 5th iBeacon is brought inside the area, can the app detect that there is a separate iBeacon that is within the stage area setup by the previous 4 iBeacon’s.
E.g. You App tells you there is a stage in front and where in relation to the stage you are by using the 4 iBeacon’s. The app then tells you that there is now another 5th iBeacon has entered the stage and where it is on the stage. The App can then detect that the 5th iBeacon has now left the stage.
Is this possible???

Yes you can, as long as each beacon has a unique identifier. Most likely I would configure the beacons to:
Have the same UUID
Have the same Major
Have a unique Minor
If you use CoreLocation's locationManager:didRangeBeacons:inRegion: the delegate will give you a callback with all the beacons it can see at a current time. You can use this to track your own list of beacons and see if a new beacon has appeared.
Example code might look like this:
- (void)locationManager:(CLLocationManager *)manager
didRangeBeacons:(NSArray *)beacons
inRegion:(CLBeaconRegion *)region
{
for (CLBeacon *beacon in beacons)
{
// TODO: Handle each beacon logic here
}
// TODO: Clean up any stale beacons here (e.g. remove old beacons)
}
```

csexton's answer is correct in terms of ranging multiple beacons, but you may have difficulty using multiple beacons to accurately determine a position in a 10'x25' stage.
iBeacon distance calculations are based on received signal strength and is affected considerably by things that absorb the radio signal - such as people. The iPhone doesn't have a directional bluetooth antenna so it can't triangulate the received signals, so this means if the beacon on, say, the left edge of the stage is being received the app won't know whether the device is on the stage, to the right of the iBeacon, or off the stage in the audience.
I guesss all you can do is try.

Related

Some questions for bluetooth low energy as an indoor proximity sensor for building or school campus

My professor recently approved our research paper which will also be used in our final year thesis. Basically our main purpose is to create a system for location tracking and attendance automation for students and staffs. We would like to use the power of bluetooth low energy modules for this project.
I have actually done quite few research about this but I am having trouble which keywords to use in order for me to filter the right answers for my question. So instead, I'll just put all my questions here.
I provided an image to further understand the concept I am talking about.
Basically, the broadcaster/advertisement mode modules are for students and staffs. While the observer mode modules are initially installed in every rooms or spaces in our building/campus.
Broadcast and Observer mode
I would like to clarify first that the location tracking is only basic, it only detects which rooms are the students and staffs located.
Here are my questions:
What is the maximum advertisement/broadcaster module can the observer module detects at the same time?
Our target is about 50 students per room, 300 students in cafeteria, will the observer module have a large amount of latency upon scanning advertisement packets?
Do we have to use different module for observer mode, or will the same module for broadcaster mode be just fine?
Since this is supposedly embedded to school IDs, we would like to use a coin cell battery, how long will it last?
According to my research, BLE range is about 100 meters, but we will be using coin cell battery, is it really possible to achieve 100m for broadcasting and observing? If it is, can we perhaps decrease it by programming?
My apologies for too much question, as this is actually our first time doing applied hardware stuffs due to pandemic. Most of our laboratories are basically tinkercad base. Face-to-face classes are allowed for only medical students for now.
A few answers:
BLE scanners can detect hundreds of distinct broadcasters at the same time. There is no hard limit, but the more broadcasters the longer it will take the scanners to detect each broadcaster.
Most BLE modules support both peripheral mode (broadcaster) and central mode (scanner) simultaneously.
Scanning 50 broadcasters in a single room will easily detect 90% of packets, so if the advertiser is going at 1 Hz it will usually take one second to detect, but sometimes 2-3 seconds of packets are missed.
The indoor range is closer to 40 meters with no walls obstructing the signal. Outdoors with clear line of sight the range is higher. Walls often block signals almost entirely, depending on materials.
A CR2032 coin cell can power a BLE broadcast at 1 Hz and max power for about 30 days.
Creating an embedded solution is cool and valid but just remember that broadcasters already exists as each and every student carries a smartphone with BLE embedded into it and your observer can be any BLE capable device from smartphone through PC with BLE dongle all the way to Arduino and alike.
Your broadcasters (or BLE peripherals as they should be called) will need an Android / iOS app and you will have to deal with working in the background without the operating system stopping your app.
Your observer (or Central in BLE language) can be any stationary PC if such exists in the class which can make development and deployment a lot easier.

Can i detect more than 40 devices in one time and keep tracking by BLE

So I will have more than 40+ devices in one place and I need to record when device entered in my zone and also when i lost signal by BLE.
As i know there are only 20 regions limit in IOS in one time.
As i can't set regions on peoples devices , is it means that i can't track more than 20 devices or is there any way to do it?
Devices will be iPhone,apple watch , androids.
So i guess they will have different UUID.
You are right about the 20 beacon region limit on iOS, but that probably will not impact your solution for a number of reasons:
The limit is per region not per device as #paulw11 says, so you can track much more than 20 beacons if you define regions that match multiple beacons by using wildcard idebtifiers in the regions.
You cannot make an apple watch transmit as a beacon. And while iPhone and most Android devices can do this, iPhones must have your custom app in the foreground to transmit. This may not work for you depending on your use case.
An alternative to having the devices transmit is to have them receive a beacon signal from a fixed beacon transmitter you install. This can be done by a custom app in the background (although for Apple watch it must be tied to a nearby iPhone for this to work). With this approach, there is no limit to the number of devices you can track. This is the typical way this is done.

Can you develop an app for the Microsoft band, without a corresponding mobile app always being connected?

I have several Microsoft bands, to be used as part of a group health initiative. I intend to develop a single app on a tablet which will pull the data from the bands. This will be a manual process, there will not be a constant connection to the tablet and no connection to Microsoft Health.
Does anyone know if this is possible?
Thanks
Emma
The general answer is no: Historical sensor values are not stored or buffered on the Band itself.
It does however depend on what sensors you are interested in. The sensor values are not buffered, so you can only read the current (realtime) value of the sensors.
But sensors such as pedometer and distance are incrementing over time, so these values will make sense even though you are only connected once in a while. Whereas for, e.g., the heart rate and skin temperature, you will only get the current (realtime) value.
So it depends on your use case.

Extending DS2408 IOs with MAX7219 or 74HC595

I have an idea of building a model traffic lights node with Arduino. One node should serve the whole intersection with all the lights from all directions.
I want to use a 1-wire DS2408 to identify the node by its factory set unique id and have its 8 IOs for different lights.
One node should have more lights (for difficult intersections more than 30-40).
I want to use some LED driver like MAX7219 or shift register like 74HC595 to extend these 8 IOs to 64.
Can something like this be done? Can I use DS2408 (1-Wire 8-Channel Addressable Switch) and extend its IOs?
Or what would you suggest?
I want to use this 1-wire protocol for better scalability and easy node addressing, let's say I want to build a model city with 100 intersections..
Thank you.

DirectShow - Order of invocation of IAMStreamConfig::SetFormat and ICaptureGraphBuilder2::RenderStream creates issues in some video cameras

I have to configure my video camera display resolution before capturing and processing the data. Initially I did it as follows.
Created all necessary interfaces.
Added camera and renderer filters
Did RenderStream with Capture and Preview PIN Categories.
Then did the looping through AM_MEDIA_TYPE structures and setting the params.
This worked for a lot of cameras, but a few cameras failed. Then I changed the order of 3 and 4 given above. That is, I did the setting of params before the RenderStream. This time, the error cases went through, but a few On board cameras in SONY VAIO laptop etc seem to fail.
Now, my questions are
Which is the optimal and correct method of getting and setting AM_MEDIA_TYPE parameters and running the graph?
If there are different cameras, if I get an indication of which order is the best for a particular camera by going through the camera's DirectShow interfaces, that will also serve my purpose.
Please help me in this at the earliest,
Thanks and regards,
Shiju
IAMStreamConfig::SetFormat needs to be used to set capture format before the pin is connected and rendered. This way the downstream subchain of filters is built with proper media types.

Resources