Wednesday, September 26, 2012

Wirless Buzzer


So a friend of mine, told me if i can help him create a wireless buzzer, at first i thought yes it should be simple, but then i started working on it. First problem was beining down the cost. If i had used something like Zigbee or bluetooth, my work was less, but then it was cost prohibitive. I can use a Transmitter Reciever pair to lower cost, but it adds complications off handshake ACK SYN etc. So the other option was to use a transceiver. Sparkfun has a Nordic version of it. It had everything required, error handling, multiple retries etc. But then at $20 it was expensive. I almost finalized this, then i came across JeeLab JeeNode. This was exactly what i was looking for. But then i dont want to buy this, because it will again increase my cost. So after digging into it, i found that it uses a RF Transceiver called RFM12B. This was great, i can now use Arduino and hook it up to RFM12B and use SPI to get to work. There is also some code available from JeeLab to get this to work. So i got the final cost down to $15 and here is how i propose it will work


Each buzzer will have the following wireless modules:


You can use any of the port from 6-13 to connect to a buzzer and light.  Also note the ATMEG also need to be powered and crystal needs to be added

It can be programed using AVR or Arduino if we have the arduino boot loder insallted

Following is how the power circuit will work

The central controller will have the above circuit. The logic behind the code should be something like this

1.     Define a structure on how code will be received from slaves/buzzer. Something like
a.     When key is pressed pass :SL{1}
where ID is a buzzer number and 1 means on
2.     The master will look for above patter, while slaves will ignore the above pattern
3.     As soon as the master receives this, it will stop looking for more, and transmit a new ACK, something like
a.     :MA{1}
4.     The slave will also monitor for the above pattern, and master will ignore. Once it receives this pattern, the slave will check if the ID matches its ID, if it does it will turn ports 6-13 high, which will turn on the light and buzzer. We can keep the buzzer high for sometime if we don’t want it to on always
5.     In the master you will coneect an input to one of the ports 6-13, and when a button is pressed, the whole thing is reset. It will broadcast something like
a.     :MA{0}:
6.     All slaves will accept the above message and reset itself and go to sleep
7.     When the button is pressed, the salve will turn on and go to step 1

Wednesday, December 16, 2009

Smart Grid, a step toward cloud electricity.

By cloud electricity I don’t mean generating electricity from clouds. I mean something similar to cloud computing, where we share, resource and computing power. So will be in a few decades the case to electricity and the first step is smart grid. Smart grid uses information to make decision on how to distribute energy, rate energy and also retrieve energy. I won’t go into details on what a smart gird is, rather I will try to explain why I think this is a step towards cloud electricity and what made me think so. Cloud computing as I said is a way to optimize software use and its resource. Similarly smart grid , also tries to do the same. It will transmit energy, whenever its required, and store when not. This will reduce transmission loss, energy theft etc. But what really made me think it as a cloud was the receiver will also act as a generator. Say you have a hybrid car, which is plugged into your home. This car might have excess of energy, hence during peak hours like evening, the smart gird, will take energy from your car and supply it to your home and where its required. What do you think about that?

Monday, September 7, 2009

Arduino PWM Part 2

Labor Day weekend nearly over, a couple of more hours and I was able to finish what I had set out to do, with time to spare, so will go wash my car . Anyway you saw in my previous post, how I used PWM to control the speed using L293 H Bridge and I said that I will try to build an interface, in C# that will control the speed, direction and turn the motor on and off.
The program was easy, as it was just opening the serial port and sending the data, using a fixed protocol. If you go through the code you will be able to figure that out. I don’t want to explain it, because it’s not convoluted. But it did not work as expected. I had to put a delay between reading data and I am not sure why I had to do that. I did search the internet, to find out why a delay is required, but couldn’t find anything. Just found one posting, which didn’t cover the details, on why we needed. I guess its because it takes some time for the serial data to load. I am not sure how important this is for me. But for RTOS, I guess its important and I hope this delay will be a stumbling block in the future and then I will find a way to tackle it. But for now I will just put a delay of 3ms.
In the video you can see the various scenario, that is controlled by the C# code. I have attached the code and the project in the zip file, if anyone ones to download it. Make sure you connect to the correct ports. If in future I fabricate this board, then I will include the PCB dig., which should be simple. But if anyway wants to know it, do let me know.


Files-->
http://www.esnips.com/doc/7a7cc87e-add6-4ae2-91e2-c8263b51effb/motor-with-interface
http://www.esnips.com/doc/1df0e0b1-ad42-4a7c-9095-246b3c9e04b3/Arduino.net

Saturday, September 5, 2009

Arduino PWM Part 1

Arduino PWM part 1 without Computer interface. Using L293 H bridge and connected it to PWM port 11. If you see the video, the motor runs in 3 different speed. First using digital write, which uses full duty cycle. Then 50/255 duty cycle and then 100/255. Next step is connecting it using .NET to a windows application.


Monday, March 23, 2009

Sorting review so far..insertion the best

Just got off Eclipse...here is the result i got for few data and different sorting algoritm.. ins
Normal Bubbleelapsed--6435455
1>1>1>3>4>6>6>6>10>13>15>18>18>19>21>21>21>22>23>23>23>25>26>27>28>29>29>29>31>31>31>33>33>33>35>36>36>36>36>37>38>39>41>44>44>44>45>45>45>45>48>49>50>51>51>52>53>53>53>53>53>61>64>64>64>64>65>65>66>66>66>66>66>67>67>68>68>69>72>73>74>77>77>79>79>80>80>80>81>81>81>82>83>84>85>85>85>85>85>88>88>88>88>88>90>90>92>94>95>95>96>96>99>100>100>

Decreasing n/window elapsed--22908
1>1>1>3>4>6>6>6>10>13>15>18>18>19>21>21>21>22>23>23>23>25>26>27>28>29>29>29>31>31>31>33>33>33>35>36>36>36>36>37>38>39>41>44>44>44>45>45>45>45>48>49>50>51>51>52>53>53>53>53>53>61>64>64>64>64>65>65>66>66>66>66>66>67>67>68>68>69>72>73>74>77>77>79>79>80>80>80>81>81>81>82>83>84>85>85>85>85>85>88>88>88>88>88>90>90>92>94>95>95>96>96>99>100>100>


Cocktail Sort elapsed--22908
1>1>1>3>4>6>6>6>10>13>15>18>18>19>21>21>21>22>23>23>23>25>26>27>28>29>29>29>31>31>31>33>33>33>35>36>36>36>36>37>38>39>41>44>44>44>45>45>45>45>48>49>50>51>51>52>53>53>53>53>53>61>64>64>64>64>65>65>66>66>66>66>66>67>67>68>68>69>72>73>74>77>77>79>79>80>80>80>81>81>81>82>83>84>85>85>85>85>85>88>88>88>88>88>90>90>92>94>95>95>96>96>99>100>100>


Insertion Sort elapsed--18159
1>1>1>3>4>6>6>6>10>13>15>18>18>19>21>21>21>22>23>23>23>25>26>27>28>29>29>29>31>31>31>33>33>33>35>36>36>36>36>37>38>39>41>44>44>44>45>45>45>45>48>49>50>51>51>52>53>53>53>53>53>61>64>64>64>64>65>65>66>66>66>66>66>67>67>68>68>69>72>73>74>77>77>79>79>80>80>80>81>81>81>82>83>84>85>85>85>85>85>88>88>88>88>88>90>90>92>94>95>95>96>96>99>100>100>

Let me explain what insertion does best. It tries to select a certain window and sorts that window and anything added to that window and slowly increases the window till it covers all. The worse case will be when the sequence is reverse and each entry needs to be move to the right, ie each window needs to sort. Here is such an example-->

Input array {100,50,40,30,20,10,9,8,7,6,5};

Normal elapsed--1939912
5>6>7>8>9>10>20>30>40>50>

Decreasing n/window elapsed--9778
5>6>7>8>9>10>20>30>40>50>


Cocktail Sort elapsed--10896
5>6>7>8>9>10>20>30>40>50>


Insertion Sort elapsed--10057
5>6>7>8>9>10>20>30>40>50>

As you can see, there isn't much significant difference between the last 3 because of the order of the array. It seems to tend to the same complexity O(n2). Here is a good site for this-->http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/insert/insertionen.htm

Tuesday, March 17, 2009

iShopSmart (ISS)

I have been seeing a lot of apps being develop in the past few months specially in mobile that uses, collaboration in its true sense of word. True Web 2.0. I have seen it everywhere Yelp intg with maps, maps with phone and so on and so forth. But what my idea is, say you are in a shop and you want to buy a stuff a computer for instance. Now the price is somewhere around 1000$. Thats a lot of money and you dont want to just waste that amount of money, without confirming that this is a best deal. So you will search for it in a deal finder. But in collaborative world we believe in seamless intg of various technology. So here is what i was thinking..
You grab your phone, open the app called iShop and use the camera function to take a snap of the label/name of the app in the panel and then wallah it searches the net and gets you the cheapest price available using shopping.google.com or simillar web service. Isnt this a great idea and i couldnt find any apps in itunes that does this. But i have too much on my plate to work on it right now. Thats one more thing to add to my to do list. Lets see where it goes....
1) I need to do edge detection
2) OCR
3)Google or someother deal finders/shopping web service.
4)Create a android app/iphone app out of it.

Thursday, March 12, 2009

BOA.

What is BOA…..Its not Business Oriented Architecture. Even though some people make business out of it and they are called PIMPS. PIMP is not a short form for anything, I am capitalizing it so that people continue to read at least a few lines and they don’t think that this is another crappy blog post of mine.

So what is this BOA? What is this thing that Pimp can leverage to make money. Well BOA is a concept in the world of business, a world about which B Schools haven’t published any white paper or have done extensive research to apply their crappy laws . BOA stand for Bitch Oriented Architecture. It’s based on my recent visit to Vegas where I found guys distributing pamphlets of escorts whom ,in my context, I will called Bitch. Not to offend anyone, its just that E(Escort)OA, doesn’t sound as appealing as BOA. Its just in context and not a biased opinion that all Escorts are bitches.

Anyway, as I saying , the guys who were distributing the pamphlet are nothing but Webservice. You just have to call them and they will give you the bitches. We don’t need to know what’s going on behind the server (as in the ones that serve and not a computer server even though you can see the analogy). They just provide us the service. This is applicable to all services, I guess, but right now I am concentrating on a specific world. So the pimps are the server providing us service.

Nextwhat is WSDL in this world then. Well WSDL is how we approach them. You just cannot call them up and say I need bitches. There is a definite way to approach them. This mainly depends on what you need them for. I wont get into much details, because if I do I need to get PG+ ratting removed from my blog and also because I don’t have much experience in the WSDL syntax used in this world.

So WSDL is how we talk. Finally, the return type. Some prefer JSON, some prefer XML, and CSV. What are these is BOA world. Well it’s they look like or how they are called. I think XML is blonde, because it looks well formatted and has a good structure to it and you can easily identify a well formatted XML but its really difficult incase of JSON. I cannot be more explicit, once again for PG+ reason. Anyway I think that pretty much covers the return type of a BOA.

So to summarize, the Pimp is the server, Bitch is what we finally get and you are the requester, WSDL is the way you talk and JSON,XML,CSV is what you get…….More comments or discussion welcomed