Building a better HVAC control system

After having some of my house remodeled, it’s become an increasing annoyance in the summer time that the Master Bedroom remains too hot and seems to be unable to be cooled adequately with how little airflow it seems to be getting. An additional supply and return were added to the room in the remodel, but it still remains a bit stagnant. The issue is that the room is at the very far end of the system, as well as being upstairs in the second floor. By the time the air gets to this area, the pressure difference seems to be inadequate for the proper amount of flow to cool the room. Adding a booster fan is a cheap trick to increase the efficacy of the HVAC for the room, but having a completely balanced system would be a bigger benefit: Less electricity used and less noise in the Master Bedroom.

My current plan is to build some remote XBee sensors that can be plugged into an outlet in each room, and become associated with XBees with servos to control the dampers in the basement. This should allow me to build a system that will automatically balance the airflow for each room to be able to maintain a better average temperature, as well as programmatically close off rooms that aren’t being used, such as the guest room, which only needs to be controlled when we are expecting someone to use the room. It should also give me more time-of-day control and allow the bedroom to gain a little temperature during the day in the summertime when it’s not being used, and to lower it more than the rest of the house before bedtime so it is more comfortable to sleep in.

I’ve currently got a Nest thermostat on the First floor in the living room, and it does an excellent job at controlling the temperature and humidity for that room, but the problem is it’s a closed source hardware solution, so it doesn’t offer the flexibility that I am looking for. This is hopefully where the XBee system will come in handy. I just have to figure out if it’s feasible to get the systems to work with eachother, or if I’ll have to resort to a completely custom system for the future.

If I could drive 10,000 miles…

It’s been a bit more than 7 months since I picked up my Chevy Cruze. I just turned over 10,000 miles on it this past week. I’ve spent about 2.5 months of that time in China, so I’m a bit ‘behind’ on what my mileage was expected to be by this time. So far the only work that I’ve had to put into it was to change a bent fuse (weird problem, but easy fix) for the driver’s side headlight, took the car into the dealership to get the shifter assembly replaced because of a defect with second gear, changed the oil, and finally got snow tires put on this week as well.

The snow tires and the cold starts have really eaten into the mileage I get with the car, it seems to have gone down about 15-20% from what I would normally get without those two, but I haven’t put many miles on since then. It’s hard to determine if my driving habits have changed as well since being in China for so long has changed my exposure to traffic and speeds and such. Traffic laws don’t really seem to be inforced there like they are in the US.

Overall I am very happy with the car. I would say the issues I have experienced are far from being dealbreakers for the car and I would definitely make the purchase again in the future if I happen to come to that point. I am excited to see where GM and the other two-thirds of the big three are headed in the high mileage arena in the next 4 years or so when I will be looking to replace the Cruze with a new daily driver.

My highest mileage trip so far was 50.2 mpg traveling across the UP with an average speed somewhere around 63 mph. My lowest so far has not been below 30 mpg, but this next tank, being winter and having the snow tires on the car, may prove to make an exception to that.

I hope my next 10,000 miles are as effortless.

irssi customization

I hadn’t really taken the time to document this stuff anywhere, and occasionally people ask me, so I figured I’d just put it up on here so I can point to it. I’ve done a few customizations to my irssi config file to increase usability.

The main one is the ability to meta key the first 80 windows rather than just the default first 10.

keyboard = (
{ key = "meta-q"; id = "change_window"; data = "11"; },
{ key = "meta-w"; id = "change_window"; data = "12"; },
{ key = "meta-e"; id = "change_window"; data = "13"; },
{ key = "meta-r"; id = "change_window"; data = "14"; },
{ key = "meta-t"; id = "change_window"; data = "15"; },
{ key = "meta-y"; id = "change_window"; data = "16"; },
{ key = "meta-u"; id = "change_window"; data = "17"; },
{ key = "meta-i"; id = "change_window"; data = "18"; },
{ key = "meta-o"; id = "change_window"; data = "19"; },
{ key = "meta-p"; id = "change_window"; data = "20"; },
{ key = "meta-a"; id = "change_window"; data = "21"; },
{ key = "meta-s"; id = "change_window"; data = "22"; },
{ key = "meta-d"; id = "change_window"; data = "23"; },
{ key = "meta-f"; id = "change_window"; data = "24"; },
{ key = "meta-g"; id = "change_window"; data = "25"; },
{ key = "meta-h"; id = "change_window"; data = "26"; },
{ key = "meta-j"; id = "change_window"; data = "27"; },
{ key = "meta-k"; id = "change_window"; data = "28"; },
{ key = "meta-l"; id = "change_window"; data = "29"; },
{ key = "meta-;"; id = "change_window"; data = "30"; },
{ key = "meta-z"; id = "change_window"; data = "31"; },
{ key = "meta-x"; id = "change_window"; data = "32"; },
{ key = "meta-c"; id = "change_window"; data = "33"; },
{ key = "meta-v"; id = "change_window"; data = "34"; },
{ key = "meta-b"; id = "change_window"; data = "35"; },
{ key = "meta-n"; id = "change_window"; data = "36"; },
{ key = "meta-m"; id = "change_window"; data = "37"; },
{ key = "meta-,"; id = "change_window"; data = "38"; },
{ key = "meta-."; id = "change_window"; data = "39"; },
{ key = "meta-/"; id = "change_window"; data = "40"; },
{ key = "meta-!"; id = "change_window"; data = "41"; },
{ key = "meta-@"; id = "change_window"; data = "42"; },
{ key = "meta-#"; id = "change_window"; data = "43"; },
{ key = "meta-$"; id = "change_window"; data = "44"; },
{ key = "meta-%"; id = "change_window"; data = "45"; },
{ key = "meta-^"; id = "change_window"; data = "46"; },
{ key = "meta-&"; id = "change_window"; data = "47"; },
{ key = "meta-*"; id = "change_window"; data = "48"; },
{ key = "meta-("; id = "change_window"; data = "49"; },
{ key = "meta-)"; id = "change_window"; data = "50"; },
{ key = "meta-Q"; id = "change_window"; data = "51"; },
{ key = "meta-W"; id = "change_window"; data = "52"; },
{ key = "meta-E"; id = "change_window"; data = "53"; },
{ key = "meta-R"; id = "change_window"; data = "54"; },
{ key = "meta-T"; id = "change_window"; data = "55"; },
{ key = "meta-Y"; id = "change_window"; data = "56"; },
{ key = "meta-U"; id = "change_window"; data = "57"; },
{ key = "meta-I"; id = "change_window"; data = "58"; },
{ key = "meta-O"; id = "change_window"; data = "59"; },
{ key = "meta-P"; id = "change_window"; data = "60"; },
{ key = "meta-A"; id = "change_window"; data = "61"; },
{ key = "meta-S"; id = "change_window"; data = "62"; },
{ key = "meta-D"; id = "change_window"; data = "63"; },
{ key = "meta-F"; id = "change_window"; data = "64"; },
{ key = "meta-G"; id = "change_window"; data = "65"; },
{ key = "meta-H"; id = "change_window"; data = "66"; },
{ key = "meta-J"; id = "change_window"; data = "67"; },
{ key = "meta-K"; id = "change_window"; data = "68"; },
{ key = "meta-L"; id = "change_window"; data = "69"; },
{ key = "meta-:"; id = "change_window"; data = "70"; },
{ key = "meta-Z"; id = "change_window"; data = "71"; },
{ key = "meta-X"; id = "change_window"; data = "72"; },
{ key = "meta-C"; id = "change_window"; data = "73"; },
{ key = "meta-V"; id = "change_window"; data = "74"; },
{ key = "meta-B"; id = "change_window"; data = "75"; },
{ key = "meta-N"; id = "change_window"; data = "76"; },
{ key = "meta-M"; id = "change_window"; data = "77"; },
{ key = "meta-<"; id = "change_window"; data = "78"; },
{ key = "meta->"; id = "change_window"; data = "79"; },
{ key = "meta-?"; id = "change_window"; data = "80"; }

Yeah, it’s a lot of lines, but it works well provided you don’t use any of the builtins like meta-p,n.

I also have irssi setup to prefer ipv6 when it’s reachable since I have native v6 on the box I use. I also have coded utf-8 support

settings = {
core = {
resolve_prefer_ipv6 = "yes";
recode_autodetect_utf8 = "yes";
recode_fallback = "UTF-8";
recode = "yes";
recode_out_default_charset = "UTF-8";
recode_transliterate = "yes";
"fe-common/core" = { term_charset = "UTF-8"; };

I forget what the original statusbar stuff looked like, but since I’m in so many windows all the time, I changed it so Activity gets it’s own line. This is just the excerpted part of it:

statusbar = {
default = {
    activity = { items = { act = { }; }; };

Make sure you remove the original part of the code that contains ‘act’ in the line before or you’ll have two.

This is for anyone on to ignore some of the more annoying aspects of < Huskybot>:

ignores = (
{ mask = "HuskyBot"; level = "ALL"; pattern = "I see London, I see France, I see .*'s IP address!"; regexp = "yes"; },
{ mask = "HuskyBot"; level = "ALL"; pattern = "root has landed!"; regexp = "yes";},
{ mask = "HuskyBot"; level = "ALL"; pattern = "glomps .*"; regexp = "yes"; }

The Cruze

So, I’ve spent about a week and a half so far with my 2011 Cruze ECO. I’m pretty impressed with the build quality so far, but it’s pretty hard to tell about a vehicle that you’ve had for less than two weeks. The ride quality is superb, and road noise is practically non-existent when the windows are up. I’ve noticed that I tend to judge how fast I’m going based on wind and road noise; something I can’t do in this car at all.

The few problems I’ve encountered so far:

The car is far too easy to stall trying to maneuver in a parking lot with the A/C on. Coming from my Cobalt, this car has a serious lack of torque, comparatively. It’s just something I’ll have to get used to.

The Black Granite Metallic is more difficult to keep looking clean than a standard Black paint is. The depth of the metallics add quite a bit of ‘dirty’ look to the paint under a lot of different lighting conditions.

The voice system doesn’t seem to like my voice all that much. I don’t really have much confidence in these systems working properly ever unless it’s something simple to discern like numbers. Voice dialing it does okay with if it’s just numbers, but for some reason, it thinks my sister Pam’s name sounds too much like ‘Help’ to let me put her name in it…

Overall, I’m really happy with the car so far. It’s met my mileage expectations, and I haven’t even been able to get it as low as the 28 mpg city rating it was given. It’s definitely a car to consider if you’re looking for something new that is plenty peppy and won’t destroy your wallet. Switching from my ’02 Sonoma being my daily driver to the Cruze will effectively pay for itself in less fuel costs and additional maintenance, since I tend to drive in excess of 24,000 miles a year and my Sonoma is starting to show it’s age for longer trips.

Car troubles never seem to cease

The past week I’ve been working on moving stuff back to Royal Oak, since I took a job in Auburn Hills, and I’m not driving back and forth from A2 every day from there, it’s way too far of a drive even if there were never any traffic. My truck has thrown two codes this week, as well as informed me that I need to replace the wiring that goes to the rear lights on the truck. It started off with one side intermittently losing the parking lights, which is the side that the trailer is also fed off of. I managed to work the problem down to knowing for sure that it has to be some sort of a break or point of corrosion in the wire itself, based on how it was acting when I was testing it. I did try to rinse out the frame rails earlier in the week, so it seems like that exposed, or perhaps irritated an already existing problem.

At some point in the near future, I’m going to replace the entire wiring from the fuse distribution block back, and convert it over to a 7 wire system while I’m at it, so I can install a trailer brake controller if I ever need to pull a trailer that needs it.

Meanwhile, the car’s been disassembled for a few months. I’ve spent some time trying to design a new intake system to incorporate the box style intercooler plates rather than the laminova cores. I’m also attempting to get rid of the rather nasty air path that the current system has to push air into the cylinders more freely. There’s not a whole lot of room up front of the engine for this, but I’m not afraid of doing a little re-fabrication, whereas the factory attempts to keep as many common components as possible. I may have to consider doing something with how the oil filter is in a plated device that’s cast right into the engine block. I’d like to, at the very least, relocate the filter so I don’t have to burn up my hand every time I need to change the oil.

Mockup of the intake manifold plate

I’ve also tossed around the idea of strengthening and narrowing the engine cradle in order to be able to stuff some wider tires in up front. I took all the measurements I need, but I haven’t had a chance to put them into CAD and mock something up. My goal is to try to keep the suspension geometry as close to stock as I can, but there will have to be some rather obvious changes to get it done right.

The good part about doing the disassembly: I did discover that one of the connecting rods was bent pretty badly. This image doesn’t really portray it all that well because of the lensing effect of the camera that I used. So I either need to order an entire set of performance rods, or just replace the one and have the others tested.

One of these things is not like the other

So, here’s where we’ve been at for the last few months, lots of work to go.

A Wild MIL appears!

About a month and a half ago, I was just leaving my parents place with the cobalt when it threw a code, went into reduced power mode, and wouldn’t restart. I had to wait about 5 minutes before it would start back up, so, I ended up driving it back up to my parents place and letting it sit. I checked the oil level and it had apparently burned about 2.5 quarts of oil since the water incident, so I decided it was definitely time to rebuild it. Since then, I’ve dropped the engine cradle out of the car, seperated the engine and transmission, and bolted the cradle back up so the car could be pushed into storage.

The engine itself is ready to have the cams removed and the internals separated, but I’m waiting on a valve spring tool to arrive so I can do this the ‘right way’. I’ll try to get some pictures posted up in the near future.

Emulating Flex Fuel

I’ve made the determination that it can be kind of hard to find E85 at times as it’s easily in less than 10% of stations. The cobalt isn’t initially a flex fuel car, and I’m assuming there are likely a few important distinctions in the PCM of a car that is designed to be an FFV. The cobalt doesn’t have the ability to tell what sort of fuel is in the tank, and it also doesn’t have a method for automagically changing the programming for it. However, the fuel trims built into the PCM have the ability to compensate for slight differences in fuel types, such as using 100% gasoline, and 10% ethanol gas, or gasohol. This seems to be able to make up enough difference if the AFR is set dead in the middle of E85 and Gasoline.

The unfortunate part is depending on how the car is driven after refuel, I’ve noticed it taking around a quarter tank or more to get the proper fuel trims in the ECM. The only real signs that seem to be exhibited are some hesitation on shifting and acceleration, but I’m sure there are other problems for the actual engine itself that aren’t always perceptible.

I still haven’t gotten the wideband in, nor a solid base tune on a specific fuel set, so I can’t be certain that the problems I’ve been experiencing with it wouldn’t be remedied with that being fixed. It would be nice if I could find some time to get that accomplished.

Custom fuel rail for datalogging

I think I should probably consider building a custom fuel rail so I can throw a temp sensor as well as a pressure sensor just prior to each injector. I’d probably also benefit from switching to return line style at the same time and just go the full mile. I’m planning on going up to MTU sometime this month; I’ll make as much free time as I can to play with the CFD (Computational Fluid Dynamics) stuff in the MEEM to try to get a good idea of if I need to shape the rail specially in order to ensure that each port is getting the same pressure and temp fuel. I’ll make sure I bring all the dimensions of things I need with me when I go up there so I don’t have to just guess. It may be a good idea to just draft something simple up in the meantime as well.

I’ve seen some of the extruded Al fuel rails that can be used for race engines, and it seems like they don’t take into consideration needing to flow the fuel to the injector. The injector ports aren’t smoothed at all and the fuel flowing past the injectors would likely create a slight low pressure system with a significant amount of turbulence right in front of the injector. The injector itself should be responsible for fuel atomization, not the fuel rail.

Needing to leave room for all the wiring and sensors in the rail will probably be an interesting exercise if I want to try to keep everything under the existing shroud, but it would definitely be the preferred solution.

Preparing for the wideband install

Instead of getting a new bung drilled in the exhaust, I’ve decided to go the route of using the new wideband with the narrowband emulator and just replace the narrowband. Unfortunately, in order to do this the ‘right’ way, I have to get a new male connector to match the one on the original O2 sensor.  My research seems to indicate that GM Part #15305960 / AC Delco PT1069 is the proper replacement. Some things I’ve read suggested putting a 20 Ohm resistor on the heating lines to the original sensor so the computer doesn’t get upset, but it should be likely that I can turn that code off. I haven’t had a chance to check on that yet. I’d rather not just dump power into resistors if I don’t need to, that just seems like it’s asking for problems down the road.

I’d also like to run wires off the stock fuse block by using some of the empty fuse sockets, but I’m not 100% sure what pins I need to order. It’s raining out currently, and it would involve popping out the existing fuse block to figure out how to do it properly since I can’t seem to find documentation anywhere online.

Colder plugs

I put some cheapo autolite spark plugs in the car today because they are a step colder than the stock temp ones. It seemed to completely eliminate the hesitation I’ve been feeling when the car is already warmed up, but I haven’t gotten to put many miles on them yet. I’m really interested to see if it’ll help with the cold start issue the car has been exhibiting. I should know more tomorrow sometime. Eventually I’d like to get a better set of plugs in at this temperature, but this is all I could get my hands on today.

If you’re interested to know what the temperature of a plug means, wikipedia has a pretty good section on plug heat range.

Return top